<?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>203562</bug_id>
          
          <creation_ts>2019-10-29 07:12:03 -0700</creation_ts>
          <short_desc>Move style building state to a class of its own</short_desc>
          <delta_ts>2019-10-30 13:14:34 -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>CSS</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="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</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>1584899</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 07:12:03 -0700</bug_when>
    <thetext>From StyleResolver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584900</commentid>
    <comment_count>1</comment_count>
      <attachid>382179</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 07:14:11 -0700</bug_when>
    <thetext>Created attachment 382179
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1584909</commentid>
    <comment_count>2</comment_count>
      <attachid>382180</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 08:04:43 -0700</bug_when>
    <thetext>Created attachment 382180
wip</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585289</commentid>
    <comment_count>3</comment_count>
      <attachid>382286</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 23:36:15 -0700</bug_when>
    <thetext>Created attachment 382286
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585291</commentid>
    <comment_count>4</comment_count>
      <attachid>382287</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 23:39:36 -0700</bug_when>
    <thetext>Created attachment 382287
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585292</commentid>
    <comment_count>5</comment_count>
      <attachid>382288</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-29 23:47:28 -0700</bug_when>
    <thetext>Created attachment 382288
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585302</commentid>
    <comment_count>6</comment_count>
      <attachid>382290</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2019-10-30 01:03:57 -0700</bug_when>
    <thetext>Created attachment 382290
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585471</commentid>
    <comment_count>7</comment_count>
      <attachid>382290</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-30 13:13:39 -0700</bug_when>
    <thetext>Comment on attachment 382290
patch

Clearing flags on attachment: 382290

Committed r251796: &lt;https://trac.webkit.org/changeset/251796&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585472</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-10-30 13:13:41 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1585473</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-10-30 13:14:34 -0700</bug_when>
    <thetext>&lt;rdar://problem/56755693&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382179</attachid>
            <date>2019-10-29 07:14:11 -0700</date>
            <delta_ts>2019-10-29 08:04:43 -0700</delta_ts>
            <desc>wip</desc>
            <filename>stylebuilder-cascade.patch</filename>
            <type>text/plain</type>
            <size>245259</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCBjODU5MjBiMDE3My4uNGI3Yjlk
NmY1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQ1LDI5ICs0NSwy
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1RvU3R5bGVNYXA6OkNTU1RvU3R5bGVN
YXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCi0gICAgOiBtX3Jlc29sdmVyKHJlc29sdmVyKQor
Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNj
YWRlKQorICAgIDogbV9jYXNjYWRlKGNhc2NhZGUpCiB7CiB9CiAKIFJlbmRlclN0eWxlKiBDU1NU
b1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxl
KCk7Ci19Ci0KLWNvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0
eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
OworICAgIHJldHVybiAmbV9jYXNjYWRlLnN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHlsZU1h
cDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNl
U1ZHWm9vbVJ1bGVzKCk7CisgICAgcmV0dXJuIG1fY2FzY2FkZS51c2VTVkdab29tUnVsZXMoKTsK
IH0KIAogUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UoQ1NTVmFs
dWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZUltYWdlKHZhbHVlKTsK
KyAgICByZXR1cm4gbV9jYXNjYWRlLmNyZWF0ZVN0eWxlSW1hZ2UodmFsdWUpOwogfQogCiB2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtMjE0LDcgKzIw
OSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zCiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVChmaWxsU2l6ZS50eXBlID09IEZpbGxTaXplVHlwZTo6U2l6ZSk7
Ci0gICAgICAgIGlmICghY29udmVydFRvTGVuZ3RoU2l6ZShwcmltaXRpdmVWYWx1ZSwgbV9yZXNv
bHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIGZpbGxTaXplLnNpemUp
KQorICAgICAgICBpZiAoIWNvbnZlcnRUb0xlbmd0aFNpemUocHJpbWl0aXZlVmFsdWUsIG1fY2Fz
Y2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIGZpbGxTaXplLnNpemUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMzYsOSArMjMxLDkgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgRmlsbExheWVyJiBsYXllciwKICAgICBMZW5ndGggbGVuZ3RoOwogICAgIGlmIChwYWly
KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblgpOwotICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRMZW5ndGgoKm1fcmVzb2x2ZXIsICpwYWlyLT5zZWNvbmQoKSk7CisgICAgICAg
IGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChtX2Nhc2NhZGUs
ICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WCgqbV9yZXNvbHZlciwgdmFs
dWUpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3Np
dGlvbkNvbXBvbmVudFgobV9jYXNjYWRlLCB2YWx1ZSk7CiAKICAgICBsYXllci5zZXRYUG9zaXRp
b24obGVuZ3RoKTsKICAgICBpZiAocGFpcikKQEAgLTI2MCw5ICsyNTUsOSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxs
TGF5ZXImIGxheWVyLAogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgaWYgKHBhaXIpIHsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWSB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uWSk7Ci0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dExlbmd0aCgqbV9yZXNvbHZlciwgKnBhaXItPnNlY29uZCgpKTsKKyAgICAgICAgbGVuZ3RoID0g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKG1fY2FzY2FkZSwgKnBhaXItPnNl
Y29uZCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKCptX3Jlc29sdmVyLCB2YWx1ZSk7CisgICAg
ICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9u
ZW50WShtX2Nhc2NhZGUsIHZhbHVlKTsKICAgICAKICAgICBsYXllci5zZXRZUG9zaXRpb24obGVu
Z3RoKTsKICAgICBpZiAocGFpcikKQEAgLTQwOSw3ICs0MDQsNyBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICBsYXllci5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAg
ICBsYXllci5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG1fcmVzb2x2ZXIt
PnN0YXRlKCkuc3R5bGVTY29wZU9yZGluYWwoKSk7CisgICAgICAgIGxheWVyLnNldE5hbWUocHJp
bWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSwgbV9jYXNjYWRlLnN0eWxlU2NvcGVPcmRpbmFsKCkp
OwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRp
b24mIGxheWVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC01OTMsNyArNTg4LDcgQEAgTGVu
Z3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYgdmFs
dWUpCiAgICAgICAgIHJldHVybiBMZW5ndGhCb3goKTsKIAogICAgIC8vIEdldCBvdXIgem9vbSB2
YWx1ZS4KLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gdXNl
U1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29tUnVsZXMoKSA/IG1fY2FzY2FkZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikgOiBtX2Nhc2Nh
ZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIHBy
aW1pdGl2ZSB2YWx1ZS4KICAgICBhdXRvJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXggNGZi
MjlhOWQzYTYuLjY0NDRiMzVmOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKQEAg
LTM0LDE0ICszNCwxNyBAQCBjbGFzcyBMZW5ndGhCb3g7CiBjbGFzcyBOaW5lUGllY2VJbWFnZTsK
IGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVzb2x2
ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CiAKIGNs
YXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1RvU3R5bGVN
YXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9T
dHlsZU1hcChTdHlsZVJlc29sdmVyKik7CisgICAgQ1NTVG9TdHlsZU1hcChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJik7CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtNzIsMTkgKzc1LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiwg
TmluZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlc2UgYWNjZXNz
b3JzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJlc29sdmVTdGF0ZSBvYmplY3QKLSAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKLSAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBj
b25zdDsKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmpl
Y3Qgd2hpY2gKLSAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBhbmQgbGlrZWx5
IHByb3ZpZGVkIHRvIHRoaXMgb2JqZWN0Ci0gICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBTdHlsZVJl
c29sdmVyKiBtX3Jlc29sdmVyOworICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIG1fY2FzY2Fk
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcAppbmRleCAwZGY2YWFlOTZmMC4u
MDIzMTQwM2RiYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0
ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NUb2tl
bml6ZXIuaCIKICNpbmNsdWRlICJET01DU1NOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRl
ckNvbnZlcnRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC00Nywx
MSArNDgsMTIgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0
eTo6cmVnaXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0KICAgICBpZiAoIWRlc2NyaXB0b3Iu
aW5pdGlhbFZhbHVlLmlzRW1wdHkoKSkgewogICAgICAgICBDU1NUb2tlbml6ZXIgdG9rZW5pemVy
KGRlc2NyaXB0b3IuaW5pdGlhbFZhbHVlKTsKICAgICAgICAgU3R5bGVSZXNvbHZlciBzdHlsZVJl
c29sdmVyKGRvY3VtZW50KTsKKyAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBkdW1teUNh
c2NhZGUoc3R5bGVSZXNvbHZlciwgeyB9LCB7IH0pOwogCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
aW5pdGlhbGl6ZSB0aGlzIHNvIHRoYXQgd2UgY2FuIHN1Y2Nlc3NmdWxseSBwYXJzZSBjb21wdXRh
dGlvbmFsbHkgZGVwZW5kZW50IHZhbHVlcyAobGlrZSBlbSB1bml0cykuCiAgICAgICAgIC8vIFdl
IGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhbHVlcyB0byBiZSBhY2N1cmF0ZSwgc2luY2UgdGhl
eSB3aWxsIGJlIHJlamVjdGVkIGxhdGVyIGFueXdheQogICAgICAgICBzdHlsZVJlc29sdmVyLmFw
cGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SW52YWxpZCwgbnVsbHB0ciwgc3R5bGVSZXNv
bHZlci5kZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnVw
ZGF0ZUZvbnQoKTsKKyAgICAgICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KGR1bW15Q2FzY2Fk
ZSk7CiAKICAgICAgICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAg
ICAgIENTU1Byb3BlcnR5UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURl
cGVuZGVuY2llcyhkZXNjcmlwdG9yLnN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5p
emVyLnRva2VuUmFuZ2UoKSwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKQEAgLTU5LDcgKzYx
LDcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eTo6cmVn
aXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0KICAgICAgICAgaWYgKCFkZXBlbmRlbmNpZXMu
aXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAi
VGhlIGdpdmVuIGluaXRpYWwgdmFsdWUgbXVzdCBiZSBjb21wdXRhdGlvbmFsbHkgaW5kZXBlbmRl
bnQuIiB9OwogCi0gICAgICAgIGluaXRpYWxWYWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJz
ZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShkZXNjcmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3lu
dGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBzdHlsZVJlc29sdmVyLCBzdHJpY3RDU1NQYXJz
ZXJDb250ZXh0KCkpOworICAgICAgICBpbml0aWFsVmFsdWUgPSBDU1NQcm9wZXJ0eVBhcnNlcjo6
cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVzY3JpcHRvci5uYW1lLCBkZXNjcmlwdG9y
LnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgZHVtbXlDYXNjYWRlLCBzdHJpY3RDU1NQ
YXJzZXJDb250ZXh0KCkpOwogCiAgICAgICAgIGlmICghaW5pdGlhbFZhbHVlIHx8ICFpbml0aWFs
VmFsdWUtPmlzUmVzb2x2ZWQoKSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50
YXhFcnJvciwgIlRoZSBnaXZlbiBpbml0aWFsIHZhbHVlIGRvZXMgbm90IHBhcnNlIGZvciB0aGUg
Z2l2ZW4gc3ludGF4LiIgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCA4ZWU1ODNl
ZDE3ZS4uYmU3NmMxY2UzNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKQEAgLTMwLDE0
ICszMCwxNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBDU1NSZWdpc3RlcmVk
Q3VzdG9tUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiBz
dHJ1Y3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5OwogCituYW1lc3BhY2UgU3R5bGUgewor
Y2xhc3MgUHJvcGVydHlDYXNjYWRlOworfQorCiBjbGFzcyBTdHlsZUJ1aWxkZXIgewogcHVibGlj
OgotICAgIHN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNv
bHZlciYsIENTU1ZhbHVlJiwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNJbmhlcml0LCBjb25zdCBD
U1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYsIGJv
b2wgaXNJbml0aWFsLCBib29sIGlzSW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5Kik7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKaW5kZXggODJiNDZmZTBkMTIuLmZkZGM4NjdhODBl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC00Nywx
MSArNDcsMTEgQEAKICNpbmNsdWRlICJHcmlkUG9zaXRpb25zUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJMZW5ndGguaCIKICNpbmNsdWRlICJQYWlyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRl
LmgiCiAjaW5jbHVkZSAiUXVvdGVzRGF0YS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5n
cy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNu
YXBQb2ludHMuaCIKICNpbmNsdWRlICJUYWJTaXplLmgiCiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24u
aCIKQEAgLTYzLDEwNyArNjMsMTA3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIE5vdGUgdGhh
dCB3ZSBhc3N1bWUgdGhlIENTUyBwYXJzZXIgb25seSBhbGxvd3MgdmFsaWQgQ1NTVmFsdWUgdHlw
ZXMuCiBjbGFzcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBM
ZW5ndGggY29udmVydExlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhPckF1dG8oY29uc3QgU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3Ro
U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRp
YyBMZW5ndGggY29udmVydExlbmd0aE1heFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVGFiU2l6ZSBjb252ZXJ0VGFiU2l6ZShjb25zdCBT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdGF0aWMgVCBjb252ZXJ0Q29tcHV0ZWRMZW5ndGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydExpbmVX
aWR0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgZmxvYXQg
Y29udmVydFNwYWNpbmcoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIExlbmd0aFNpemUgY29udmVydFJhZGl1cyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoUG9pbnQgY29udmVydE9iamVjdFBvc2l0aW9uKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERl
Y29yYXRpb24+IGNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TnVtYmVy
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXJPckF1dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIHNob3J0IGNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExp
bmVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPENTU1By
b3BlcnR5SUQ+IHN0YXRpYyBOaW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGVS
ZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGlj
IE5pbmVQaWVjZUltYWdlIGNvbnZlcnRCb3JkZXJNYXNrKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1
ZSYpOwotICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBSZWZQdHI8U3R5bGVJbWFn
ZT4gY29udmVydFN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIFRyYW5zZm9ybU9wZXJhdGlvbnMgY29udmVydFRyYW5zZm9ybShTdHlsZVJlc29sdmVyJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGgoY29uc3Qg
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExl
bmd0aCBjb252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aFNpemluZyhj
b25zdCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhNYXhTaXppbmcoY29uc3QgU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFRhYlNpemUgY29udmVydFRhYlNp
emUoY29uc3QgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRMaW5lV2lkdGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnRTcGFjaW5nKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGhT
aXplIGNvbnZlcnRSYWRpdXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIExlbmd0aFBvaW50IGNvbnZlcnRPYmplY3RQb3NpdGlvbihTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0
PFRleHREZWNvcmF0aW9uPiBjb252ZXJ0VGV4dERlY29yYXRpb24oU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGlj
IFQgY29udmVydE51bWJlcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TnVtYmVyT3JBdXRv
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBz
aG9ydCBjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0
aWMgTmluZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlckltYWdlKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmLCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBOaW5l
UGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NT
VmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNvbnZlcnRTdHlsZUltYWdlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBUcmFuc2Zvcm1PcGVyYXRpb25zIGNvbnZlcnRUcmFuc2Zvcm0oU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKERBUktf
TU9ERV9DU1MpCi0gICAgc3RhdGljIFN0eWxlQ29sb3JTY2hlbWUgY29udmVydENvbG9yU2NoZW1l
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHlsZUNvbG9y
U2NoZW1lIGNvbnZlcnRDb2xvclNjaGVtZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZyhTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRT
dHJpbmdPckF1dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYpOwotICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IGNvbnZlcnRU
ZXh0RW1waGFzaXNQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgVGV4dEFsaWduTW9kZSBjb252ZXJ0VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGNv
bnZlcnRDbGlwUGF0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgUmVzaXplIGNvbnZlcnRSZXNpemUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVNwZWVkKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWY8UXVvdGVzRGF0
YT4gY29udmVydFF1b3RlcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgVGV4dFVuZGVybGluZVBvc2l0aW9uIGNvbnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24o
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRleHRVbmRlcmxp
bmVPZmZzZXQgY29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGNvbnZlcnRU
ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gY29udmVydFJlZmxlY3Rpb24oU3R5
bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEludFNpemUgY29udmVy
dEluaXRpYWxMZXR0ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvblNldDxMaW5lQm94Q29udGFpbj4gY29udmVydExp
bmVCb3hDb250YWluKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRp
YyBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBjb252ZXJ0VGV4dERlY29yYXRpb25Ta2lw
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8U2hh
cGVWYWx1ZT4gY29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5nKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yQXV0byhT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3Ry
aW5nIGNvbnZlcnRTdHJpbmdPck5vbmUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gY29u
dmVydFRleHRFbXBoYXNpc1Bvc2l0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBUZXh0QWxpZ25Nb2RlIGNvbnZlcnRUZXh0QWxpZ24oU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4gY29udmVydENsaXBQYXRoKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBSZXNpemUgY29udmVydFJlc2l6ZShT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgaW50
IGNvbnZlcnRNYXJxdWVlUmVwZXRpdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlZjxRdW90ZXNE
YXRhPiBjb252ZXJ0UXVvdGVzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lUG9zaXRpb24gY29udmVydFRleHRVbmRlcmxp
bmVQb3NpdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgVGV4dFVuZGVybGluZU9mZnNldCBjb252ZXJ0VGV4dFVuZGVybGluZU9mZnNldChT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVGV4
dERlY29yYXRpb25UaGlja25lc3MgY29udmVydFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8
U3R5bGVSZWZsZWN0aW9uPiBjb252ZXJ0UmVmbGVjdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb252ZXJ0SW5pdGlhbExl
dHRlcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgZmxvYXQgY29udmVydFRleHRTdHJva2VXaWR0aChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0PExpbmVCb3hDb250YWluPiBj
b252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1Zh
bHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IGNvbnZlcnRU
ZXh0RGVjb3JhdGlvblNraXAoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFJlZlB0cjxTaGFwZVZhbHVlPiBjb252ZXJ0U2hhcGVWYWx1ZShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9T
TkFQKQotICAgIHN0YXRpYyBTY3JvbGxTbmFwVHlwZSBjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5
bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFNjcm9sbFNuYXBBbGln
biBjb252ZXJ0U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBTY3JvbGxTbmFwVHlwZSBjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFNjcm9sbFNu
YXBBbGlnbiBjb252ZXJ0U2Nyb2xsU25hcEFsaWduKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCi0gICAgc3RhdGljIEdyaWRUcmFja1NpemUgY29udmVy
dEdyaWRUcmFja1NpemUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEdyaWRQb3Np
dGlvbj4gY29udmVydEdyaWRQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKLSAgICBzdGF0aWMgR3JpZEF1dG9GbG93IGNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29u
dmVydFdvcmRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0
YXRpYyBPcHRpb25hbDxmbG9hdD4gY29udmVydFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRNYXJx
dWVlSW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRp
YyBPcHRpb25hbDxGaWx0ZXJPcGVyYXRpb25zPiBjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBj
b252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgVmVjdG9yPEdyaWRUcmFja1NpemU+IGNvbnZlcnRHcmlkVHJhY2tT
aXplTGlzdChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBjb252ZXJ0R3JpZFBvc2l0aW9uKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHcmlkQXV0b0Zs
b3cgY29udmVydEdyaWRBdXRvRmxvdyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0V29yZFNwYWNpbmco
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9w
dGlvbmFsPGZsb2F0PiBjb252ZXJ0UGVyc3BlY3RpdmUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydE1h
cnF1ZWVJbmNyZW1lbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IGNvbnZlcnRGaWx0ZXJPcGVy
YXRpb25zKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIGJvb2wgY29udmVydFRvdWNoQ2FsbG91dChT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
VG91Y2hDYWxsb3V0KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwog
I2VuZGlmCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBzdGF0aWMgQ29sb3IgY29udmVy
dFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBDb2xvciBjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoUE9JTlRFUl9FVkVO
VFMpCi0gICAgc3RhdGljIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gY29udmVydFRvdWNoQWN0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8
VG91Y2hBY3Rpb24+IGNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdf
VE9VQ0gpCi0gICAgc3RhdGljIGJvb2wgY29udmVydE92ZXJmbG93U2Nyb2xsaW5nKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBib29sIGNvbnZlcnRPdmVyZmxv
d1Njcm9sbGluZyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNl
bmRpZgotICAgIHN0YXRpYyBGb250RmVhdHVyZVNldHRpbmdzIGNvbnZlcnRGb250RmVhdHVyZVNl
dHRpbmdzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBGb250
RmVhdHVyZVNldHRpbmdzIGNvbnZlcnRGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFs
dWUgY29udmVydEZvbnRXZWlnaHRGcm9tVmFsdWUoY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0
aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3RyZXRjaEZyb21WYWx1ZShjb25zdCBD
U1NWYWx1ZSYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGNvbnZl
cnRGb250U3R5bGVGcm9tVmFsdWUoY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgRm9udFNl
bGVjdGlvblZhbHVlIGNvbnZlcnRGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJldGNo
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2VsZWN0
aW9uVmFsdWUgY29udmVydEZvbnRTdHlsZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250V2VpZ2h0KFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBGb250U2Vs
ZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJldGNoKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZv
bnRTdHlsZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNpZiBF
TkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIHN0YXRpYyBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgRm9udFZhcmlhdGlvblNldHRpbmdzIGNvbnZlcnRGb250VmFyaWF0
aW9uU2V0dGluZ3MoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAj
ZW5kaWYKLSAgICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29udmVydFNWR0xlbmd0aFZhbHVlKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVu
Z3RoVmFsdWU+IGNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFN0cm9r
ZURhc2hBcnJheShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
UGFpbnRPcmRlciBjb252ZXJ0UGFpbnRPcmRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgZmxvYXQgY29udmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U1ZHVVJJUmVmZXJlbmNl
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBDb2xvciBjb252
ZXJ0U1ZHQ29sb3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IFN0eWxlU2VsZkFsaWdubWVudERhdGEgY29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRh
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHlsZUNvbnRl
bnRBbGlnbm1lbnREYXRhIGNvbnZlcnRDb250ZW50QWxpZ25tZW50RGF0YShTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgR2x5cGhPcmllbnRhdGlvbiBjb252ZXJ0
R2x5cGhPcmllbnRhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgR2x5cGhPcmllbnRhdGlvbiBjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3Ro
PiBjb252ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmLCBmbG9h
dCBtdWx0aXBsaWVyID0gMS5mKTsKLSAgICBzdGF0aWMgRm9udFN5bnRoZXNpcyBjb252ZXJ0Rm9u
dFN5bnRoZXNpcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
U1ZHTGVuZ3RoVmFsdWUgY29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+
IGNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFN0cm9r
ZURhc2hBcnJheShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgUGFpbnRPcmRlciBjb252ZXJ0UGFpbnRPcmRlcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydE9wYWNpdHko
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0
cmluZyBjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBDb2xvciBjb252ZXJ0U1ZHQ29sb3IoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0eWxlU2VsZkFs
aWdubWVudERhdGEgY29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHlsZUNvbnRlbnRB
bGlnbm1lbnREYXRhIGNvbnZlcnRDb250ZW50QWxpZ25tZW50RGF0YShTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR2x5cGhPcmllbnRhdGlvbiBj
b252ZXJ0R2x5cGhPcmllbnRhdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgR2x5cGhPcmllbnRhdGlvbiBjb252ZXJ0R2x5cGhPcmllbnRh
dGlvbk9yQXV0byhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0TGluZUhlaWdodChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmLCBmbG9hdCBtdWx0aXBsaWVyID0gMS5mKTsKKyAg
ICBzdGF0aWMgRm9udFN5bnRoZXNpcyBjb252ZXJ0Rm9udFN5bnRoZXNpcyhTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICAKLSAgICBzdGF0aWMgQnJlYWtCZXR3
ZWVuIGNvbnZlcnRQYWdlQnJlYWtCZXR3ZWVuKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYpOwotICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0UGFnZUJyZWFrSW5zaWRlKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBCcmVha0JldHdlZW4gY29u
dmVydENvbHVtbkJyZWFrQmV0d2VlbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydENvbHVtbkJyZWFrSW5zaWRlKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0JldHdlZW4gY29udmVy
dFBhZ2VCcmVha0JldHdlZW4oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRQYWdlQnJlYWtJbnNpZGUoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEJyZWFrQmV0
d2VlbiBjb252ZXJ0Q29sdW1uQnJlYWtCZXR3ZWVuKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0Q29sdW1uQnJl
YWtJbnNpZGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAg
ICBzdGF0aWMgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gY29udmVydEhhbmdpbmdQdW5j
dHVhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0
aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gY29udmVydEhhbmdpbmdQdW5jdHVhdGlvbihTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBPcHRp
b25TZXQ8U3BlYWtBcz4gY29udmVydFNwZWFrQXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxTcGVha0FzPiBjb252ZXJ0U3BlYWtBcyhTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBMZW5n
dGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50WChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0UG9z
aXRpb25Db21wb25lbnRYKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBMZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBHYXBMZW5ndGgg
Y29udmVydEdhcExlbmd0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgR2FwTGVuZ3RoIGNvbnZlcnRHYXBMZW5ndGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJik7CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTdHls
ZUJ1aWxkZXJDdXN0b207CkBAIC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMg
T3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERlY29y
YXRpb25Ta2lwPiB2YWx1ZVRvRGVjb3JhdGlvblNraXAoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUm
KTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAgIHN0YXRpYyBMZW5ndGggcGFyc2VT
bmFwQ29vcmRpbmF0ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgTGVuZ3RoIHBhcnNlU25hcENvb3JkaW5hdGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNv
bnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQpAQCAt
MTgwLDIzICsxODAsMjMgQEAgcHJpdmF0ZToKICNlbmRpZgogCiAgICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoY29uc3QgTGVuZ3RoJik7Ci0gICAgdGVtcGxh
dGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRD4gc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25D
b21wb25lbnQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CisgICAg
dGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFsdWVJRD4gc3RhdGljIExlbmd0aCBjb252ZXJ0UG9z
aXRpb25Db21wb25lbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJik7CiAKLSAgICBzdGF0aWMgR3JpZExlbmd0aCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiwgU3R5bGVSZXNvbHZlciYpOwotICAgIHN0YXRpYyBH
cmlkVHJhY2tTaXplIGNyZWF0ZUdyaWRUcmFja1NpemUoY29uc3QgQ1NTVmFsdWUmLCBTdHlsZVJl
c29sdmVyJik7CisgICAgc3RhdGljIEdyaWRMZW5ndGggY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKKyAgICBz
dGF0aWMgR3JpZFRyYWNrU2l6ZSBjcmVhdGVHcmlkVHJhY2tTaXplKGNvbnN0IENTU1ZhbHVlJiwg
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHN0cnVjdCBUcmFja3NEYXRhOwotICAgIHN0
YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoY29uc3QgQ1NTVmFsdWUmLCBUcmFja3NEYXRh
JiwgU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3Qo
Y29uc3QgQ1NTVmFsdWUmLCBUcmFja3NEYXRhJiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwog
ICAgIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlvbihjb25zdCBDU1NWYWx1ZSYsIEdyaWRQ
b3NpdGlvbiYpOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNG
cm9tR3JpZEFyZWEoY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYsIE5hbWVkR3JpZExpbmVzTWFwJiwg
R3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKLSAgICBzdGF0aWMgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSBjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxl
UmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjc3N0b0xl
bmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmKTsKIH07CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVu
Z3RoKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
IGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgo
KSA/Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikKLSAgICAgICAgOiBzdHlsZVJlc29sdmVy
LnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBwcm9wZXJ0eUNhc2NhZGUudXNlU1ZHWm9vbVJ1
bGVzRm9yTGVuZ3RoKCkgPworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCisgICAgICAgIDogcHJvcGVy
dHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAogICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5pc0xlbmd0aCgpKSB7CiAgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwpAQCAtMjE0LDE5ICsy
MTQsMTkgQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGgoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXMKICAgICByZXR1cm4gTGVuZ3RoKDAsIEZp
eGVkKTsKIH0KIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
ZW5ndGhPckF1dG8oY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMZW5ndGhPckF1dG8oY29uc3QgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgcmV0
dXJuIExlbmd0aChBdXRvKTsKLSAgICByZXR1cm4gY29udmVydExlbmd0aChzdHlsZVJlc29sdmVy
LCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgocHJvcGVydHlDYXNjYWRlLCB2YWx1
ZSk7CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVu
Z3RoU2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGVuZ3RoU2l6aW5nKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2Fk
ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgotICAgICAgICBy
ZXR1cm4gY29udmVydExlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIHJldHVy
biBjb252ZXJ0TGVuZ3RoKHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogICAgIGNhc2UgQ1NTVmFs
dWVJbnRyaW5zaWM6CiAgICAgICAgIHJldHVybiBMZW5ndGgoSW50cmluc2ljKTsKICAgICBjYXNl
IENTU1ZhbHVlTWluSW50cmluc2ljOgpAQCAtMjUwLDI5ICsyNTAsMjkgQEAgaW5saW5lIExlbmd0
aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3QgU3R5bGVS
ZXNvbHZlciYgc3QKICAgICB9CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0TGVuZ3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0TGVuZ3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlm
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZU5vbmUpCiAgICAgICAgIHJldHVybiBMZW5ndGgoVW5kZWZpbmVkKTsKLSAgICByZXR1cm4gY29u
dmVydExlbmd0aFNpemluZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZl
cnRMZW5ndGhTaXppbmcocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBUYWJT
aXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRhYlNpemUoY29uc3QgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRhYlNp
emUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVy
biBUYWJTaXplKHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSwgU3BhY2VWYWx1ZVR5cGUpOwot
ICAgIHJldHVybiBUYWJTaXplKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0
eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpLCBMZW5ndGhW
YWx1ZVR5cGUpOworICAgIHJldHVybiBUYWJTaXplKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpLCBM
ZW5ndGhWYWx1ZVR5cGUpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29tcHV0ZWRMZW5ndGgoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0Q29tcHV0ZWRMZW5ndGgoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJu
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuY29tcHV0ZUxlbmd0aDxUPihzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVuZ3RoPFQ+KHBy
b3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGlu
ZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVXaWR0aChTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CiAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkpIHsKQEAg
LTI4NSwxNiArMjg1LDE2IEBAIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjCiAgICAgY2FzZSBDU1NW
YWx1ZUludmFsaWQ6IHsKICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3VsdCB0aGF0IHdhcyA+
PSAxIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAgICAgICAgIC8vIFRo
aXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAgICBUIHJlc3VsdCA9
IGNvbnZlcnRDb21wdXRlZExlbmd0aDxUPihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChzdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDwgMS4w
ZiAmJiByZXN1bHQgPCAxLjApIHsKLSAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wKSk7CisgICAgICAg
IFQgcmVzdWx0ID0gY29udmVydENvbXB1dGVkTGVuZ3RoPFQ+KHByb3BlcnR5Q2FzY2FkZSwgdmFs
dWUpOworICAgICAgICBpZiAocHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgp
IDwgMS4wZiAmJiByZXN1bHQgPCAxLjApIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWxMZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wKSk7CiAgICAgICAg
ICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgIHJldHVybiAx
OwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IG1pbmltdW1MaW5lV2lkdGggPSAxIC8gc3R5bGVS
ZXNvbHZlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGZsb2F0IG1p
bmltdW1MaW5lV2lkdGggPSAxIC8gcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IDAgJiYgcmVzdWx0IDwgbWluaW11bUxp
bmVXaWR0aCkKICAgICAgICAgICAgIHJldHVybiBtaW5pbXVtTGluZVdpZHRoOwotICAgICAgICBy
ZXR1cm4gZmxvb3JUb0RldmljZVBpeGVsKHJlc3VsdCwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gZmxvb3JUb0RldmljZVBpeGVs
KHJlc3VsdCwgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7
CiAgICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAt
MzAyLDE1ICszMDIsMTUgQEAgaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGMKICAgICB9CiB9CiAKLWlu
bGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGFjaW5nKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBmbG9h
dCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGFjaW5nKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAg
ICAgICByZXR1cm4gMC5mOwogCi0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJz
aW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPwotICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNv
cHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCi0gICAgICAgIDogc3R5bGVSZXNvbHZlci5zdGF0ZSgp
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNvbnZlcnNpb25EYXRhID0gcHJvcGVydHlDYXNjYWRlLnVzZVNWR1pvb21SdWxlc0Zvckxl
bmd0aCgpID8KKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQorICAgICAgICA6IHByb3BlcnR5Q2FzY2Fk
ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGNvbnZlcnNpb25EYXRhKTsKIH0KIApAQCAtMzIzLDEzICsz
MjMsMTMgQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb1Jh
ZGl1c0xlbmd0aChDU1NUb0xlbmd0aENvbnZlcnNpb24KICAgICByZXR1cm4gdmFsdWUuY29tcHV0
ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKIH0KIAotaW5saW5lIExlbmd0aFNpemUg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmFkaXVzKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGhTaXplIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJhZGl1cyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvKiBwYWly
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5wYWlyVmFsdWUoKTsKICAgICBp
ZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICBy
ZXR1cm4geyB7IDAsIEZpeGVkIH0sIHsgMCwgRml4ZWQgfSB9OwogCi0gICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBj
b252ZXJzaW9uRGF0YSA9IHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCk7CiAgICAgTGVuZ3RoU2l6ZSByYWRpdXMgeyBjb252ZXJ0VG9SYWRpdXNMZW5ndGgoY29udmVy
c2lvbkRhdGEsICpwYWlyLT5maXJzdCgpKSwgY29udmVydFRvUmFkaXVzTGVuZ3RoKGNvbnZlcnNp
b25EYXRhLCAqcGFpci0+c2Vjb25kKCkpIH07CiAKICAgICBBU1NFUlQoIXJhZGl1cy53aWR0aC5p
c05lZ2F0aXZlKCkpOwpAQCAtMzU0LDE4ICszNTQsMTggQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChjb25zdCBMZW5n
dGgKICAgICByZXR1cm4gTGVuZ3RoKENhbGN1bGF0aW9uVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKG9w
KSwgVmFsdWVSYW5nZUFsbCkpOwogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WChTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
Y29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVmdCwgQ1NTVmFsdWVSaWdodD4oc3R5
bGVSZXNvbHZlciwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgcmV0
dXJuIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlUmlnaHQ+
KHByb3BlcnR5Q2FzY2FkZSwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9
CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25D
b21wb25lbnRZKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRp
b25Db21wb25lbnRZKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25l
bnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tPihzdHlsZVJlc29sdmVyLCBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICByZXR1cm4gY29udmVydFBvc2l0aW9uQ29t
cG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4ocHJvcGVydHlDYXNjYWRlLCBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KIAogdGVtcGxhdGU8Q1NTVmFsdWVJ
RCBjc3NWYWx1ZUZvcjAsIENTU1ZhbHVlSUQgY3NzVmFsdWVGb3IxMDA+Ci1pbmxpbmUgTGVuZ3Ro
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25l
bnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NQcmlt
aXRpdmVWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKIApAQCAtMzkyLDcgKzM5
Miw3IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRp
b25Db21wb25lbnQoU3R5bGVSZXNvbHZlciYgc3R5CiAgICAgICAgIH0KICAgICB9CiAgICAgICAg
IAotICAgIGxlbmd0aCA9IGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgKmxlbmd0aFZhbHVl
KTsKKyAgICBsZW5ndGggPSBjb252ZXJ0TGVuZ3RoKHByb3BlcnR5Q2FzY2FkZSwgKmxlbmd0aFZh
bHVlKTsKIAogICAgIGlmIChyZWxhdGl2ZVRvVHJhaWxpbmdFZGdlKQogICAgICAgICBsZW5ndGgg
PSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgobGVuZ3RoKTsKQEAgLTQwMCwyMCArNDAw
LDIwIEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRp
b25Db21wb25lbnQoU3R5bGVSZXNvbHZlciYgc3R5CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAot
aW5saW5lIExlbmd0aFBvaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9iamVjdFBv
c2l0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBMZW5ndGhQb2ludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPYmpl
Y3RQb3NpdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZh
bHVlLnBhaXJWYWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFp
ci0+c2Vjb25kKCkpCiAgICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6aW5pdGlhbE9iamVjdFBv
c2l0aW9uKCk7CiAKLSAgICBMZW5ndGggbGVuZ3RoWCA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVu
dDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlUmlnaHQ+KHN0eWxlUmVzb2x2ZXIsICpwYWlyLT5maXJz
dCgpKTsKLSAgICBMZW5ndGggbGVuZ3RoWSA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NW
YWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KHN0eWxlUmVzb2x2ZXIsICpwYWlyLT5zZWNvbmQoKSk7
CisgICAgTGVuZ3RoIGxlbmd0aFggPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVM
ZWZ0LCBDU1NWYWx1ZVJpZ2h0Pihwcm9wZXJ0eUNhc2NhZGUsICpwYWlyLT5maXJzdCgpKTsKKyAg
ICBMZW5ndGggbGVuZ3RoWSA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZVRvcCwg
Q1NTVmFsdWVCb3R0b20+KHByb3BlcnR5Q2FzY2FkZSwgKnBhaXItPnNlY29uZCgpKTsKIAogICAg
IHJldHVybiBMZW5ndGhQb2ludChsZW5ndGhYLCBsZW5ndGhZKTsKIH0KIAotaW5saW5lIE9wdGlv
blNldDxUZXh0RGVjb3JhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBP
cHRpb25TZXQ8VGV4dERlY29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHREZWNvcmF0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byByZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0
aW9uKCk7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CkBAIC00MjQsMjAgKzQy
NCwyMCBAQCBpbmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgotaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnROdW1iZXIoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS52YWx1ZTxUPihDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiB9CiAKIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRO
dW1iZXJPckF1dG8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JB
dXRvKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1
cm4gY29udmVydE51bWJlcjxUPihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNv
bnZlcnROdW1iZXI8VD4ocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBzaG9y
dCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVz
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgc2hvcnQgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9MaW1pdCkKQEAgLTQ0
NiwzMSArNDQ2LDMxIEBAIGlubGluZSBzaG9ydCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlUmVzb2x2CiB9CiAKIHRlbXBsYXRlPENT
U1Byb3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxpbmUgTmluZVBpZWNlSW1hZ2UgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydEJvcmRlckltYWdlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE5pbmVQaWVjZUltYWdlIGltYWdl
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2UocHJvcGVy
dHksICZ2YWx1ZSwgaW1hZ2UpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLm1hcE5p
bmVQaWVjZUltYWdlKHByb3BlcnR5LCAmdmFsdWUsIGltYWdlKTsKICAgICByZXR1cm4gaW1hZ2U7
CiB9CiAKIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxpbmUgTmluZVBpZWNl
SW1hZ2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBOaW5l
UGllY2VJbWFnZSBpbWFnZShOaW5lUGllY2VJbWFnZTo6VHlwZTo6TWFzayk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgJnZhbHVlLCBp
bWFnZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2Uo
cHJvcGVydHksICZ2YWx1ZSwgaW1hZ2UpOwogICAgIHJldHVybiBpbWFnZTsKIH0KIAogdGVtcGxh
dGU8Q1NTUHJvcGVydHlJRD4KLWlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXIuc3R5bGVJbWFnZSh2YWx1ZSk7CisgICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5jcmVhdGVT
dHlsZUltYWdlKHZhbHVlKTsKIH0KIAotaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRyYW5zZm9ybShTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBU
cmFuc2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgdHJhbnNmb3Jtc0ZvclZhbHVlKHZh
bHVlLCBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBv
cGVyYXRpb25zKTsKKyAgICB0cmFuc2Zvcm1zRm9yVmFsdWUodmFsdWUsIHByb3BlcnR5Q2FzY2Fk
ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9wZXJhdGlvbnMpOwogICAgIHJldHVybiBv
cGVyYXRpb25zOwogfQogCkBAIC00OTgsNyArNDk4LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjp1cGRhdGVDb2xvclNjaGVtZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYg
cHIKICAgICB9CiB9CiAKLWlubGluZSBTdHlsZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydENvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRDb2xvclNjaGVtZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIFN0eWxlQ29sb3JTY2hlbWUgY29sb3JTY2hlbWU7CiAKQEAgLTUxNiwy
MyArNTE2LDIzIEBAIGlubGluZSBTdHlsZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydENvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImCiB9CiAjZW5kaWYKIAotaW5saW5l
IFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0U3RyaW5nKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkuc3RyaW5nVmFsdWUoKTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTdHJpbmdPckF1dG8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRTdHJpbmdPckF1dG8oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlD
YXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAg
cmV0dXJuIG51bGxBdG9tKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRTdHJpbmcoc3R5bGVSZXNvbHZl
ciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHByb3BlcnR5Q2FzY2FkZSwgdmFs
dWUpOwogfQogCi1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0
cmluZ09yTm9uZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmlu
Z09yTm9uZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gbnVsbEF0b20o
KTsKLSAgICByZXR1cm4gY29udmVydFN0cmluZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAg
cmV0dXJuIGNvbnZlcnRTdHJpbmcocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKIGlubGlu
ZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
dmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2
ZVZhbHVlKQpAQCAtNTU2LDcgKzU1Niw3IEBAIGlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lz
UG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6dmFsdWVUb0VtcGhhc2lzUG9zCiAgICAg
cmV0dXJuIFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzUG9zaXRpb24oKTsKIH0KIAot
aW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VGV4dEVtcGhhc2lzUG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRFbXBoYXNpc1Bvc2l0aW9uKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiB2YWx1ZVRvRW1waGFzaXNQ
b3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKQEAgLTU2Nyw3ICs1
NjcsNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaQogICAgIHJldHVybiBwb3NpdGlvbjsKIH0K
IAotaW5saW5lIFRleHRBbGlnbk1vZGUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4
dEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBUZXh0QWxpZ25Nb2RlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzVmFs
dWVJRCgpKTsKQEAgLTU3NSwyMSArNTc1LDIxIEBAIGlubGluZSBUZXh0QWxpZ25Nb2RlIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsCiAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSAhPSBDU1NWYWx1ZVdlYmtpdE1hdGNoUGFy
ZW50KQogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWU7CiAKLSAgICBhdXRvKiBwYXJlbnRT
dHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKTsKLSAgICBpZiAocGFyZW50U3R5bGUt
PnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OlN0YXJ0KQotICAgICAgICByZXR1cm4gcGFy
ZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1vZGU6OkxlZnQg
OiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKLSAgICBpZiAocGFyZW50U3R5bGUtPnRleHRBbGlnbigp
ID09IFRleHRBbGlnbk1vZGU6OkVuZCkKLSAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlLT5pc0xl
ZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0QWxpZ25Nb2RlOjpSaWdodCA6IFRleHRBbGlnbk1v
ZGU6OkxlZnQ7Ci0gICAgcmV0dXJuIHBhcmVudFN0eWxlLT50ZXh0QWxpZ24oKTsKKyAgICBhdXRv
JiBwYXJlbnRTdHlsZSA9IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpOworICAgIGlmIChw
YXJlbnRTdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpTdGFydCkKKyAgICAgICAg
cmV0dXJuIHBhcmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1v
ZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKKyAgICBpZiAocGFyZW50U3R5bGUudGV4
dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6RW5kKQorICAgICAgICByZXR1cm4gcGFyZW50U3R5
bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9kZTo6UmlnaHQgOiBUZXh0
QWxpZ25Nb2RlOjpMZWZ0OworICAgIHJldHVybiBwYXJlbnRTdHlsZS50ZXh0QWxpZ24oKTsKIH0K
IAotaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xpcFBhdGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgICAgICBpZiAocHJpbWl0aXZl
VmFsdWUucHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAg
ICAgICAgICAgICBTdHJpbmcgY3NzVVJMVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1
ZSgpOwotICAgICAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gU1ZHVVJJUmVmZXJlbmNlOjpmcmFn
bWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKGNzc1VSTFZhbHVlLCBzdHlsZVJlc29sdmVyLmRv
Y3VtZW50KCkpOworICAgICAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gU1ZHVVJJUmVmZXJlbmNl
OjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKGNzc1VSTFZhbHVlLCBwcm9wZXJ0eUNh
c2NhZGUuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXQgZG9lc24ndCB3b3Jr
IHdpdGggZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MTMzKQogICAgICAgICAgICAgcmV0dXJuIFJlZmVyZW5jZUNs
aXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUsIGZyYWdtZW50KTsKICAgICAgICAg
fQpAQCAtNjA0LDcgKzYwNCw3IEBAIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlUmVzCiAgICAgICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRW
YWx1ZS5nZXQoKSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkpIHsKICAg
ICAgICAgICAgIEFTU0VSVCghb3BlcmF0aW9uKTsKLSAgICAgICAgICAgIG9wZXJhdGlvbiA9IFNo
YXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNv
bHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVl
LnNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVDbGlwUGF0aE9w
ZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShwcm9wZXJ0eUNhc2NhZGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVWYWx1ZSgpKSk7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlQ29udGVudEJveAogICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZh
bHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveApAQCAtNjI3LDIwICs2MjcsMjAgQEAg
aW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXMKICAgICByZXR1cm4gb3BlcmF0aW9uOwogfQogCi1pbmxp
bmUgUmVzaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlc2l6ZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVzaXpl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlc2l6ZShTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAK
ICAgICBSZXNpemUgcmVzaXplID0gUmVzaXplOjpOb25lOwogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICByZXNpemUgPSBzdHlsZVJlc29s
dmVyLnNldHRpbmdzKCkudGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSZXNpemU6OkJvdGggOiBS
ZXNpemU6Ok5vbmU7CisgICAgICAgIHJlc2l6ZSA9IHByb3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgp
LnNldHRpbmdzKCkudGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSZXNpemU6OkJvdGggOiBSZXNp
emU6Ok5vbmU7CiAgICAgZWxzZQogICAgICAgICByZXNpemUgPSBwcmltaXRpdmVWYWx1ZTsKIAog
ICAgIHJldHVybiByZXNpemU7CiB9CiAKLWlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZVJlcGV0aXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUluZmluaXRlKQpAQCAtNjUwLDcgKzY1MCw3IEBAIGlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0CiAg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmludFZhbHVlKCk7CiB9CiAKLWlubGluZSBpbnQgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydE1hcnF1ZWVTcGVlZChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpbnQgc3BlZWQgPSA4NTsKQEAgLTY3OSw3ICs2Nzks
NyBAQCBpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVTcGVl
ZChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVgogICAgIHJldHVybiBzcGVlZDsKIH0KIAotaW5s
aW5lIFJlZjxRdW90ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWY8UXVvdGVz
RGF0YT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UXVvdGVzKFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC03MDIsMTMgKzcw
MiwxMyBAQCBpbmxpbmUgUmVmPFF1b3Rlc0RhdGE+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFF1b3RlcyhTdHlsZVJlc29sdmVyJiwgY29ucwogICAgIHJldHVybiBRdW90ZXNEYXRhOjpj
cmVhdGUocXVvdGVzKTsKIH0KIAotaW5saW5lIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJU
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogICAgIHJldHVybiBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogfQogCi1pbmxpbmUgVGV4dFVuZGVybGluZU9mZnNldCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0
VW5kZXJsaW5lT2Zmc2V0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxp
bmVPZmZzZXQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKQEAgLTcxNywxMiArNzE3LDEyIEBAIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zm
c2V0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5
CiAgICAgICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKTsK
LSAgICAgICAgYXV0byBjb21wdXRlZExlbmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9h
dD4oc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBhdXRvIGNvbXB1dGVk
TGVuZ3RoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0Pihwcm9wZXJ0eUNhc2NhZGUsIHBy
aW1pdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0
ZVdpdGhMZW5ndGgoY29tcHV0ZWRMZW5ndGgpOwogICAgIH0KIH0KIAotaW5saW5lIFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyhTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NF
UlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtNzMzLDEyICs3MzMs
MTIgQEAgaW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRleHREZWNvcmF0aW9uVGhpY2sKICAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzOjpjcmVhdGVGcm9tRm9udCgpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZExl
bmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUpOworICAgICAgICBhdXRvIGNvbXB1dGVkTGVuZ3RoID0gY29udmVydENvbXB1dGVk
TGVuZ3RoPGZsb2F0Pihwcm9wZXJ0eUNhc2NhZGUsIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAg
cmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVXaXRoTGVuZ3RoKGNvbXB1dGVk
TGVuZ3RoKTsKICAgICB9CiB9CiAKLWlubGluZSBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZWZsZWN0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8U3R5bGVSZWZs
ZWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZWZsZWN0aW9uKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VS
VChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZU5vbmUpOwpAQCAtNzQ5LDE2ICs3NDksMTYgQEAgaW5saW5lIFJlZlB0cjxTdHlsZVJlZmxlY3Rp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rpb24oU3R5bGVSZXMKIAog
ICAgIGF1dG8gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3JlYXRlKCk7CiAgICAgcmVm
bGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RWYWx1ZS5kaXJlY3Rpb24oKSk7Ci0gICAgcmVm
bGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS5vZmZzZXQoKS5jb252ZXJ0VG9MZW5ndGg8
Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENv
bnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpKTsKKyAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLm9mZnNldCgpLmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBDYWxjdWxhdGVkQ29udmVyc2lvbj4ocHJvcGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkpOwogCiAgICAgTmluZVBpZWNlSW1hZ2UgbWFzayhOaW5lUGllY2VJbWFnZTo6
VHlwZTo6TWFzayk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3QsIHJlZmxlY3RWYWx1ZS5tYXNrKCksIG1h
c2spOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlKENT
U1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdCwgcmVmbGVjdFZhbHVlLm1hc2soKSwgbWFzayk7CiAg
ICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgIHJldHVybiByZWZsZWN0aW9uOwog
fQogCi1pbmxpbmUgSW50U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFs
TGV0dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgSW50
U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVyKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCkBAIC03
NzMsNyArNzczLDcgQEAgaW5saW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0SW5pdGlhbExldHRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICByZXR1cm4gSW50U2l6
ZShwYWlyLT5maXJzdCgpLT5pbnRWYWx1ZSgpLCBwYWlyLT5zZWNvbmQoKS0+aW50VmFsdWUoKSk7
CiB9CiAKLWlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0U3Ry
b2tlV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJv
a2VXaWR0aChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKQEAgLTc4OCwxMSArNzg4LDExIEBAIGlubGluZSBm
bG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgcmVzdWx0ICo9IDU7CiAgICAgICAgIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gZW1zVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShy
ZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKSk7Ci0gICAgICAgIHdpZHRoID0gY29u
dmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLCBlbXNWYWx1ZSk7CisgICAg
ICAgIHdpZHRoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0Pihwcm9wZXJ0eUNhc2NhZGUs
IGVtc1ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ1NTVmFsdWVJbnZh
bGlkOiB7Ci0gICAgICAgIHdpZHRoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHls
ZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIHdpZHRoID0gY29udmVydENvbXB1
dGVkTGVuZ3RoPGZsb2F0Pihwcm9wZXJ0eUNhc2NhZGUsIHByaW1pdGl2ZVZhbHVlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC04MDMsNyArODAzLDcgQEAgaW5saW5l
IGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aChTdHls
ZVJlc29sdmVyJiBzdHlsZVIKICAgICByZXR1cm4gd2lkdGg7CiB9CiAKLWlubGluZSBPcHRpb25T
ZXQ8TGluZUJveENvbnRhaW4+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVCb3hD
b250YWluKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0
aW9uU2V0PExpbmVCb3hDb250YWluPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
Qm94Q29udGFpbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFT
U0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmUpOwpAQCAtODM0LDcgKzgzNCw3IEBAIGlubGluZSBPcHRpb25TZXQ8VGV4dERlY29y
YXRpb25Ta2lwPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnZhbHVlVG9EZWNvcmF0aW9uU2tpCiAg
ICAgcmV0dXJuIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IHsgfTsKIH0KIAotaW5saW5l
IE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFRleHREZWNvcmF0aW9uU2tpcChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uU2tpcChTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gdmFsdWVUb0RlY29yYXRpb25Ta2lwKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwpAQCAtODUwLDcgKzg1MCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc0ltYWdlU2hhcGUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogICAgIHJldHVy
biBpczxDU1NJbWFnZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUp
IHx8IGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKTsKIH0KIAotaW5saW5lIFJlZlB0
cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQ
dHI8U2hhcGVWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NF
UlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKTsKQEAgLTg1OCwxNCArODU4LDE0IEBAIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZVJlc29sdmVyCiAg
ICAgfQogCiAgICAgaWYgKGlzSW1hZ2VTaGFwZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBTaGFw
ZVZhbHVlOjpjcmVhdGUoc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKHZhbHVlKS5yZWxlYXNlTm9u
TnVsbCgpKTsKKyAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZShwcm9wZXJ0eUNhc2Nh
ZGUuY3JlYXRlU3R5bGVJbWFnZSh2YWx1ZSkucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICBSZWZQ
dHI8QmFzaWNTaGFwZT4gc2hhcGU7CiAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBDU1NC
b3hUeXBlOjpCb3hNaXNzaW5nOwogICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKICAgICAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkKLSAgICAgICAgICAgIHNoYXBlID0gYmFz
aWNTaGFwZUZvclZhbHVlKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCksICpwcmltaXRpdmVWYWx1ZS5zaGFwZVZhbHVlKCkpOworICAgICAgICAgICAgc2hh
cGUgPSBiYXNpY1NoYXBlRm9yVmFsdWUocHJvcGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVlLnNoYXBlVmFsdWUoKSk7CiAgICAgICAgIGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAgICAg
ICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveAog
ICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGlu
Z0JveApAQCAtODg5LDcgKzg4OSw3IEBAIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZVJlc29sdmVyCiAKICNpZiBF
TkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQogCi1pbmxpbmUgU2Nyb2xsU25hcFR5cGUgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTY3JvbGxTbmFwVHlwZSBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFNjcm9sbFNuYXBUeXBlIHR5cGU7CiAgICAgYXV0
byYgdmFsdWVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CkBAIC05MTQsNyArOTE0
LDcgQEAgaW5saW5lIFNjcm9sbFNuYXBUeXBlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFNjcm9sbFNuYXBUeXBlKFN0eWxlUmVzb2x2ZXIKICAgICByZXR1cm4gdHlwZTsKIH0KIAotaW5s
aW5lIFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxT
bmFwQWxpZ24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBT
Y3JvbGxTbmFwQWxpZ24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcEFs
aWduKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdmFsdWVzID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAgICAgU2Ny
b2xsU25hcEFsaWduIGFsaWdubWVudDsKQEAgLTkyOCw3ICs5MjgsNyBAQCBpbmxpbmUgU2Nyb2xs
U25hcEFsaWduIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBBbGlnbihT
dHlsZVJlc29sdgogCiAjZW5kaWYKIAotaW5saW5lIEdyaWRMZW5ndGggU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSBHcmlk
TGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
ID09IENTU1ZhbHVlTWluQ29udGVudCB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVXZWJraXRNaW5Db250ZW50KQogICAgICAgICByZXR1cm4gTGVuZ3RoKE1pbkNvbnRlbnQp
OwpAQCAtOTQwLDIzICs5NDAsMjMgQEAgaW5saW5lIEdyaWRMZW5ndGggU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGkKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNGbGV4KCkpCiAgICAgICAgIHJldHVybiBHcmlkTGVuZ3RoKHByaW1p
dGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkpOwogCi0gICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0
YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICByZXR1cm4gcHJpbWl0aXZl
VmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHByb3BlcnR5
Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogfQogCi1pbmxpbmUgR3JpZFRy
YWNrU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja1NpemUoY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIEdy
aWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tTaXplKGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQotICAgICAgICBy
ZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSksIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgcmV0dXJuIEdy
aWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpLCBwcm9wZXJ0eUNhc2NhZGUpKTsKIAogICAgIEFTU0VSVChpczxDU1NGdW5j
dGlvblZhbHVlPih2YWx1ZSkpOwogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uID0gZG93bmNhc3Q8
Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpOwogCiAgICAgaWYgKGZ1bmN0aW9uLmxlbmd0aCgpID09
IDEpCi0gICAgICAgIHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0No
ZWNrKDApKSwgc3R5bGVSZXNvbHZlciksIEZpdENvbnRlbnRUcmFja1NpemluZyk7CisgICAgICAg
IHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgcHJv
cGVydHlDYXNjYWRlKSwgRml0Q29udGVudFRyYWNrU2l6aW5nKTsKIAogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZ1bmN0aW9uLmxlbmd0aCgpID09IDIpOwotICAgIEdyaWRM
ZW5ndGggbWluVHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgc3R5
bGVSZXNvbHZlcikpOwotICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRU
cmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpKSwgc3R5bGVSZXNvbHZlcikpOworICAgIEdyaWRMZW5ndGggbWlu
VHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgcHJvcGVydHlDYXNj
YWRlKSk7CisgICAgR3JpZExlbmd0aCBtYXhUcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpLCBwcm9wZXJ0eUNhc2NhZGUpKTsKICAgICByZXR1cm4gR3JpZFRyYWNrU2l6
ZShtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJlYWR0aCk7CiB9CiAKQEAgLTk4OCw3ICs5ODgs
NyBAQCBwdWJsaWM6CiAgICAgQXV0b1JlcGVhdFR5cGUgbV9hdXRvUmVwZWF0VHlwZSB7IFJlbmRl
clN0eWxlOjppbml0aWFsR3JpZEF1dG9SZXBlYXRUeXBlKCkgfTsKIH07CiAKLWlubGluZSBib29s
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1
ZSYgdmFsdWUsIFRyYWNrc0RhdGEmIHRyYWNrc0RhdGEsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFj
a0xpc3QoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBUcmFja3NEYXRhJiB0cmFja3NEYXRhLCBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7CiAgICAgLy8gSGFuZGxlICdu
b25lJy4KICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKQEAgLTEwMDMsNyAr
MTAwMyw3IEBAIGlubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRy
YWNrTGlzdChjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFRyCiAgICAgICAgICAgICBjcmVhdGVHcmlk
TGluZU5hbWVzTGlzdChjdXJyZW50VmFsdWUsIGN1cnJlbnROYW1lZEdyaWRMaW5lLCB0cmFja3NE
YXRhLm1fbmFtZWRHcmlkTGluZXMsIHRyYWNrc0RhdGEubV9vcmRlcmVkTmFtZWRHcmlkTGluZXMp
OwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICsrY3VycmVudE5hbWVkR3JpZExpbmU7Ci0g
ICAgICAgICAgICB0cmFja3NEYXRhLm1fdHJhY2tTaXplcy5hcHBlbmQoY3JlYXRlR3JpZFRyYWNr
U2l6ZShjdXJyZW50VmFsdWUsIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgICAgIHRyYWNrc0Rh
dGEubV90cmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJlbnRWYWx1ZSwg
cHJvcGVydHlDYXNjYWRlKSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0xMDIwLDcgKzEwMjAs
NyBAQCBpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xp
c3QoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBUcgogICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKythdXRvUmVwZWF0SW5kZXg7
Ci0gICAgICAgICAgICAgICAgdHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzLmFwcGVu
ZChjcmVhdGVHcmlkVHJhY2tTaXplKGF1dG9SZXBlYXRWYWx1ZS5nZXQoKSwgc3R5bGVSZXNvbHZl
cikpOworICAgICAgICAgICAgICAgIHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcy5h
cHBlbmQoY3JlYXRlR3JpZFRyYWNrU2l6ZShhdXRvUmVwZWF0VmFsdWUuZ2V0KCksIHByb3BlcnR5
Q2FzY2FkZSkpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJhY2tzRGF0YS5tX2F1dG9S
ZXBlYXRJbnNlcnRpb25Qb2ludCA9IGN1cnJlbnROYW1lZEdyaWRMaW5lKys7CiAgICAgICAgICAg
ICBjb250aW51ZTsKQEAgLTExMTEsNyArMTExMSw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShjb25z
CiAgICAgfQogfQogCi1pbmxpbmUgVmVjdG9yPEdyaWRUcmFja1NpemU+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBWZWN0b3I8R3JpZFRyYWNrU2l6
ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgQVNTRVJUKHZhbHVlLmlzVmFsdWVMaXN0KCkpOwogICAgIGF1dG8mIHZhbHVlTGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwpAQCAtMTEyMSwxNyArMTEyMSwxNyBA
QCBpbmxpbmUgVmVjdG9yPEdyaWRUcmFja1NpemU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEdyaWRUcmFja1NpemVMaXN0KFN0eQogICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+aXNH
cmlkTGluZU5hbWVzVmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRB
dXRvUmVwZWF0VmFsdWUoKSk7CiAgICAgICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRJbnRl
Z2VyUmVwZWF0VmFsdWUoKSk7Ci0gICAgICAgIHRyYWNrU2l6ZXMudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRHcmlkVHJhY2tTaXplKHN0eWxlUmVzb2x2ZXIsIGN1cnJWYWx1ZSkpOworICAgICAgICB0
cmFja1NpemVzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0R3JpZFRyYWNrU2l6ZShwcm9wZXJ0eUNh
c2NhZGUsIGN1cnJWYWx1ZSkpOwogICAgIH0KICAgICByZXR1cm4gdHJhY2tTaXplczsKIH0KIAot
aW5saW5lIEdyaWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRy
YWNrU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRH
cmlkVHJhY2tTaXplKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBjcmVhdGVHcmlkVHJhY2tTaXplKHZh
bHVlLCBzdHlsZVJlc29sdmVyKTsKKyAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1
ZSwgcHJvcGVydHlDYXNjYWRlKTsKIH0KIAotaW5saW5lIE9wdGlvbmFsPEdyaWRQb3NpdGlvbj4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFBvc2l0aW9uKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24oU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBHcmlkUG9zaXRpb24gZ3Jp
ZFBvc2l0aW9uOwogICAgIGlmIChjcmVhdGVHcmlkUG9zaXRpb24odmFsdWUsIGdyaWRQb3NpdGlv
bikpCkBAIC0xMTM5LDcgKzExMzksNyBAQCBpbmxpbmUgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24oU3R5bGVSZQogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBHcmlkQXV0b0Zsb3cgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgR3JpZEF1dG9GbG93IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEdyaWRBdXRvRmxvdyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8mIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKTsKICAgICBpZiAoIWxpc3QubGVuZ3RoKCkpCkBAIC0xMTc3LDIzICsxMTc3LDIzIEBAIGlu
bGluZSBHcmlkQXV0b0Zsb3cgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9G
bG93KFN0eWxlUmVzb2x2ZXImLCBjCiAgICAgcmV0dXJuIGF1dG9GbG93OwogfQogCi1pbmxpbmUg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNzc3RvTGVu
Z3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlcikKK2lubGluZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgaWYgKGF1dG8qIGZy
YW1lID0gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmZyYW1lKCkpIHsKLSAgICAgICAgZmxvYXQg
dGV4dFpvb21GYWN0b3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnRleHRab29tKCkgIT0gVGV4
dFpvb206OlJlc2V0ID8gZnJhbWUtPnRleHRab29tRmFjdG9yKCkgOiAxLjBmOwotICAgICAgICBy
ZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5j
b3B5V2l0aEFkanVzdGVkWm9vbShzdHlsZVJlc29sdmVyLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSAqIHRleHRab29tRmFjdG9yKTsKKyAgICBpZiAoYXV0byogZnJhbWUgPSBwcm9wZXJ0eUNhc2Nh
ZGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgICAgIGZsb2F0IHRleHRab29tRmFjdG9yID0g
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkudGV4dFpvb20oKSAhPSBUZXh0Wm9vbTo6UmVzZXQgPyBm
cmFtZS0+dGV4dFpvb21GYWN0b3IoKSA6IDEuMGY7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUNh
c2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKHBy
b3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAqIHRleHRab29tRmFjdG9yKTsK
ICAgICB9Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCk7CisgICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE9wdGlvbmFs
PExlbmd0aD4gd29yZFNwYWNpbmc7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5
bGU6OmluaXRpYWxXb3JkU3BhY2luZygpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
TGVuZ3RoKCkpCi0gICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxl
bmd0aDxMZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Io
c3R5bGVSZXNvbHZlcikpOworICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKHByb3BlcnR5Q2FzY2FkZSkpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
UGVyY2VudGFnZSgpKQogICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChjbGFtcFRvPGZsb2F0
PihwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4
VmFsdWVGb3JDc3NMZW5ndGgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc051bWJlcigpKQpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgaW5saW5lIE9wdGlvbmFsPExlbmd0
aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNvbHZl
ciYKICAgICByZXR1cm4gd29yZFNwYWNpbmc7CiB9CiAKLWlubGluZSBPcHRpb25hbDxmbG9hdD4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPGZs
b2F0PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUp
CkBAIC0xMjEwLDE2ICsxMjEwLDE2IEBAIGlubGluZSBPcHRpb25hbDxmbG9hdD4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYKIAogICAgIGZs
b2F0IHBlcnNwZWN0aXZlID0gLTE7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkp
Ci0gICAgICAgIHBlcnNwZWN0aXZlID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9h
dD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Cisg
ICAgICAgIHBlcnNwZWN0aXZlID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4o
cHJvcGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgZWxzZSBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKLSAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmlt
aXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpICogc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS56b29tKCk7CisgICAgICAgIHBlcnNwZWN0aXZlID0gcHJpbWl0
aXZlVmFsdWUuZG91YmxlVmFsdWUoKSAqIHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuem9vbSgpOwogICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CiAKICAgICByZXR1cm4gcGVyc3BlY3RpdmUgPCAwID8gT3B0aW9uYWw8ZmxvYXQ+KFdURjo6
bnVsbG9wdCkgOiBPcHRpb25hbDxmbG9hdD4ocGVyc3BlY3RpdmUpOwogfQogCi1pbmxpbmUgT3B0
aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVt
ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1h
cnF1ZWVJbmNyZW1lbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgT3B0aW9uYWw8TGVuZ3RoPiBtYXJxdWVlTGVu
Z3RoOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKQEAgLTEyMzQsNyArMTIzNCw3IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNv
CiAgICAgICAgIG1hcnF1ZWVMZW5ndGggPSBMZW5ndGgoMzYsIEZpeGVkKTsgLy8gMzZweC4KICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6IHsKLSAgICAgICAgTGVuZ3Ro
IGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVz
dGVkWm9vbSgxLjBmKSk7CisgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOwogICAgICAgICBpZiAoIWxl
bmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgbWFycXVlZUxlbmd0aCA9IGxlbmd0aDsK
ICAgICAgICAgYnJlYWs7CkBAIC0xMjQ1LDE1ICsxMjQ1LDE1IEBAIGlubGluZSBPcHRpb25hbDxM
ZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5
bGVSZXNvCiAgICAgcmV0dXJuIG1hcnF1ZWVMZW5ndGg7CiB9CiAKLWlubGluZSBPcHRpb25hbDxG
aWx0ZXJPcGVyYXRpb25zPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGaWx0ZXJPcGVy
YXRpb25zKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBPcHRpb25hbDxGaWx0ZXJPcGVyYXRpb25zPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEZpbHRlck9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKLSAgICBpZiAoc3R5bGVSZXNvbHZlci5jcmVhdGVGaWx0ZXJPcGVyYXRp
b25zKHZhbHVlLCBvcGVyYXRpb25zKSkKKyAgICBpZiAocHJvcGVydHlDYXNjYWRlLmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnModmFsdWUsIG9wZXJhdGlvbnMpKQogICAgICAgICByZXR1cm4gb3BlcmF0
aW9uczsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udEZlYXR1cmVT
ZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250RmVhdHVyZVNldHRpbmdz
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udEZlYXR1
cmVTZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250RmVhdHVyZVNldHRp
bmdzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9y
bWFsKTsKQEAgLTEzMjMsMjcgKzEzMjMsMjcgQEAgaW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rp
b25WYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVYKICAg
ICByZXR1cm4gaXRhbGljVmFsdWUoKTsKIH0KIAotaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250U2VsZWN0aW9u
VmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFdlaWdodChTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSkgewogICAgICAgICBhdXRvIHZhbHVlSUQgPSBw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCk7CiAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVl
Qm9sZGVyKQotICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRl
cldlaWdodChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLndl
aWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpib2xk
ZXJXZWlnaHQocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCku
d2VpZ2h0KCkpOwogICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxpZ2h0ZXIpCi0gICAg
ICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdodChzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLndlaWdodCgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KHBy
b3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLndlaWdodCgpKTsK
ICAgICB9CiAgICAgcmV0dXJuIGNvbnZlcnRGb250V2VpZ2h0RnJvbVZhbHVlKHZhbHVlKTsKIH0K
IAotaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRGb250U3RyZXRjaChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250
U3RyZXRjaChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIHJldHVybiBjb252ZXJ0Rm9udFN0cmV0Y2hGcm9tVmFsdWUodmFsdWUpOwogfQogCiAj
aWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLWlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udFZhcmlhdGlvblNl
dHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5n
cyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1h
bCk7CkBAIC0xMzYwLDIxICsxMzYwLDIxIEBAIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzCiAjZW5k
aWYKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1pbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRv
dWNoQ2FsbG91dChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIHJldHVybiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5zdHJpbmdWYWx1ZSgpLCAibm9uZSIpOwogfQogI2Vu
ZGlmCiAKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotaW5saW5lIENvbG9yIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBDb2xvciBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1
cm4gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICByZXR1cm4gcHJvcGVydHlDYXNjYWRlLmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQog
I2VuZGlmCiAKICNpZiBFTkFCTEUoUE9JTlRFUl9FVkVOVFMpCi1pbmxpbmUgT3B0aW9uU2V0PFRv
dWNoQWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb3VjaEFjdGlvbihTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUb3Vj
aEFjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC0xMzk2LDQwICsxMzk2LDQwIEBAIGlubGluZSBPcHRp
b25TZXQ8VG91Y2hBY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvdWNoQWN0
aW9uKFN0eWxlUmVzCiAjZW5kaWYKIAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9V
Q0gpCi1pbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPdmVyZmxvd1Nj
cm9sbGluZyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGJv
b2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVU
b3VjaDsKIH0KICNlbmRpZgogCi1pbmxpbmUgU1ZHTGVuZ3RoVmFsdWUgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBTVkdMZW5ndGhWYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTVkdMZW5ndGhWYWx1ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6ZnJvbUNTU1ByaW1p
dGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogCi1pbmxp
bmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
VkdMZW5ndGhWZWN0b3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHBy
b3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHZhbHVl
TGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogCiAgICAgVmVjdG9yPFNWR0xl
bmd0aFZhbHVlPiBzdmdMZW5ndGhzOwogICAgIHN2Z0xlbmd0aHMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSh2YWx1ZUxpc3QubGVuZ3RoKCkpOwogICAgIGZvciAoYXV0byYgaXRlbSA6IHZhbHVlTGlz
dCkKLSAgICAgICAgc3ZnTGVuZ3Rocy51bmNoZWNrZWRBcHBlbmQoY29udmVydFNWR0xlbmd0aFZh
bHVlKHN0eWxlUmVzb2x2ZXIsIGl0ZW0pKTsKKyAgICAgICAgc3ZnTGVuZ3Rocy51bmNoZWNrZWRB
cHBlbmQoY29udmVydFNWR0xlbmd0aFZhbHVlKHByb3BlcnR5Q2FzY2FkZSwgaXRlbSkpOwogCiAg
ICAgcmV0dXJuIHN2Z0xlbmd0aHM7CiB9CiAKLWlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cm9rZURhc2hBcnJheShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJva2VEYXNo
QXJyYXkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsK
ICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiBTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZURhc2hBcnJheSgpOwogICAgIH0KIAotICAgIHJldHVybiBjb252ZXJ0U1ZHTGVu
Z3RoVmVjdG9yKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFNWR0xl
bmd0aFZlY3Rvcihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIFBhaW50T3Jk
ZXIgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGFpbnRPcmRlcihTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFBhaW50T3JkZXIgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0UGFpbnRPcmRlcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CkBAIC0xNDUwLDcgKzE0NTAsNyBAQCBpbmxp
bmUgUGFpbnRPcmRlciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKFN0
eWxlUmVzb2x2ZXImLCBjb25zdAogICAgIH0KIH0KIAotaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPcGFj
aXR5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCk7CkBA
IC0xNDU5LDIyICsxNDU5LDIyIEBAIGlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1CiAgICAgcmV0dXJu
IG9wYWNpdHk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2Fk
ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0cmluZyBzOwogICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkKICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLnN0
cmluZ1ZhbHVlKCk7CiAKLSAgICByZXR1cm4gU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50
aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgcmV0
dXJuIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBw
cm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQoKSk7CiB9CiAKLWlubGluZSBDb2xvciBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdDb2xvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIu
Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSk7CisgICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KIAotaW5saW5lIFN0eWxlU2Vs
ZkFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2VsZk9yRGVmYXVs
dEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBhbGlnbm1l
bnREYXRhID0gUmVuZGVyU3R5bGU6OmluaXRpYWxTZWxmQWxpZ25tZW50KCk7CiAgICAgYXV0byYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAt
MTQ5NSw3ICsxNDk1LDcgQEAgaW5saW5lIFN0eWxlU2VsZkFsaWdubWVudERhdGEgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWUKICAgICByZXR1cm4gYWxp
Z25tZW50RGF0YTsKIH0KIAotaW5saW5lIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnRE
YXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5
bGVDb250ZW50QWxpZ25tZW50RGF0YSBhbGlnbm1lbnREYXRhID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxDb250ZW50QWxpZ25tZW50KCk7CiAgICAgaWYgKCFpczxDU1NDb250ZW50RGlzdHJpYnV0aW9u
VmFsdWU+KHZhbHVlKSkKQEAgLTE1MTAsNyArMTUxMCw3IEBAIGlubGluZSBTdHlsZUNvbnRlbnRB
bGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1l
bnRECiAgICAgcmV0dXJuIGFsaWdubWVudERhdGE7CiB9CiAKLWlubGluZSBHbHlwaE9yaWVudGF0
aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHbHlwaE9yaWVudGF0aW9u
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBmbG9hdCBhbmds
ZSA9IGZhYnNmKGZtb2RmKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZmxvYXRW
YWx1ZSgpLCAzNjAuMGYpKTsKICAgICBpZiAoYW5nbGUgPD0gNDUuMGYgfHwgYW5nbGUgPiAzMTUu
MGYpCkBAIC0xNTIyLDIxICsxNTIyLDIxIEBAIGlubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGVSZXNvCiAgICAg
cmV0dXJuIEdseXBoT3JpZW50YXRpb246OkRlZ3JlZXMyNzA7CiB9CiAKLWlubGluZSBHbHlwaE9y
aWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb25P
ckF1dG8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNh
c2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICBy
ZXR1cm4gR2x5cGhPcmllbnRhdGlvbjo6QXV0bzsKLSAgICByZXR1cm4gY29udmVydEdseXBoT3Jp
ZW50YXRpb24oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0R2x5cGhP
cmllbnRhdGlvbihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIE9wdGlvbmFs
PExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIGZsb2F0IG11bHRp
cGxpZXIpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMaW5lSGVpZ2h0KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICBy
ZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7CiAKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9M
ZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihzdHlsZVJlc29sdmVyKSk7Cisg
ICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRl
eHRab29tRmFjdG9yKHByb3BlcnR5Q2FzY2FkZSkpOwogICAgICAgICBpZiAobXVsdGlwbGllciAh
PSAxLmYpCiAgICAgICAgICAgICBsZW5ndGggPSBMZW5ndGgobGVuZ3RoLnZhbHVlKCkgKiBtdWx0
aXBsaWVyLCBGaXhlZCk7CiAgICAgICAgIHJldHVybiBsZW5ndGg7CkBAIC0xNTUwLDcgKzE1NTAs
NyBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImCiAgICAgLy8gdmFsdWVzIGFuZCByYXcgbnVtYmVy
cyB0byBwZXJjZW50YWdlcy4KICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkp
IHsKICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVk
IHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgcmV0dXJuIExlbmd0aCgoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgp
KSAvIDEwMCwgRml4ZWQpOworICAgICAgICByZXR1cm4gTGVuZ3RoKChwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgpKSAv
IDEwMCwgRml4ZWQpOwogICAgIH0KICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkK
ICAgICAgICAgcmV0dXJuIExlbmd0aChwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpICogMTAw
LjAsIFBlcmNlbnQpOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgaW5saW5lIE9wdGlvbmFsPExlbmd0
aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVy
JgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBGb250U3ludGhlc2lzIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTE1ODksNyArMTU4OSw3IEBAIGlu
bGluZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50
aGVzaXMoU3R5bGVSZXNvbHZlciYsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLWlubGlu
ZSBPcHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtB
cyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNl
dDxTcGVha0FzPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGVha0FzKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byByZXN1
bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWFrQXMoKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVM
aXN0Pih2YWx1ZSkpIHsKQEAgLTE1OTksNyArMTU5OSw3IEBAIGlubGluZSBPcHRpb25TZXQ8U3Bl
YWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhTdHlsZVJlc29sdmVy
JiwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PEhhbmdpbmdQdW5j
dHVhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0
PEhhbmdpbmdQdW5jdHVhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SGFuZ2lu
Z1B1bmN0dWF0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byByZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEhhbmdpbmdQdW5j
dHVhdGlvbigpOwogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewpAQCAtMTYwOSw5
ICsxNjA5LDkgQEAgaW5saW5lIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEhhbmdpbmdQdW5jdHUKICAgICByZXR1cm4gcmVzdWx0Owog
fQogCi1pbmxpbmUgR2FwTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdhcExl
bmd0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgR2FwTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdhcExlbmd0
aChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKSA/IEdhcExlbmd0aCgpIDogR2FwTGVuZ3Ro
KGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpKTsKKyAgICByZXR1cm4gKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFs
KSA/IEdhcExlbmd0aCgpIDogR2FwTGVuZ3RoKGNvbnZlcnRMZW5ndGgocHJvcGVydHlDYXNjYWRl
LCB2YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggMjhkZTExNmM5MjUuLjQxODM1ZDYxYzFmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC00MSw2ICs0MSw3IEBACiAj
aW5jbHVkZSAiRm9udFZhcmlhbnRCdWlsZGVyLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNs
dWRlICJIVE1MRWxlbWVudC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1
ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiU1ZHUmVuZGVy
U3R5bGUuaCIKQEAgLTU0LDkgKzU1LDkgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2RlZmlu
ZSBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyhwcm9wZXJ0eSkgXAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdCMjcHJvcGVydHkoU3R5bGVSZXNvbHZlciYpOyBcCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsIyNwcm9wZXJ0eShTdHlsZVJlc29sdmVyJik7IFwKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlIyNwcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUm
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdCMjcHJvcGVydHkoU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYpOyBcCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsIyNwcm9wZXJ0eShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJik7IFwKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlIyNwcm9w
ZXJ0eShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKQogCiB0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBpbmxpbmUgVCBmb3J3YXJkSW5oZXJpdGVkVmFsdWUoVCYmIHZhbHVlKSB7IHJldHVy
biBzdGQ6OmZvcndhcmQ8VD4odmFsdWUpOyB9CiBpbmxpbmUgTGVuZ3RoIGZvcndhcmRJbmhlcml0
ZWRWYWx1ZShjb25zdCBMZW5ndGgmIHZhbHVlKSB7IGF1dG8gY29weSA9IHZhbHVlOyByZXR1cm4g
Y29weTsgfQpAQCAtMTA5LDEyNiArMTEwLDEyNiBAQCBwdWJsaWM6CiAgICAgREVDTEFSRV9QUk9Q
RVJUWV9DVVNUT01fSEFORExFUlMoWm9vbSk7CiAKICAgICAvLyBDdXN0b20gaGFuZGxpbmcgb2Yg
aW5pdGlhbCArIGluaGVyaXQgdmFsdWUgc2V0dGluZyBvbmx5LgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZShTdHlsZVJlc29sdmVyJikgeyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0V2Via2l0TWFza0ltYWdlKFN0eWxlUmVzb2x2ZXImKSB7IH0KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlUmVzb2x2
ZXImKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRGb250RmVhdHVyZVNldHRpbmdz
KFN0eWxlUmVzb2x2ZXImKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxXZWJraXRN
YXNrSW1hZ2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgeyB9Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsRm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udEZlYXR1
cmVTZXR0aW5ncyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgeyB9CiAjaWYgRU5BQkxFKFZBUklB
VElPTl9GT05UUykKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxGb250VmFyaWF0aW9uU2V0
dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEZv
bnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9CisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRGb250VmFyaWF0aW9uU2V0dGluZ3Mo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQogI2VuZGlmCiAKICAgICAvLyBDdXN0b20gaGFu
ZGxpbmcgb2YgaW5oZXJpdCArIHZhbHVlIHNldHRpbmcgb25seS4KLSAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXREaXNwbGF5KFN0eWxlUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlRGlzcGxheShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXREaXNwbGF5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlRGlzcGxheShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFs
dWUmKTsKIAogICAgIC8vIEN1c3RvbSBoYW5kbGluZyBvZiB2YWx1ZSBzZXR0aW5nIG9ubHkuCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUJhc2VsaW5lU2hpZnQoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZURpcmVjdGlvbihTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVmVydGljYWxBbGln
bihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVU
ZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZVdlYmtpdExvY2FsZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlUmVzb2x2ZXImLCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWVEaXJlY3Rpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVGV4dEFsaWduKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVGV4dEFsaWdu
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRPcmllbnRhdGlvbihTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5H
KQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0U2l6ZUFkanVzdChTdHlsZVJl
c29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4
dFNpemVBZGp1c3QoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CiAjZW5kaWYK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dFpvb20oU3R5bGVSZXNvbHZlciYs
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxl
UmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVBbHQoU3R5
bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdpbGxD
aGFuZ2UoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZVdlYmtpdFRleHRab29tKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXcml0aW5nTW9kZShTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQWx0KFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVX
aWxsQ2hhbmdlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOwogCiAjaWYgRU5B
QkxFKERBUktfTU9ERV9DU1MpCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvbG9yU2NoZW1l
KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVD
b2xvclNjaGVtZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKICNlbmRpZgog
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBD
U1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZVJl
c29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tlV2lk
dGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZVN0cm9rZUNvbG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYp
OwogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBB
dG9tU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ3VzdG9tUHJvcGVy
dHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxDdXN0
b21Qcm9wZXJ0eShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1
c3RvbVByb3BlcnR5KiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSk7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVydHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0
IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiwgQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZSYpOwogCiBwcml2YXRlOgotICAgIHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZl
Wm9vbShTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIHZvaWQgcmVzZXRFZmZlY3RpdmVab29t
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKIAogICAgIHN0YXRpYyBMZW5ndGggbW1MZW5ndGgo
ZG91YmxlIG1tKTsKICAgICBzdGF0aWMgTGVuZ3RoIGluY2hMZW5ndGgoZG91YmxlIGluY2gpOwog
ICAgIHN0YXRpYyBib29sIGdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBh
Z2VTaXplTmFtZSwgQ1NTUHJpbWl0aXZlVmFsdWUqIHBhZ2VPcmllbnRhdGlvbiwgTGVuZ3RoJiB3
aWR0aCwgTGVuZ3RoJiBoZWlnaHQpOwogCiAgICAgdGVtcGxhdGUgPENTU1Byb3BlcnR5SUQgaWQ+
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZShTdHlsZVJlc29sdmVy
JiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxl
UmVzb2x2ZXImLCBEaXNwbGF5VHlwZSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlUZXh0T3JCb3hT
aGFkb3dWYWx1ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBEaXNw
bGF5VHlwZSk7CiAKICAgICBlbnVtIENvdW50ZXJCZWhhdmlvciB7SW5jcmVtZW50ID0gMCwgUmVz
ZXR9OwogICAgIHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYpOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwog
ICAgIHRlbXBsYXRlIDxDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVDb3VudGVyKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBD
U1NWYWx1ZSYpOwogCiAgICAgc3RhdGljIGZsb2F0IGxhcmdlckZvbnRTaXplKGZsb2F0IHNpemUp
OwogICAgIHN0YXRpYyBmbG9hdCBzbWFsbGVyRm9udFNpemUoZmxvYXQgc2l6ZSk7Ci0gICAgc3Rh
dGljIGZsb2F0IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGVSZXNvbHZlciYp
OworICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmKTsKIH07CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZURpcmVjdGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVE
aXJlY3Rpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXREaXJlY3Rpb24oZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0RGlyZWN0aW9uKHRydWUpOworICAgIHByb3BlcnR5Q2Fz
Y2FkZS5zdHlsZSgpLnNldERpcmVjdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0RGly
ZWN0aW9uKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbFRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0QWxpZ24oU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VGV4dEFsaWduKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEFsaWduKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldFRleHRBbGlnbih0cnVlKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0QWxpZ24oUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0QWxpZ24oKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzRXhw
bGljaXRseVNldFRleHRBbGlnbih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlVGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRBbGln
bihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24oc3R5bGVSZXNvbHZlciwg
dmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRU
ZXh0QWxpZ24odHJ1ZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEFsaWdu
KFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRBbGlnbihwcm9wZXJ0eUNhc2NhZGUs
IHZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseVNl
dFRleHRBbGlnbih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpy
ZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6cmVzZXRFZmZlY3RpdmVab29tKFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKICAgICAvLyBSZXNldCB0aGUgem9vbSBpbiBl
ZmZlY3QuIFRoaXMgYWxsb3dzIHRoZSBzZXRab29tIG1ldGhvZCB0byBhY2N1cmF0ZWx5IGNvbXB1
dGUgYSBuZXcgem9vbSBpbiBlZmZlY3QuCi0gICAgc3R5bGVSZXNvbHZlci5zZXRFZmZlY3RpdmVa
b29tKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+ZWZmZWN0aXZlWm9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zZXRFZmZlY3RpdmVab29tKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRT
dHlsZSgpLmVmZmVjdGl2ZVpvb20oKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsWm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxab29tKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICByZXNldEVmZmVjdGl2ZVpvb20o
c3R5bGVSZXNvbHZlcik7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0eWxlOjpp
bml0aWFsWm9vbSgpKTsKKyAgICByZXNldEVmZmVjdGl2ZVpvb20ocHJvcGVydHlDYXNjYWRlKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Wm9vbShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRab29tKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSkKIHsKLSAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRab29tKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+em9vbSgpKTsK
KyAgICByZXNldEVmZmVjdGl2ZVpvb20ocHJvcGVydHlDYXNjYWRlKTsKKyAgICBwcm9wZXJ0eUNh
c2NhZGUuc2V0Wm9vbShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS56b29tKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVab29tKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVpvb20oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCiAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgewotICAgICAgICByZXNldEVm
ZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9v
bShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShwcm9wZXJ0eUNhc2NhZGUpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Wm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkgewotICAgICAgICBzdHlsZVJlc29sdmVyLnNldEVm
ZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICBwcm9w
ZXJ0eUNhc2NhZGUuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7
CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZURvY3VtZW50KSB7Ci0gICAgICAgIGZsb2F0IGRvY1pvb20gPSBzdHlsZVJlc29sdmVyLnJvb3RF
bGVtZW50U3R5bGUoKSA/IHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpLT56b29tKCkg
OiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRF
ZmZlY3RpdmVab29tKGRvY1pvb20pOwotICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20oZG9j
Wm9vbSk7CisgICAgICAgIGZsb2F0IGRvY1pvb20gPSBwcm9wZXJ0eUNhc2NhZGUucm9vdEVsZW1l
bnRTdHlsZSgpLnpvb20oKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnNldEVmZmVjdGl2ZVpv
b20oZG9jWm9vbSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRab29tKGRvY1pvb20pOwog
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKLSAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICByZXNldEVmZmVjdGl2
ZVpvb20ocHJvcGVydHlDYXNjYWRlKTsKICAgICAgICAgaWYgKGZsb2F0IHBlcmNlbnQgPSBwcmlt
aXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpv
b20ocGVyY2VudCAvIDEwMC4wZik7CisgICAgICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Wm9v
bShwZXJjZW50IC8gMTAwLjBmKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVt
YmVyKCkpIHsKLSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOworICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20ocHJvcGVydHlDYXNjYWRlKTsKICAgICAgICAgaWYgKGZs
b2F0IG51bWJlciA9IHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Wm9vbShudW1iZXIpOworICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRl
LnNldFpvb20obnVtYmVyKTsKICAgICB9CiB9CiBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckN1
c3RvbTo6bW1MZW5ndGgoZG91YmxlIG1tKQpAQCAtMzE1LDMyICszMTYsMzIgQEAgYm9vbCBTdHls
ZUJ1aWxkZXJDdXN0b206OmdldFBhZ2VTaXplRnJvbU5hbWUoQ1NTUHJpbWl0aXZlVmFsdWUqIHBh
Z2VTaXplTmFtZSwgQ1MKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVmVydGljYWxBbGlnbihTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZl
VmFsdWUudmFsdWVJRCgpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFZlcnRp
Y2FsQWxpZ24ocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRWZXJ0aWNhbEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1
ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0VmVydGljYWxBbGlnbkxlbmd0aChwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4
ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZl
cnNpb24+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpKTsKIH0K
IAogI2lmIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0SW1hZ2VSZXNvbHV0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2Fk
ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJj
ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmltYWdlUmVzb2x1dGlvblNvdXJjZSgpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb25TbmFwKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5p
bWFnZVJlc29sdXRpb25Tb3VyY2UoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0
SW1hZ2VSZXNvbHV0aW9uU25hcChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5pbWFnZVJl
c29sdXRpb25TbmFwKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdlUmVz
b2x1dGlvbihwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5pbWFnZVJlc29sdXRpb24oKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEltYWdlUmVzb2x1dGlvbihTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29s
dXRpb25Tb3VyY2UoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29s
dXRpb25TbmFwKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihSZW5kZXJTdHlsZTo6
aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5z
ZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b25Tb3VyY2UoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0
aW9uU25hcChSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXAoKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uKFJlbmRlclN0eWxlOjpp
bml0aWFsSW1hZ2VSZXNvbHV0aW9uKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5
Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEltYWdlUmVzb2x1dGlvblNvdXJjZSBz
b3VyY2UgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNvdXJjZSgpOwogICAg
IEltYWdlUmVzb2x1dGlvblNuYXAgc25hcCA9IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNv
bHV0aW9uU25hcCgpOwpAQCAtMzU0LDIwICszNTUsMjAgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmUKICAgICAgICAgZWxzZQogICAgICAgICAgICAgcmVzb2x1dGlvbiA9IHByaW1pdGl2ZVZhbHVl
LmRvdWJsZVZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRFBQWCk7CiAgICAgfQotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOwot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKHJlc29sdXRpb24p
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShz
b3VyY2UpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvblNu
YXAoc25hcCk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9u
KHJlc29sdXRpb24pOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKENTU19JTUFHRV9SRVNPTFVUSU9O
KQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFNpemUoU3R5
bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aGVyaXRTaXplKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKSB7IH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTaXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsU2l6ZShTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJikgeyB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZVNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnJlc2V0UGFnZVNpemVUeXBlKCk7CisgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkucmVzZXRQYWdlU2l6ZVR5cGUoKTsKIAogICAgIGlmICghaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpCiAgICAgICAgIHJldHVybjsKQEAgLTM5MCw3ICszOTEsNyBAQCBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTUwogICAgICAgICAgICAgLy8gPGxlbmd0aD57Mn0KICAgICAg
ICAgICAgIGlmICghc2Vjb25kUHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKICAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKKyAgICAgICAgICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwogICAgICAgICAg
ICAgd2lkdGggPSBmaXJzdFByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252
ZXJzaW9uRGF0YSk7CiAgICAgICAgICAgICBoZWlnaHQgPSBzZWNvbmRQcmltaXRpdmVWYWx1ZS5j
b21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICB9IGVsc2UgewpA
QCAtNDExLDcgKzQxMiw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAgICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CiAgICAgICAgICAgICAvLyA8bGVuZ3RoPgogICAg
ICAgICAgICAgcGFnZVNpemVUeXBlID0gUEFHRV9TSVpFX1JFU09MVkVEOwotICAgICAgICAgICAg
d2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFk
anVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2
ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpKSB7CiAg
ICAgICAgICAgICBjYXNlIDA6CkBAIC00MzcsMjkgKzQzOCwyOSBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTUwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRQYWdlU2l6ZVR5cGUocGFnZVNpemVUeXBlKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFBhZ2VTaXplKHsgV1RGTW92ZSh3aWR0aCksIFdURk1vdmUo
aGVpZ2h0KSB9KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRQYWdlU2l6ZVR5cGUo
cGFnZVNpemVUeXBlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRQYWdlU2l6ZSh7
IFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCkgfSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0VGV4dEluZGVudChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRUZXh0SW5kZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQoTGVuZ3RoIHsgc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0SW5kZW50KCkgfSk7CisgICAgcHJvcGVydHlDYXNj
YWRlLnN0eWxlKCkuc2V0VGV4dEluZGVudChMZW5ndGggeyBwcm9wZXJ0eUNhc2NhZGUucGFyZW50
U3R5bGUoKS50ZXh0SW5kZW50KCkgfSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+dGV4dEluZGVudExpbmUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRUZXh0SW5kZW50VHlwZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRJbmRlbnRU
eXBlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKHBy
b3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLnRleHRJbmRlbnRMaW5lKCkpOworICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJbmRlbnRUeXBlKHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRTdHlsZSgpLnRleHRJbmRlbnRUeXBlKCkpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dEluZGVudChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRp
YWxUZXh0SW5kZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0SW5kZW50KCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJ
bmRlbnQoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50KCkpOwogI2lmIEVOQUJMRShDU1Mz
X1RFWFQpCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRMaW5lKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0VGV4dEluZGVudFR5cGUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlw
ZSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50TGluZShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRMaW5lKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldFRleHRJbmRlbnRUeXBlKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudFR5
cGUoKSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlVGV4dEluZGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5k
ZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIExlbmd0aCBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZTsKICNpZiBFTkFCTEUo
Q1NTM19URVhUKQpAQCAtNDY5LDcgKzQ3MCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAg
ICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAg
ICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
aXRlbS5nZXQoKSk7CiAgICAgICAgIGlmICghcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpKQotICAg
ICAgICAgICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0
VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2Fs
Y3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkpOworICAgICAgICAgICAgbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUgPSBwcmlt
aXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHByb3BlcnR5Q2FzY2FkZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCiAgICAgICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVdlYmtpdEVhY2hM
aW5lKQogICAgICAgICAgICAgdGV4dEluZGVudExpbmVWYWx1ZSA9IFRleHRJbmRlbnRMaW5lOjpF
YWNoTGluZTsKQEAgLTQ4MSwxMCArNDgyLDEwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAg
ICAgaWYgKGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChXVEZNb3Zl
KGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0VGV4dEluZGVudChXVEZNb3ZlKGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlKSk7CiAjaWYgRU5B
QkxFKENTUzNfVEVYVCkKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRM
aW5lKHRleHRJbmRlbnRMaW5lVmFsdWUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
VGV4dEluZGVudFR5cGUodGV4dEluZGVudFR5cGVWYWx1ZSk7CisgICAgcHJvcGVydHlDYXNjYWRl
LnN0eWxlKCkuc2V0VGV4dEluZGVudExpbmUodGV4dEluZGVudExpbmVWYWx1ZSk7CisgICAgcHJv
cGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEluZGVudFR5cGUodGV4dEluZGVudFR5cGVWYWx1
ZSk7CiAjZW5kaWYKIH0KIApAQCAtNDkzLDI5ICs0OTQsMjkgQEAgZW51bSBCb3JkZXJJbWFnZU1v
ZGlmaWVyVHlwZSB7IE91dHNldCwgUmVwZWF0LCBTbGljZSwgV2lkdGggfTsKIHRlbXBsYXRlIDxC
b3JkZXJJbWFnZVR5cGUgdHlwZSwgQm9yZGVySW1hZ2VNb2RpZmllclR5cGUgbW9kaWZpZXI+CiBj
bGFzcyBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllciB7CiBwdWJsaWM6Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShn
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dpdGNo
IChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdlLmNv
cHlPdXRzZXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAg
ICAgICAgICAgaW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnBh
cmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVhdDoK
LSAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFs
dWUocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAgICAgaW1hZ2UuY29weUltYWdlU2xpY2VzRnJv
bShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGlt
YWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0
eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAg
ICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShn
ZXRWYWx1ZShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBp
bWFnZSk7CisgICAgICAgIHNldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLCBpbWFnZSk7
CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiAgICAgewotICAgICAgICBOaW5l
UGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKKyAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnN0eWxlKCkp
KTsKICAgICAgICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKICAg
ICAgICAgICAgIGltYWdlLnNldE91dHNldChMZW5ndGhCb3goMCkpOwpAQCAtNTM4LDUzICs1Mzks
NTMgQEAgcHVibGljOgogICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHR5cGUgPT0g
Qm9yZGVySW1hZ2UgPyBsZW5ndGhCb3ggOiBMZW5ndGhCb3goKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCksIGlt
YWdlKTsKKyAgICAgICAgc2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnN0eWxlKCksIGltYWdlKTsK
ICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQog
ICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZl
ci5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAg
ICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoc3R5bGVSZXNvbHZl
ci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJ
bWFnZVF1YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFJlcGVh
dDoKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1h
Z2VSZXBlYXQodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHls
ZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2YWx1ZSwgaW1hZ2UpOworICAgICAg
ICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2VTbGljZSh2
YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0g
ICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMoc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgp
LT5tYXBOaW5lUGllY2VJbWFnZVF1YWQodmFsdWUpKTsKKyAgICAgICAgICAgIGltYWdlLnNldEJv
cmRlclNsaWNlcyhwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZVF1
YWQodmFsdWUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZh
bHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAogcHJpdmF0ZToKLSAgICBzdGF0
aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBzdHls
ZSkKKyAgICBzdGF0aWMgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGdldFZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdl
ID8gc3R5bGUtPmJvcmRlckltYWdlKCkgOiBzdHlsZS0+bWFza0JveEltYWdlKCk7CisgICAgICAg
IHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUuYm9yZGVySW1hZ2UoKSA6IHN0eWxl
Lm1hc2tCb3hJbWFnZSgpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIHNldFZhbHVlKFJlbmRl
clN0eWxlKiBzdHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZhbHVlKQorICAgIHN0YXRpYyB2
b2lkIHNldFZhbHVlKFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHZh
bHVlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+
c2V0Qm9yZGVySW1hZ2UodmFsdWUpIDogc3R5bGUtPnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7Cisg
ICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUuc2V0Qm9yZGVySW1hZ2Uo
dmFsdWUpIDogc3R5bGUuc2V0TWFza0JveEltYWdlKHZhbHVlKTsKICAgICB9CiB9OwogCiAjZGVm
aW5lIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUih0eXBlLCBtb2RpZmllcikg
XAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXQjI3R5cGUjI21v
ZGlmaWVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpIFwKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0IyN0eXBlIyNtb2RpZmllcihTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpIFwKIHsgXAotICAgIEFwcGx5UHJvcGVydHlCb3Jk
ZXJJbWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlJbmhlcml0VmFsdWUoc3R5bGVS
ZXNvbHZlcik7IFwKKyAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBt
b2RpZmllcj46OmFwcGx5SW5oZXJpdFZhbHVlKHByb3BlcnR5Q2FzY2FkZSk7IFwKIH0gXAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWwjI3R5cGUjI21vZGlmaWVy
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpIFwKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsIyN0eXBlIyNtb2RpZmllcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUpIFwKIHsgXAotICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFn
ZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlJbml0aWFsVmFsdWUoc3R5bGVSZXNvbHZl
cik7IFwKKyAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmll
cj46OmFwcGx5SW5pdGlhbFZhbHVlKHByb3BlcnR5Q2FzY2FkZSk7IFwKIH0gXAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlIyN0eXBlIyNtb2RpZmllcihTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpIFwKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpIFwKIHsgXAotICAg
IEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlW
YWx1ZShzdHlsZVJlc29sdmVyLCB2YWx1ZSk7IFwKKyAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1h
Z2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5VmFsdWUocHJvcGVydHlDYXNjYWRlLCB2
YWx1ZSk7IFwKIH0KIAogREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKEJvcmRl
ckltYWdlLCBPdXRzZXQpCkBAIC01OTgsMTYgKzU5OSwxNiBAQCBERUZJTkVfQk9SREVSX0lNQUdF
X01PRElGSUVSX0hBTkRMRVIoV2Via2l0TWFza0JveEltYWdlLCBXaWR0aCkKIAogI2lmIEVOQUJM
RShURVhUX0FVVE9TSVpJTkcpCiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRMaW5lSGVpZ2h0KFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldExpbmVIZWlnaHQoTGVuZ3RoIHsgc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT5saW5lSGVpZ2h0KCkgfSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZp
ZWRMaW5lSGVpZ2h0KExlbmd0aCB7IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c3BlY2lm
aWVkTGluZUhlaWdodCgpIH0pOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldExpbmVI
ZWlnaHQoTGVuZ3RoIHsgcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkubGluZUhlaWdodCgp
IH0pOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFNwZWNpZmllZExpbmVIZWlnaHQo
TGVuZ3RoIHsgcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuc3BlY2lmaWVkTGluZUhlaWdo
dCgpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsTGluZUhlaWdodChTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6Omlu
aXRpYWxTcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCkpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFNwZWNpZmllZExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6
OmluaXRpYWxTcGVjaWZpZWRMaW5lSGVpZ2h0KCkpOwogfQogCiBzdGF0aWMgaW5saW5lIGZsb2F0
IGNvbXB1dGVCYXNlU3BlY2lmaWVkRm9udFNpemUoY29uc3QgRG9jdW1lbnQmIGRvY3VtZW50LCBj
b25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIGJvb2wgcGVyY2VudGFnZUF1dG9zaXppbmdFbmFibGVk
KQpAQCAtNjU0LDkgKzY1NSw5IEBAIHN0YXRpYyBpbmxpbmUgZmxvYXQgY29tcHV0ZUxpbmVIZWln
aHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShjb25zdCBEb2N1bWVudCYgZG9jCiAgICAgcmV0dXJu
IDE7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUxpbmVI
ZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodChTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICBPcHRpb25hbDxMZW5ndGg+IGxpbmVIZWlnaHQgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIsIHZhbHVlLCAxKTsKKyAgICBPcHRpb25hbDxM
ZW5ndGg+IGxpbmVIZWlnaHQgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lSGVp
Z2h0KHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUsIDEpOwogICAgIGlmICghbGluZUhlaWdodCkKICAg
ICAgICAgcmV0dXJuOwogCkBAIC02NjUsMTQ0ICs2NjYsMTQ0IEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUxpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlCiAgICAgICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IGxpbmVIZWlnaHQudmFsdWUoKTsK
ICAgICBlbHNlIHsKICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgICAgICBhdXRvIG11bHRpcGxpZXIgPSBjb21wdXRl
TGluZUhlaWdodE11bHRpcGxpZXJEdWVUb0ZvbnRTaXplKHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQo
KSwgKnN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBhdXRv
IG11bHRpcGxpZXIgPSBjb21wdXRlTGluZUhlaWdodE11bHRpcGxpZXJEdWVUb0ZvbnRTaXplKHBy
b3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgpLCBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSwgcHJpbWl0
aXZlVmFsdWUpOwogICAgICAgICBpZiAobXVsdGlwbGllciA9PSAxKQogICAgICAgICAgICAgY29t
cHV0ZWRMaW5lSGVpZ2h0ID0gbGluZUhlaWdodC52YWx1ZSgpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMaW5lSGVpZ2h0KHN0eWxlUmVzb2x2ZXIsIHZhbHVlLCBtdWx0aXBsaWVyKS52YWx1ZSgpOwor
ICAgICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGluZUhlaWdodChwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlLCBtdWx0aXBsaWVyKS52YWx1
ZSgpOwogICAgIH0KIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChX
VEZNb3ZlKGNvbXB1dGVkTGluZUhlaWdodCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0U3BlY2lmaWVkTGluZUhlaWdodChXVEZNb3ZlKGxpbmVIZWlnaHQudmFsdWUoKSkpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldExpbmVIZWlnaHQoV1RGTW92ZShjb21wdXRlZExp
bmVIZWlnaHQpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5l
SGVpZ2h0KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CiB9CiAKICNlbmRpZgogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRPdXRsaW5lU3R5bGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxl
SXNBdXRvKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+b3V0bGluZVN0eWxlSXNBdXRvKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+b3V0bGluZVN0eWxlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldE91dGxpbmVTdHlsZUlzQXV0byhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUo
KS5vdXRsaW5lU3R5bGVJc0F1dG8oKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0
T3V0bGluZVN0eWxlKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLm91dGxpbmVTdHlsZSgp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxPdXRs
aW5lU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsT3V0bGluZVN0eWxlKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dE91dGxpbmVTdHlsZUlzQXV0byhSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlzQXV0
bygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldE91dGxpbmVTdHlsZUlzQXV0byhSZW5kZXJTdHlsZTo6aW5pdGlhbE91dGxpbmVTdHlsZUlz
QXV0bygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGUoUmVu
ZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlT3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZU91dGxpbmVTdHlsZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0
eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldE91dGxpbmVTdHlsZUlzQXV0byhwcmltaXRpdmVWYWx1ZSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUocHJpbWl0aXZlVmFsdWUpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE91dGxpbmVTdHlsZUlzQXV0byhwcmltaXRpdmVW
YWx1ZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlKHByaW1p
dGl2ZVZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxDbGlwKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENsaXAoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
cHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q2xpcChM
ZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRIYXNDbGlwKGZhbHNlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRDbGlwKExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKKyAgICBw
cm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRIYXNDbGlwKGZhbHNlKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dENsaXAoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1
dG8qIHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOwotICAgIGlmICgh
cGFyZW50U3R5bGUtPmhhc0NsaXAoKSkKLSAgICAgICAgcmV0dXJuIGFwcGx5SW5pdGlhbENsaXAo
c3R5bGVSZXNvbHZlcik7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKExlbmd0
aCB7IHBhcmVudFN0eWxlLT5jbGlwVG9wKCkgfSwgTGVuZ3RoIHsgcGFyZW50U3R5bGUtPmNsaXBS
aWdodCgpIH0sCi0gICAgICAgIExlbmd0aCB7IHBhcmVudFN0eWxlLT5jbGlwQm90dG9tKCkgfSwg
TGVuZ3RoIHsgcGFyZW50U3R5bGUtPmNsaXBMZWZ0KCkgfSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgIGF1dG8mIHBhcmVudFN0eWxlID0gcHJvcGVy
dHlDYXNjYWRlLnBhcmVudFN0eWxlKCk7CisgICAgaWYgKCFwYXJlbnRTdHlsZS5oYXNDbGlwKCkp
CisgICAgICAgIHJldHVybiBhcHBseUluaXRpYWxDbGlwKHByb3BlcnR5Q2FzY2FkZSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q2xpcChMZW5ndGggeyBwYXJlbnRTdHlsZS5jbGlw
VG9wKCkgfSwgTGVuZ3RoIHsgcGFyZW50U3R5bGUuY2xpcFJpZ2h0KCkgfSwKKyAgICAgICAgTGVu
Z3RoIHsgcGFyZW50U3R5bGUuY2xpcEJvdHRvbSgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLmNs
aXBMZWZ0KCkgfSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzQ2xpcCh0cnVl
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ2xpcChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlwKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAo
YXV0byogcmVjdCA9IHByaW1pdGl2ZVZhbHVlLnJlY3RWYWx1ZSgpKSB7Ci0gICAgICAgIGF1dG8g
Y29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpOworICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0gcHJvcGVydHlDYXNjYWRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICAgICAgYXV0byB0b3AgPSByZWN0LT50
b3AoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIGF1dG8g
cmlnaHQgPSByZWN0LT5yaWdodCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRh
KTsKICAgICAgICAgYXV0byBib3R0b20gPSByZWN0LT5ib3R0b20oKS0+Y29udmVydFRvTGVuZ3Ro
PEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEF1dG9Db252ZXJz
aW9uPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIGF1dG8gbGVmdCA9IHJlY3QtPmxlZnQoKS0+
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IEF1dG9Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0Q2xpcChXVEZNb3ZlKHRvcCksIFdURk1vdmUocmlnaHQpLCBXVEZNb3Zl
KGJvdHRvbSksIFdURk1vdmUobGVmdCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldEhhc0NsaXAodHJ1ZSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENs
aXAoV1RGTW92ZSh0b3ApLCBXVEZNb3ZlKHJpZ2h0KSwgV1RGTW92ZShib3R0b20pLCBXVEZNb3Zl
KGxlZnQpKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzQ2xpcCh0cnVl
KTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
ID09IENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIGFwcGx5SW5pdGlhbENsaXAoc3R5bGVSZXNvbHZl
cik7CisgICAgICAgIGFwcGx5SW5pdGlhbENsaXAocHJvcGVydHlDYXNjYWRlKTsKICAgICB9CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdExvY2Fs
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
OwogCi0gICAgRm9udENhc2NhZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1
dG8pCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2NhbGUobnVsbEF0b20oKSk7CiAgICAg
ZWxzZQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0TG9jYWxlKHByaW1pdGl2ZVZhbHVlLnN0
cmluZ1ZhbHVlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXcml0aW5nTW9kZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVXcml0aW5nTW9kZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNh
c2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnNldFdyaXRpbmdN
b2RlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldFdyaXRpbmdNb2RlKHRydWUpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zZXRXcml0aW5nTW9kZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0
V3JpdGluZ01vZGUodHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVdlYmtpdFRleHRPcmllbnRhdGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRU
ZXh0T3JpZW50YXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnNldFRleHRPcmllbnRhdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKTsKIH0KIAogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0U2l6ZUFkanVzdChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0U2l6ZUFkanVzdChTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8p
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNp
emVBZGp1c3RtZW50KEF1dG9UZXh0U2l6ZUFkanVzdG1lbnQpKTsKKyAgICAgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KEF1dG9U
ZXh0U2l6ZUFkanVzdG1lbnQpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb25lKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRl
eHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChOb1RleHRTaXplQWRqdXN0bWVudCkpOwor
ICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6
ZUFkanVzdG1lbnQoTm9UZXh0U2l6ZUFkanVzdG1lbnQpKTsKICAgICBlbHNlCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50
KHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQocHJpbWl0aXZlVmFs
dWUuZmxvYXRWYWx1ZSgpKSk7CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0Rm9udERp
cnR5KHRydWUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGlydHkoKTsKIH0KICNlbmRp
ZgogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0
Wm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0Wm9vbShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1h
bCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0Wm9vbShUZXh0Wm9vbTo6
Tm9ybWFsKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dFpvb20oVGV4
dFpvb206Ok5vcm1hbCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlUmVzZXQpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFpv
b20oVGV4dFpvb206OlJlc2V0KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0Rm9udERp
cnR5KHRydWUpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0Wm9vbShU
ZXh0Wm9vbTo6UmVzZXQpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGlydHkoKTsKIH0K
IAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ29sb3JTY2hlbWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQ29sb3JTY2hlbWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb2xvclNj
aGVtZShTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZShzdHlsZVJlc29s
dmVyLCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRs
eVNldENvbG9yU2NoZW1lKHRydWUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENv
bG9yU2NoZW1lKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbG9yU2NoZW1lKHByb3Bl
cnR5Q2FzY2FkZSwgdmFsdWUpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRIYXNF
eHBsaWNpdGx5U2V0Q29sb3JTY2hlbWUodHJ1ZSk7CiB9CiAjZW5kaWYKIAogdGVtcGxhdGU8Q1NT
UHJvcGVydHlJRCBwcm9wZXJ0eT4KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlUZXh0T3JCb3hTaGFkb3dWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VGV4dE9y
Qm94U2hhZG93VmFsdWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
IHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFs
dWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRl
eHRTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5z
ZXRUZXh0U2hhZG93KG51bGxwdHIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhudWxscHRyKTsKKyAgICAgICAgICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldEJveFNoYWRvdyhudWxscHRyKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGJvb2wgaXNGaXJzdEVudHJ5ID0gdHJ1ZTsKICAgICBmb3IgKGF1dG8m
IGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBz
aGFkb3dWYWx1ZSA9IGRvd25jYXN0PENTU1NoYWRvd1ZhbHVlPihpdGVtLmdldCgpKTsKLSAgICAg
ICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAgIGF1dG8gY29udmVyc2lvbkRhdGEgPSBwcm9wZXJ0
eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogICAgICAgICBpbnQgeCA9IHNo
YWRvd1ZhbHVlLngtPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAg
IGludCB5ID0gc2hhZG93VmFsdWUueS0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRh
KTsKICAgICAgICAgaW50IGJsdXIgPSBzaGFkb3dWYWx1ZS5ibHVyID8gc2hhZG93VmFsdWUuYmx1
ci0+Y29tcHV0ZUxlbmd0aDxpbnQ+KGNvbnZlcnNpb25EYXRhKSA6IDA7CkBAIC04MTAsOTQgKzgx
MSw5NCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VGV4dE9yQm94U2hh
ZG93VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZQogICAgICAgICBTaGFkb3dTdHlsZSBzaGFk
b3dTdHlsZSA9IHNoYWRvd1ZhbHVlLnN0eWxlICYmIHNoYWRvd1ZhbHVlLnN0eWxlLT52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVJbnNldCA/IEluc2V0IDogTm9ybWFsOwogICAgICAgICBDb2xvciBjb2xv
cjsKICAgICAgICAgaWYgKHNoYWRvd1ZhbHVlLmNvbG9yKQotICAgICAgICAgICAgY29sb3IgPSBz
dHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpzaGFkb3dWYWx1ZS5jb2xvcik7
CisgICAgICAgICAgICBjb2xvciA9IHByb3BlcnR5Q2FzY2FkZS5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZSgqc2hhZG93VmFsdWUuY29sb3IpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb2xv
ciA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgICAgIGNvbG9yID0g
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY29sb3IoKTsKICAgICAgICAgYXV0byBzaGFkb3dEYXRh
ID0gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihJbnRQb2ludCh4LCB5KSwgYmx1ciwgc3ByZWFkLCBz
aGFkb3dTdHlsZSwgcHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csIGNvbG9y
LmlzVmFsaWQoKSA/IGNvbG9yIDogQ29sb3I6OnRyYW5zcGFyZW50KTsKICAgICAgICAgaWYgKHBy
b3BlcnR5ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhXVEZNb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVu
dHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQor
ICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dFNoYWRvdyhXVEZNb3Zl
KHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMg
aXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICBlbHNlCi0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhXVEZNb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJz
dEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRy
eQorICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Qm94U2hhZG93KFdURk1v
dmUoc2hhZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIGlzRmlyc3RFbnRyeSA9IGZhbHNlOwog
ICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRTaGFkb3coU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
VGV4dFNoYWRvdyhudWxscHRyKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0
U2hhZG93KG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdFRleHRTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0VGV4dFNoYWRvdyhTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRUZXh0U2hhZG93KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dFNo
YWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT50ZXh0U2hhZG93KCkpIDogbnVsbHB0cik7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxl
KCkuc2V0VGV4dFNoYWRvdyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS50ZXh0U2hhZG93
KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUo
KS50ZXh0U2hhZG93KCkpIDogbnVsbHB0cik7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlVGV4dFNoYWRvdyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1By
b3BlcnR5VGV4dFNoYWRvdz4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VGV4dE9y
Qm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlUZXh0U2hhZG93Pihwcm9wZXJ0eUNhc2NhZGUsIHZh
bHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxC
b3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQm94U2hhZG93KFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEJv
eFNoYWRvdyhudWxscHRyKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRCb3hTaGFk
b3cobnVsbHB0cik7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyhTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRCb3hTaGFkb3coc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSA/
IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Ym94
U2hhZG93KCkpIDogbnVsbHB0cik7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Qm94
U2hhZG93KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmJveFNoYWRvdygpID8gbWFrZVVu
aXF1ZTxTaGFkb3dEYXRhPigqcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuYm94U2hhZG93
KCkpIDogbnVsbHB0cik7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUJveFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFk
b3coU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFs
dWUpCiB7Ci0gICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eUJveFNoYWRv
dz4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8
Q1NTUHJvcGVydHlCb3hTaGFkb3c+KHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEJveFNoYWRvdyhT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFkb3coU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
cHJvcGVydHlDYXNjYWRlKQogewotICAgIGFwcGx5SW5pdGlhbEJveFNoYWRvdyhzdHlsZVJlc29s
dmVyKTsKKyAgICBhcHBseUluaXRpYWxCb3hTaGFkb3cocHJvcGVydHlDYXNjYWRlKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRCb3hTaGFk
b3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0Qm94U2hhZG93KFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhcHBseUluaGVyaXRCb3hTaGFkb3coc3R5bGVS
ZXNvbHZlcik7CisgICAgYXBwbHlJbmhlcml0Qm94U2hhZG93KHByb3BlcnR5Q2FzY2FkZSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEJveFNo
YWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRCb3hTaGFkb3coU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRv
dz4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8
Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c+KHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGYW1pbHko
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9w
ZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgYXV0byBpbml0
aWFsRGVzYyA9IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24oKTsKIAogICAgIC8vIFdlIG5lZWQgdG8g
YWRqdXN0IHRoZSBzaXplIHRvIGFjY291bnQgZm9yIHRoZSBnZW5lcmljIGZhbWlseSBjaGFuZ2Ug
ZnJvbSBtb25vc3BhY2UgdG8gbm9uLW1vbm9zcGFjZS4KICAgICBpZiAoZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSkgewogICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRl
bnRpZmllciA9IGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxl
Ojpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsIGZhbHNlLCBzdHlsZVJlc29sdmVy
LmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250U2l6ZShm
b250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIs
IGZhbHNlLCBwcm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQoKSkpOwogICAgIH0KICAgICBpZiAoIWlu
aXRpYWxEZXNjLmZpcnN0RmFtaWx5KCkuaXNFbXB0eSgpKQogICAgICAgICBmb250RGVzY3JpcHRp
b24uc2V0RmFtaWxpZXMoaW5pdGlhbERlc2MuZmFtaWxpZXMoKSk7CiAKLSAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBhdXRvIHBhcmVudEZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHByb3Bl
cnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogCiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlsaWVzKHBhcmVudEZvbnREZXNjcmlwdGlvbi5mYW1pbGllcygpKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNTcGVjaWZpZWRGb250KHBhcmVudEZvbnREZXNjcmlw
dGlvbi5pc1NwZWNpZmllZEZvbnQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiB2YWx1ZUxpc3Qg
PSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKIAotICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRv
IGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlv
bigpOwogICAgIC8vIEJlZm9yZSBtYXBwaW5nIGluIGEgbmV3IGZvbnQtZmFtaWx5IHByb3BlcnR5
LCB3ZSBzaG91bGQgcmVzZXQgdGhlIGdlbmVyaWMgZmFtaWx5LgogICAgIGJvb2wgb2xkRmFtaWx5
VXNlZEZpeGVkRGVmYXVsdFNpemUgPSBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6
ZSgpOwogCkBAIC05MTYsNyArOTE3LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICAg
ICAgfSBlbHNlIHsKICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLnZhbHVlSUQoKSkg
ewogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdEJvZHk6Ci0gICAgICAgICAgICAgICAg
ZmFtaWx5ID0gc3R5bGVSZXNvbHZlci5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwor
ICAgICAgICAgICAgICAgIGZhbWlseSA9IHByb3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgpLnNldHRp
bmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlU2VyaWY6CiAgICAgICAgICAgICAgICAgZmFtaWx5ID0gc2Vy
aWZGYW1pbHk7CkBAIC05NjQsMzYgKzk2NSwzNiBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQog
CiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkgIT0gb2xkRmFt
aWx5VXNlZEZpeGVkRGVmYXVsdFNpemUpIHsKICAgICAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlk
ZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHls
ZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZpeGVk
RGVmYXVsdFNpemUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgcHJv
cGVydHlDYXNjYWRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXpl
LCBwcm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQoKSkpOwogICAgIH0KIAotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJv
cGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OwogfQogCi1pbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFs
dWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgRGlzcGxheVR5cGUgZGlzcGxheSkKK2lu
bGluZSBib29sIFN0eWxlQnVpbGRlckN1c3RvbTo6aXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIERpc3BsYXlUeXBlIGRpc3BsYXkpCiB7
Ci0gICAgaWYgKGlzPFNWR0VsZW1lbnQ+KHN0eWxlUmVzb2x2ZXIuZWxlbWVudCgpKSAmJiBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lKQorICAgIGlm
IChpczxTVkdFbGVtZW50Pihwcm9wZXJ0eUNhc2NhZGUuZWxlbWVudCgpKSAmJiBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKICAgICAgICAgcmV0
dXJuIGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OklubGluZSB8fCBkaXNwbGF5ID09IERpc3BsYXlU
eXBlOjpCbG9jayB8fCBkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpOb25lOwogICAgIHJldHVybiB0
cnVlOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdERp
c3BsYXkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0RGlzcGxheShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgRGlzcGxheVR5cGUgZGlzcGxheSA9IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+ZGlzcGxheSgpOwotICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVl
KHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgRGlzcGxheVR5cGUgZGlzcGxheSA9IHByb3BlcnR5
Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmRpc3BsYXkoKTsKKyAgICBpZiAoaXNWYWxpZERpc3BsYXlW
YWx1ZShwcm9wZXJ0eUNhc2NhZGUsIGRpc3BsYXkpKQorICAgICAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXREaXNwbGF5KGRpc3BsYXkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZURpc3BsYXkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgRGlzcGxheVR5cGUgZGlzcGxheSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgaWYgKGlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVS
ZXNvbHZlciwgZGlzcGxheSkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0RGlz
cGxheShkaXNwbGF5KTsKKyAgICBpZiAoaXNWYWxpZERpc3BsYXlWYWx1ZShwcm9wZXJ0eUNhc2Nh
ZGUsIGRpc3BsYXkpKQorICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXREaXNwbGF5
KGRpc3BsYXkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVCYXNlbGluZVNoaWZ0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUJhc2VsaW5l
U2hpZnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7Ci0gICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSkgewogICAgICAgICBzd2l0Y2ggKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSkgewpAQCAtMTAxNSw1NyArMTAxNiw1NyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzbwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxXZWJraXRBc3BlY3RSYXRpbyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRBc3Bl
Y3RSYXRpbyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb1R5cGUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5v
bWluYXRvcigpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVt
ZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKFJlbmRlclN0eWxlOjpp
bml0aWFsQXNwZWN0UmF0aW9UeXBlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dEFzcGVjdFJhdGlvRGVub21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rl
bm9taW5hdG9yKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlv
TnVtZXJhdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0QXNw
ZWN0UmF0aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0QXNwZWN0UmF0aW8oU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGlmIChzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0bykK
KyAgICBpZiAocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuYXNwZWN0UmF0aW9UeXBlKCkg
PT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvKQogICAgICAgICByZXR1cm47Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5hc3BlY3RSYXRpb1R5cGUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb0Rlbm9taW5hdG9yKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YXNwZWN0
UmF0aW9EZW5vbWluYXRvcigpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVj
dFJhdGlvTnVtZXJhdG9yKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9O
dW1lcmF0b3IoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9U
eXBlKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpKTsKKyAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKHByb3Bl
cnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IocHJvcGVydHlD
YXNjYWRlLnBhcmVudFN0eWxlKCkuYXNwZWN0UmF0aW9OdW1lcmF0b3IoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEFzcGVjdFJhdGlvKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEFzcGVjdFJhdGlvKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlRnJvbURpbWVuc2lvbnMp
Ci0gICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRp
b1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpGcm9tRGltZW5zaW9ucyk7CisgICAgICAgICAgICByZXR1
cm4gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlv
VHlwZTo6RnJvbURpbWVuc2lvbnMpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlRnJvbUludHJpbnNpYykKLSAgICAgICAgICAgIHJldHVybiBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkZyb21J
bnRyaW5zaWMpOworICAgICAgICAgICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkZyb21JbnRyaW5zaWMpOwogCiAgICAg
ICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAg
ICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFz
cGVjdFJhdGlvVHlwZTo6QXV0byk7CisgICAgICAgIHJldHVybiBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpBdXRvKTsKICAgICB9CiAK
ICAgICBhdXRvJiBhc3BlY3RSYXRpb1ZhbHVlID0gZG93bmNhc3Q8Q1NTQXNwZWN0UmF0aW9WYWx1
ZT4odmFsdWUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBl
KEFzcGVjdFJhdGlvVHlwZTo6U3BlY2lmaWVkKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5kZW5vbWluYXRvclZh
bHVlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0
b3IoYXNwZWN0UmF0aW9WYWx1ZS5udW1lcmF0b3JWYWx1ZSgpKTsKKyAgICBwcm9wZXJ0eUNhc2Nh
ZGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpTcGVjaWZpZWQp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Io
YXNwZWN0UmF0aW9WYWx1ZS5kZW5vbWluYXRvclZhbHVlKCkpOworICAgIHByb3BlcnR5Q2FzY2Fk
ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJh
dG9yVmFsdWUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsV2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0VGV4
dEVtcGhhc2lzU3R5bGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQog
ewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJT
dHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lz
TWFyaygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldFRleHRFbXBoYXNpc01hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJr
KCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0N1c3RvbU1h
cmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdFRleHRFbXBo
YXNpc1N0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT50ZXh0RW1waGFzaXNGaWxsKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyayhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc01h
cmsoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21N
YXJrKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygp
KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKHByb3Bl
cnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLnRleHRFbXBoYXNpc0ZpbGwoKSk7CisgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhwcm9wZXJ0eUNhc2NhZGUucGFy
ZW50U3R5bGUoKS50ZXh0RW1waGFzaXNNYXJrKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpLnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxl
KCkudGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYg
KGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIGxpc3QgPSBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKQEAgLTEwNzQsMzggKzEwNzUsMzggQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dEVtcGhhc2lzU3R5bGUo
U3R5bGVSZXNvbHZlciYKICAgICAgICAgZm9yIChhdXRvJiBpdGVtIDogbGlzdCkgewogICAgICAg
ICAgICAgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KGl0ZW0uZ2V0KCkpOwogICAgICAgICAgICAgaWYgKHZhbHVlLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUZpbGxlZCB8fCB2YWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKQotICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbCh2YWx1ZSk7
CisgICAgICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lz
RmlsbCh2YWx1ZSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHZhbHVlKTsKKyAgICAgICAgICAgICAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKHZhbHVlKTsKICAg
ICAgICAgfQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1
c3RvbU1hcmsobnVsbEF0b20oKSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20oKSk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNp
c0ZpbGw6OkZpbGxlZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrOjpDdXN0b20pOwotICAgICAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUuc3Ry
aW5nVmFsdWUoKSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBo
YXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkKTsKKyAgICAgICAgcHJvcGVydHlDYXNj
YWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrOjpDdXN0b20p
OworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21N
YXJrKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJr
KG51bGxBdG9tKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNp
c0N1c3RvbU1hcmsobnVsbEF0b20oKSk7CiAKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlRmlsbGVkIHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU9wZW4pIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNGaWxsKHByaW1pdGl2ZVZhbHVlKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcms6OkF1dG8pOworICAgICAgICBwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKHByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0
RW1waGFzaXNNYXJrOjpBdXRvKTsKICAgICB9IGVsc2UgewotICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhh
c2lzRmlsbChUZXh0RW1waGFzaXNGaWxsOjpGaWxsZWQpOworICAgICAgICBwcm9wZXJ0eUNhc2Nh
ZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKHByaW1pdGl2ZVZhbHVlKTsKICAgICB9CiB9
CiAKIHRlbXBsYXRlIDxTdHlsZUJ1aWxkZXJDdXN0b206OkNvdW50ZXJCZWhhdmlvciBjb3VudGVy
QmVoYXZpb3I+Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENv
dW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXV0byYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwotICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBj
b25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+YWNj
ZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgeworICAgIGF1dG8mIG1hcCA9IHByb3BlcnR5Q2FzY2Fk
ZS5zdHlsZSgpLmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgZm9yIChhdXRvJiBrZXlW
YWx1ZSA6IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5
bGUoKSkuYWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKSkgewogICAgICAgICBhdXRvJiBkaXJlY3Rp
dmVzID0gbWFwLmFkZChrZXlWYWx1ZS5rZXksIENvdW50ZXJEaXJlY3RpdmVzIHsgfSkuaXRlcmF0
b3ItPnZhbHVlOwogICAgICAgICBpZiAoY291bnRlckJlaGF2aW9yID09IFJlc2V0KQogICAgICAg
ICAgICAgZGlyZWN0aXZlcy5yZXNldFZhbHVlID0ga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZTsK
QEAgLTExMTUsMTQgKzExMTYsMTQgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIKIH0KIAogdGVt
cGxhdGUgPFN0eWxlQnVpbGRlckN1c3RvbTo6Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlv
cj4KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBib29sIHNldENv
dW50ZXJJbmNyZW1lbnRUb05vbmUgPSBjb3VudGVyQmVoYXZpb3IgPT0gSW5jcmVtZW50ICYmIGlz
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lOwogCiAgICAgaWYgKCFpczxDU1NWYWx1
ZUxpc3Q+KHZhbHVlKSAmJiAhc2V0Q291bnRlckluY3JlbWVudFRvTm9uZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgQ291bnRlckRpcmVjdGl2ZU1hcCYgbWFwID0gc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgIENvdW50ZXJEaXJlY3RpdmVNYXAm
IG1hcCA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7
CiAgICAgZm9yIChhdXRvJiBrZXlWYWx1ZSA6IG1hcCkgewogICAgICAgICBpZiAoY291bnRlckJl
aGF2aW9yID09IFJlc2V0KQogICAgICAgICAgICAga2V5VmFsdWUudmFsdWUucmVzZXRWYWx1ZSA9
IFdURjo6bnVsbG9wdDsKQEAgLTExNDUsODQgKzExNDYsODQgQEAgaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLAogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxDb3VudGVySW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlckluY3JlbWVudChTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJikgeyB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0Q291bnRlckluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVySW5jcmVt
ZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhcHBs
eUluaGVyaXRDb3VudGVyPEluY3JlbWVudD4oc3R5bGVSZXNvbHZlcik7CisgICAgYXBwbHlJbmhl
cml0Q291bnRlcjxJbmNyZW1lbnQ+KHByb3BlcnR5Q2FzY2FkZSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJJbmNyZW1lbnQoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudChTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVZh
bHVlQ291bnRlcjxJbmNyZW1lbnQ+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVZh
bHVlQ291bnRlcjxJbmNyZW1lbnQ+KHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJSZXNldChTdHls
ZVJlc29sdmVyJikgeyB9CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbENvdW50ZXJSZXNldChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgeyB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlclJlc2V0KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdENvdW50ZXJSZXNldChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNh
c2NhZGUpCiB7Ci0gICAgYXBwbHlJbmhlcml0Q291bnRlcjxSZXNldD4oc3R5bGVSZXNvbHZlcik7
CisgICAgYXBwbHlJbmhlcml0Q291bnRlcjxSZXNldD4ocHJvcGVydHlDYXNjYWRlKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlclJlc2V0KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJSZXNldChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBs
eVZhbHVlQ291bnRlcjxSZXNldD4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VmFs
dWVDb3VudGVyPFJlc2V0Pihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXJzb3IoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3Vyc29yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmNsZWFyQ3Vyc29yTGlzdCgpOworICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXJz
b3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Q3Vyc29yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNvcihzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmN1cnNvcigpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEN1cnNvckxpc3Qoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5jdXJzb3Jz
KCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEN1cnNvcihwcm9wZXJ0eUNhc2Nh
ZGUucGFyZW50U3R5bGUoKS5jdXJzb3IoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0Q3Vyc29yTGlzdChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5jdXJzb3JzKCkpOwog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXJzb3IoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxl
KCkuY2xlYXJDdXJzb3JMaXN0KCk7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpIHsKICAgICAgICAgQ3Vyc29yVHlwZSBjdXJzb3IgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jdXJzb3Io
KSAhPSBjdXJzb3IpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNv
cihjdXJzb3IpOworICAgICAgICBpZiAocHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY3Vyc29yKCkg
IT0gY3Vyc29yKQorICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q3Vyc29y
KGN1cnNvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEN1cnNvcihDdXJzb3JUeXBlOjpBdXRvKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRDdXJzb3IoQ3Vyc29yVHlwZTo6QXV0byk7CiAgICAgYXV0byYgbGlzdCA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogICAgIGZvciAoYXV0byYgaXRlbSA6IGxpc3Qp
IHsKICAgICAgICAgaWYgKGlzPENTU0N1cnNvckltYWdlVmFsdWU+KGl0ZW0pKSB7CiAgICAgICAg
ICAgICBhdXRvJiBpbWFnZSA9IGRvd25jYXN0PENTU0N1cnNvckltYWdlVmFsdWU+KGl0ZW0uZ2V0
KCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hZGRDdXJzb3Ioc3R5bGVS
ZXNvbHZlci5zdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKKyAgICAgICAgICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmFkZEN1cnNvcihwcm9wZXJ0eUNhc2NhZGUuY3JlYXRl
U3R5bGVJbWFnZShpbWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29y
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CisgICAgICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldEN1cnNvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
aXRlbS5nZXQoKSkpOwogICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGl0ZW0ucHRyKCkgPT0g
bGlzdC5pdGVtKGxpc3QubGVuZ3RoKCkgLSAxKSwgIkN1cnNvciBJRCBmYWxsYmFjayBzaG91bGQg
YWx3YXlzIGJlIGxhc3QgaW4gdGhlIGxpc3QiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGaWxsKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbEZpbGwoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRl
KQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NT
VkdTdHlsZSgpOwotICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRDb2xv
cigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFVyaSgpLCBzdHlsZVJlc29sdmVy
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIHN2Z1N0eWxlLnNldEZpbGxQYWlu
dChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWlu
dFVyaSgpLCBwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHBy
b3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZpbGwoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0RmlsbChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7
Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0
eWxlKCk7Ci0gICAgYXV0byYgc3ZnUGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0
eWxlLmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuZmlsbFBhaW50Q29sb3IoKSwgc3Zn
UGFyZW50U3R5bGUuZmlsbFBhaW50VXJpKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmFj
Y2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnUGFyZW50U3R5bGUgPSBwcm9wZXJ0eUNhc2Nh
ZGUucGFyZW50U3R5bGUoKS5zdmdTdHlsZSgpOworICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChz
dmdQYXJlbnRTdHlsZS5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludENv
bG9yKCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludFVyaSgpLCBwcm9wZXJ0eUNhc2NhZGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogCiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUZpbGwoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRmls
bChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNz
U1ZHU3R5bGUoKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LmFjY2Vzc1NWR1N0eWxlKCk7CiAgICAgY29uc3QgYXV0byogbG9jYWxWYWx1ZSA9IHZhbHVlLmlz
UHJpbWl0aXZlVmFsdWUoKSA/ICZkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpIDog
bnVsbHB0cjsKICAgICBTdHJpbmcgdXJsOwogICAgIGlmICh2YWx1ZS5pc1ZhbHVlTGlzdCgpKSB7
CkBAIC0xMjQyLDMxICsxMjQzLDMxIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUZpbGwoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAgfSBl
bHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lKQogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZH
UGFpbnRUeXBlOjpOb25lIDogU1ZHUGFpbnRUeXBlOjpVUklOb25lOwogICAgIGVsc2UgaWYgKGxv
Y2FsVmFsdWUtPmlzVmFsdWVJRCgpICYmIGxvY2FsVmFsdWUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUN1cnJlbnRjb2xvcikgewotICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Y29sb3IoKTsKKyAgICAgICAgY29sb3IgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5jb2xvcigp
OwogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpDdXJy
ZW50Q29sb3IgOiBTVkdQYWludFR5cGU6OlVSSUN1cnJlbnRDb2xvcjsKICAgICB9IGVsc2Ugewot
ICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKmxv
Y2FsVmFsdWUpOworICAgICAgICBjb2xvciA9IHByb3BlcnR5Q2FzY2FkZS5jb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZSgqbG9jYWxWYWx1ZSk7CiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5
KCkgPyBTVkdQYWludFR5cGU6OlJHQkNvbG9yIDogU1ZHUGFpbnRUeXBlOjpVUklSR0JDb2xvcjsK
ICAgICB9Ci0gICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwg
c3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIHN2Z1N0eWxlLnNldEZp
bGxQYWludChwYWludFR5cGUsIGNvbG9yLCB1cmwsIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgcHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsU3Ryb2tlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFN0cm9rZShTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxl
ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgIHN2Z1N0eWxl
LnNldFN0cm9rZVBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50VXJpKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSgpKTsKKyAgICBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KFNW
R1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsU3Ryb2tlUGFpbnRDb2xvcigpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBh
aW50VXJpKCksIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
cHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U3Ryb2tlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdFN0cm9rZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vz
c1NWR1N0eWxlKCk7Ci0gICAgYXV0byYgc3ZnUGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPnN2Z1N0eWxlKCk7Ci0gICAgc3ZnU3R5bGUuc2V0U3Ryb2tlUGFpbnQoc3Zn
UGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50
Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gcHJvcGVydHlDYXNj
YWRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9
IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgc3ZnU3R5bGUu
c2V0U3Ryb2tlUGFpbnQoc3ZnUGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRUeXBlKCksIHN2Z1BhcmVu
dFN0eWxlLnN0cm9rZVBhaW50Q29sb3IoKSwgc3ZnUGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRVcmko
KSwgcHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBwcm9wZXJ0
eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0
eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CiAgICAgY29uc3QgYXV0
byogbG9jYWxWYWx1ZSA9IHZhbHVlLmlzUHJpbWl0aXZlVmFsdWUoKSA/ICZkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpIDogbnVsbHB0cjsKICAgICBTdHJpbmcgdXJsOwogICAgIGlm
ICh2YWx1ZS5pc1ZhbHVlTGlzdCgpKSB7CkBAIC0xMjg2LDMyICsxMjg3LDMyIEBAIGlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDCiAgICAgfSBlbHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAm
JiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICBwYWludFR5
cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpOb25lIDogU1ZHUGFpbnRUeXBlOjpV
UklOb25lOwogICAgIGVsc2UgaWYgKGxvY2FsVmFsdWUtPmlzVmFsdWVJRCgpICYmIGxvY2FsVmFs
dWUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUN1cnJlbnRjb2xvcikgewotICAgICAgICBjb2xvciA9
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y29sb3IoKTsKKyAgICAgICAgY29sb3IgPSBwcm9wZXJ0
eUNhc2NhZGUuc3R5bGUoKS5jb2xvcigpOwogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0
eSgpID8gU1ZHUGFpbnRUeXBlOjpDdXJyZW50Q29sb3IgOiBTVkdQYWludFR5cGU6OlVSSUN1cnJl
bnRDb2xvcjsKICAgICB9IGVsc2UgewotICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29s
b3JGcm9tUHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOworICAgICAgICBjb2xvciA9IHByb3Bl
cnR5Q2FzY2FkZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqbG9jYWxWYWx1ZSk7CiAgICAgICAg
IHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWludFR5cGU6OlJHQkNvbG9yIDogU1ZH
UGFpbnRUeXBlOjpVUklSR0JDb2xvcjsKICAgICB9Ci0gICAgc3ZnU3R5bGUuc2V0U3Ryb2tlUGFp
bnQocGFpbnRUeXBlLCBjb2xvciwgdXJsLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CisgICAgc3ZnU3R5bGUuc2V0U3Ryb2tlUGFpbnQocGFpbnRUeXBlLCBjb2xvciwgdXJs
LCBwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHByb3BlcnR5
Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvbnRlbnQoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsQ29udGVudChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKKyAgICBwcm9wZXJ0
eUNhc2NhZGUuc3R5bGUoKS5jbGVhckNvbnRlbnQoKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb250ZW50KFN0eWxlUmVzb2x2ZXImKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb250ZW50KFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmKQogewogICAgIC8vIEZJWE1FOiBJbiBDU1MzLCBpdCB3aWxsIGJlIHBvc3Np
YmxlIHRvIGluaGVyaXQgY29udGVudC4gSW4gQ1NTMiBpdCBpcyBub3QuIFRoaXMKICAgICAvLyBu
b3RlIGlzIGEgcmVtaW5kZXIgdGhhdCBldmVudHVhbGx5ICJpbmhlcml0IiBuZWVkcyB0byBiZSBz
dXBwb3J0ZWQuCiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudChTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBjb25zdCBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAg
ICAgICAgIEFTU0VSVF9VTlVTRUQocHJpbWl0aXZlVmFsdWUsIHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb25lKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckNvbnRlbnQo
KTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY2xlYXJDb250ZW50KCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKQEAgLTEzMTksMTcgKzEzMjAsMTcgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLAogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpKSB7CiAgICAgICAgIGlmIChpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtKSkg
ewogICAgICAgICAgICAgaWYgKGlzPENTU0dyYWRpZW50VmFsdWU+KGl0ZW0pKQotICAgICAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoc3R5bGVSZXNvbHZlcikpLCBkaWRTZXQpOworICAgICAgICAg
ICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpLmdyYWRp
ZW50V2l0aFN0eWxlc1Jlc29sdmVkKHByb3BlcnR5Q2FzY2FkZS5zdHlsZVJlc29sdmVyKCkpKSwg
ZGlkU2V0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgp
KSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICB9IGVsc2Ug
aWYgKGlzPENTU0ltYWdlU2V0VmFsdWU+KGl0ZW0pKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBk
aWRTZXQpOworICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChT
dHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzPENTU0ltYWdlVmFsdWU+KGl0
ZW0pKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoU3R5
bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOworICAgICAgICAgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRl
bSksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgY29u
dGludWU7CiAgICAgICAgIH0KQEAgLTEzMzksMjAgKzEzNDAsMjAgQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLAogCiAgICAgICAgIGF1dG8mIGNvbnRlbnRWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAgICAgaWYgKGNvbnRlbnRWYWx1ZS5pc1N0cmlu
ZygpKSB7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoY29u
dGVudFZhbHVlLnN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgcHJv
cGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChjb250ZW50VmFsdWUuc3RyaW5nVmFsdWUo
KS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICB9
IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0F0dHIoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6
IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAg
ICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpO
b25lKQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQXR0ckNv
bnRlbnQoKTsKKyAgICAgICAgICAgIGlmIChwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zdHlsZVR5
cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRIYXNBdHRyQ29udGVudCgpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCkpLT5zZXRIYXNBdHRyQ29udGVudCgpOworICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUmPihwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKSkuc2V0SGFzQXR0ckNvbnRl
bnQoKTsKICAgICAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihudWxsQXRvbSgpLCBjb250ZW50
VmFsdWUuc3RyaW5nVmFsdWUoKS5pbXBsKCksIG51bGxBdG9tKCkpOwotICAgICAgICAgICAgY29u
c3QgQXRvbVN0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+Z2V0QXR0cmli
dXRlKGF0dHIpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50
KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tKCkgOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7Cisg
ICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IHByb3BlcnR5Q2FzY2FkZS5lbGVt
ZW50KCkuZ2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0
eWxlKCkuc2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1w
bCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIC8v
IFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBz
dHlsZS4KLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVy
ZXMoKS5yZWdpc3RlckNvbnRlbnRBdHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CisgICAgICAg
ICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkubXV0YWJsZUZl
YXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAg
ICAgICB9IGVsc2UgaWYgKGNvbnRlbnRWYWx1ZS5pc0NvdW50ZXIoKSkgewogICAgICAgICAgICAg
YXV0byogY291bnRlclZhbHVlID0gY29udGVudFZhbHVlLmNvdW50ZXJWYWx1ZSgpOwogICAgICAg
ICAgICAgTGlzdFN0eWxlVHlwZSBsaXN0U3R5bGVUeXBlID0gTGlzdFN0eWxlVHlwZTo6Tm9uZTsK
QEAgLTEzNjAsMjQgKzEzNjEsMjQgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgICAgICAg
ICAgaWYgKGxpc3RTdHlsZUlkZW50ICE9IENTU1ZhbHVlTm9uZSkKICAgICAgICAgICAgICAgICBs
aXN0U3R5bGVUeXBlID0gc3RhdGljX2Nhc3Q8TGlzdFN0eWxlVHlwZT4obGlzdFN0eWxlSWRlbnQg
LSBDU1NWYWx1ZURpc2MpOwogICAgICAgICAgICAgYXV0byBjb3VudGVyID0gbWFrZVVuaXF1ZTxD
b3VudGVyQ29udGVudD4oY291bnRlclZhbHVlLT5pZGVudGlmaWVyKCksIGxpc3RTdHlsZVR5cGUs
IGNvdW50ZXJWYWx1ZS0+c2VwYXJhdG9yKCkpOwotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRDb250ZW50KFdURk1vdmUoY291bnRlciksIGRpZFNldCk7CisgICAgICAgICAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFdURk1vdmUoY291bnRlciksIGRp
ZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUudmFsdWVJRCgpKSB7CiAgICAgICAgICAgICBj
YXNlIENTU1ZhbHVlT3BlblF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0Q29udGVudChRdW90ZVR5cGU6Ok9wZW5RdW90ZSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFF1b3RlVHlwZTo6T3Bl
blF1b3RlLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlQ2xvc2VRdW90ZToKLSAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVUeXBl
OjpDbG9zZVF1b3RlLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldENvbnRlbnQoUXVvdGVUeXBlOjpDbG9zZVF1b3RlLCBkaWRTZXQpOwogICAgICAg
ICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIENTU1ZhbHVlTm9PcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1b3RlVHlwZTo6Tm9PcGVuUXVvdGUsIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90
ZVR5cGU6Ok5vT3BlblF1b3RlLCBkaWRTZXQpOwogICAgICAgICAgICAgICAgIGRpZFNldCA9IHRy
dWU7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlTm9D
bG9zZVF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29u
dGVudChRdW90ZVR5cGU6Ok5vQ2xvc2VRdW90ZSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBw
cm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFF1b3RlVHlwZTo6Tm9DbG9zZVF1b3Rl
LCBkaWRTZXQpOwogICAgICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgpAQCAtMTM4NywxMjcgKzEzODgsMTI3IEBA
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoIWRpZFNl
dCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckNvbnRlbnQoKTsKKyAgICAg
ICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY2xlYXJDb250ZW50KCk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudENvbW1vbkxpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigp
LnZhcmlhbnRDb21tb25MaWdhdHVyZXMoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0
aW9uKCkudmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoKSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoKSk7Ci0gICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhzdHlsZVJlc29sdmVyLnBh
cmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcygpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLmZvbnREZXNj
cmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVz
KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29tbW9uTGln
YXR1cmVzKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlvbmFyeUxp
Z2F0dXJlcyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudERp
c2NyZXRpb25hcnlMaWdhdHVyZXMoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS52YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKS52YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSk7CisgICAgcHJvcGVydHlD
YXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50
TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVz
Y3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGln
YXR1cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9y
bWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVz
KEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNj
YWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudExpZ2F0
dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudExpZ2F0dXJl
cyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1
ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgYXV0byB2YXJpYW50TGlnYXR1cmVzID0gZXh0cmFjdEZvbnRW
YXJpYW50TGlnYXR1cmVzKHZhbHVlKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENv
bW1vbkxpZ2F0dXJlcyh2YXJpYW50TGlnYXR1cmVzLmNvbW1vbkxpZ2F0dXJlcyk7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKHZhcmlhbnRMaWdh
dHVyZXMuZGlzY3JldGlvbmFyeUxpZ2F0dXJlcyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKHZhcmlhbnRMaWdhdHVyZXMuaGlzdG9yaWNhbExpZ2F0
dXJlcyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRl
cyh2YXJpYW50TGlnYXR1cmVzLmNvbnRleHR1YWxBbHRlcm5hdGVzKTsKLSAgICBzdHlsZVJlc29s
dmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnROdW1lcmljKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2Ny
aXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGaWd1cmUoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlw
dGlvbigpLnZhcmlhbnROdW1lcmljU3BhY2luZygpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlv
bigpLnZhcmlhbnROdW1lcmljRnJhY3Rpb24oKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnROdW1lcmljT3JkaW5hbChzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigp
LnZhcmlhbnROdW1lcmljT3JkaW5hbCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dE51bWVyaWNTbGFzaGVkWmVybyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigp
LnZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNGaWd1cmUocHJvcGVydHlDYXNjYWRlLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljRmlndXJlKCkpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljU3BhY2luZygpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudE51bWVyaWNGcmFjdGlvbihwcm9wZXJ0eUNhc2NhZGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGcmFjdGlvbigpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKS52YXJpYW50TnVtZXJpY09yZGluYWwoKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8ocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oKSk7CisgICAgcHJvcGVydHlD
YXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50
TnVtZXJpYyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9u
ID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoRm9udFZhcmlhbnROdW1lcmljRmlndXJlOjpO
b3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoRm9u
dFZhcmlhbnROdW1lcmljU3BhY2luZzo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNGcmFjdGlvbihGb250VmFyaWFudE51bWVyaWNGcmFjdGlvbjo6Tm9ybWFs
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKEZvbnRWYXJp
YW50TnVtZXJpY09yZGluYWw6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnROdW1lcmljU2xhc2hlZFplcm8oRm9udFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm86Ok5vcm1h
bCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVGb250VmFyaWFudE51bWVyaWMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gcHJvcGVydHlDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1dG8gdmFyaWFu
dE51bWVyaWMgPSBleHRyYWN0Rm9udFZhcmlhbnROdW1lcmljKHZhbHVlKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNGaWd1cmUodmFyaWFudE51bWVyaWMuZmlndXJlKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKHZhcmlhbnROdW1l
cmljLnNwYWNpbmcpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZyYWN0
aW9uKHZhcmlhbnROdW1lcmljLmZyYWN0aW9uKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudE51bWVyaWNPcmRpbmFsKHZhcmlhbnROdW1lcmljLm9yZGluYWwpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKHZhcmlhbnROdW1lcmljLnNsYXNo
ZWRaZXJvKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNh
c2NhZGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnRE
ZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuVmFy
aWFudChzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuV2lk
dGgoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFu
V2lkdGgoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KHN0
eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVhc3RBc2lhblJ1Ynko
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFz
aWFuV2lkdGgocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRF
YXN0QXNpYW5XaWR0aCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
blJ1YnkocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0
QXNpYW5SdWJ5KCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxG
b250VmFyaWFudEVhc3RBc2lhbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNj
cmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLmZv
bnREZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFu
VmFyaWFudChGb250VmFyaWFudEVhc3RBc2lhblZhcmlhbnQ6Ok5vcm1hbCk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5XaWR0aChGb250VmFyaWFudEVhc3RBc2lhbldp
ZHRoOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuUnVi
eShGb250VmFyaWFudEVhc3RBc2lhblJ1Ynk6Ok5vcm1hbCk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
ZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0
eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50
RWFzdEFzaWFuKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50RWFz
dEFzaWFuKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2Fk
ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBhdXRvIHZhcmlhbnRFYXN0QXNpYW4gPSBleHRyYWN0
Rm9udFZhcmlhbnRFYXN0QXNpYW4odmFsdWUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudCh2YXJpYW50RWFzdEFzaWFuLnZhcmlhbnQpOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgodmFyaWFudEVhc3RBc2lhbi53aWR0
aCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KHZhcmlhbnRF
YXN0QXNpYW4ucnVieSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9u
dFNpemUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKTsKLSAgICBmbG9hdCBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1
ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2Fz
Y2FkZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpLCBwcm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQoKSk7CiAKICAgICBpZiAo
c2l6ZSA8IDApCiAgICAgICAgIHJldHVybjsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3
b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVlTWVkaXVtKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
ZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0
eUNhc2NhZGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBwcm9wZXJ0
eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFNpemUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Rm9udFNpemUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlKQogewotICAgIGNvbnN0IGF1dG8mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgY29uc3Qg
YXV0byYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxl
KCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZmxvYXQgc2l6ZSA9IHBhcmVudEZvbnREZXNjcmlw
dGlvbi5zcGVjaWZpZWRTaXplKCk7CiAKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2Fz
Y2FkZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRL
ZXl3b3JkU2l6ZShwYXJlbnRGb250RGVzY3JpcHRpb24ua2V5d29yZFNpemUoKSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7Cisg
ICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Cisg
ICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpOwogfQogCiAvLyBXaGVuIHRoZSBDU1Mga2V5d29yZCAibGFyZ2VyIiBpcyB1c2VkLCB0
aGlzIGZ1bmN0aW9uIHdpbGwgYXR0ZW1wdCB0byBtYXRjaCB3aXRoaW4gdGhlIGtleXdvcmQKQEAg
LTE1MjcsNTkgKzE1MjgsNTMgQEAgaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6c21h
bGxlckZvbnRTaXplKGZsb2F0IHNpemUpCiAgICAgcmV0dXJuIHNpemUgLyAxLjJmOwogfQogCi1p
bmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0
aXBsaWVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgZmxvYXQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjpkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBpZiAoc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5ydWJ5UG9zaXRpb24oKSAhPSBSdWJ5UG9zaXRpb246OkludGVyQ2hhcmFjdGVyKQor
ICAgIGlmIChwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5ydWJ5UG9zaXRpb24oKSAhPSBSdWJ5UG9z
aXRpb246OkludGVyQ2hhcmFjdGVyKQogICAgICAgICByZXR1cm4gMC41ZjsKIAogICAgIC8vIEZJ
WE1FOiBUaGlzIGhhY2sgaXMgdG8gZW5zdXJlIHRvbmUgbWFya3MgYXJlIHRoZSBzYW1lIHNpemUg
YXMKICAgICAvLyB0aGUgYm9wb21vZm8uIFRoaXMgY29kZSB3aWxsIGdvIGF3YXkgaWYgd2UgbWFr
ZSBhIHNwZWNpYWwgcmVuZGVyZXIKICAgICAvLyBmb3IgdGhlIHRvbmUgbWFya3MgZXZlbnR1YWxs
eS4KLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5lbGVtZW50
KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxIVE1M
RWxlbWVudD4oKmVsZW1lbnQpKSB7Ci0gICAgICAgICAgICBpZiAoYW5jZXN0b3IuaGFzVGFnTmFt
ZShIVE1MTmFtZXM6OnJ0VGFnKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMS4wZjsKLSAgICAg
ICAgfQorICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8SFRNTEVsZW1l
bnQ+KHByb3BlcnR5Q2FzY2FkZS5lbGVtZW50KCkpKSB7CisgICAgICAgIGlmIChhbmNlc3Rvci5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6cnRUYWcpKQorICAgICAgICAgICAgcmV0dXJuIDEuMGY7CiAg
ICAgfQogICAgIHJldHVybiAwLjI1ZjsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFN0eWxlKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFs
SXRhbGljKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKEZvbnRDYXNj
YWRlRGVzY3JpcHRpb246OmluaXRpYWxGb250U3R5bGVBeGlzKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJv
cGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRT
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
cHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKHN0
eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuaXRhbGljKCkpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gcHJvcGVydHlDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJdGFsaWMocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLml0
YWxpYygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhwcm9wZXJ0eUNh
c2NhZGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpKTsKKyAgICBwcm9w
ZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTdHls
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U3R5bGUoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byYgZm9udFN0eWxlVmFsdWUgPSBkb3duY2FzdDxDU1NGb250U3R5bGVWYWx1ZT4odmFsdWUpOwot
ICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24o
KTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250RGVzY3Jp
cHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydEZvbnRTdHlsZUZyb21WYWx1ZShmb250U3R5bGVWYWx1ZSkpOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKGZvbnRTdHlsZVZhbHVlLmZvbnRTdHlsZVZh
bHVlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVJdGFsaWMgPyBGb250U3R5bGVBeGlzOjppdGFsIDog
Rm9udFN0eWxlQXhpczo6c2xudCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRp
b24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5
Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKENTU1ZhbHVl
SW52YWxpZCk7CiAKLSAgICBmbG9hdCBwYXJlbnRTaXplID0gMDsKLSAgICBib29sIHBhcmVudElz
QWJzb2x1dGVTaXplID0gZmFsc2U7Ci0gICAgaWYgKGF1dG8qIHBhcmVudFN0eWxlID0gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpKSB7Ci0gICAgICAgIHBhcmVudFNpemUgPSBwYXJlbnRTdHls
ZS0+Zm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOwotICAgICAgICBwYXJlbnRJc0Fi
c29sdXRlU2l6ZSA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKS5pc0Fic29sdXRlU2l6
ZSgpOwotICAgIH0KKyAgICBmbG9hdCBwYXJlbnRTaXplID0gcHJvcGVydHlDYXNjYWRlLnBhcmVu
dFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkuc3BlY2lmaWVkU2l6ZSgpOworICAgIGJvb2wgcGFy
ZW50SXNBYnNvbHV0ZVNpemUgPSBwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKS5pc0Fic29sdXRlU2l6ZSgpOwogCiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGZsb2F0IHNpemU7CkBA
IC0xNTk2LDcgKzE1OTEsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgICAgICBjYXNl
IENTU1ZhbHVlWExhcmdlOgogICAgICAgICBjYXNlIENTU1ZhbHVlWHhMYXJnZToKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFh4eExhcmdlOgotICAgICAgICAgICAgc2l6ZSA9IFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBzaXplID0gU3R5
bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKSwgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkpOwogICAgICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoaWRlbnQpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVMYXJnZXI6CkBAIC0xNjA2LDcgKzE2
MDEsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgICAgICAgICAgc2l6ZSA9IHNtYWxs
ZXJGb250U2l6ZShwYXJlbnRTaXplKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNl
IENTU1ZhbHVlV2Via2l0UnVieVRleHQ6Ci0gICAgICAgICAgICBzaXplID0gZGV0ZXJtaW5lUnVi
eVRleHRTaXplTXVsdGlwbGllcihzdHlsZVJlc29sdmVyKSAqIHBhcmVudFNpemU7CisgICAgICAg
ICAgICBzaXplID0gZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihwcm9wZXJ0eUNhc2Nh
ZGUpICogcGFyZW50U2l6ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTYxNCwxMyArMTYwOSwxMyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLAogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc0Fi
c29sdXRlU2l6ZShwYXJlbnRJc0Fic29sdXRlU2l6ZSB8fCAhKHByaW1pdGl2ZVZhbHVlLmlzUGVy
Y2VudGFnZSgpIHx8IHByaW1pdGl2ZVZhbHVlLmlzRm9udFJlbGF0aXZlTGVuZ3RoKCkpKTsKICAg
ICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIHNpemUg
PSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci5yb290RWxl
bWVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYs
IHRydWUpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRGb250U2l6ZUhh
c1ZpZXdwb3J0VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgo
KSk7CisgICAgICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9h
dD4oQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgmcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxl
KCksICZwcm9wZXJ0eUNhc2NhZGUucm9vdEVsZW1lbnRTdHlsZSgpLCBwcm9wZXJ0eUNhc2NhZGUu
ZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUpKTsKKyAgICAgICAgICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3RhdGUoKS5zZXRGb250U2l6ZUhhc1ZpZXdwb3J0
VW5pdHMocHJpbWl0aXZlVmFsdWUuaXNWaWV3cG9ydFBlcmNlbnRhZ2VMZW5ndGgoKSk7CiAgICAg
ICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAgICAgICAg
ICBzaXplID0gKHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSAqIHBhcmVudFNpemUpIC8gMTAw
LjBmOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0NhbGN1bGF0ZWRQZXJjZW50
YWdlV2l0aExlbmd0aCgpKSB7Ci0gICAgICAgICAgICBjb25zdCBhdXRvJiBjb252ZXJzaW9uRGF0
YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7Ci0g
ICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHBhcmVudENvbnZlcnNpb25EYXRh
IHsgc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLCBjb252ZXJzaW9uRGF0YS5yb290U3R5bGUo
KSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSB9Owor
ICAgICAgICAgICAgY29uc3QgYXV0byYgY29udmVyc2lvbkRhdGEgPSBwcm9wZXJ0eUNhc2NhZGUu
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBwYXJlbnRDb252ZXJzaW9uRGF0YSB7ICZwcm9wZXJ0eUNhc2NhZGUucGFyZW50
U3R5bGUoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCksIHByb3BlcnR5Q2FzY2FkZS5kb2N1
bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSB9OwogICAgICAgICAgICAgc2l6ZSA9IHBy
aW1pdGl2ZVZhbHVlLmNzc0NhbGNWYWx1ZSgpLT5jcmVhdGVDYWxjdWxhdGlvblZhbHVlKHBhcmVu
dENvbnZlcnNpb25EYXRhKS0+ZXZhbHVhdGUocGFyZW50U2l6ZSk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgcmV0dXJuOwpAQCAtMTYyOSwyNSArMTYyNCwyNSBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLAogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHN0ZDo6bWluKG1heGltdW1B
bGxvd2VkRm9udFNpemUsIHNpemUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIHN0ZDo6bWluKG1heGltdW1BbGxvd2VkRm9udFNpemUs
IHNpemUpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBs
YXRlQXJlYXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYShSZW5kZXJTdHlsZTo6aW5p
dGlhbE5hbWVkR3JpZEFyZWEoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1l
ZEdyaWRBcmVhUm93Q291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhQ29sdW1uQ291
bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQoKSk7CisgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYShSZW5kZXJTdHlsZTo6aW5pdGlhbE5h
bWVkR3JpZEFyZWEoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlk
QXJlYVJvd0NvdW50KFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChS
ZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3VudCgpKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVBcmVhcyhTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVBcmVhcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdy
aWRBcmVhKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZEFyZWFSb3dDb3VudCgpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudCgpKTsKKyAgICBwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhKHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRTdHlsZSgpLm5hbWVkR3JpZEFyZWEoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLm5h
bWVkR3JpZEFyZWFSb3dDb3VudCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRO
YW1lZEdyaWRBcmVhQ29sdW1uQ291bnQocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkubmFt
ZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9w
ZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTE2NTcsMTA4ICsxNjUy
LDEwOCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVt
cGxhdGVBcmVhcyhTdHlsZVJlc29sdmVyJiBzdHlsZQogICAgIGF1dG8mIGdyaWRUZW1wbGF0ZUFy
ZWFzVmFsdWUgPSBkb3duY2FzdDxDU1NHcmlkVGVtcGxhdGVBcmVhc1ZhbHVlPih2YWx1ZSk7CiAg
ICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmV3TmFtZWRHcmlkQXJlYXMgPSBncmlkVGVtcGxh
dGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCk7CiAKLSAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1l
ZEdyaWRDb2x1bW5MaW5lcyA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+bmFtZWRHcmlkQ29sdW1u
TGluZXMoKTsKLSAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1lZEdyaWRSb3dMaW5lcyA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+bmFtZWRHcmlkUm93TGluZXMoKTsKKyAgICBOYW1lZEdyaWRMaW5l
c01hcCBuYW1lZEdyaWRDb2x1bW5MaW5lcyA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLm5hbWVk
R3JpZENvbHVtbkxpbmVzKCk7CisgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGlu
ZXMgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5lcygpOwogICAgIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21Hcmlk
QXJlYShuZXdOYW1lZEdyaWRBcmVhcywgbmFtZWRHcmlkQ29sdW1uTGluZXMsIEZvckNvbHVtbnMp
OwogICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5l
c0Zyb21HcmlkQXJlYShuZXdOYW1lZEdyaWRBcmVhcywgbmFtZWRHcmlkUm93TGluZXMsIEZvclJv
d3MpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQ29sdW1uTGluZXMo
bmFtZWRHcmlkQ29sdW1uTGluZXMpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFt
ZWRHcmlkUm93TGluZXMobmFtZWRHcmlkUm93TGluZXMpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5hbWVkR3JpZENvbHVtbkxpbmVzKTsKKyAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRS
b3dMaW5lcyk7CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEo
Z3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVl
LnJvd0NvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJl
YUNvbHVtbkNvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYShncmlkVGVtcGxhdGVBcmVh
c1ZhbHVlLmdyaWRBcmVhTWFwKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5h
bWVkR3JpZEFyZWFSb3dDb3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLnJvd0NvdW50KCkpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChn
cmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNvbHVtbkNvdW50KCkpOwogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRHcmlkQ29s
dW1ucyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRDb2x1bW5zKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxO
YW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE9y
ZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE9yZGVyZWROYW1l
ZEdyaWRDb2x1bW5MaW5lcygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRHcmlk
Q29sdW1ucyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRDb2x1bW5zKCkpOworICAgIHByb3BlcnR5
Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKFJlbmRlclN0eWxlOjppbml0
aWFsTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0T3JkZXJlZE5hbWVkR3JpZENvbHVtbkxpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJl
ZE5hbWVkR3JpZENvbHVtbkxpbmVzKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
R3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRHcmlkQ29sdW1ucyhzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCktPmdyaWRDb2x1bW5zKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0TmFtZWRHcmlkQ29sdW1uTGluZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5uYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPm9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRHcmlkQ29sdW1ucyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5ncmlk
Q29sdW1ucygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1
bW5MaW5lcyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRDb2x1bW5MaW5l
cygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkQ29s
dW1uTGluZXMocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkub3JkZXJlZE5hbWVkR3JpZENv
bHVtbkxpbmVzKCkpOwogfQogCiAjZGVmaW5lIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBz
dHlsZSwgVHJhY2tUeXBlKSBcCi0gICAgc3R5bGUtPnNldEdyaWQjI1RyYWNrVHlwZSMjcyh0cmFj
a3NEYXRhLm1fdHJhY2tTaXplcyk7IFwKLSAgICBzdHlsZS0+c2V0TmFtZWRHcmlkIyNUcmFja1R5
cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9uYW1lZEdyaWRMaW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0
T3JkZXJlZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fb3JkZXJlZE5h
bWVkR3JpZExpbmVzKTsgXAotICAgIHN0eWxlLT5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBl
IyNzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcyk7IFwKLSAgICBzdHlsZS0+c2V0
R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjc0luc2VydGlvblBvaW50KHRyYWNrc0RhdGEubV9h
dXRvUmVwZWF0SW5zZXJ0aW9uUG9pbnQpOyBcCi0gICAgc3R5bGUtPnNldEF1dG9SZXBlYXROYW1l
ZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXROYW1lZEdyaWRM
aW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0QXV0b1JlcGVhdE9yZGVyZWROYW1lZEdyaWQjI1RyYWNr
VHlwZSMjTGluZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkTGluZXMp
OyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3NUeXBlKHRyYWNr
c0RhdGEubV9hdXRvUmVwZWF0VHlwZSk7IFwKLSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQj
I1RyYWNrVHlwZSMjc0luc2VydGlvblBvaW50KHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0SW5zZXJ0
aW9uUG9pbnQpOwotCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVH
cmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKKyAgICBzdHlsZS5zZXRHcmlkIyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX3Ry
YWNrU2l6ZXMpOyBcCisgICAgc3R5bGUuc2V0TmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRy
YWNrc0RhdGEubV9uYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRPcmRlcmVkTmFtZWRH
cmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9vcmRlcmVkTmFtZWRHcmlkTGluZXMp
OyBcCisgICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjcyh0cmFja3NEYXRh
Lm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMpOyBcCisgICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQj
I1RyYWNrVHlwZSMjc0luc2VydGlvblBvaW50KHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0SW5zZXJ0
aW9uUG9pbnQpOyBcCisgICAgc3R5bGUuc2V0QXV0b1JlcGVhdE5hbWVkR3JpZCMjVHJhY2tUeXBl
IyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdE5hbWVkR3JpZExpbmVzKTsgXAorICAgIHN0
eWxlLnNldEF1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNr
c0RhdGEubV9hdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3JpZExpbmVzKTsgXAorICAgIHN0eWxlLnNl
dEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3NUeXBlKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0
VHlwZSk7IFwKKyAgICBzdHlsZS5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0
aW9uUG9pbnQodHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRJbnNlcnRpb25Qb2ludCk7CisKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUNvbHVtbnMo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpUcmFja3NEYXRhIHRyYWNrc0RhdGE7Ci0g
ICAgaWYgKCFTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUs
IHRyYWNrc0RhdGEsIHN0eWxlUmVzb2x2ZXIpKQorICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja3NEYXRhLCBwcm9wZXJ0eUNhc2Nh
ZGUpKQogICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRH
cmlkQXJlYXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZEFyZWEoKTsKKyAgICBj
b25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1lZEdyaWRBcmVhcyA9IHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLm5hbWVkR3JpZEFyZWEoKTsKICAgICBpZiAoIW5hbWVkR3JpZEFyZWFzLmlzRW1wdHko
KSkKICAgICAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3Jp
ZExpbmVzRnJvbUdyaWRBcmVhKG5hbWVkR3JpZEFyZWFzLCB0cmFja3NEYXRhLm1fbmFtZWRHcmlk
TGluZXMsIEZvckNvbHVtbnMpOwogCi0gICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKSwgQ29sdW1uKTsKKyAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tz
RGF0YSwgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCksIENvbHVtbik7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlUm93cyhTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEdyaWRSb3dzKFJl
bmRlclN0eWxlOjppbml0aWFsR3JpZFJvd3MoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZFJvd0xp
bmVzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3JkZXJlZE5hbWVkR3JpZFJv
d0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEdyaWRSb3dzKFJlbmRlclN0eWxlOjppbml0
aWFsR3JpZFJvd3MoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlk
Um93TGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBw
cm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoUmVuZGVy
U3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyhTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVSb3dzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHBy
b3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEdyaWRSb3dz
KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Z3JpZFJvd3MoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRSb3dMaW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPm5hbWVkR3JpZFJvd0xpbmVzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0T3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
b3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldEdyaWRSb3dzKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmdyaWRSb3dzKCkpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZFJvd0xpbmVzKHByb3BlcnR5
Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLm5hbWVkR3JpZFJvd0xpbmVzKCkpOworICAgIHByb3BlcnR5
Q2FzY2FkZS5zdHlsZSgpLnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhwcm9wZXJ0eUNhc2Nh
ZGUucGFyZW50U3R5bGUoKS5vcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZVJvd3MoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlUm93cyhTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OlRyYWNrc0RhdGEgdHJhY2tzRGF0YTsKLSAgICBpZiAoIVN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0
YSwgc3R5bGVSZXNvbHZlcikpCisgICAgaWYgKCFTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0
ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIHByb3BlcnR5Q2FzY2FkZSkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1lZEdyaWRBcmVhcyA9
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgpOworICAgIGNvbnN0IE5hbWVk
R3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkubmFt
ZWRHcmlkQXJlYSgpOwogICAgIGlmICghbmFtZWRHcmlkQXJlYXMuaXNFbXB0eSgpKQogICAgICAg
ICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9t
R3JpZEFyZWEobmFtZWRHcmlkQXJlYXMsIHRyYWNrc0RhdGEubV9uYW1lZEdyaWRMaW5lcywgRm9y
Um93cyk7CiAKLSAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLCBSb3cpOworICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKSwgUm93KTsKIH0KIAotdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVBbHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVBbHQoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS5pc1N0cmluZygpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldENvbnRlbnRBbHRUZXh0KHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCkpOworICAg
ICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dChwcmltaXRpdmVW
YWx1ZS5zdHJpbmdWYWx1ZSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0F0dHIo
KSkgewogICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNwZWNpZmllZCBmb3Ig
YW4gYXR0cihmb28pPwotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VW5pcXVlKCk7CisgICAgICAgIGlmIChwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zdHls
ZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldFVuaXF1ZSgpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjb25zdF9jYXN0
PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0VW5pcXVlKCk7
CisgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4ocHJvcGVydHlDYXNjYWRlLnBh
cmVudFN0eWxlKCkpLnNldFVuaXF1ZSgpOwogCiAgICAgICAgIFF1YWxpZmllZE5hbWUgYXR0cihu
dWxsQXRvbSgpLCBwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpLCBudWxsQXRvbSgpKTsKLSAg
ICAgICAgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUgPSBzdHlsZVJlc29sdmVyLmVsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlKGF0dHIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENv
bnRlbnRBbHRUZXh0KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tKCkgOiB2YWx1ZSk7CisgICAg
ICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gcHJvcGVydHlDYXNjYWRlLmVsZW1lbnQoKS5n
ZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENv
bnRlbnRBbHRUZXh0KHZhbHVlLmlzTnVsbCgpID8gZW1wdHlBdG9tKCkgOiB2YWx1ZSk7CiAKICAg
ICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRlIHZhbHVlIGFmZmVj
dHMgdGhlIHN0eWxlLgotICAgICAgICBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkubXV0YWJsZUZl
YXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOworICAg
ICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnJ1bGVTZXRzKCkubXV0YWJsZUZl
YXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwogICAg
IH0gZWxzZQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnRBbHRUZXh0
KGVtcHR5QXRvbSgpKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVu
dEFsdFRleHQoZW1wdHlBdG9tKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZVdpbGxDaGFuZ2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsK
ICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJ
RCgpID09IENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
V2lsbENoYW5nZShudWxscHRyKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0
V2lsbENoYW5nZShudWxscHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTc4MCw1
NSArMTc3NSw1NSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVX
aWxsQ2hhbmdlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRXaWxsQ2hh
bmdlKFdURk1vdmUod2lsbENoYW5nZSkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dFdpbGxDaGFuZ2UoV1RGTW92ZSh3aWxsQ2hhbmdlKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRoKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5
Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0U3Ryb2tlV2lkdGgoU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBs
aWNpdGx5U2V0U3Ryb2tlV2lkdGgodHJ1ZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0U3Ryb2tlV2lkdGgoU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKHByb3Bl
cnR5Q2FzY2FkZSwgdmFsdWUpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRIYXNF
eHBsaWNpdGx5U2V0U3Ryb2tlV2lkdGgodHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZUNvbG9yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVN0cm9rZUNvbG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBpZiAoc3R5bGVSZXNvbHZlci5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRTdHJva2VDb2xvcihzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyBmYWxzZSkpOwotICAgIGlmIChz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKLSAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRWaXNpdGVkTGlua1N0cm9rZUNvbG9yKHN0eWxlUmVz
b2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0
ZWRMaW5rICovIHRydWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxp
Y2l0bHlTZXRTdHJva2VDb2xvcih0cnVlKTsKKyAgICBpZiAocHJvcGVydHlDYXNjYWRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQorICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRTdHJva2VDb2xvcihwcm9wZXJ0eUNhc2NhZGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
cHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIGZhbHNlKSk7CisgICAgaWYgKHBy
b3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCisgICAgICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3IocHJvcGVy
dHlDYXNjYWRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JW
aXNpdGVkTGluayAqLyB0cnVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFz
RXhwbGljaXRseVNldFN0cm9rZUNvbG9yKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJl
ZCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVy
ZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7CiAgICAgaWYgKHJlZ2lzdGVyZWQgJiYgcmVn
aXN0ZXJlZC0+aW5pdGlhbFZhbHVlKCkpIHsKICAgICAgICAgYXV0byBpbml0aWFsVmFsdWUgPSBy
ZWdpc3RlcmVkLT5pbml0aWFsVmFsdWVDb3B5KCk7Ci0gICAgICAgIGFwcGx5VmFsdWVDdXN0b21Q
cm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCAqaW5pdGlhbFZhbHVlKTsKKyAgICAg
ICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHByb3BlcnR5Q2FzY2FkZSwgcmVnaXN0ZXJlZCwg
KmluaXRpYWxWYWx1ZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBhdXRvIGludmFs
aWQgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVVbnJlc29sdmVkKG5hbWUsIENTU1Zh
bHVlSW52YWxpZCk7Ci0gICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIs
IHJlZ2lzdGVyZWQsIGludmFsaWQuZ2V0KCkpOworICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0
eShwcm9wZXJ0eUNhc2NhZGUsIHJlZ2lzdGVyZWQsIGludmFsaWQuZ2V0KCkpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9w
ZXJ0eSogcmVnaXN0ZXJlZCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVydHkoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJv
cGVydHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCiB7Ci0gICAgYXV0byog
cGFyZW50VmFsdWUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPmluaGVyaXRlZEN1c3RvbVByb3BlcnRpZXMoKS5nZXQobmFtZSkgOiBu
dWxscHRyOworICAgIGF1dG8qIHBhcmVudFZhbHVlID0gcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0
eWxlKCkuaW5oZXJpdGVkQ3VzdG9tUHJvcGVydGllcygpLmdldChuYW1lKTsKICAgICBpZiAocGFy
ZW50VmFsdWUgJiYgIShyZWdpc3RlcmVkICYmICFyZWdpc3RlcmVkLT5pbmhlcml0cykpCi0gICAg
ICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCAq
cGFyZW50VmFsdWUpOworICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkocHJvcGVydHlD
YXNjYWRlLCByZWdpc3RlcmVkLCAqcGFyZW50VmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgYXBw
bHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgbmFtZSk7
CisgICAgICAgIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KHByb3BlcnR5Q2FzY2FkZSwgcmVn
aXN0ZXJlZCwgbmFtZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUN1c3RvbVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0
IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgQ1NTQ3VzdG9tUHJvcGVy
dHlWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVDdXN0b21Qcm9wZXJ0eShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUs
IGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgQ1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZhbHVlLmlzUmVzb2x2ZWQoKSk7
CiAgICAgY29uc3QgYXV0byYgbmFtZSA9IHZhbHVlLm5hbWUoKTsKIAogICAgIGlmICghcmVnaXN0
ZXJlZCB8fCByZWdpc3RlcmVkLT5pbmhlcml0cykKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRJbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIG1ha2VSZWYodmFsdWUp
KTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SW5oZXJpdGVkQ3VzdG9tUHJv
cGVydHlWYWx1ZShuYW1lLCBtYWtlUmVmKHZhbHVlKSk7CiAgICAgZWxzZQotICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldE5vbkluaGVyaXRlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFt
ZSwgbWFrZVJlZih2YWx1ZSkpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRO
b25Jbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CmluZGV4IGY2YzdmZmEwYjgwLi45MTBhODdkZjkzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJl
c29sdmVyLmNwcApAQCAtOTgsNiArOTgsNyBAQAogI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1h
Z2UuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnRpZXMuaCIKICNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlRm9yRG9jdW1lbnQuaCIKICNp
bmNsdWRlICJTdHlsZVJ1bGUuaCIKICNpbmNsdWRlICJTdHlsZVNoZWV0Q29udGVudHMuaCIKICNp
bmNsdWRlICJUcmFuc2Zvcm1GdW5jdGlvbnMuaCIKQEAgLTE0Myw3ICsxNDQsNiBAQCBTdHlsZVJl
c29sdmVyOjpTdHlsZVJlc29sdmVyKERvY3VtZW50JiBkb2N1bWVudCkKICNpZiBFTkFCTEUoQ1NT
X0RFVklDRV9BREFQVEFUSU9OKQogICAgICwgbV92aWV3cG9ydFN0eWxlUmVzb2x2ZXIoVmlld3Bv
cnRTdHlsZVJlc29sdmVyOjpjcmVhdGUoJmRvY3VtZW50KSkKICNlbmRpZgotICAgICwgbV9zdHls
ZU1hcCh0aGlzKQogICAgICwgbV9tYXRjaEF1dGhvckFuZFVzZXJTdHlsZXMobV9kb2N1bWVudC5z
ZXR0aW5ncygpLmF1dGhvckFuZFVzZXJTdHlsZXNFbmFibGVkKCkpCiB7CiAgICAgRWxlbWVudCog
cm9vdCA9IG1fZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KCk7CkBAIC0yNTcsNiArMjU3LDkgQEAg
U3R5bGVSZXNvbHZlcjo6U3RhdGU6OlN0YXRlKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0
IFJlbmRlclN0eWxlKiBwYXJlbnRTdHkKICAgICBlbHNlCiAgICAgICAgIG1fcm9vdEVsZW1lbnRT
dHlsZSA9IGRvY3VtZW50RWxlbWVudFN0eWxlID8gZG9jdW1lbnRFbGVtZW50U3R5bGUgOiBkb2N1
bWVudEVsZW1lbnQtPnJlbmRlclN0eWxlKCk7CiAKKyAgICBpZiAoIW1fcm9vdEVsZW1lbnRTdHls
ZSkKKyAgICAgICAgbV9yb290RWxlbWVudFN0eWxlID0gJlJlbmRlclN0eWxlOjpkZWZhdWx0U3R5
bGUoKTsKKwogICAgIHVwZGF0ZUNvbnZlcnNpb25EYXRhKCk7CiB9CiAKQEAgLTM2OSw3ICszNzIs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMo
Zmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsK
KyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5n
IGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTM3Nyw3ICszODAsNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3Qg
UmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0
eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBh
IHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUp
OwogCiAgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCkBAIC01NjksNyAr
NTcyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3Vy
IGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAg
IHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICBjYXNjYWRlLmFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOwpAQCAtMTE1NiwxMiArMTE1OSwxMiBAQCBzdGF0aWMgdm9p
ZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBzdHls
ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQogewotICAgIGlmICghbV9z
dGF0ZS5mb250RGlydHkoKSkKKyAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRlLnN0eWxlKCk7Cisg
ICAgaWYgKCFjYXNjYWRlLmZvbnREaXJ0eSgpICYmIHN0eWxlLmZvbnRDYXNjYWRlKCkuZm9udHMo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3R5bGUgPSAqbV9zdGF0ZS5zdHlsZSgp
OwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgY2hlY2tGb3JUZXh0U2l6ZUFkanVz
dChzdHlsZSk7CiAjZW5kaWYKQEAgLTExNzEsNyArMTE3NCw4IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6dXBkYXRlRm9udCgpCiAgICAgc3R5bGUuZm9udENhc2NhZGUoKS51cGRhdGUoJmRvY3VtZW50
KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIGlmIChtX3N0YXRlLmZvbnRTaXplSGFzVmlld3BvcnRV
bml0cygpKQogICAgICAgICBzdHlsZS5zZXRIYXNWaWV3cG9ydFVuaXRzKHRydWUpOwotICAgIG1f
c3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKKworICAgIGNhc2NhZGUuY2xlYXJGb250RGlydHko
KTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1
bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5j
bHVkZSkKQEAgLTEzMzgsNyArMTM0Miw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRj
aGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAg
ICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJp
b3JpdHlQcm9wZXJ0eSk7CiAKICAgICAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVw
ZGF0ZSBpdCBub3cuCi0gICAgICAgIHVwZGF0ZUZvbnQoKTsKKyAgICAgICAgdXBkYXRlRm9udChj
YXNjYWRlKTsKIAogICAgICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3Bl
cnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICAgICAgY2FzY2FkZS5hcHBseUN1
c3RvbVByb3BlcnRpZXMoKTsKQEAgLTEzNjUsNyArMTM2OSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZl
cjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQs
IGNvbnN0CiAgICAgICAgIHJldHVybiBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0
LCBlbGVtZW50LCBEb05vdFVzZU1hdGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCiAgICAgLy8gSWYg
b3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOwor
ICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAvLyBJZiB0aGUgZm9udCBjaGFuZ2VkLCB3
ZSBjYW4ndCB1c2UgdGhlIG1hdGNoZWQgcHJvcGVydGllcyBjYWNoZS4gU3RhcnQgb3Zlci4KICAg
ICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlv
bigpICE9IHN0YXRlLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpKQpAQCAtMTM4MSw3ICsxMzg1
LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1h
dGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAvLyBzbyB0byBwcmVzZXJ2ZSBiZWhh
dmlvciwgd2UgcXVldWUgdGhlbSB1cCBkdXJpbmcgY2FzY2FkZSBhbmQgZmx1c2ggaGVyZS4KICAg
ICBjYXNjYWRlLmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7CiAKLSAgICBBU1NFUlQoIXN0YXRl
LmZvbnREaXJ0eSgpKTsKKyAgICBBU1NFUlQoIWNhc2NhZGUuZm9udERpcnR5KCkpOwogCiAgICAg
aWYgKGNhY2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CkBAIC0xNDAyLDEw
ICsxNDA2LDkgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5
bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUqIHZhbHUKIHsKICAgICBpZiAoIXZhbHVlKQog
ICAgICAgICByZXR1cm47Ci0gICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7Ci0gICAgU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBp
ZiAodmFsdWUpCi0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShpZCwgKnZhbHVlKTsKKyAg
ICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUoKnRoaXMsIHsgfSwgeyB9KTsKKyAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydHkoaWQsICp2YWx1ZSk7CisgICAgdXBkYXRlRm9udChjYXNjYWRl
KTsKIH0KIAogLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFy
ZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKQEAgLTE1MTYs
NyArMTUxOSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVN
ZWRpdW0pOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5z
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7Ci0gICAgc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgc3R5bGUoKS0+c2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNTdjOThhMTUyYTUu
LjYxYzg0Njc5ZmYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTE2MCw3ICsx
NjAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0
eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAgIHZvaWQg
YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVlKik7CiAK
LSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnQoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgpOwogCiAgICAgdm9p
ZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CkBAIC0y
NDUsMTMgKzI0NSw2IEBAIHB1YmxpYzoKIAogICAgICAgICBJbnNpZGVMaW5rIGVsZW1lbnRMaW5r
U3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRMaW5rU3RhdGU7IH0KIAotICAgICAgICB2
b2lkIHNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgPSBpc0FwcGx5OyB9Ci0gICAgICAgIHZvaWQgc2V0QXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShib29sIGlzQXBwbHkpIHsgbV9hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlID0gaXNBcHBseTsgfQotICAgICAgICBib29sIGFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlOyB9Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZTsgfQot
Ci0gICAgICAgIHZvaWQgc2V0Rm9udERpcnR5KGJvb2wgaXNEaXJ0eSkgeyBtX2ZvbnREaXJ0eSA9
IGlzRGlydHk7IH0KLSAgICAgICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2Zv
bnREaXJ0eTsgfQogICAgICAgICB2b2lkIHNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhib29s
IGhhc1ZpZXdwb3J0VW5pdHMpIHsgbV9mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMgPSBoYXNWaWV3
cG9ydFVuaXRzOyB9CiAgICAgICAgIGJvb2wgZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKCkgY29u
c3QgeyByZXR1cm4gbV9mb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHM7IH0KIApAQCAtMjYxLDIzICsy
NTQsMTAgQEAgcHVibGljOgogICAgICAgICBGaWxsTGF5ZXIgYmFja2dyb3VuZERhdGEoKSBjb25z
dCB7IHJldHVybiBtX2JhY2tncm91bmREYXRhOyB9CiAgICAgICAgIGNvbnN0IENvbG9yJiBiYWNr
Z3JvdW5kQ29sb3IoKSBjb25zdCB7IHJldHVybiBtX2JhY2tncm91bmRDb2xvcjsgfQogCi0gICAg
ICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIG1fc3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIGNvbnN0IEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50
U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0
aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9mb250RGly
dHkgfD0gbV9zdHlsZS0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7IH0KLSAgICAgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9z
dHlsZS0+c2V0Wm9vbShmKTsgfQotICAgICAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQg
ZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0gICAg
ICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9mb250
RGlydHkgfD0gbV9zdHlsZS0+c2V0V3JpdGluZ01vZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgICAg
IHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24p
IHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRh
dGlvbik7IH0KLQogICAgICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudCAmJiBtX2VsZW1lbnQtPmlzU1ZHRWxlbWVudCgpOyB9CiAKICAgICAgICAgY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQogCi0gICAgICAg
IFN0eWxlOjpDYXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsKCkgY29uc3QgeyByZXR1cm4gbV9jYXNj
YWRlTGV2ZWw7IH0KLSAgICAgICAgdm9pZCBzZXRDYXNjYWRlTGV2ZWwoU3R5bGU6OkNhc2NhZGVM
ZXZlbCBsZXZlbCkgeyBtX2Nhc2NhZGVMZXZlbCA9IGxldmVsOyB9Ci0gICAgICAgIFN0eWxlOjpT
Y29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2Nv
cGVPcmRpbmFsOyB9Ci0gICAgICAgIHZvaWQgc2V0U3R5bGVTY29wZU9yZGluYWwoU3R5bGU6OlNj
b3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCkgeyBtX3N0eWxlU2NvcGVPcmRpbmFsID0gc3R5
bGVTY29wZU9yZGluYWw7IH0KLQogICAgICAgICBjb25zdCBTZWxlY3RvckZpbHRlciogc2VsZWN0
b3JGaWx0ZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdG9yRmlsdGVyOyB9CiAgICAgICAgIAog
ICAgIHByaXZhdGU6CkBAIC0yOTcsMTQgKzI3Nyw4IEBAIHB1YmxpYzoKIAogICAgICAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKIAotICAg
ICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIG1fc3R5bGVTY29wZU9yZGluYWwgeyBTdHlsZTo6U2Nv
cGVPcmRpbmFsOjpFbGVtZW50IH07Ci0KICAgICAgICAgSW5zaWRlTGluayBtX2VsZW1lbnRMaW5r
U3RhdGUgeyBJbnNpZGVMaW5rOjpOb3RJbnNpZGUgfTsKLSAgICAgICAgU3R5bGU6OkNhc2NhZGVM
ZXZlbCBtX2Nhc2NhZGVMZXZlbCB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCB9Owog
Ci0gICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgeyB0cnVlIH07Ci0g
ICAgICAgIGJvb2wgbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlIHsgZmFsc2UgfTsK
LSAgICAgICAgYm9vbCBtX2ZvbnREaXJ0eSB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9mb250
U2l6ZUhhc1ZpZXdwb3J0VW5pdHMgeyBmYWxzZSB9OwogICAgICAgICBib29sIG1faGFzVUFBcHBl
YXJhbmNlIHsgZmFsc2UgfTsKICAgICB9OwpAQCAtMzE0LDE4ICsyODgsNyBAQCBwdWJsaWM6CiAK
ICAgICBSZWZQdHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogCi0gICAgYm9v
bCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpOyB9Ci0gICAgYm9vbCBhcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9W
aXNpdGVkTGlua1N0eWxlKCk7IH0KLQotICAgIENTU1RvU3R5bGVNYXAqIHN0eWxlTWFwKCkgeyBy
ZXR1cm4gJm1fc3R5bGVNYXA7IH0KICAgICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzJiBpbnNwZWN0
b3JDU1NPTVdyYXBwZXJzKCkgeyByZXR1cm4gbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOyB9Ci0g
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gbV9zdGF0ZS5mb250RGVzY3JpcHRpb24oKTsgfQotICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiYgZm9udERlc2NyaXB0aW9uKSB7IG1fc3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7IH0KLSAgICB2b2lkIHNldFpvb20oZmxv
YXQgZikgeyBtX3N0YXRlLnNldFpvb20oZik7IH0KLSAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20o
ZmxvYXQgZikgeyBtX3N0YXRlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICB2b2lkIHNldFdy
aXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fc3RhdGUuc2V0V3JpdGluZ01v
ZGUod3JpdGluZ01vZGUpOyB9Ci0gICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVu
dGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX3N0YXRlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0
T3JpZW50YXRpb24pOyB9CiAKICAgICBib29sIGFkanVzdFJlbmRlclN0eWxlRm9yVGV4dEF1dG9z
aXppbmcoUmVuZGVyU3R5bGUmLCBjb25zdCBFbGVtZW50Jik7CiAKQEAgLTM4MCw3ICszNDMsNiBA
QCBwcml2YXRlOgogICAgIFJlZlB0cjxWaWV3cG9ydFN0eWxlUmVzb2x2ZXI+IG1fdmlld3BvcnRT
dHlsZVJlc29sdmVyOwogI2VuZGlmCiAKLSAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiAg
ICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7CiAKICAg
ICBTdGF0ZSBtX3N0YXRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9w
LnBsIGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCmluZGV4IGJlZGI4MjRlYTBjLi41
NzQ5OGVmNWM0NyAxMDA3NTUKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbApAQCAtNTc5LDIxICs1NzksMjEgQEAg
c3ViIGdldEF1dG9HZXR0ZXIgewogICBteSAkbmFtZSA9IHNoaWZ0OwogICBteSAkcmVuZGVyU3R5
bGUgPSBzaGlmdDsKIAotICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi0+aGFzQXV0byIgLiBnZXRO
YW1lRm9yTWV0aG9kcygkbmFtZSkgLiAiKCkiOworICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi5o
YXNBdXRvIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CiB9CiAKIHN1YiBnZXRB
dXRvU2V0dGVyIHsKICAgbXkgJG5hbWUgPSBzaGlmdDsKICAgbXkgJHJlbmRlclN0eWxlID0gc2hp
ZnQ7CiAKLSAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICItPnNldEhhc0F1dG8iIC4gZ2V0TmFtZUZv
ck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKKyAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICIuc2V0SGFz
QXV0byIgLiBnZXROYW1lRm9yTWV0aG9kcygkbmFtZSkgLiAiKCkiOwogfQogCiBzdWIgZ2V0Vmlz
aXRlZExpbmtTZXR0ZXIgewogICBteSAkbmFtZSA9IHNoaWZ0OwogICBteSAkcmVuZGVyU3R5bGUg
PSBzaGlmdDsKIAotICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi0+c2V0VmlzaXRlZExpbmsiIC4g
Z2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpOworICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi5zZXRW
aXNpdGVkTGluayIgLiBnZXROYW1lRm9yTWV0aG9kcygkbmFtZSk7CiB9CiAKIHN1YiBnZXRDbGVh
ckZ1bmN0aW9uIHsKQEAgLTY5OSw3ICs2OTksNyBAQCBzdWIgY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUgewogICBteSAkcHJpbWl0aXZlVmFsdWUgPSBzaGlmdDsKICAgbXkgJGZvclZpc2l0ZWRMaW5r
ID0gQF8gPyBzaGlmdCA6IE5PVF9GT1JfVklTSVRFRF9MSU5LOwogCi0gIHJldHVybiAic3R5bGVS
ZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgiIC4gJHByaW1pdGl2ZVZhbHVlIC4gIiwg
LyogZm9yVmlzaXRlZExpbmsgKi8gIiAuICgkZm9yVmlzaXRlZExpbmsgPyAidHJ1ZSIgOiAiZmFs
c2UiKSAuICIpIjsKKyAgcmV0dXJuICJwcm9wZXJ0eUNhc2NhZGUuY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoIiAuICRwcmltaXRpdmVWYWx1ZSAuICIsIC8qIGZvclZpc2l0ZWRMaW5rICovICIgLiAo
JGZvclZpc2l0ZWRMaW5rID8gInRydWUiIDogImZhbHNlIikgLiAiKSI7CiB9CiAKIHVzZSBjb25z
dGFudCB7CkBAIC03MTMsMTIgKzcxMywxMiBAQCBzdWIgZ2VuZXJhdGVDb2xvclZhbHVlU2V0dGVy
IHsKICAgbXkgJGluZGVudCA9IHNoaWZ0OwogICBteSAkdmFsdWVJc1ByaW1pdGl2ZSA9IEBfID8g
c2hpZnQgOiBWQUxVRV9JU19DT0xPUjsKIAotICBteSAkc3R5bGUgPSAic3R5bGVSZXNvbHZlci5z
dHlsZSgpIjsKLSAgbXkgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNv
bHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSlcbiI7Ci0gIG15ICRzZXRWYWx1ZSA9
ICRzdHlsZSAuICItPiIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic2V0dGVyIn07CisgIG15ICRzdHlsZSA9ICJwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSI7Cisg
IG15ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiaWYgKHByb3BlcnR5Q2FzY2FkZS5hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSlcbiI7CisgIG15ICRzZXRWYWx1ZSA9ICRzdHlsZSAu
ICIuIiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIi
fTsKICAgbXkgJGNvbG9yID0gJHZhbHVlSXNQcmltaXRpdmUgPyBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZSgkdmFsdWUpIDogJHZhbHVlOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAiIC4gJHNldFZhbHVlIC4gIigiIC4gJGNvbG9yIC4gIik7XG4iOwotICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImlmIChzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSlcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiaWYgKHByb3Bl
cnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpXG4iOwogICAkY29s
b3IgPSAkdmFsdWVJc1ByaW1pdGl2ZSA/IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCR2YWx1ZSwg
Rk9SX1ZJU0lURURfTElOSykgOiAkdmFsdWU7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICIgLiBnZXRWaXNpdGVkTGlua1NldHRlcigkbmFtZSwgJHN0eWxlKSAuICIoIiAuICRj
b2xvciAuICIpO1xuIjsKIApAQCAtNzMxLDcgKzczMSw3IEBAIHN1YiBoYW5kbGVDdXJyZW50Q29s
b3JWYWx1ZSB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkY29kZSA9ICRpbmRlbnQg
LiAiaWYgKCIgLiAkcHJpbWl0aXZlVmFsdWUgLiAiLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUN1cnJl
bnRjb2xvcikge1xuIjsKLSAgJGNvZGUgLj0gJGluZGVudCAuICIgICAgYXBwbHlJbmhlcml0IiAu
ICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIpO1xuIjsKKyAgJGNvZGUgLj0gJGlu
ZGVudCAuICIgICAgYXBwbHlJbmhlcml0IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHByb3BlcnR5
Q2FzY2FkZSk7XG4iOwogICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICByZXR1cm47XG4iOwogICAk
Y29kZSAuPSAkaW5kZW50IC4gIn1cbiI7CiAgIHJldHVybiAkY29kZTsKQEAgLTc0Miw3ICs3NDIs
NyBAQCBzdWIgZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlciB7CiAg
IG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkFuaW1hdGlvbkxpc3QmIGxpc3QgPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01ldGhvZCgk
bmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkFuaW1hdGlv
bkxpc3QmIGxpc3QgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0RW5zdXJlQW5pbWF0
aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICJpZiAobGlzdC5pc0VtcHR5KCkpXG4iOwogICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBsaXN0LmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTtcbiI7
CiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic2V0dGVyIn07CkBAIC03NjIsOCArNzYyLDggQEAgc3ViIGdlbmVyYXRlQW5pbWF0aW9uUHJv
cGVydHlJbmhlcml0VmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkg
JHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRv
JiBsaXN0ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5pbWF0aW9uc09y
VHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICJhdXRvKiBwYXJlbnRMaXN0ID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT4iIC4gZ2V0QW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsK
KyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvJiBsaXN0ID0gcHJvcGVydHlDYXNj
YWRlLnN0eWxlKCkuIiAuIGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRu
YW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogcGFy
ZW50TGlzdCA9IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLiIgLiBnZXRBbmltYXRpb25z
T3JUcmFuc2l0aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gInNpemVfdCBpID0gMCwgcGFyZW50U2l6ZSA9IHBhcmVudExpc3QgPyBwYXJl
bnRMaXN0LT5zaXplKCkgOiAwO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJm
b3IgKCA7IGkgPCBwYXJlbnRTaXplICYmIHBhcmVudExpc3QtPmFuaW1hdGlvbihpKS4iIC4gZ2V0
VGVzdEZ1bmN0aW9uKCRuYW1lKSAuICIoKTsgKytpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICBpZiAobGlzdC5zaXplKCkgPD0gaSlcbiI7CkBAIC03ODYsMjAgKzc4
NiwyMCBAQCBzdWIgZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eVZhbHVlU2V0dGVyIHsKICAgbXkg
JGluZGVudCA9IHNoaWZ0OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+IiAuIGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1l
KSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiQW5pbWF0aW9uTGlz
dCYgbGlzdCA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25z
T3JUcmFuc2l0aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gInNpemVfdCBjaGlsZEluZGV4ID0gMDtcbiI7CiAgICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAiaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7XG4iOwogICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAvKiBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBp
dCBpbnRvIGFuIGFuaW1hdGlvbiwgY3JlYXRpbmcgbmV3IGFuaW1hdGlvbnMgYXMgbmVlZGVkLiAq
L1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9yIChhdXRvJiBjdXJy
ZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkge1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGlmIChjaGlsZEluZGV4IDw9IGxpc3Quc2l6
ZSgpKVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgICAgICBsaXN0
LmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTtcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPiIgLiBnZXRBbmltYXRp
b25NYXBmdW5jdGlvbigkbmFtZSkgLiAiKGxpc3QuYW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBjdXJy
ZW50VmFsdWUpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHBy
b3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLiIgLiBnZXRBbmltYXRpb25NYXBmdW5jdGlvbigkbmFt
ZSkgLiAiKGxpc3QuYW5pbWF0aW9uKGNoaWxkSW5kZXgpLCBjdXJyZW50VmFsdWUpO1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgICsrY2hpbGRJbmRleDtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIH1cbiI7CiAgICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAifSBlbHNlIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgIGlmIChsaXN0LmlzRW1wdHkoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgICAgICBsaXN0LmFwcGVuZChBbmltYXRpb246OmNyZWF0ZSgpKTtcbiI7Ci0gICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+
IiAuIGdldEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hp
bGRJbmRleCksIHZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLiIgLiBnZXRBbmltYXRpb25NYXBmdW5jdGlvbigk
bmFtZSkgLiAiKGxpc3QuYW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7XG4iOwogICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBjaGlsZEluZGV4ID0gMTtcbiI7CiAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICJmb3IgKCA7IGNoaWxkSW5kZXggPCBsaXN0LnNpemUoKTsgKytjaGlsZEluZGV4KSB7XG4i
OwpAQCAtODIyLDExICs4MjIsMTEgQEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJbml0
aWFsVmFsdWVTZXR0ZXIgewogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7CiAgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiLy8gQ2hlY2sgZm9yIChzaW5nbGUtbGF5ZXIpIG5vLW9wIGJl
Zm9yZSBjbGVhcmluZyBhbnl0aGluZy5cbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiYXV0byYgbGF5ZXJzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0TGF5ZXJzRnVu
Y3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJh
dXRvJiBsYXllcnMgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzRnVuY3Rp
b24oJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAo
IWxheWVycy5uZXh0KCkgJiYgKCFsYXllcnMuIiAuICR0ZXN0RnVuY3Rpb24gLiAiKCkgfHwgbGF5
ZXJzLiIgLiAkZ2V0dGVyIC4gIigpID09ICRpbml0aWFsKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAiICAgIHJldHVybjtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICJcbiI7
Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAmc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAu
ICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiY2hpbGQtPiIgLiAkc2V0
dGVyIC4gIigiIC4gJGluaXRpYWwgLiAiKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiZm9yIChjaGlsZCA9IGNoaWxkLT5uZXh0KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0KCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBjaGlsZC0+IiAu
ICRjbGVhckZ1bmN0aW9uIC4gIigpO1xuIjsKQEAgLTg0NSwxMiArODQ1LDEyIEBAIHN1YiBnZW5l
cmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyIHsKIAogICBteSAkc2V0dGVy
Q29udGVudCA9ICIiOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIi8vIENoZWNrIGZv
ciBuby1vcCBiZWZvcmUgY29weWluZyBhbnl0aGluZy5cbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiaWYgKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+IiAuIGdldExheWVy
c0Z1bmN0aW9uKCRuYW1lKSAuIigpID09IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldExh
eWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIoKSlcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiaWYgKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLiIgLiBnZXRMYXllcnNGdW5j
dGlvbigkbmFtZSkgLiIoKSA9PSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJz
RnVuY3Rpb24oJG5hbWUpIC4gIigpKVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICIgICAgcmV0dXJuO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gIlxuIjsKLSAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAmcHJvcGVydHlDYXNjYWRlLnN0
eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJGaWxsTGF5ZXIqIHByZXZpb3VzQ2hpbGQgPSBu
dWxscHRyO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJmb3IgKGF1dG8qIHBh
cmVudCA9ICZzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPiIgLiBnZXRMYXllcnNGdW5jdGlv
bigkbmFtZSkgLiAiKCk7IHBhcmVudCAmJiBwYXJlbnQtPiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigp
OyBwYXJlbnQgPSBwYXJlbnQtPm5leHQoKSkge1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICJmb3IgKGF1dG8qIHBhcmVudCA9ICZwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUo
KS4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigpOyBwYXJlbnQgJiYgcGFyZW50LT4i
IC4gJHRlc3RGdW5jdGlvbiAuICIoKTsgcGFyZW50ID0gcGFyZW50LT5uZXh0KCkpIHtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmICghY2hpbGQpIHtcbiI7CiAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0
KG1ha2VVbmlxdWU8RmlsbExheWVyPigiIC4gZ2V0RmlsbExheWVyVHlwZSgkbmFtZSkgLiAiKSk7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY2hpbGQgPSBwcmV2
aW91c0NoaWxkLT5uZXh0KCk7XG4iOwpAQCAtODcyLDcgKzg3Miw3IEBAIHN1YiBnZW5lcmF0ZUZp
bGxMYXllclByb3BlcnR5VmFsdWVTZXR0ZXIgewogICBteSAkQ1NTUHJvcGVydHlJZCA9ICJDU1NQ
cm9wZXJ0eSIgLiAkbmFtZVRvSWR7JG5hbWV9OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7
Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAmc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAu
ICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiRmlsbExheWVyKiBwcmV2
aW91c0NoaWxkID0gbnVsbHB0cjtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
aWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpICYmICFpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1
ZSkpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIC8vIFdhbGsgZWFj
aCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYSBsYXllciwgY3JlYXRpbmcgbmV3IGxheWVycyBhcyBu
ZWVkZWQuXG4iOwpAQCAtODgxLDEyICs4ODEsMTIgQEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJv
cGVydHlWYWx1ZVNldHRlciB7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAg
ICAgICAgcHJldmlvdXNDaGlsZC0+c2V0TmV4dChtYWtlVW5pcXVlPEZpbGxMYXllcj4oIiAuIGdl
dEZpbGxMYXllclR5cGUoJG5hbWUpIC4gIikpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgICAgICAgICBjaGlsZCA9IHByZXZpb3VzQ2hpbGQtPm5leHQoKTtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICB9XG4iOwotICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4g
Z2V0RmlsbExheWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAi
LCAqY2hpbGQsIGl0ZW0pO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlv
bigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgaXRlbSk7XG4iOwog
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgcHJldmlvdXNDaGlsZCA9IGNo
aWxkO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGNoaWxkID0g
Y2hpbGQtPm5leHQoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIH1c
biI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifSBlbHNlIHtcbiI7Ci0gICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+IiAu
IGdldEZpbGxMYXllck1hcGZ1bmN0aW9uKCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4g
IiwgKmNoaWxkLCB2YWx1ZSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS4iIC4gZ2V0RmlsbExheWVyTWFwZnVuY3Rpb24o
JG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAiLCAqY2hpbGQsIHZhbHVlKTtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGNoaWxkID0gY2hpbGQtPm5leHQoKTtc
biI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifVxuIjsKICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICJmb3IgKDsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHQoKSlcbiI7
CkBAIC05MDIsNyArOTAyLDcgQEAgc3ViIGdlbmVyYXRlU2V0VmFsdWVTdGF0ZW1lbnQKIAogICBt
eSAkaXNTVkcgPSBleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFt
ZX17InN2ZyJ9OwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0
aW9uc3skbmFtZX17InNldHRlciJ9OwotICByZXR1cm4gInN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
IiAuICAoJGlzU1ZHID8gImFjY2Vzc1NWR1N0eWxlKCkuIiA6ICIiKSAuICRzZXR0ZXIgLiAiKCIg
LiAkdmFsdWUgLiAiKSI7CisgIHJldHVybiAicHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuIiAuICAo
JGlzU1ZHID8gImFjY2Vzc1NWR1N0eWxlKCkuIiA6ICIiKSAuICRzZXR0ZXIgLiAiKCIgLiAkdmFs
dWUgLiAiKSI7CiB9CiAKIHN1YiBnZW5lcmF0ZUluaXRpYWxWYWx1ZVNldHRlciB7CkBAIC05MTMs
OSArOTEzLDkgQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKICAgbXkgJGluaXRp
YWwgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiaW5pdGlhbCJ9
OwogICBteSAkaXNTVkcgPSBleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17InN2ZyJ9OwogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7
JG5hbWV9IC4gIihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKVxuIjsKKyAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseUluaXRpYWwiIC4gJG5hbWVUb0lk
eyRuYW1lfSAuICIoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKVxuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ7XG4iOwotICBteSAkc3R5bGUgPSAic3R5
bGVSZXNvbHZlci5zdHlsZSgpIjsKKyAgbXkgJHN0eWxlID0gInByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpIjsKICAgaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRu
YW1lfXsiYXV0by1mdW5jdGlvbnMifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICIgLiBnZXRBdXRvU2V0dGVyKCRuYW1lLCAkc3R5bGUpIC4gIjtcbiI7CiAgIH0gZWxz
aWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsidmlz
aXRlZC1saW5rLWNvbG9yLXN1cHBvcnQifSkgewpAQCAtOTI0LDkgKzkyNCw5IEBAIHN1YiBnZW5l
cmF0ZUluaXRpYWxWYWx1ZVNldHRlciB7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dp
dGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiYW5pbWF0YWJsZSJ9KSB7CiAgICAgJHNldHRl
ckNvbnRlbnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcigk
bmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dp
dGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0gICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250
RGVzY3JpcHRpb24oKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
Zm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihGb250Q2FzY2FkZURlc2NyaXB0aW9uOjoi
IC4gJGluaXRpYWwgLiAiKCkpO1xuIjsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IiAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBwcm9wZXJ0
eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4i
OwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImZpbGwtbGF5ZXItcHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdl
bmVyYXRlRmlsbExheWVyUHJvcGVydHlJbml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQg
LiAiICAgICIpOwogICB9IGVsc2UgewpAQCAtOTQzLDExICs5NDMsMTEgQEAgc3ViIGdlbmVyYXRl
SW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNoaWZ0OwogCiAgIG15ICRzZXR0
ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpXG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gInN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIntcbiI7CiAgIG15ICRpc1NWRyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxk
ZXJPcHRpb25zeyRuYW1lfXsic3ZnIn07Ci0gIG15ICRwYXJlbnRTdHlsZSA9ICJzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCkiOwotICBteSAkc3R5bGUgPSAic3R5bGVSZXNvbHZlci5zdHlsZSgp
IjsKKyAgbXkgJHBhcmVudFN0eWxlID0gInByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpIjsK
KyAgbXkgJHN0eWxlID0gInByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpIjsKICAgbXkgJGdldHRlciA9
ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJnZXR0ZXIifTsKICAg
bXkgJHNldHRlciA9ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJz
ZXR0ZXIifTsKICAgbXkgJGRpZENhbGxTZXRWYWx1ZSA9IDA7CkBAIC05NTcsMTAgKzk1NywxMCBA
QCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgICAgICByZXR1cm47XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgIH1cbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHls
ZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsidmlzaXRlZC1saW5rLWNvbG9yLXN1cHBvcnQifSkgewot
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIENvbG9yIGNvbG9yID0gIiAuICRw
YXJlbnRTdHlsZSAuICItPiIgLiAkZ2V0dGVyIC4gIigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBDb2xvciBjb2xvciA9ICIgLiAkcGFyZW50U3R5bGUgLiAiLiIg
LiAkZ2V0dGVyIC4gIigpO1xuIjsKICAgICBpZiAoIWV4aXN0cygkcHJvcGVydGllc1dpdGhTdHls
ZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsibm8tZGVmYXVsdC1jb2xvciJ9KSkgewogICAgICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKCFjb2xvci5pc1ZhbGlkKCkpXG4iOwot
ICAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGNvbG9yID0gIiAuICRw
YXJlbnRTdHlsZSAuICItPmNvbG9yKCk7XG4iOworICAgICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgICAgIGNvbG9yID0gIiAuICRwYXJlbnRTdHlsZSAuICIuY29sb3IoKTtcbiI7
CiAgICAgfQogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQ29sb3JWYWx1ZVNldHRlcigk
bmFtZSwgImNvbG9yIiwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9
IDE7CkBAIC05NjgsMTYgKzk2OCwxNiBAQCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIg
ewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJbmhlcml0
VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0VmFs
dWUgPSAxOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0
aW9uc3skbmFtZX17ImZvbnQtcHJvcGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVz
Y3JpcHRpb24oKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9u
dERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLiIgLiAkZ2V0dGVyIC4gIigpKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2NyaXB0aW9u
KCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlw
dGlvbi4iIC4gJHNldHRlciAuICIocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlv
bigpLiIgLiAkZ2V0dGVyIC4gIigpKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICIgICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnRE
ZXNjcmlwdGlvbikpO1xuIjsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAgfSBlbHNpZiAo
ZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJmaWxsLWxh
eWVyLXByb3BlcnR5In0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXll
clByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAg
ICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAgfQogICBpZiAoISRkaWRDYWxsU2V0VmFsdWUpIHsK
LSAgICBteSAkaW5oZXJpdGVkVmFsdWUgPSAkcGFyZW50U3R5bGUgLiAiLT4iIC4gKCRpc1NWRyA/
ICJzdmdTdHlsZSgpLiIgOiAiIikgLiAgJGdldHRlciAuICIoKSI7CisgICAgbXkgJGluaGVyaXRl
ZFZhbHVlID0gJHBhcmVudFN0eWxlIC4gIi4iIC4gKCRpc1NWRyA/ICJzdmdTdHlsZSgpLiIgOiAi
IikgLiAgJGdldHRlciAuICIoKSI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgIiAuIGdlbmVyYXRlU2V0VmFsdWVTdGF0ZW1lbnQoJG5hbWUsICJmb3J3YXJkSW5oZXJpdGVk
VmFsdWUoIiAuICRpbmhlcml0ZWRWYWx1ZSAuICIpIikgLiAiO1xuIjsKICAgfQogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIn1cbiI7CkBAIC05OTAsMjAgKzk5MCwyMCBAQCBzdWIgZ2Vu
ZXJhdGVWYWx1ZVNldHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVy
Q29udGVudCA9ICIiOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gInN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKVxuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICJzdGF0aWMgdm9pZCBhcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKVxuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ7XG4iOwogICBteSAkY29udmVydGVkVmFs
dWU7CiAgIGlmIChleGlzdHMoJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFt
ZX17ImNvbnZlcnRlciJ9KSkgewotICAgICRjb252ZXJ0ZWRWYWx1ZSA9ICJTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnQiIC4gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImNvbnZlcnRlciJ9IC4gIihzdHlsZVJlc29sdmVyLCB2YWx1ZSkiOworICAgICRjb252
ZXJ0ZWRWYWx1ZSA9ICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnQiIC4gJHByb3BlcnRp
ZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImNvbnZlcnRlciJ9IC4gIihwcm9wZXJ0
eUNhc2NhZGUsIHZhbHVlKSI7CiAgIH0gZWxzaWYgKGV4aXN0cygkcHJvcGVydGllc1dpdGhTdHls
ZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiY29uZGl0aW9uYWwtY29udmVydGVyIn0pKSB7Ci0gICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBjb252ZXJ0ZWRWYWx1ZSA9IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxk
ZXJPcHRpb25zeyRuYW1lfXsiY29uZGl0aW9uYWwtY29udmVydGVyIn0gLiAiKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0
byBjb252ZXJ0ZWRWYWx1ZSA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJv
cGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiY29uZGl0aW9uYWwtY29udmVy
dGVyIn0gLiAiKHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpO1xuIjsKICAgICAkY29udmVydGVkVmFs
dWUgPSAiV1RGTW92ZShjb252ZXJ0ZWRWYWx1ZS52YWx1ZSgpKSI7CiAgIH0gZWxzZSB7CiAgICAg
JGNvbnZlcnRlZFZhbHVlID0gImRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkiOwog
ICB9CiAKICAgbXkgJHNldHRlciA9ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7
JG5hbWV9eyJzZXR0ZXIifTsKLSAgbXkgJHN0eWxlID0gInN0eWxlUmVzb2x2ZXIuc3R5bGUoKSI7
CisgIG15ICRzdHlsZSA9ICJwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSI7CiAgIG15ICRkaWRDYWxs
U2V0VmFsdWUgPSAwOwogICBpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJhdXRvLWZ1bmN0aW9ucyJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFs
dWVJRCgpID09IENTU1ZhbHVlQXV0bykge1xuIjsKQEAgLTEwMjIsOSArMTAyMiw5IEBAIHN1YiBn
ZW5lcmF0ZVZhbHVlU2V0dGVyIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1h
dGlvblByb3BlcnR5VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRk
aWRDYWxsU2V0VmFsdWUgPSAxOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5
bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImZvbnQtcHJvcGVydHkifSkgewotICAgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2Ny
aXB0aW9uKCk7XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvbnRE
ZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoIiAuICRjb252ZXJ0ZWRWYWx1ZSAuICIpO1xuIjsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpO1xuIjsKKyAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUg
PSAxOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17ImZpbGwtbGF5ZXItcHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49
IGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIg
ICAgIik7CkBAIC0xMDUxLDExICsxMDUxLDExIEBAIHByaW50IFNUWUxFQlVJTERFUiA8PCAiRU9G
IjsKIAogI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJD
U1NQcm9wZXJ0eS5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVk
ZSAiU3R5bGVCdWlsZGVyQ3VzdG9tLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC0xMDgzLDcgKzEwODMsNyBAQCBmb3JlYWNoIG15ICRuYW1lIChAbmFtZXMpIHsKIHByaW50
IFNUWUxFQlVJTERFUiA8PCAiRU9GIjsKIH07CiAKLXZvaWQgU3R5bGVCdWlsZGVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNJbmhlcml0LCBjb25z
dCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQpCit2b2lkIFN0eWxlQnVp
bGRlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSwgYm9vbCBpc0luaXRp
YWwsIGJvb2wgaXNJbmhlcml0LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJl
Z2lzdGVyZWQpCiB7CiAgICAgc3dpdGNoIChwcm9wZXJ0eSkgewogICAgIGNhc2UgQ1NTUHJvcGVy
dHlJbnZhbGlkOgpAQCAtMTA5MSwxMSArMTA5MSwxMSBAQCB2b2lkIFN0eWxlQnVpbGRlcjo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVyJiBzdHlsZVJl
cwogICAgIGNhc2UgQ1NTUHJvcGVydHlDdXN0b206IHsKICAgICAgICAgYXV0byYgY3VzdG9tUHJv
cGVydHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPih2YWx1ZSk7CiAgICAgICAg
IGlmIChpc0luaXRpYWwpCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIGN1c3RvbVByb3Bl
cnR5Lm5hbWUoKSk7CisgICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bEN1c3RvbVByb3BlcnR5KHByb3BlcnR5Q2FzY2FkZSwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVy
dHkubmFtZSgpKTsKICAgICAgICAgZWxzZSBpZiAoaXNJbmhlcml0KQotICAgICAgICAgICAgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVy
LCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOworICAgICAgICAgICAgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eUNhc2NhZGUs
IHJlZ2lzdGVyZWQsIGN1c3RvbVByb3BlcnR5Lm5hbWUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxl
UmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIGN1c3RvbVByb3BlcnR5KTsKKyAgICAgICAgICAgIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHByb3BlcnR5Q2FzY2FkZSwg
cmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkpOwogICAgICAgICBicmVhazsKICAgICB9CiBFT0YK
QEAgLTExMDcsMTEgKzExMDcsMTEgQEAgZm9yZWFjaCBteSAkbmFtZSAoQG5hbWVzKSB7CiAgICAg
cHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpO1xuIjsKICAg
fSBlbHNpZiAoIWV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic2tpcC1idWlsZGVyIn0pIHsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgaWYg
KGlzSW5pdGlhbClcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4g
Z2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIkluaXRpYWwiKSAuICI6OmFwcGx5SW5pdGlhbCIg
LiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7CisgICAgcHJpbnQgU1RZ
TEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIklu
aXRpYWwiKSAuICI6OmFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihwcm9wZXJ0
eUNhc2NhZGUpO1xuIjsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgZWxzZSBpZiAo
aXNJbmhlcml0KVxuIjsKLSAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBn
ZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiSW5oZXJpdCIpIC4gIjo6YXBwbHlJbmhlcml0IiAu
ICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIpO1xuIjsKKyAgICBwcmludCBTVFlM
RUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiSW5o
ZXJpdCIpIC4gIjo6YXBwbHlJbmhlcml0IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHByb3BlcnR5
Q2FzY2FkZSk7XG4iOwogICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBlbHNlXG4iOwot
ICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rp
b24oJG5hbWUsICJWYWx1ZSIpIC4gIjo6YXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4g
IihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7XG4iOworICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAg
ICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJWYWx1ZSIpIC4gIjo6YXBw
bHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTtc
biI7CiAgIH0KICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgIGJyZWFrO1xuIjsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmNwcAppbmRleCBjYzliZDI5NWY4Yi4uMDVk
Njk2MjQ1M2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKQEAgLTIz
Niw3ICsyMzYsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgIGZvciAoYXV0byBpZCA6
IGRlcGVuZGVuY2llcykKICAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsK
IAotICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5
VmFsdWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxl
UmVzb2x2ZXIoKSwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBh
cnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50
b2tlbnMoKSwgY2FzY2FkZSwgbV9jb250ZXh0KTsKIH0KIAogc3RkOjp1bmlxdWVfcHRyPFZlY3Rv
cjxkb3VibGU+PiBDU1NQYXJzZXI6OnBhcnNlS2V5ZnJhbWVLZXlMaXN0KGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3Bl
cnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJz
ZXIuY3BwCmluZGV4IGNjMDVlZjBkYmZmLi5kZmRiNGVmMzRlNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAKQEAgLTY3LDYgKzY3LDcgQEAK
ICNpbmNsdWRlICJIYXNoVG9vbHMuaCIKIC8vIEZJWE1FLU5FV1BBUlNFUjogUmVwbGFjZSBQYWly
IGFuZCBSZWN0IHdpdGggYWN0dWFsIENTU1ZhbHVlIHN1YmNsYXNzZXMgKENTU1ZhbHVlUGFpciBh
bmQgQ1NTUXVhZFZhbHVlKS4KICNpbmNsdWRlICJQYWlyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlD
YXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgpAQCAtNzUsNyArNzYsNiBAQAogI2lu
Y2x1ZGUgIlN0eWxlQnVpbGRlckNvbnZlcnRlci5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgi
Ci0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgPGJpdHNldD4KICNpbmNsdWRl
IDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMjk3LDEw
ICsyOTcsMTAgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNlcjo6Y2FuUGFyc2VUeXBlZEN1c3RvbVBy
b3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgsIGMKICAgICByZXR1cm4gcGFyc2VyLmNh
blBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKHN5bnRheCk7CiB9CiAKLVJlZlB0cjxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVBy
b3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29u
c3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQorUmVmUHRyPENTU0N1
c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJv
cGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25z
dCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBDU1NQcm9wZXJ0eVBhcnNlciBwYXJzZXIodG9rZW5zLCBjb250ZXh0LCBudWxscHRyLCBm
YWxzZSk7Ci0gICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlID0gcGFyc2Vy
LnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgc3R5bGVSZXNvbHZl
cik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHZhbHVlID0gcGFyc2VyLnBh
cnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcHJvcGVydHlDYXNjYWRl
KTsKICAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZXIubV9yYW5nZS5hdEVuZCgpKQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdmFsdWU7CkBAIC00Mjg5LDEzICs0Mjg5LDEzIEBA
IHZvaWQgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVl
RGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluCiAgICAgfQogfQogCi1SZWZQdHI8Q1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4g
Q1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0
cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKICAgICBpZiAoc3ludGF4ICE9ICIqIikgewogICAg
ICAgICBtX3JhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGF1dG8gcHJpbWl0aXZl
VmFsID0gY29uc3VtZVdpZHRoT3JIZWlnaHQobV9yYW5nZSwgbV9jb250ZXh0KTsKICAgICAgICAg
aWYgKHByaW1pdGl2ZVZhbCAmJiBwcmltaXRpdmVWYWwtPmlzUHJpbWl0aXZlVmFsdWUoKSAmJiBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByaW1pdGl2ZVZhbCkuaXNMZW5ndGgoKSkgewot
ICAgICAgICAgICAgYXV0byBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
ZW5ndGgoc3R5bGVSZXNvbHZlciwgKnByaW1pdGl2ZVZhbCk7CisgICAgICAgICAgICBhdXRvIGxl
bmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChwcm9wZXJ0eUNhc2Nh
ZGUsICpwcmltaXRpdmVWYWwpOwogICAgICAgICAgICAgaWYgKCFsZW5ndGguaXNDYWxjdWxhdGVk
KCkgJiYgIWxlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVTeW50YXhMZW5ndGgobmFtZSwgV1RGTW92ZShsZW5n
dGgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5oCmluZGV4IDY1ZTg2MDU3YjI2Li44MzJhMTY2YmUyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMzIsNyArMzIsMTAgQEAg
Y2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlUHJvcGVydHlT
aG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBTdHlsZVJlc29sdmVy
OworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgUHJvcGVydHlDYXNjYWRlOworfQogICAgIAog
Ly8gSW5wdXRzOiBQcm9wZXJ0eUlELCBpc0ltcG9ydGFudCBib29sLCBDU1NQYXJzZXJUb2tlblJh
bmdlLgogLy8gT3V0cHV0czogVmVjdG9yIG9mIENTU1Byb3BlcnRpZXMKQEAgLTQ3LDcgKzUwLDcg
QEAgcHVibGljOgogICAgIC8vIFBhcnNlcyBhIG5vbi1zaG9ydGhhbmQgQ1NTIHByb3BlcnR5CiAg
ICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0eUlE
LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwog
ICAgIHN0YXRpYyBib29sIGNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0
cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2Vy
Q29udGV4dCYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gcGFy
c2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJp
bmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJp
bmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdl
JiwgY29uc3QgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVu
ZGVuY2llcyhjb25zdCBTdHJpbmcmIHN5bnRheCwgYm9vbCBpc1Jvb3QsIEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mIGRlcGVuZGVuY2llcywgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmKTsKIAogcHJpdmF0ZToKQEAgLTU4LDcgKzYxLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGNvbnN1bWVDU1NXaWRlS2V5d29yZChDU1NQcm9wZXJ0eUlELCBib29sIGlt
cG9ydGFudCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3Bl
cnR5SUQsIENTU1Byb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUludmFsaWQpOwogICAgIGJvb2wgY2Fu
UGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgpOwotICAg
IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBTdHls
ZVJlc29sdmVyJik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHBhcnNlVHlw
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
eW50YXgsIGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKICAgICB2b2lkIGNvbGxlY3RQ
YXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYgc3ludGF4
LCBib29sIGlzUm9vdCwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgZGVwZW5kZW5jaWVzKTsKIAog
ICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0g
SFRNTFF1aXJrc01vZGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDk1YjdiMWM1NWY5Li5hZGMwMzYx
OWZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNS
ZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsMTMgKzE3Niw3IEBAIHZvaWQgQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBzdHls
ZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTdHls
ZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUp
LmdldCgpKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShD
U1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFs
dWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBzdHlsZVJlc29sdmVy
LmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNl
ZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkp
OwotCi0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBh
bmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRN
ZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBj
cmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMiku
Ci0gICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRy
aWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1o
ZWlnaHQuCi0gICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2Vk
U3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwot
ICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUt
PmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAKICAg
ICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9y
KCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
c3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5
Q2FzY2FkZS5jcHAKaW5kZXggYTQzOTgxMTIzNWEuLjI3YzM4OGE2ZWY3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKQEAgLTE3Nyw2ICsxNzcsMTAgQEAgUHJvcGVy
dHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgTWF0Y2hSZXN1bHQKICAgICA6IG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVyKQog
ICAgICwgbV9tYXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0
aWVzKGluY2x1ZGVkUHJvcGVydGllcykKKyAgICAsIG1fc3R5bGUoKnN0eWxlUmVzb2x2ZXIuc3R5
bGUoKSkKKyAgICAsIG1fcGFyZW50U3R5bGUoKnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkK
KyAgICAsIG1fcm9vdEVsZW1lbnRTdHlsZSgqc3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxl
KCkpCisgICAgLCBtX3N0eWxlTWFwKCp0aGlzKQogewogICAgIC8vIERpcmVjdGlvbmFsIHByb3Bl
cnRpZXMgKCotYmVmb3JlL2FmdGVyKSBhcmUgYWxpYXNlcyB0aGF0IGRlcGVuZCBvbiB0aGUgVGV4
dERpcmVjdGlvbiBhbmQgV3JpdGluZ01vZGUuCiAgICAgLy8gVGhlc2UgbXVzdCBiZSByZXNvbHZl
ZCBiZWZvcmUgd2UgY2FuIGJlZ2luIGJ1aWxkaW5nIHRoZSBwcm9wZXJ0eSBjYXNjYWRlLgpAQCAt
MTg5LDggKzE5MywxMiBAQCBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5Q2FzY2FkZShjb25zdCBQ
cm9wZXJ0eUNhc2NhZGUmIHBhcmVudCwgT3B0aW9uU2V0PENhc2NhZAogICAgIDogbV9zdHlsZVJl
c29sdmVyKHBhcmVudC5tX3N0eWxlUmVzb2x2ZXIpCiAgICAgLCBtX21hdGNoUmVzdWx0KHBhcmVu
dC5tX21hdGNoUmVzdWx0KQogICAgICwgbV9pbmNsdWRlZFByb3BlcnRpZXMocGFyZW50Lm1faW5j
bHVkZWRQcm9wZXJ0aWVzKQorICAgICwgbV9zdHlsZShwYXJlbnQubV9zdHlsZSkKKyAgICAsIG1f
cGFyZW50U3R5bGUocGFyZW50Lm1fcGFyZW50U3R5bGUpCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5
bGUocGFyZW50Lm1fcm9vdEVsZW1lbnRTdHlsZSkKICAgICAsIG1fZGlyZWN0aW9uKHBhcmVudC5t
X2RpcmVjdGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUocGFyZW50Lm1fd3JpdGluZ01vZGUpCisg
ICAgLCBtX3N0eWxlTWFwKCp0aGlzKQogewogICAgIGJ1aWxkQ2FzY2FkZShjYXNjYWRlTGV2ZWxz
KTsKIH0KQEAgLTQ2NiwyNCArNDc0LDEyIEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1
c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgfQogCiAgICAgICAgIGlm
IChtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSkp
IHsKLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hMaW5rKSB7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0
QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFs
c2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAgICAg
ICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBtX2FwcGx5U3RhdGUu
bGlua01hdGNoID0gaW5kZXg7CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5
Q3VzdG9tLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGluZGV4KTsKICAgICAgICAgfQogICAgIH0KIAor
ICAgIG1fYXBwbHlTdGF0ZS5saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dDsKICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5h
bWUpOwogICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSk7
CiAKQEAgLTUyOCwzMyArNTI0LDI1IEBAIGNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlD
YXNjYWRlOjpwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwKIAogaW5saW5l
IHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5KGNvbnN0IFByb3BlcnR5JiBwcm9w
ZXJ0eSkKIHsKLSAgICBTdHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0eWxlUmVzb2x2
ZXIuc3RhdGUoKTsKLSAgICBzdGF0ZS5zZXRDYXNjYWRlTGV2ZWwocHJvcGVydHkubGV2ZWwpOwot
ICAgIHN0YXRlLnNldFN0eWxlU2NvcGVPcmRpbmFsKHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFs
KTsKKyAgICBtX2FwcGx5U3RhdGUuY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7CisgICAg
bV9hcHBseVN0YXRlLnN0eWxlU2NvcGVPcmRpbmFsID0gcHJvcGVydHkuc3R5bGVTY29wZU9yZGlu
YWw7CiAKLSAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHRdKSB7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0
cnVlKTsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShm
YWxzZSk7Ci0gICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NW
YWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0sIFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hEZWZhdWx0KTsKLSAgICB9CisgICAgYXV0byBhcHBseVdpdGhMaW5rTWF0Y2ggPSBbJl0oU2Vs
ZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrIGxpbmtNYXRjaCkgeworICAgICAgICBpZiAocHJv
cGVydHkuY3NzVmFsdWVbbGlua01hdGNoXSkgeworICAgICAgICAgICAgbV9hcHBseVN0YXRlLmxp
bmtNYXRjaCA9IGxpbmtNYXRjaDsKKyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHku
aWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5rTWF0Y2hdLCBsaW5rTWF0Y2gpOworICAgICAgICB9
CisgICAgfTsKIAotICAgIGlmIChzdGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRl
TGluazo6Tm90SW5zaWRlKQotICAgICAgICByZXR1cm47CisgICAgYXBwbHlXaXRoTGlua01hdGNo
KFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKIAotICAgIGlmIChwcm9wZXJ0eS5jc3NW
YWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGlua10pIHsKLSAgICAgICAgc3RhdGUuc2V0QXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICBzdGF0ZS5zZXRBcHBseVBy
b3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShw
cm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5r
XSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmspOwotICAgIH0KKyAgICBpZiAobV9zdHlsZS5p
bnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAgICByZXR1cm47CiAK
LSAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRd
KSB7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7
Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUodHJ1ZSk7
Ci0gICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0sIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNp
dGVkKTsKLSAgICB9CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hMaW5rKTsKKyAgICBhcHBseVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZp
c2l0ZWQpOwogCi0gICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUp
OwotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwor
ICAgIG1fYXBwbHlTdGF0ZS5saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dDsKIH0KIAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBpZCwgQ1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlu
a01hdGNoTWFzaykKQEAgLTU5MCw3ICs1NzgsNyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwog
ICAgIGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRvQXBwbHktPmlzUmV2ZXJ0VmFsdWUoKSB8fCBjdXN0
b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZlcnQ7CiAKICAgICBpZiAoaXNSZXZlcnQp
IHsKLSAgICAgICAgaWYgKGF1dG8qIHJvbGxiYWNrID0gcHJvcGVydHlDYXNjYWRlRm9yUm9sbGJh
Y2soc3RhdGUuY2FzY2FkZUxldmVsKCkpKSB7CisgICAgICAgIGlmIChhdXRvKiByb2xsYmFjayA9
IHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKG1fYXBwbHlTdGF0ZS5jYXNjYWRlTGV2ZWwpKSB7
CiAgICAgICAgICAgICAvLyBXaXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVk
IHRvIG9idGFpbiB0aGUgcHJvcGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMK
ICAgICAgICAgICAgIC8vIG5vdCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4i
IE90aGVyd2lzZSB3ZSBhcHBseSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgogICAgICAgICAgICAg
Ly8gb3VyIG93bi4KQEAgLTYyMSw3ICs2MDksNyBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwog
CiAgICAgQVNTRVJUKCFpc0luaGVyaXQgfHwgIWlzSW5pdGlhbCk7IC8vIGlzSW5oZXJpdCAtPiAh
aXNJbml0aWFsICYmIGlzSW5pdGlhbCAtPiAhaXNJbmhlcml0CiAKLSAgICBpZiAoIXN0YXRlLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpICYmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpIHx8ICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShpZCkpKSB7Cisg
ICAgaWYgKGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaWQpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRo
YXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgog
ICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtNjQzLDcgKzYzMSw3IEBAIHZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwg
U2VsZWN0b3JDCiAjZW5kaWYKIAogICAgIC8vIFVzZSB0aGUgZ2VuZXJhdGVkIFN0eWxlQnVpbGRl
ci4KLSAgICBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoaWQsIG1fc3R5bGVSZXNvbHZlciwg
dmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRpYWwsIGlzSW5oZXJpdCwgY3VzdG9tUHJvcGVydHlS
ZWdpc3RlcmVkKTsKKyAgICBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoaWQsICp0aGlzLCB2
YWx1ZVRvQXBwbHkuZ2V0KCksIGlzSW5pdGlhbCwgaXNJbmhlcml0LCBjdXN0b21Qcm9wZXJ0eVJl
Z2lzdGVyZWQpOwogfQogCiBSZWY8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZVZh
bHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtNzA1LDUg
KzY5Myw1MSBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRp
bmdNb2RlKCkKICAgICB9CiB9CiAKK2NvbnN0IERvY3VtZW50JiBQcm9wZXJ0eUNhc2NhZGU6OmRv
Y3VtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmRvY3VtZW50KCk7
Cit9CisKK2NvbnN0IEVsZW1lbnQmIFByb3BlcnR5Q2FzY2FkZTo6ZWxlbWVudCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuICptX3N0eWxlUmVzb2x2ZXIuZWxlbWVudCgpOworfQorCitib29sIFByb3Bl
cnR5Q2FzY2FkZTo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHls
ZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlcygpOworfQorCitib29sIFByb3BlcnR5Q2FzY2FkZTo6
dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJl
c29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpOworfQorCitjb25zdCBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhJiBQcm9wZXJ0eUNhc2NhZGU6OmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSBjb25zdAoreworICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCk7Cit9CisKK1JlZlB0cjxTdHlsZUltYWdlPiBQcm9wZXJ0eUNh
c2NhZGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiBt
X3N0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSk7Cit9CisKK2Jvb2wgUHJvcGVydHlDYXNj
YWRlOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgRmlsdGVy
T3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVy
LmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIG91dE9wZXJhdGlvbnMpOworfQorCitDb2xv
ciBQcm9wZXJ0eUNhc2NhZGU6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1p
dGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9zdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHZhbHVlLCBmb3JWaXNp
dGVkTGluayk7Cit9CisKK3ZvaWQgUHJvcGVydHlDYXNjYWRlOjpzZXRGb250U2l6ZShGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKK3sKKyAgICBtX3N0eWxl
UmVzb2x2ZXIuc2V0Rm9udFNpemUoZGVzY3JpcHRpb24sIHNpemUpOworfQorCisKIH0KIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oIGIvU291cmNl
L1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXggNDJjNTA4NWEzOWIuLmYwYjEy
YWUwZWQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaApAQCAtMjUsMTIg
KzI1LDE2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgog
I2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKICNpbmNsdWRlIDxiaXRzZXQ+CiAjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKK2NsYXNzIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CitjbGFzcyBT
dHlsZUltYWdlOwogY2xhc3MgU3R5bGVSZXNvbHZlcjsKIAogbmFtZXNwYWNlIFN0eWxlIHsKQEAg
LTY5LDEyICs3Myw0NCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFwcGx5UHJvcGVydGllcyhpbnQg
Zmlyc3RQcm9wZXJ0eSwgaW50IGxhc3RQcm9wZXJ0eSk7CiAgICAgdm9pZCBhcHBseURlZmVycmVk
UHJvcGVydGllcygpOwotCiAgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKICAgICB2
b2lkIGFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKTsKLQogICAgIHZvaWQg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSYsIFNlbGVjdG9yQ2hlY2tlcjo6
TGlua01hdGNoTWFzayA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KTsKIAorICAgIFJl
bmRlclN0eWxlJiBzdHlsZSgpIHsgcmV0dXJuIG1fc3R5bGU7IH0KKyAgICBjb25zdCBSZW5kZXJT
dHlsZSYgcGFyZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHJvb3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jv
b3RFbGVtZW50U3R5bGU7IH0KKworICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0
OworICAgIGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQoKSBjb25zdDsKKyAgICBib29sIHVzZVNWR1pv
b21SdWxlcygpIGNvbnN0OworICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29u
c3Q7CisgICAgY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpIGNvbnN0OworICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlTdGF0ZS5zdHlsZVNjb3BlT3JkaW5hbDsgfQorCisgICAg
UmVmUHRyPFN0eWxlSW1hZ2U+IGNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKKyAgICBib29s
IGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25z
JiBvdXRPcGVyYXRpb25zKTsKKyAgICBDb2xvciBjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25z
dCBDU1NQcmltaXRpdmVWYWx1ZSYsIGJvb2wgZm9yVmlzaXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7
CisKKyAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3N0eWxlLmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRT
dHlsZS5mb250RGVzY3JpcHRpb24oKTsgfQorCisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5U3RhdGUubGlua01hdGNoICE9IFNlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVN0YXRlLmxpbmtNYXRjaCA9PSBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsgfQorCisgICAgdm9pZCBzZXRGb250RGVzY3Jp
cHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbikgeyBtX2FwcGx5
U3RhdGUuZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9u
dERlc2NyaXB0aW9uKSk7IH0KKyAgICB2b2lkIHNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVzY3Jp
cHRpb24mLCBmbG9hdCBzaXplKTsKKyAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2FwcGx5
U3RhdGUuZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZm
ZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1fYXBwbHlTdGF0ZS5mb250RGlydHkgfD0gbV9zdHlsZS5z
ZXRFZmZlY3RpdmVab29tKGYpOyB9CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9k
ZSB3cml0aW5nTW9kZSkgeyBtX2FwcGx5U3RhdGUuZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3Jp
dGluZ01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4
dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2FwcGx5U3RhdGUuZm9udERpcnR5IHw9
IG1fc3R5bGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRhdGlvbik7IH0KKworICAgIGJv
b2wgZm9udERpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVN0YXRlLmZvbnREaXJ0eTsgfQor
ICAgIHZvaWQgc2V0Rm9udERpcnR5KCkgeyBtX2FwcGx5U3RhdGUuZm9udERpcnR5ID0gdHJ1ZTsg
fQorICAgIHZvaWQgY2xlYXJGb250RGlydHkoKSB7IG1fYXBwbHlTdGF0ZS5mb250RGlydHkgPSBm
YWxzZTsgfQorCisgICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVNYXAoKSB7IHJldHVybiBtX3N0eWxl
TWFwOyB9CisKIHByaXZhdGU6CiAgICAgdm9pZCBidWlsZENhc2NhZGUoT3B0aW9uU2V0PENhc2Nh
ZGVMZXZlbD4pOwogICAgIGJvb2wgYWRkTm9ybWFsTWF0Y2hlcyhDYXNjYWRlTGV2ZWwpOwpAQCAt
MTAxLDcgKzEzNywxMSBAQCBwcml2YXRlOgogCiAgICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1fbWF0
Y2hSZXN1bHQ7CiAgICAgY29uc3QgSW5jbHVkZWRQcm9wZXJ0aWVzIG1faW5jbHVkZWRQcm9wZXJ0
aWVzOwotICAgIAorCisgICAgUmVuZGVyU3R5bGUmIG1fc3R5bGU7CisgICAgY29uc3QgUmVuZGVy
U3R5bGUmIG1fcGFyZW50U3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fcm9vdEVsZW1l
bnRTdHlsZTsKKwogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgV3JpdGluZ01v
ZGUgbV93cml0aW5nTW9kZTsKIApAQCAtMTExLDE5ICsxNTEsMjYgQEAgcHJpdmF0ZToKICAgICBW
ZWN0b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRv
bVN0cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsKIAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxiYWNrQ2Fz
Y2FkZTsKKwogICAgIC8vIFN0YXRlIHRvIHVzZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMsIHRv
IGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9tIGFuZCBoaWdoLXByaW9yaXR5CiAgICAgLy8gcHJv
cGVydGllcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCiAgICAgc3RydWN0IEFwcGx5U3RhdGUgewotICAg
ICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07Ci0g
ICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKLSAg
ICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9
OwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20gPSB7
IH07CisgICAgICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllczsK
KyAgICAgICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzOworICAgICAg
ICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXM7CisgICAgICAg
IEhhc2hTZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVydGllc0N1c3RvbTsKKworICAgICAgICBD
YXNjYWRlTGV2ZWwgY2FzY2FkZUxldmVsOworICAgICAgICBTY29wZU9yZGluYWwgc3R5bGVTY29w
ZU9yZGluYWw7CisgICAgICAgIFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0
Y2g7CisgICAgICAgIAorICAgICAgICBib29sIGZvbnREaXJ0eSB7IGZhbHNlIH07CiAgICAgfTsK
IAogICAgIEFwcGx5U3RhdGUgbV9hcHBseVN0YXRlOwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPGNv
bnN0IFByb3BlcnR5Q2FzY2FkZT4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGU7Ci0gICAgc3RkOjp1
bmlxdWVfcHRyPGNvbnN0IFByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2tDYXNjYWRlOwor
ICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5
Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382180</attachid>
            <date>2019-10-29 08:04:43 -0700</date>
            <delta_ts>2019-10-29 23:36:15 -0700</delta_ts>
            <desc>wip</desc>
            <filename>stylebuilder-cascade-2.patch</filename>
            <type>text/plain</type>
            <size>245044</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCBjODU5MjBiMDE3My4uNGI3Yjlk
NmY1YjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQ1LDI5ICs0NSwy
NCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1RvU3R5bGVNYXA6OkNTU1RvU3R5bGVN
YXAoU3R5bGVSZXNvbHZlciogcmVzb2x2ZXIpCi0gICAgOiBtX3Jlc29sdmVyKHJlc29sdmVyKQor
Q1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNj
YWRlKQorICAgIDogbV9jYXNjYWRlKGNhc2NhZGUpCiB7CiB9CiAKIFJlbmRlclN0eWxlKiBDU1NU
b1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxl
KCk7Ci19Ci0KLWNvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVudFN0
eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHlsZSgp
OworICAgIHJldHVybiAmbV9jYXNjYWRlLnN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHlsZU1h
cDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNl
U1ZHWm9vbVJ1bGVzKCk7CisgICAgcmV0dXJuIG1fY2FzY2FkZS51c2VTVkdab29tUnVsZXMoKTsK
IH0KIAogUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0eWxlSW1hZ2UoQ1NTVmFs
dWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZUltYWdlKHZhbHVlKTsK
KyAgICByZXR1cm4gbV9jYXNjYWRlLmNyZWF0ZVN0eWxlSW1hZ2UodmFsdWUpOwogfQogCiB2b2lk
IENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgRmlsbExheWVyJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQpAQCAtMjE0LDcgKzIw
OSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zCiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIEFTU0VSVChmaWxsU2l6ZS50eXBlID09IEZpbGxTaXplVHlwZTo6U2l6ZSk7
Ci0gICAgICAgIGlmICghY29udmVydFRvTGVuZ3RoU2l6ZShwcmltaXRpdmVWYWx1ZSwgbV9yZXNv
bHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIGZpbGxTaXplLnNpemUp
KQorICAgICAgICBpZiAoIWNvbnZlcnRUb0xlbmd0aFNpemUocHJpbWl0aXZlVmFsdWUsIG1fY2Fz
Y2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIGZpbGxTaXplLnNpemUpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0yMzYsOSArMjMxLDkgQEAg
dm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgRmlsbExheWVyJiBsYXllciwKICAgICBMZW5ndGggbGVuZ3RoOwogICAgIGlmIChwYWly
KSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJvcGVydHlJRCA9PSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9PSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tQb3NpdGlvblgpOwotICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRMZW5ndGgoKm1fcmVzb2x2ZXIsICpwYWlyLT5zZWNvbmQoKSk7CisgICAgICAg
IGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChtX2Nhc2NhZGUs
ICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WCgqbV9yZXNvbHZlciwgdmFs
dWUpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3Np
dGlvbkNvbXBvbmVudFgobV9jYXNjYWRlLCB2YWx1ZSk7CiAKICAgICBsYXllci5zZXRYUG9zaXRp
b24obGVuZ3RoKTsKICAgICBpZiAocGFpcikKQEAgLTI2MCw5ICsyNTUsOSBAQCB2b2lkIENTU1Rv
U3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRpb24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxs
TGF5ZXImIGxheWVyLAogICAgIExlbmd0aCBsZW5ndGg7CiAgICAgaWYgKHBhaXIpIHsKICAgICAg
ICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFj
a2dyb3VuZFBvc2l0aW9uWSB8fCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uWSk7Ci0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dExlbmd0aCgqbV9yZXNvbHZlciwgKnBhaXItPnNlY29uZCgpKTsKKyAgICAgICAgbGVuZ3RoID0g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKG1fY2FzY2FkZSwgKnBhaXItPnNl
Y29uZCgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKCptX3Jlc29sdmVyLCB2YWx1ZSk7CisgICAg
ICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9u
ZW50WShtX2Nhc2NhZGUsIHZhbHVlKTsKICAgICAKICAgICBsYXllci5zZXRZUG9zaXRpb24obGVu
Z3RoKTsKICAgICBpZiAocGFpcikKQEAgLTQwOSw3ICs0MDQsNyBAQCB2b2lkIENTU1RvU3R5bGVN
YXA6Om1hcEFuaW1hdGlvbk5hbWUoQW5pbWF0aW9uJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICBsYXllci5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAg
ICBsYXllci5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG1fcmVzb2x2ZXIt
PnN0YXRlKCkuc3R5bGVTY29wZU9yZGluYWwoKSk7CisgICAgICAgIGxheWVyLnNldE5hbWUocHJp
bWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSwgbV9jYXNjYWRlLnN0eWxlU2NvcGVPcmRpbmFsKCkp
OwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRp
b24mIGxheWVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC01OTMsNyArNTg4LDcgQEAgTGVu
Z3RoQm94IENTU1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYgdmFs
dWUpCiAgICAgICAgIHJldHVybiBMZW5ndGhCb3goKTsKIAogICAgIC8vIEdldCBvdXIgem9vbSB2
YWx1ZS4KLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gdXNl
U1ZHWm9vbVJ1bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fcmVzb2x2ZXItPnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29tUnVsZXMoKSA/IG1fY2FzY2FkZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikgOiBtX2Nhc2Nh
ZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhlIHBy
aW1pdGl2ZSB2YWx1ZS4KICAgICBhdXRvJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Rv
U3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXggNGZi
MjlhOWQzYTYuLjY0NDRiMzVmOWY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKQEAg
LTM0LDE0ICszNCwxNyBAQCBjbGFzcyBMZW5ndGhCb3g7CiBjbGFzcyBOaW5lUGllY2VJbWFnZTsK
IGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVzb2x2
ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7Cit9CiAKIGNs
YXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1RvU3R5bGVN
YXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9T
dHlsZU1hcChTdHlsZVJlc29sdmVyKik7CisgICAgQ1NTVG9TdHlsZU1hcChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJik7CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQs
IEZpbGxMYXllciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQ
cm9wZXJ0eUlELCBGaWxsTGF5ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtNzIsMTkgKzc1LDEx
IEBAIHB1YmxpYzoKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiwg
TmluZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlc2UgYWNjZXNz
b3JzIHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJlc29sdmVTdGF0ZSBvYmplY3QKLSAgICAvLyBz
aW1pbGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBm
b3IKLSAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0
eWxlKCkgY29uc3Q7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBj
b25zdDsKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6
IFRoaXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmpl
Y3Qgd2hpY2gKLSAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBhbmQgbGlrZWx5
IHByb3ZpZGVkIHRvIHRoaXMgb2JqZWN0Ci0gICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAg
IFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBTdHlsZVJl
c29sdmVyKiBtX3Jlc29sdmVyOworICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIG1fY2FzY2Fk
ZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcAppbmRleCAwZGY2YWFlOTZmMC4u
Yzg5ODVmYWI5NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0
ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJDU1NUb2tl
bml6ZXIuaCIKICNpbmNsdWRlICJET01DU1NOYW1lc3BhY2UuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRl
ckNvbnZlcnRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgogCkBAIC01MSw3
ICs1Miw2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHk6
OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAgICAgICAgIC8vIFdlIG5lZWQgdG8g
aW5pdGlhbGl6ZSB0aGlzIHNvIHRoYXQgd2UgY2FuIHN1Y2Nlc3NmdWxseSBwYXJzZSBjb21wdXRh
dGlvbmFsbHkgZGVwZW5kZW50IHZhbHVlcyAobGlrZSBlbSB1bml0cykuCiAgICAgICAgIC8vIFdl
IGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhbHVlcyB0byBiZSBhY2N1cmF0ZSwgc2luY2UgdGhl
eSB3aWxsIGJlIHJlamVjdGVkIGxhdGVyIGFueXdheQogICAgICAgICBzdHlsZVJlc29sdmVyLmFw
cGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SW52YWxpZCwgbnVsbHB0ciwgc3R5bGVSZXNv
bHZlci5kZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnVw
ZGF0ZUZvbnQoKTsKIAogICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGRlcGVuZGVuY2ll
czsKICAgICAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0
eVZhbHVlRGVwZW5kZW5jaWVzKGRlc2NyaXB0b3Iuc3ludGF4LCBmYWxzZSwgZGVwZW5kZW5jaWVz
LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwpAQCAt
NTksNyArNTksOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01DU1NSZWdpc3RlckN1c3RvbVByb3Bl
cnR5OjpyZWdpc3RlclByb3BlcnR5KERvY3VtZW50JiBkb2N1bQogICAgICAgICBpZiAoIWRlcGVu
ZGVuY2llcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4
RXJyb3IsICJUaGUgZ2l2ZW4gaW5pdGlhbCB2YWx1ZSBtdXN0IGJlIGNvbXB1dGF0aW9uYWxseSBp
bmRlcGVuZGVudC4iIH07CiAKLSAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NTUHJvcGVydHlQYXJz
ZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3IubmFtZSwgZGVzY3Jp
cHRvci5zeW50YXgsIHRva2VuaXplci50b2tlblJhbmdlKCksIHN0eWxlUmVzb2x2ZXIsIHN0cmlj
dENTU1BhcnNlckNvbnRleHQoKSk7CisgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0Owor
ICAgICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGR1bW15Q2FzY2FkZShzdHlsZVJlc29sdmVy
LCBtYXRjaFJlc3VsdCwgeyB9KTsKKyAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NTUHJvcGVydHlQ
YXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3IubmFtZSwgZGVz
Y3JpcHRvci5zeW50YXgsIHRva2VuaXplci50b2tlblJhbmdlKCksIGR1bW15Q2FzY2FkZSwgc3Ry
aWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKIAogICAgICAgICBpZiAoIWluaXRpYWxWYWx1ZSB8fCAh
aW5pdGlhbFZhbHVlLT5pc1Jlc29sdmVkKCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IsICJUaGUgZ2l2ZW4gaW5pdGlhbCB2YWx1ZSBkb2VzIG5vdCBwYXJzZSBm
b3IgdGhlIGdpdmVuIHN5bnRheC4iIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKaW5kZXgg
OGVlNTgzZWQxN2UuLmJlNzZjMWNlMzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCkBA
IC0zMCwxNCArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgQ1NTUmVn
aXN0ZXJlZEN1c3RvbVByb3BlcnR5OwogY2xhc3MgQ1NTVmFsdWU7Ci1jbGFzcyBTdHlsZVJlc29s
dmVyOwogc3RydWN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eTsKIAorbmFtZXNwYWNlIFN0
eWxlIHsKK2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK30KKwogY2xhc3MgU3R5bGVCdWlsZGVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFN0
eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYsIGJvb2wgaXNJbml0aWFsLCBib29sIGlzSW5oZXJpdCwg
Y29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Kik7CisgICAgc3RhdGljIHZvaWQgYXBw
bHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFs
dWUmLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVyZWRD
dXN0b21Qcm9wZXJ0eSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4IDgyYjQ2ZmUwZDEyLi5mZGRj
ODY3YTgwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaApA
QCAtNDcsMTEgKzQ3LDExIEBACiAjaW5jbHVkZSAiR3JpZFBvc2l0aW9uc1Jlc29sdmVyLmgiCiAj
aW5jbHVkZSAiTGVuZ3RoLmgiCiAjaW5jbHVkZSAiUGFpci5oIgorI2luY2x1ZGUgIlByb3BlcnR5
Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlF1b3Rlc0RhdGEuaCIKICNpbmNsdWRlICJSdW50aW1lRW5h
YmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVT
Y3JvbGxTbmFwUG9pbnRzLmgiCiAjaW5jbHVkZSAiVGFiU2l6ZS5oIgogI2luY2x1ZGUgIlRvdWNo
QWN0aW9uLmgiCkBAIC02MywxMDcgKzYzLDEwNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBO
b3RlIHRoYXQgd2UgYXNzdW1lIHRoZSBDU1MgcGFyc2VyIG9ubHkgYWxsb3dzIHZhbGlkIENTU1Zh
bHVlIHR5cGVzLgogY2xhc3MgU3R5bGVCdWlsZGVyQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5ndGggY29udmVy
dExlbmd0aFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhNYXhTaXppbmcoY29uc3QgU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRhYlNpemUgY29udmVydFRhYlNpemUo
Y29uc3QgU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RhdGljIFQgY29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZl
cnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBMZW5ndGhTaXplIGNvbnZlcnRSYWRpdXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aFBvaW50IGNvbnZlcnRPYmplY3RQb3NpdGlv
bihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uU2V0
PFRleHREZWNvcmF0aW9uPiBjb252ZXJ0VGV4dERlY29yYXRpb24oU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVy
dE51bWJlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TnVtYmVyT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBzaG9ydCBjb252ZXJ0V2Via2l0SHlwaGVuYXRl
TGltaXRMaW5lcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0
ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgTmluZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlckltYWdl
KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+
IHN0YXRpYyBOaW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZVJlc29sdmVyJiwg
Q1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgUmVmUHRyPFN0
eWxlSW1hZ2U+IGNvbnZlcnRTdHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBUcmFuc2Zvcm1PcGVyYXRpb25zIGNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3Ro
KGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBMZW5ndGggY29udmVydExlbmd0aE9yQXV0byhjb25zdCBTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhT
aXppbmcoY29uc3QgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBUYWJTaXplIGNvbnZl
cnRUYWJTaXplKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRDb21wdXRlZExlbmd0
aChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TGluZVdpZHRoKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0U3BhY2lu
ZyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
TGVuZ3RoU2l6ZSBjb252ZXJ0UmFkaXVzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGhQb2ludCBjb252ZXJ0T2JqZWN0UG9zaXRpb24o
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9w
dGlvblNldDxUZXh0RGVjb3JhdGlvbj4gY29udmVydFRleHREZWNvcmF0aW9uKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0YXRpYyBUIGNvbnZlcnROdW1iZXIoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51bWJl
ck9yQXV0byhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgc2hvcnQgY29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJ
RD4gc3RhdGljIE5pbmVQaWVjZUltYWdlIGNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0
aWMgTmluZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlck1hc2soU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYsIENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIFJlZlB0
cjxTdHlsZUltYWdlPiBjb252ZXJ0U3R5bGVJbWFnZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9ucyBjb252ZXJ0VHJhbnNm
b3JtKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJM
RShEQVJLX01PREVfQ1NTKQotICAgIHN0YXRpYyBTdHlsZUNvbG9yU2NoZW1lIGNvbnZlcnRDb2xv
clNjaGVtZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3R5
bGVDb2xvclNjaGVtZSBjb252ZXJ0Q29sb3JTY2hlbWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJp
bmcoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0U3RyaW5nT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yTm9uZShTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBj
b252ZXJ0VGV4dEVtcGhhc2lzUG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
Jik7Ci0gICAgc3RhdGljIFRleHRBbGlnbk1vZGUgY29udmVydFRleHRBbGlnbihTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiBjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0g
ICAgc3RhdGljIFJlc2l6ZSBjb252ZXJ0UmVzaXplKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVT
cGVlZChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPFF1
b3Rlc0RhdGE+IGNvbnZlcnRRdW90ZXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBjb252ZXJ0VGV4dFVuZGVybGluZVBv
c2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0
VW5kZXJsaW5lT2Zmc2V0IGNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBj
b252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7Ci0gICAgc3RhdGljIFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IGNvbnZlcnRSZWZsZWN0
aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBJbnRTaXpl
IGNvbnZlcnRJbml0aWFsTGV0dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25TZXQ8TGluZUJveENvbnRhaW4+IGNv
bnZlcnRMaW5lQm94Q29udGFpbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uU2tpcD4gY29udmVydFRleHREZWNvcmF0
aW9uU2tpcChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVm
UHRyPFNoYXBlVmFsdWU+IGNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZyhTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmdP
ckF1dG8oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRp
b24+IGNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVGV4dEFsaWduTW9kZSBjb252ZXJ0VGV4dEFs
aWduKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGNvbnZlcnRDbGlwUGF0aChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVzaXplIGNvbnZlcnRS
ZXNpemUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVNwZWVkKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBSZWY8
UXVvdGVzRGF0YT4gY29udmVydFF1b3RlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVGV4dFVuZGVybGluZVBvc2l0aW9uIGNvbnZlcnRUZXh0
VW5kZXJsaW5lUG9zaXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFRleHRVbmRlcmxpbmVPZmZzZXQgY29udmVydFRleHRVbmRlcmxpbmVP
ZmZzZXQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gY29udmVydFJlZmxlY3Rpb24oU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEludFNpemUgY29udmVydElu
aXRpYWxMZXR0ZXIoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIGZsb2F0IGNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxMaW5lQm94Q29u
dGFpbj4gY29udmVydExpbmVCb3hDb250YWluKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBj
b252ZXJ0VGV4dERlY29yYXRpb25Ta2lwKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8U2hhcGVWYWx1ZT4gY29udmVydFNoYXBlVmFs
dWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLSAgICBzdGF0aWMgU2Nyb2xsU25hcFR5cGUgY29udmVydFNjcm9sbFNuYXBU
eXBlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTY3JvbGxT
bmFwQWxpZ24gY29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgU2Nyb2xsU25hcFR5cGUgY29udmVydFNjcm9sbFNuYXBUeXBl
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBT
Y3JvbGxTbmFwQWxpZ24gY29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0YXRpYyBHcmlkVHJhY2tTaXpl
IGNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gY29udmVydEdyaWRUcmFja1NpemVMaXN0
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxH
cmlkUG9zaXRpb24+IGNvbnZlcnRHcmlkUG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIEdyaWRBdXRvRmxvdyBjb252ZXJ0R3JpZEF1dG9GbG93KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5n
dGg+IGNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IGNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252
ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gY29udmVydEZpbHRlck9wZXJhdGlv
bnMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdyaWRUcmFj
a1NpemUgY29udmVydEdyaWRUcmFja1NpemUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBjb252ZXJ0R3Jp
ZFRyYWNrU2l6ZUxpc3QoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIE9wdGlvbmFsPEdyaWRQb3NpdGlvbj4gY29udmVydEdyaWRQb3NpdGlvbihT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR3Jp
ZEF1dG9GbG93IGNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNv
bnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydFdvcmRT
cGFjaW5nKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBPcHRpb25hbDxmbG9hdD4gY29udmVydFBlcnNwZWN0aXZlKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNv
bnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxGaWx0ZXJPcGVyYXRpb25zPiBjb252ZXJ0Rmls
dGVyT3BlcmF0aW9ucyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBib29sIGNvbnZlcnRUb3VjaENh
bGxvdXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGJvb2wg
Y29udmVydFRvdWNoQ2FsbG91dChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgc3RhdGljIENvbG9y
IGNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgQ29sb3IgY29udmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFBPSU5U
RVJfRVZFTlRTKQotICAgIHN0YXRpYyBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IGNvbnZlcnRUb3Vj
aEFjdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0
aW9uU2V0PFRvdWNoQWN0aW9uPiBjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NS
T0xMSU5HX1RPVUNIKQotICAgIHN0YXRpYyBib29sIGNvbnZlcnRPdmVyZmxvd1Njcm9sbGluZyhT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CiAjZW5kaWYKLSAgICBzdGF0aWMgRm9udEZlYXR1cmVTZXR0aW5ncyBjb252ZXJ0Rm9udEZl
YXR1cmVTZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgRm9udEZlYXR1cmVTZXR0aW5ncyBjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgRm9udFNlbGVj
dGlvblZhbHVlIGNvbnZlcnRGb250V2VpZ2h0RnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVlJik7CiAg
ICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0cmV0Y2hGcm9tVmFsdWUo
Y29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVl
PiBjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFdlaWdodChTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250
U3RyZXRjaChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgRm9u
dFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3R5bGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFdlaWdo
dChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
Rm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3RyZXRjaChTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNv
bnZlcnRGb250U3R5bGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICBzdGF0aWMgRm9udFZhcmlhdGlvblNl
dHRpbmdzIGNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBjb252ZXJ0Rm9u
dFZhcmlhdGlvblNldHRpbmdzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1
ZSYpOwogI2VuZGlmCi0gICAgc3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnZlcnRTVkdMZW5ndGhW
YWx1ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGNvbnZl
cnRTdHJva2VEYXNoQXJyYXkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAg
c3RhdGljIFBhaW50T3JkZXIgY29udmVydFBhaW50T3JkZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFNWR1VSSVJl
ZmVyZW5jZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQ29s
b3IgY29udmVydFNWR0NvbG9yKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIGNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25t
ZW50RGF0YShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3R5
bGVDb250ZW50QWxpZ25tZW50RGF0YSBjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24g
Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb25PckF1
dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFs
PExlbmd0aD4gY29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
JiwgZmxvYXQgbXVsdGlwbGllciA9IDEuZik7Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29u
dmVydEZvbnRTeW50aGVzaXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFNWR0xlbmd0
aFZhbHVlPiBjb252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGNvbnZl
cnRTdHJva2VEYXNoQXJyYXkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFBhaW50T3JkZXIgY29udmVydFBhaW50T3JkZXIoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnRP
cGFjaXR5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBTdHJpbmcgY29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQ29sb3IgY29udmVydFNWR0NvbG9yKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhIGNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25tZW50RGF0YShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3R5bGVD
b250ZW50QWxpZ25tZW50RGF0YSBjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdseXBoT3JpZW50
YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNv
bnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBo
T3JpZW50YXRpb25PckF1dG8oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydExpbmVIZWlnaHQoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiwgZmxvYXQgbXVsdGlwbGllciA9IDEu
Zik7CisgICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29udmVydEZvbnRTeW50aGVzaXMoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgCi0gICAgc3RhdGljIEJy
ZWFrQmV0d2VlbiBjb252ZXJ0UGFnZUJyZWFrQmV0d2VlbihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydFBhZ2VCcmVha0luc2lk
ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQnJlYWtCZXR3
ZWVuIGNvbnZlcnRDb2x1bW5CcmVha0JldHdlZW4oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7Ci0gICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRDb2x1bW5CcmVha0luc2lkZShT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtCZXR3ZWVu
IGNvbnZlcnRQYWdlQnJlYWtCZXR3ZWVuKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0UGFnZUJyZWFrSW5zaWRl
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBC
cmVha0JldHdlZW4gY29udmVydENvbHVtbkJyZWFrQmV0d2VlbihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydENv
bHVtbkJyZWFrSW5zaWRlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYp
OwogCi0gICAgc3RhdGljIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IGNvbnZlcnRIYW5n
aW5nUHVuY3R1YXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IGNvbnZlcnRIYW5naW5nUHVuY3R1YXRp
b24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0
aWMgT3B0aW9uU2V0PFNwZWFrQXM+IGNvbnZlcnRTcGVha0FzKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8U3BlYWtBcz4gY29udmVydFNwZWFr
QXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0
aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZ
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29u
dmVydFBvc2l0aW9uQ29tcG9uZW50WChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgR2Fw
TGVuZ3RoIGNvbnZlcnRHYXBMZW5ndGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIEdhcExlbmd0aCBjb252ZXJ0R2FwTGVuZ3RoKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgU3R5bGVCdWlsZGVyQ3VzdG9tOwpAQCAtMTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gdmFsdWVUb0VtcGhhc2lzUG9z
aXRpb24oY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICAgICBzdGF0aWMgT3B0aW9uU2V0PFRl
eHREZWNvcmF0aW9uU2tpcD4gdmFsdWVUb0RlY29yYXRpb25Ta2lwKGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJik7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBzdGF0aWMgTGVuZ3Ro
IHBhcnNlU25hcENvb3JkaW5hdGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIExlbmd0aCBwYXJzZVNuYXBDb29yZGluYXRlKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NT
UykKQEAgLTE4MCwyMyArMTgwLDIzIEBAIHByaXZhdGU6CiAjZW5kaWYKIAogICAgIHN0YXRpYyBM
ZW5ndGggY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGNvbnN0IExlbmd0aCYpOwotICAg
IHRlbXBsYXRlPENTU1ZhbHVlSUQsIENTU1ZhbHVlSUQ+IHN0YXRpYyBMZW5ndGggY29udmVydFBv
c2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYp
OworICAgIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENTU1ZhbHVlSUQ+IHN0YXRpYyBMZW5ndGggY29u
dmVydFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NQ
cmltaXRpdmVWYWx1ZSYpOwogCi0gICAgc3RhdGljIEdyaWRMZW5ndGggY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYsIFN0eWxlUmVzb2x2ZXImKTsKLSAgICBz
dGF0aWMgR3JpZFRyYWNrU2l6ZSBjcmVhdGVHcmlkVHJhY2tTaXplKGNvbnN0IENTU1ZhbHVlJiwg
U3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyBHcmlkTGVuZ3RoIGNyZWF0ZUdyaWRUcmFja0Jy
ZWFkdGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7
CisgICAgc3RhdGljIEdyaWRUcmFja1NpemUgY3JlYXRlR3JpZFRyYWNrU2l6ZShjb25zdCBDU1NW
YWx1ZSYsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKICAgICBzdHJ1Y3QgVHJhY2tzRGF0YTsK
LSAgICBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiwgVHJh
Y2tzRGF0YSYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJh
Y2tMaXN0KGNvbnN0IENTU1ZhbHVlJiwgVHJhY2tzRGF0YSYsIFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24oY29uc3QgQ1NTVmFsdWUm
LCBHcmlkUG9zaXRpb24mKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVJbXBsaWNpdE5hbWVkR3Jp
ZExpbmVzRnJvbUdyaWRBcmVhKGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmLCBOYW1lZEdyaWRMaW5l
c01hcCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbik7Ci0gICAgc3RhdGljIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rv
cihTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJik7CiB9OwogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExlbmd0aChjb25zdCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzRm9y
TGVuZ3RoKCkgPwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCi0gICAgICAgIDogc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gcHJvcGVydHlDYXNjYWRlLnVzZVNW
R1pvb21SdWxlc0Zvckxlbmd0aCgpID8KKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQorICAgICAgICA6
IHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJp
bWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKQEAgLTIx
NCwxOSArMjE0LDE5IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0TGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzCiAgICAgcmV0dXJuIExlbmd0
aCgwLCBGaXhlZCk7CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAg
ICAgIHJldHVybiBMZW5ndGgoQXV0byk7Ci0gICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoc3R5bGVS
ZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoKHByb3BlcnR5Q2FzY2Fk
ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExlbmd0aFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExlbmd0aFNpemluZyhjb25zdCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0
eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgc3dpdGNoIChw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAg
ICAgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAg
ICByZXR1cm4gY29udmVydExlbmd0aChwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKICAgICBjYXNl
IENTU1ZhbHVlSW50cmluc2ljOgogICAgICAgICByZXR1cm4gTGVuZ3RoKEludHJpbnNpYyk7CiAg
ICAgY2FzZSBDU1NWYWx1ZU1pbkludHJpbnNpYzoKQEAgLTI1MCwyOSArMjUwLDI5IEBAIGlubGlu
ZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoU2l6aW5nKGNvbnN0
IFN0eWxlUmVzb2x2ZXImIHN0CiAgICAgfQogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydExlbmd0aE1heFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aE1heFNpemluZyhjb25zdCBTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKQogICAgICAgICByZXR1cm4gTGVuZ3RoKFVuZGVmaW5lZCk7Ci0gICAgcmV0
dXJuIGNvbnZlcnRMZW5ndGhTaXppbmcoc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVy
biBjb252ZXJ0TGVuZ3RoU2l6aW5nKHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQogCi1pbmxp
bmUgVGFiU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUYWJTaXplKGNvbnN0IFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSBUYWJTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRhYlNpemUoY29uc3QgU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQogICAgICAg
ICByZXR1cm4gVGFiU2l6ZShwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCksIFNwYWNlVmFsdWVU
eXBlKTsKLSAgICByZXR1cm4gVGFiU2l6ZShwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZs
b2F0PihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSwg
TGVuZ3RoVmFsdWVUeXBlKTsKKyAgICByZXR1cm4gVGFiU2l6ZShwcmltaXRpdmVWYWx1ZS5jb21w
dXRlTGVuZ3RoPGZsb2F0Pihwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpKSwgTGVuZ3RoVmFsdWVUeXBlKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGlu
ZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmNvbXB1dGVMZW5ndGg8
VD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Cisg
ICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuY29tcHV0ZUxlbmd0
aDxUPihwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIH0KIAog
dGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lk
dGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
KSB7CkBAIC0yODUsMTYgKzI4NSwxNiBAQCBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgYwogICAgIGNh
c2UgQ1NTVmFsdWVJbnZhbGlkOiB7CiAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQgdGhh
dCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAgICAg
ICAvLyBUaGlzIGtlZXBzIGJvcmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAgVCBy
ZXN1bHQgPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8VD4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOwot
ICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnN0eWxlKCktPmVmZmVjdGl2ZVpvb20o
KSA8IDEuMGYgJiYgcmVzdWx0IDwgMS4wKSB7Ci0gICAgICAgICAgICBUIG9yaWdpbmFsTGVuZ3Ro
ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMCkpOwor
ICAgICAgICBUIHJlc3VsdCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxUPihwcm9wZXJ0eUNhc2Nh
ZGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmVmZmVjdGl2
ZVpvb20oKSA8IDEuMGYgJiYgcmVzdWx0IDwgMS4wKSB7CisgICAgICAgICAgICBUIG9yaWdpbmFs
TGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxUPihwcm9wZXJ0eUNhc2NhZGUu
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMCkpOwog
ICAgICAgICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICBy
ZXR1cm4gMTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBtaW5pbXVtTGluZVdpZHRoID0gMSAv
IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBm
bG9hdCBtaW5pbXVtTGluZVdpZHRoID0gMSAvIHByb3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgpLmRl
dmljZVNjYWxlRmFjdG9yKCk7CiAgICAgICAgIGlmIChyZXN1bHQgPiAwICYmIHJlc3VsdCA8IG1p
bmltdW1MaW5lV2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gbWluaW11bUxpbmVXaWR0aDsKLSAg
ICAgICAgcmV0dXJuIGZsb29yVG9EZXZpY2VQaXhlbChyZXN1bHQsIHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgcmV0dXJuIGZsb29yVG9EZXZp
Y2VQaXhlbChyZXN1bHQsIHByb3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwogICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKQEAgLTMwMiwxNSArMzAyLDE1IEBAIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjCiAgICAgfQog
fQogCi1pbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyhT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyhTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1h
bCkKICAgICAgICAgcmV0dXJuIDAuZjsKIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEg
Y29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgp
ID8KLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQotICAgICAgICA6IHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHByb3BlcnR5Q2FzY2FkZS51c2VTVkdab29tUnVs
ZXNGb3JMZW5ndGgoKSA/CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikKKyAgICAgICAgOiBwcm9wZXJ0
eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogICAgIHJldHVybiBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0Pihjb252ZXJzaW9uRGF0YSk7CiB9CiAKQEAgLTMy
MywxMyArMzIzLDEzIEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0VG9SYWRpdXNMZW5ndGgoQ1NTVG9MZW5ndGhDb252ZXJzaW9uCiAgICAgcmV0dXJuIHZhbHVl
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CiB9CiAKLWlubGluZSBMZW5n
dGhTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJhZGl1cyhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoU2l6
ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byogcGFpciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkucGFpclZhbHVlKCk7
CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKICAg
ICAgICAgcmV0dXJuIHsgeyAwLCBGaXhlZCB9LCB7IDAsIEZpeGVkIH0gfTsKIAotICAgIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRl
KCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEgY29udmVyc2lvbkRhdGEgPSBwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpOwogICAgIExlbmd0aFNpemUgcmFkaXVzIHsgY29udmVydFRvUmFkaXVzTGVuZ3Ro
KGNvbnZlcnNpb25EYXRhLCAqcGFpci0+Zmlyc3QoKSksIGNvbnZlcnRUb1JhZGl1c0xlbmd0aChj
b252ZXJzaW9uRGF0YSwgKnBhaXItPnNlY29uZCgpKSB9OwogCiAgICAgQVNTRVJUKCFyYWRpdXMu
d2lkdGguaXNOZWdhdGl2ZSgpKTsKQEAgLTM1NCwxOCArMzU0LDE4IEBAIGlubGluZSBMZW5ndGgg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoY29u
c3QgTGVuZ3RoCiAgICAgcmV0dXJuIExlbmd0aChDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoV1RG
TW92ZShvcCksIFZhbHVlUmFuZ2VBbGwpKTsKIH0KIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgoU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
cmV0dXJuIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlUmln
aHQ+KHN0eWxlUmVzb2x2ZXIsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwor
ICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1
ZVJpZ2h0Pihwcm9wZXJ0eUNhc2NhZGUsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpOwogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBv
c2l0aW9uQ29tcG9uZW50WShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVydFBvc2l0aW9u
Q29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4oc3R5bGVSZXNvbHZlciwgZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgcmV0dXJuIGNvbnZlcnRQb3Np
dGlvbkNvbXBvbmVudDxDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KHByb3BlcnR5Q2FzY2Fk
ZSwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRlPENT
U1ZhbHVlSUQgY3NzVmFsdWVGb3IwLCBDU1NWYWx1ZUlEIGNzc1ZhbHVlRm9yMTAwPgotaW5saW5l
IExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9u
Q29tcG9uZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3Qg
Q1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAKQEAgLTM5
Miw3ICszOTIsNyBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImIHN0eQogICAgICAgICB9CiAgICAgfQog
ICAgICAgICAKLSAgICBsZW5ndGggPSBjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsICpsZW5n
dGhWYWx1ZSk7CisgICAgbGVuZ3RoID0gY29udmVydExlbmd0aChwcm9wZXJ0eUNhc2NhZGUsICps
ZW5ndGhWYWx1ZSk7CiAKICAgICBpZiAocmVsYXRpdmVUb1RyYWlsaW5nRWRnZSkKICAgICAgICAg
bGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGxlbmd0aCk7CkBAIC00MDAs
MjAgKzQwMCwyMCBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImIHN0eQogICAgIHJldHVybiBsZW5ndGg7
CiB9CiAKLWlubGluZSBMZW5ndGhQb2ludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRP
YmplY3RQb3NpdGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoUG9pbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0T2JqZWN0UG9zaXRpb24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRl
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmlt
aXRpdmVWYWx1ZS5wYWlyVmFsdWUoKTsKICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkg
fHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxP
YmplY3RQb3NpdGlvbigpOwogCi0gICAgTGVuZ3RoIGxlbmd0aFggPSBjb252ZXJ0UG9zaXRpb25D
b21wb25lbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1ZVJpZ2h0PihzdHlsZVJlc29sdmVyLCAqcGFp
ci0+Zmlyc3QoKSk7Ci0gICAgTGVuZ3RoIGxlbmd0aFkgPSBjb252ZXJ0UG9zaXRpb25Db21wb25l
bnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tPihzdHlsZVJlc29sdmVyLCAqcGFpci0+c2Vj
b25kKCkpOworICAgIExlbmd0aCBsZW5ndGhYID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENT
U1ZhbHVlTGVmdCwgQ1NTVmFsdWVSaWdodD4ocHJvcGVydHlDYXNjYWRlLCAqcGFpci0+Zmlyc3Qo
KSk7CisgICAgTGVuZ3RoIGxlbmd0aFkgPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFs
dWVUb3AsIENTU1ZhbHVlQm90dG9tPihwcm9wZXJ0eUNhc2NhZGUsICpwYWlyLT5zZWNvbmQoKSk7
CiAKICAgICByZXR1cm4gTGVuZ3RoUG9pbnQobGVuZ3RoWCwgbGVuZ3RoWSk7CiB9CiAKLWlubGlu
ZSBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFRleHREZWNvcmF0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0
RGVjb3JhdGlvbigpOwogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewpAQCAtNDI0
LDIwICs0MjQsMjAgQEAgaW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb24oU3QKIH0KIAogdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KLWlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlcihT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkudmFsdWU8VD4oQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogfQog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TnVtYmVyT3JBdXRvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51
bWJlck9yQXV0byhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gLTE7Ci0g
ICAgcmV0dXJuIGNvbnZlcnROdW1iZXI8VD4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJl
dHVybiBjb252ZXJ0TnVtYmVyPFQ+KHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQogCi1pbmxp
bmUgc2hvcnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGlt
aXRMaW5lcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHNo
b3J0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGlu
ZXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vTGltaXQp
CkBAIC00NDYsMzEgKzQ0NiwzMSBAQCBpbmxpbmUgc2hvcnQgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZVJlc29sdgogfQogCiB0ZW1w
bGF0ZTxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgotaW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlckltYWdlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBOaW5lUGllY2VJbWFn
ZSBpbWFnZTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdl
KHByb3BlcnR5LCAmdmFsdWUsIGltYWdlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAo
KS5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CiAgICAgcmV0dXJu
IGltYWdlOwogfQogCiB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgotaW5saW5lIE5p
bmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlck1hc2soU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE5pbmVQ
aWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlck1hc2soU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoTmluZVBpZWNlSW1hZ2U6OlR5cGU6Ok1hc2spOwotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksICZ2
YWx1ZSwgaW1hZ2UpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVj
ZUltYWdlKHByb3BlcnR5LCAmdmFsdWUsIGltYWdlKTsKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAK
IHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+Ci1pbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHlsZUltYWdlKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHls
ZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOworICAgIHJldHVybiBwcm9wZXJ0eUNhc2NhZGUu
Y3JlYXRlU3R5bGVJbWFnZSh2YWx1ZSk7CiB9CiAKLWlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRyYW5zZm9ybShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVHJhbnNmb3JtT3Bl
cmF0aW9ucyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgVHJhbnNmb3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIHRyYW5zZm9ybXNGb3JW
YWx1ZSh2YWx1ZSwgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSwgb3BlcmF0aW9ucyk7CisgICAgdHJhbnNmb3Jtc0ZvclZhbHVlKHZhbHVlLCBwcm9wZXJ0
eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBvcGVyYXRpb25zKTsKICAgICBy
ZXR1cm4gb3BlcmF0aW9uczsKIH0KIApAQCAtNDk4LDcgKzQ5OCw3IEBAIGlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6dXBkYXRlQ29sb3JTY2hlbWUoY29uc3QgQ1NTUHJpbWl0aXZl
VmFsdWUmIHByCiAgICAgfQogfQogCi1pbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFN0eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHlsZUNvbG9yU2NoZW1lIGNvbG9yU2NoZW1lOwogCkBA
IC01MTYsMjMgKzUxNiwyMyBAQCBpbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJgogfQogI2VuZGlmCiAK
LWlubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3RyaW5nIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpLnN0cmluZ1ZhbHVlKCk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHBy
b3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAg
ICAgICAgIHJldHVybiBudWxsQXRvbSgpOwotICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFN0cmluZyhwcm9wZXJ0eUNhc2Nh
ZGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTdHJpbmdPck5vbmUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRTdHJpbmdPck5vbmUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIG51
bGxBdG9tKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRTdHJpbmcoc3R5bGVSZXNvbHZlciwgdmFsdWUp
OworICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHByb3BlcnR5Q2FzY2FkZSwgdmFsdWUpOwogfQog
CiBpbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OnZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBw
cmltaXRpdmVWYWx1ZSkKQEAgLTU1Niw3ICs1NTYsNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFRleHRF
bXBoYXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnZhbHVlVG9FbXBoYXNpc1Bv
cwogICAgIHJldHVybiBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc1Bvc2l0aW9uKCk7
CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFRleHRFbXBoYXNpc1Bvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0
aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbihT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICByZXR1cm4gdmFsdWVUb0Vt
cGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CkBAIC01
NjcsNyArNTY3LDcgQEAgaW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEVtcGhhc2kKICAgICByZXR1cm4gcG9zaXRp
b247CiB9CiAKLWlubGluZSBUZXh0QWxpZ25Nb2RlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgVGV4dEFsaWduTW9kZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRUZXh0QWxpZ24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIEFTU0VSVChwcmltaXRpdmVWYWx1
ZS5pc1ZhbHVlSUQoKSk7CkBAIC01NzUsMjEgKzU3NSwyMSBAQCBpbmxpbmUgVGV4dEFsaWduTW9k
ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYg
c3R5bAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgIT0gQ1NTVmFsdWVXZWJraXRN
YXRjaFBhcmVudCkKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlOwogCi0gICAgYXV0byog
cGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7Ci0gICAgaWYgKHBhcmVu
dFN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpTdGFydCkKLSAgICAgICAgcmV0
dXJuIHBhcmVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0QWxpZ25Nb2Rl
OjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7Ci0gICAgaWYgKHBhcmVudFN0eWxlLT50ZXh0
QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQpCi0gICAgICAgIHJldHVybiBwYXJlbnRTdHls
ZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9kZTo6UmlnaHQgOiBUZXh0
QWxpZ25Nb2RlOjpMZWZ0OwotICAgIHJldHVybiBwYXJlbnRTdHlsZS0+dGV4dEFsaWduKCk7Cisg
ICAgYXV0byYgcGFyZW50U3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKTsKKyAg
ICBpZiAocGFyZW50U3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6U3RhcnQpCisg
ICAgICAgIHJldHVybiBwYXJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0
QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7CisgICAgaWYgKHBhcmVudFN0
eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OkVuZCkKKyAgICAgICAgcmV0dXJuIHBh
cmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1vZGU6OlJpZ2h0
IDogVGV4dEFsaWduTW9kZTo6TGVmdDsKKyAgICByZXR1cm4gcGFyZW50U3R5bGUudGV4dEFsaWdu
KCk7CiB9CiAKLWlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkgewogICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZlVmFsdWUuc3Ry
aW5nVmFsdWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VSSVJlZmVyZW5j
ZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwgcHJv
cGVydHlDYXNjYWRlLmRvY3VtZW50KCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNu
J3Qgd29yayB3aXRoIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjEzMykKICAgICAgICAgICAgIHJldHVybiBSZWZl
cmVuY2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCBmcmFnbWVudCk7CiAg
ICAgICAgIH0KQEAgLTYwNCw3ICs2MDQsNyBAQCBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0
aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZVJlcwogICAg
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihj
dXJyZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgp
KSB7CiAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhdGlvbik7Ci0gICAgICAgICAgICBvcGVyYXRp
b24gPSBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0
eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksICpwcmltaXRp
dmVWYWx1ZS5zaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbiA9IFNoYXBlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUocHJvcGVydHlDYXNjYWRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVlLnNoYXBlVmFsdWUo
KSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVl
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAgICAgICAgICAgICAgICB8fCBwcmlt
aXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKQEAgLTYyNywyMCArNjI3
LDIwIEBAIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlUmVzCiAgICAgcmV0dXJuIG9wZXJhdGlvbjsKIH0K
IAotaW5saW5lIFJlc2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZXNpemUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IFJlc2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZXNpemUoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogCiAgICAgUmVzaXplIHJlc2l6ZSA9IFJlc2l6ZTo6Tm9uZTsKICAgICBpZiAocHJpbWl0
aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmVzaXplID0gc3R5
bGVSZXNvbHZlci5zZXR0aW5ncygpLnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUmVzaXplOjpC
b3RoIDogUmVzaXplOjpOb25lOworICAgICAgICByZXNpemUgPSBwcm9wZXJ0eUNhc2NhZGUuZG9j
dW1lbnQoKS5zZXR0aW5ncygpLnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUmVzaXplOjpCb3Ro
IDogUmVzaXplOjpOb25lOwogICAgIGVsc2UKICAgICAgICAgcmVzaXplID0gcHJpbWl0aXZlVmFs
dWU7CiAKICAgICByZXR1cm4gcmVzaXplOwogfQogCi1pbmxpbmUgaW50IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVJbmZpbml0ZSkKQEAgLTY1MCw3ICs2NTAsNyBAQCBpbmxpbmUgaW50IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVzb2x2ZXImLCBj
b25zdAogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgpOwogfQogCi1pbmxpbmUg
aW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZChTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaW50IHNwZWVkID0gODU7CkBAIC02Nzks
NyArNjc5LDcgQEAgaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJx
dWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1YKICAgICByZXR1cm4gc3BlZWQ7CiB9
CiAKLWlubGluZSBSZWY8UXVvdGVzRGF0YT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UXVvdGVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVm
PFF1b3Rlc0RhdGE+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFF1b3RlcyhTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtNzAy
LDEzICs3MDIsMTMgQEAgaW5saW5lIFJlZjxRdW90ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRRdW90ZXMoU3R5bGVSZXNvbHZlciYsIGNvbnMKICAgICByZXR1cm4gUXVvdGVz
RGF0YTo6Y3JlYXRlKHF1b3Rlcyk7CiB9CiAKLWlubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVGV4dFVuZGVybGluZVBv
c2l0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVQb3NpdGlv
bihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICByZXR1cm4gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIH0KIAotaW5saW5lIFRleHRVbmRlcmxpbmVP
ZmZzZXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZU9mZnNldChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgVGV4dFVuZGVybGluZU9mZnNldCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
VW5kZXJsaW5lT2Zmc2V0KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKTsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC03MTcsMTIgKzcxNywxMiBAQCBpbmxpbmUgVGV4dFVuZGVy
bGluZU9mZnNldCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zm
c2V0KFN0eQogICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aEF1
dG8oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuaXNMZW5n
dGgoKSk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5n
dGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYXV0byBj
b21wdXRlZExlbmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4ocHJvcGVydHlDYXNj
YWRlLCBwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0
OjpjcmVhdGVXaXRoTGVuZ3RoKGNvbXB1dGVkTGVuZ3RoKTsKICAgICB9CiB9CiAKLWlubGluZSBU
ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTczMywx
MiArNzMzLDEyIEBAIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNrCiAgICAgICAgIHJldHVybiBUZXh0
RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlRnJvbUZvbnQoKTsKICAgICBkZWZhdWx0OgogICAg
ICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gY29t
cHV0ZWRMZW5ndGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIs
IHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYXV0byBjb21wdXRlZExlbmd0aCA9IGNvbnZlcnRD
b21wdXRlZExlbmd0aDxmbG9hdD4ocHJvcGVydHlDYXNjYWRlLCBwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0aExlbmd0aChj
b21wdXRlZExlbmd0aCk7CiAgICAgfQogfQogCi1pbmxpbmUgUmVmUHRyPFN0eWxlUmVmbGVjdGlv
bj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVmbGVjdGlvbihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPFN0
eWxlUmVmbGVjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVmbGVjdGlvbihT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAg
ICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKTsKQEAgLTc0OSwxNiArNzQ5LDE2IEBAIGlubGluZSBSZWZQdHI8U3R5bGVS
ZWZsZWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZWZsZWN0aW9uKFN0eWxl
UmVzCiAKICAgICBhdXRvIHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0ZSgpOwog
ICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbihyZWZsZWN0VmFsdWUuZGlyZWN0aW9uKCkpOwot
ICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUub2Zmc2V0KCkuY29udmVydFRv
TGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1
bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpKSk7CisgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS5vZmZz
ZXQoKS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpKTsKIAogICAgIE5pbmVQaWVjZUltYWdlIG1hc2soTmluZVBpZWNl
SW1hZ2U6OlR5cGU6Ok1hc2spOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmlu
ZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0LCByZWZsZWN0VmFsdWUubWFz
aygpLCBtYXNrKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3QsIHJlZmxlY3RWYWx1ZS5tYXNrKCksIG1h
c2spOwogICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAgICByZXR1cm4gcmVmbGVj
dGlvbjsKIH0KIAotaW5saW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
SW5pdGlhbExldHRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SW5pdGlhbExldHRlcihT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
IApAQCAtNzczLDcgKzc3Myw3IEBAIGlubGluZSBJbnRTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydEluaXRpYWxMZXR0ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0CiAgICAgcmV0dXJu
IEludFNpemUocGFpci0+Zmlyc3QoKS0+aW50VmFsdWUoKSwgcGFpci0+c2Vjb25kKCktPmludFZh
bHVlKCkpOwogfQogCi1pbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
ZXh0U3Ryb2tlV2lkdGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCkBAIC03ODgsMTEgKzc4OCwxMSBAQCBp
bmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdpZHRo
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUgogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwogICAg
ICAgICBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IGVtc1ZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUocmVzdWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUykpOwotICAgICAgICB3aWR0
aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlciwgZW1zVmFsdWUp
OworICAgICAgICB3aWR0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4ocHJvcGVydHlD
YXNjYWRlLCBlbXNWYWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDogewotICAgICAgICB3aWR0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9h
dD4oc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB3aWR0aCA9IGNvbnZl
cnRDb21wdXRlZExlbmd0aDxmbG9hdD4ocHJvcGVydHlDYXNjYWRlLCBwcmltaXRpdmVWYWx1ZSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtODAzLDcgKzgwMyw3IEBA
IGlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0U3Ryb2tlV2lk
dGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSCiAgICAgcmV0dXJuIHdpZHRoOwogfQogCi1pbmxpbmUg
T3B0aW9uU2V0PExpbmVCb3hDb250YWluPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
aW5lQm94Q29udGFpbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIE9wdGlvblNldDxMaW5lQm94Q29udGFpbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0TGluZUJveENvbnRhaW4oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAg
ICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lKTsKQEAgLTgzNCw3ICs4MzQsNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFRl
eHREZWNvcmF0aW9uU2tpcD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjp2YWx1ZVRvRGVjb3JhdGlv
blNraQogICAgIHJldHVybiBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiB7IH07CiB9CiAK
LWlubGluZSBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblNraXAoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblNraXAoU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZhbHVlVG9EZWNvcmF0aW9uU2tpcChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKQEAgLTg1MCw3ICs4NTAsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNJbWFnZVNoYXBlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKICAg
ICByZXR1cm4gaXM8Q1NTSW1hZ2VWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+
KHZhbHVlKSB8fCBpczxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPih2YWx1ZSk7CiB9CiAKLWlubGlu
ZSBSZWZQdHI8U2hhcGVWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVW
YWx1ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBl
VmFsdWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAg
ICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09
IENTU1ZhbHVlTm9uZSk7CkBAIC04NTgsMTQgKzg1OCwxNCBAQCBpbmxpbmUgUmVmUHRyPFNoYXBl
VmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNv
bHZlcgogICAgIH0KIAogICAgIGlmIChpc0ltYWdlU2hhcGUodmFsdWUpKQotICAgICAgICByZXR1
cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSkucmVs
ZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGUocHJvcGVy
dHlDYXNjYWRlLmNyZWF0ZVN0eWxlSW1hZ2UodmFsdWUpLnJlbGVhc2VOb25OdWxsKCkpOwogCiAg
ICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwogICAgIENTU0JveFR5cGUgcmVmZXJlbmNlQm94
ID0gQ1NTQm94VHlwZTo6Qm94TWlzc2luZzsKICAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7
CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkpCi0gICAgICAgICAgICBzaGFw
ZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVWYWx1ZSgpKTsKKyAgICAgICAg
ICAgIHNoYXBlID0gYmFzaWNTaGFwZUZvclZhbHVlKHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVWYWx1ZS5zaGFwZVZhbHVlKCkpOwogICAgICAg
ICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94
CiAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3Jk
ZXJCb3gKICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZVBhZGRpbmdCb3gKQEAgLTg4OSw3ICs4ODksNyBAQCBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlcgog
CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAotaW5saW5lIFNjcm9sbFNuYXBUeXBlIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU2Nyb2xsU25hcFR5cGUgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBTY3JvbGxTbmFwVHlwZSB0eXBlOwog
ICAgIGF1dG8mIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwpAQCAtOTE0
LDcgKzkxNCw3IEBAIGlubGluZSBTY3JvbGxTbmFwVHlwZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZVJlc29sdmVyCiAgICAgcmV0dXJuIHR5cGU7CiB9
CiAKLWlubGluZSBTY3JvbGxTbmFwQWxpZ24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgU2Nyb2xsU25hcEFsaWduIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9s
bFNuYXBBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwog
ICAgIFNjcm9sbFNuYXBBbGlnbiBhbGlnbm1lbnQ7CkBAIC05MjgsNyArOTI4LDcgQEAgaW5saW5l
IFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFw
QWxpZ24oU3R5bGVSZXNvbHYKIAogI2VuZGlmCiAKLWlubGluZSBHcmlkTGVuZ3RoIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxp
bmUgR3JpZExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0JyZWFk
dGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlLCBTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU1pbkNvbnRlbnQgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
ID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKICAgICAgICAgcmV0dXJuIExlbmd0aChNaW5D
b250ZW50KTsKQEAgLTk0MCwyMyArOTQwLDIzIEBAIGlubGluZSBHcmlkTGVuZ3RoIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBDU1NQcmltaXRpCiAg
ICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRmxleCgpKQogICAgICAgICByZXR1cm4gR3JpZExlbmd0
aChwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpKTsKIAotICAgIHJldHVybiBwcmltaXRpdmVW
YWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252
ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oc3R5bGVSZXNv
bHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgcmV0dXJuIHBy
aW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihw
cm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIH0KIAotaW5saW5l
IEdyaWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tTaXpl
KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSBHcmlkVHJhY2tTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNr
U2l6ZShjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKLSAg
ICAgICAgcmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIHJl
dHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSwgcHJvcGVydHlDYXNjYWRlKSk7CiAKICAgICBBU1NFUlQoaXM8
Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpKTsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IGRv
d25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KHZhbHVlKTsKIAogICAgIGlmIChmdW5jdGlvbi5sZW5n
dGgoKSA9PSAxKQotICAgICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSksIHN0eWxlUmVzb2x2ZXIpLCBGaXRDb250ZW50VHJhY2tTaXppbmcpOwor
ICAgICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygw
KSksIHByb3BlcnR5Q2FzY2FkZSksIEZpdENvbnRlbnRUcmFja1NpemluZyk7CiAKICAgICBBU1NF
UlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmdW5jdGlvbi5sZW5ndGgoKSA9PSAyKTsKLSAg
ICBHcmlkTGVuZ3RoIG1pblRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygw
KSksIHN0eWxlUmVzb2x2ZXIpKTsKLSAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aChjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24u
aXRlbVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICBHcmlkTGVu
Z3RoIG1pblRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSksIHByb3Bl
cnR5Q2FzY2FkZSkpOworICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRU
cmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0
aG91dEJvdW5kc0NoZWNrKDEpKSwgcHJvcGVydHlDYXNjYWRlKSk7CiAgICAgcmV0dXJuIEdyaWRU
cmFja1NpemUobWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogfQogCkBAIC05ODgs
NyArOTg4LDcgQEAgcHVibGljOgogICAgIEF1dG9SZXBlYXRUeXBlIG1fYXV0b1JlcGVhdFR5cGUg
eyBSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRBdXRvUmVwZWF0VHlwZSgpIH07CiB9OwogCi1pbmxp
bmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QoY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlLCBUcmFja3NEYXRhJiB0cmFja3NEYXRhLCBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVH
cmlkVHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgVHJhY2tzRGF0YSYgdHJhY2tzRGF0
YSwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewogICAgIC8vIEhh
bmRsZSAnbm9uZScuCiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCkBAIC0x
MDAzLDcgKzEwMDMsNyBAQCBpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0
ZUdyaWRUcmFja0xpc3QoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBUcgogICAgICAgICAgICAgY3Jl
YXRlR3JpZExpbmVOYW1lc0xpc3QoY3VycmVudFZhbHVlLCBjdXJyZW50TmFtZWRHcmlkTGluZSwg
dHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzLCB0cmFja3NEYXRhLm1fb3JkZXJlZE5hbWVkR3Jp
ZExpbmVzKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICArK2N1cnJlbnROYW1lZEdyaWRM
aW5lOwotICAgICAgICAgICAgdHJhY2tzRGF0YS5tX3RyYWNrU2l6ZXMuYXBwZW5kKGNyZWF0ZUdy
aWRUcmFja1NpemUoY3VycmVudFZhbHVlLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAgICAgICB0
cmFja3NEYXRhLm1fdHJhY2tTaXplcy5hcHBlbmQoY3JlYXRlR3JpZFRyYWNrU2l6ZShjdXJyZW50
VmFsdWUsIHByb3BlcnR5Q2FzY2FkZSkpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMTAyMCw3
ICsxMDIwLDcgQEAgaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlk
VHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgVHIKICAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrYXV0b1JlcGVh
dEluZGV4OwotICAgICAgICAgICAgICAgIHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXpl
cy5hcHBlbmQoY3JlYXRlR3JpZFRyYWNrU2l6ZShhdXRvUmVwZWF0VmFsdWUuZ2V0KCksIHN0eWxl
UmVzb2x2ZXIpKTsKKyAgICAgICAgICAgICAgICB0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNr
U2l6ZXMuYXBwZW5kKGNyZWF0ZUdyaWRUcmFja1NpemUoYXV0b1JlcGVhdFZhbHVlLmdldCgpLCBw
cm9wZXJ0eUNhc2NhZGUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHRyYWNrc0RhdGEu
bV9hdXRvUmVwZWF0SW5zZXJ0aW9uUG9pbnQgPSBjdXJyZW50TmFtZWRHcmlkTGluZSsrOwogICAg
ICAgICAgICAgY29udGludWU7CkBAIC0xMTExLDcgKzExMTEsNyBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFy
ZWEoY29ucwogICAgIH0KIH0KIAotaW5saW5lIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9yPEdyaWRU
cmFja1NpemU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemVMaXN0
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZS5pc1ZhbHVlTGlzdCgpKTsKICAgICBhdXRvJiB2
YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKQEAgLTExMjEsMTcgKzEx
MjEsMTcgQEAgaW5saW5lIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHkKICAgICAgICAgQVNTRVJUKCFjdXJyVmFs
dWUtPmlzR3JpZExpbmVOYW1lc1ZhbHVlKCkpOwogICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+
aXNHcmlkQXV0b1JlcGVhdFZhbHVlKCkpOwogICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+aXNH
cmlkSW50ZWdlclJlcGVhdFZhbHVlKCkpOwotICAgICAgICB0cmFja1NpemVzLnVuY2hlY2tlZEFw
cGVuZChjb252ZXJ0R3JpZFRyYWNrU2l6ZShzdHlsZVJlc29sdmVyLCBjdXJyVmFsdWUpKTsKKyAg
ICAgICAgdHJhY2tTaXplcy51bmNoZWNrZWRBcHBlbmQoY29udmVydEdyaWRUcmFja1NpemUocHJv
cGVydHlDYXNjYWRlLCBjdXJyVmFsdWUpKTsKICAgICB9CiAgICAgcmV0dXJuIHRyYWNrU2l6ZXM7
CiB9CiAKLWlubGluZSBHcmlkVHJhY2tTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEdyaWRUcmFja1NpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIEdyaWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY3JlYXRlR3JpZFRyYWNr
U2l6ZSh2YWx1ZSwgc3R5bGVSZXNvbHZlcik7CisgICAgcmV0dXJuIGNyZWF0ZUdyaWRUcmFja1Np
emUodmFsdWUsIHByb3BlcnR5Q2FzY2FkZSk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxHcmlkUG9z
aXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRQb3NpdGlvbihTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPEdyaWRQb3Np
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFBvc2l0aW9uKFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgR3JpZFBvc2l0
aW9uIGdyaWRQb3NpdGlvbjsKICAgICBpZiAoY3JlYXRlR3JpZFBvc2l0aW9uKHZhbHVlLCBncmlk
UG9zaXRpb24pKQpAQCAtMTEzOSw3ICsxMTM5LDcgQEAgaW5saW5lIE9wdGlvbmFsPEdyaWRQb3Np
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFBvc2l0aW9uKFN0eWxlUmUK
ICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1pbmxpbmUgR3JpZEF1dG9GbG93IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRBdXRvRmxvdyhTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEdyaWRBdXRvRmxvdyBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVM
aXN0Pih2YWx1ZSk7CiAgICAgaWYgKCFsaXN0Lmxlbmd0aCgpKQpAQCAtMTE3NywyMyArMTE3Nywy
MyBAQCBpbmxpbmUgR3JpZEF1dG9GbG93IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdy
aWRBdXRvRmxvdyhTdHlsZVJlc29sdmVyJiwgYwogICAgIHJldHVybiBhdXRvRmxvdzsKIH0KIAot
aW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
c3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0
b3IoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGlmIChh
dXRvKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5mcmFtZSgpKSB7Ci0gICAgICAg
IGZsb2F0IHRleHRab29tRmFjdG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT50ZXh0Wm9vbSgp
ICE9IFRleHRab29tOjpSZXNldCA/IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpIDogMS4wZjsKLSAg
ICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5lZmZlY3Rp
dmVab29tKCkgKiB0ZXh0Wm9vbUZhY3Rvcik7CisgICAgaWYgKGF1dG8qIGZyYW1lID0gcHJvcGVy
dHlDYXNjYWRlLmRvY3VtZW50KCkuZnJhbWUoKSkgeworICAgICAgICBmbG9hdCB0ZXh0Wm9vbUZh
Y3RvciA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnRleHRab29tKCkgIT0gVGV4dFpvb206OlJl
c2V0ID8gZnJhbWUtPnRleHRab29tRmFjdG9yKCkgOiAxLjBmOworICAgICAgICByZXR1cm4gcHJv
cGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVk
Wm9vbShwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkgKiB0ZXh0Wm9vbUZh
Y3Rvcik7CiAgICAgfQotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpOworICAgIHJldHVybiBwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBP
cHRpb25hbDxMZW5ndGg+IHdvcmRTcGFjaW5nOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICB3b3JkU3BhY2luZyA9IFJl
bmRlclN0eWxlOjppbml0aWFsV29yZFNwYWNpbmcoKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc0xlbmd0aCgpKQotICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhU
ZXh0Wm9vbUZhY3Rvcihwcm9wZXJ0eUNhc2NhZGUpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVW
YWx1ZS5pc1BlcmNlbnRhZ2UoKSkKICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgoY2xhbXBU
bzxmbG9hdD4ocHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUoKSwgbWluVmFsdWVGb3JDc3NMZW5n
dGgsIG1heFZhbHVlRm9yQ3NzTGVuZ3RoKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0
aXZlVmFsdWUuaXNOdW1iZXIoKSkKQEAgLTEyMDIsNyArMTIwMiw3IEBAIGlubGluZSBPcHRpb25h
bDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxl
UmVzb2x2ZXImCiAgICAgcmV0dXJuIHdvcmRTcGFjaW5nOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8
ZmxvYXQ+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBlcnNwZWN0aXZlKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRp
b25hbDxmbG9hdD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGVyc3BlY3RpdmUoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKQpAQCAtMTIxMCwxNiArMTIxMCwxNiBAQCBpbmxpbmUgT3B0aW9uYWw8ZmxvYXQ+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImCiAK
ICAgICBmbG9hdCBwZXJzcGVjdGl2ZSA9IC0xOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xl
bmd0aCgpKQotICAgICAgICBwZXJzcGVjdGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpOworICAgICAgICBwZXJzcGVjdGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8
ZmxvYXQ+KHByb3BlcnR5Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAg
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCi0gICAgICAgIHBlcnNwZWN0aXZl
ID0gcHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUoKSAqIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuem9vbSgpOworICAgICAgICBwZXJzcGVjdGl2ZSA9
IHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkgKiBwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLnpvb20oKTsKICAgICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogCiAgICAgcmV0dXJuIHBlcnNwZWN0aXZlIDwgMCA/IE9wdGlvbmFsPGZsb2F0
PihXVEY6Om51bGxvcHQpIDogT3B0aW9uYWw8ZmxvYXQ+KHBlcnNwZWN0aXZlKTsKIH0KIAotaW5s
aW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZUluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE9wdGlvbmFsPExlbmd0aD4gbWFy
cXVlZUxlbmd0aDsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC0xMjM0LDcgKzEyMzQsNyBAQCBpbmxpbmUgT3B0aW9uYWw8
TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0
eWxlUmVzbwogICAgICAgICBtYXJxdWVlTGVuZ3RoID0gTGVuZ3RoKDM2LCBGaXhlZCk7IC8vIDM2
cHguCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7Ci0gICAgICAg
IExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRl
Z2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+
KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdp
dGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZl
VmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKICAgICAgICAg
aWYgKCFsZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgIG1hcnF1ZWVMZW5ndGggPSBs
ZW5ndGg7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI0NSwxNSArMTI0NSwxNSBAQCBpbmxpbmUgT3B0
aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVt
ZW50KFN0eWxlUmVzbwogICAgIHJldHVybiBtYXJxdWVlTGVuZ3RoOwogfQogCi1pbmxpbmUgT3B0
aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rmls
dGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBGaWx0ZXJP
cGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIuY3JlYXRlRmlsdGVy
T3BlcmF0aW9ucyh2YWx1ZSwgb3BlcmF0aW9ucykpCisgICAgaWYgKHByb3BlcnR5Q2FzY2FkZS5j
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvcGVyYXRpb25zKSkKICAgICAgICAgcmV0dXJu
IG9wZXJhdGlvbnM7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotaW5saW5lIEZvbnRG
ZWF0dXJlU2V0dGluZ3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1cmVT
ZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZv
bnRGZWF0dXJlU2V0dGluZ3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1
cmVTZXR0aW5ncyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFT
U0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vcm1hbCk7CkBAIC0xMzIzLDI3ICsxMzIzLDI3IEBAIGlubGluZSBPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHlsZUZy
b21WCiAgICAgcmV0dXJuIGl0YWxpY1ZhbHVlKCk7CiB9CiAKLWlubGluZSBGb250U2VsZWN0aW9u
VmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFdlaWdodChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udFNl
bGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRXZWlnaHQoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpIHsKICAgICAgICAgYXV0byB2YWx1
ZUlEID0gcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpOwogICAgICAgICBpZiAodmFsdWVJRCA9PSBD
U1NWYWx1ZUJvbGRlcikKLSAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
Ojpib2xkZXJXZWlnaHQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6Ym9sZGVyV2VpZ2h0KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlw
dGlvbigpLndlaWdodCgpKTsKICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMaWdodGVy
KQotICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWln
aHQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQo
KSk7CisgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldl
aWdodChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS53ZWln
aHQoKSk7CiAgICAgfQogICAgIHJldHVybiBjb252ZXJ0Rm9udFdlaWdodEZyb21WYWx1ZSh2YWx1
ZSk7CiB9CiAKLWlubGluZSBGb250U2VsZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Rm9udFN0cmV0Y2goU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBGb250U2VsZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0Rm9udFN0cmV0Y2goU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICByZXR1cm4gY29udmVydEZvbnRTdHJldGNoRnJvbVZhbHVlKHZhbHVlKTsK
IH0KIAogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1pbmxpbmUgRm9udFZhcmlhdGlvblNl
dHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5n
cyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9u
U2V0dGluZ3MoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NF
UlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb3JtYWwpOwpAQCAtMTM2MCwyMSArMTM2MCwyMSBAQCBpbmxpbmUgRm9udFZhcmlhdGlvblNl
dHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5n
cwogI2VuZGlmCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotaW5saW5lIGJvb2wgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hDYWxsb3V0KFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRUb3VjaENhbGxvdXQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKICAgICByZXR1cm4gIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuc3RyaW5nVmFsdWUoKSwgIm5vbmUiKTsK
IH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLWlubGluZSBDb2xvciBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgQ29sb3IgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5j
b2xvckZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KTsKIH0KICNlbmRpZgogCiAjaWYgRU5BQkxFKFBPSU5URVJfRVZFTlRTKQotaW5saW5lIE9wdGlv
blNldDxUb3VjaEFjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rp
b24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25T
ZXQ8VG91Y2hBY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvdWNoQWN0aW9u
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
aWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVybiBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtMTM5Niw0MCArMTM5Niw0MCBAQCBpbmxp
bmUgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
b3VjaEFjdGlvbihTdHlsZVJlcwogI2VuZGlmCiAKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xM
SU5HX1RPVUNIKQotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3Zl
cmZsb3dTY3JvbGxpbmcoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE92ZXJmbG93U2Nyb2xsaW5n
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
cmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlVG91Y2g7CiB9CiAjZW5kaWYKIAotaW5saW5lIFNWR0xlbmd0aFZhbHVlIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU1ZHTGVuZ3RoVmFsdWUgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmZyb21D
U1NQcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0K
IAotaW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZlY3RvcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRv
JiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKIAogICAgIFZlY3Rv
cjxTVkdMZW5ndGhWYWx1ZT4gc3ZnTGVuZ3RoczsKICAgICBzdmdMZW5ndGhzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkodmFsdWVMaXN0Lmxlbmd0aCgpKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiB2
YWx1ZUxpc3QpCi0gICAgICAgIHN2Z0xlbmd0aHMudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRTVkdM
ZW5ndGhWYWx1ZShzdHlsZVJlc29sdmVyLCBpdGVtKSk7CisgICAgICAgIHN2Z0xlbmd0aHMudW5j
aGVja2VkQXBwZW5kKGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShwcm9wZXJ0eUNhc2NhZGUsIGl0ZW0p
KTsKIAogICAgIHJldHVybiBzdmdMZW5ndGhzOwogfQogCi1pbmxpbmUgVmVjdG9yPFNWR0xlbmd0
aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJva2VEYXNoQXJyYXkoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3Ry
b2tlRGFzaEFycmF5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICByZXR1cm4gU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxTdHJva2VEYXNoQXJyYXkoKTsKICAgICB9CiAKLSAgICByZXR1cm4gY29udmVy
dFNWR0xlbmd0aFZlY3RvcihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZl
cnRTVkdMZW5ndGhWZWN0b3IocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBQ
YWludE9yZGVyIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYWludE9yZGVyIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwpAQCAtMTQ1MCw3ICsxNDUwLDcg
QEAgaW5saW5lIFBhaW50T3JkZXIgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGFpbnRP
cmRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICB9CiB9CiAKLWlubGluZSBmbG9hdCBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0T3BhY2l0eShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1
ZSgpOwpAQCAtMTQ1OSwyMiArMTQ1OSwyMiBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdQogICAg
IHJldHVybiBvcGFjaXR5OwogfQogCi1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0
eUNhc2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHJpbmcgczsKICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7
CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVVJJKCkpCiAgICAgICAgIHMgPSBwcmltaXRpdmVW
YWx1ZS5zdHJpbmdWYWx1ZSgpOwogCi0gICAgcmV0dXJuIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21l
bnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOwor
ICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJp
bmcocywgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkpOwogfQogCi1pbmxpbmUgQ29sb3IgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIENvbG9yIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3Bl
cnR5Q2FzY2FkZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHlsZVJl
c29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkpOworICAgIHJldHVybiBwcm9wZXJ0eUNhc2NhZGUuY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKLWlubGluZSBT
dHlsZVNlbGZBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZP
ckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25tZW50RGF0YShTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0eWxlU2VsZkFsaWdubWVudERhdGEg
YWxpZ25tZW50RGF0YSA9IFJlbmRlclN0eWxlOjppbml0aWFsU2VsZkFsaWdubWVudCgpOwogICAg
IGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKQEAgLTE0OTUsNyArMTQ5NSw3IEBAIGlubGluZSBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lCiAgICAgcmV0
dXJuIGFsaWdubWVudERhdGE7CiB9CiAKLWlubGluZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRh
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3R5bGVDb250ZW50QWxp
Z25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250ZW50QWxpZ25tZW50
RGF0YShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgYWxpZ25tZW50RGF0YSA9IFJlbmRlclN0eWxl
Ojppbml0aWFsQ29udGVudEFsaWdubWVudCgpOwogICAgIGlmICghaXM8Q1NTQ29udGVudERpc3Ry
aWJ1dGlvblZhbHVlPih2YWx1ZSkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBpbmxpbmUgU3R5bGVD
b250ZW50QWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250ZW50
QWxpZ25tZW50RAogICAgIHJldHVybiBhbGlnbm1lbnREYXRhOwogfQogCi1pbmxpbmUgR2x5cGhP
cmllbnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR2x5cGhPcmll
bnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgZmxv
YXQgYW5nbGUgPSBmYWJzZihmbW9kZihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LmZsb2F0VmFsdWUoKSwgMzYwLjBmKSk7CiAgICAgaWYgKGFuZ2xlIDw9IDQ1LjBmIHx8IGFuZ2xl
ID4gMzE1LjBmKQpAQCAtMTUyMiwyMSArMTUyMiwyMSBAQCBpbmxpbmUgR2x5cGhPcmllbnRhdGlv
biBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0eWxlUmVz
bwogICAgIHJldHVybiBHbHlwaE9yaWVudGF0aW9uOjpEZWdyZWVzMjcwOwogfQogCi1pbmxpbmUg
R2x5cGhPcmllbnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVu
dGF0aW9uT3JBdXRvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAg
ICAgICAgcmV0dXJuIEdseXBoT3JpZW50YXRpb246OkF1dG87Ci0gICAgcmV0dXJuIGNvbnZlcnRH
bHlwaE9yaWVudGF0aW9uKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVy
dEdseXBoT3JpZW50YXRpb24ocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBP
cHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBmbG9h
dCBtdWx0aXBsaWVyKQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNh
c2NhZGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7
CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAg
ICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogCiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKLSAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVSZXNvbHZl
cikpOworICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0
aDxMZW5ndGg+KFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0
YVdpdGhUZXh0Wm9vbUZhY3Rvcihwcm9wZXJ0eUNhc2NhZGUpKTsKICAgICAgICAgaWYgKG11bHRp
cGxpZXIgIT0gMS5mKQogICAgICAgICAgICAgbGVuZ3RoID0gTGVuZ3RoKGxlbmd0aC52YWx1ZSgp
ICogbXVsdGlwbGllciwgRml4ZWQpOwogICAgICAgICByZXR1cm4gbGVuZ3RoOwpAQCAtMTU1MCw3
ICsxNTUwLDcgQEAgaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJgogICAgIC8vIHZhbHVlcyBhbmQgcmF3
IG51bWJlcnMgdG8gcGVyY2VudGFnZXMuCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2Vu
dGFnZSgpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVz
dHJpY3RlZCB0byBhbiBpbnRlZ2VyIGhlcmUuCi0gICAgICAgIHJldHVybiBMZW5ndGgoKHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+Y29tcHV0ZWRGb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuaW50
VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKKyAgICAgICAgcmV0dXJuIExlbmd0aCgocHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuY29tcHV0ZWRGb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuaW50VmFs
dWUoKSkgLyAxMDAsIEZpeGVkKTsKICAgICB9CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVt
YmVyKCkpCiAgICAgICAgIHJldHVybiBMZW5ndGgocHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUo
KSAqIDEwMC4wLCBQZXJjZW50KTsKQEAgLTE1NjAsNyArMTU2MCw3IEBAIGlubGluZSBPcHRpb25h
bDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQoU3R5bGVS
ZXNvbHZlciYKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udFN5bnRo
ZXNpcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udFN5bnRoZXNpcyBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC0xNTg5LDcgKzE1ODks
NyBAQCBpbmxpbmUgRm9udFN5bnRoZXNpcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRG
b250U3ludGhlc2lzKFN0eWxlUmVzb2x2ZXImLAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAg
Ci1pbmxpbmUgT3B0aW9uU2V0PFNwZWFrQXM+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFNwZWFrQXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBP
cHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1
dG8gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxTcGVha0FzKCk7CiAgICAgaWYgKGlzPENT
U1ZhbHVlTGlzdD4odmFsdWUpKSB7CkBAIC0xNTk5LDcgKzE1OTksNyBAQCBpbmxpbmUgT3B0aW9u
U2V0PFNwZWFrQXM+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNwZWFrQXMoU3R5bGVS
ZXNvbHZlciYsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIE9wdGlvblNldDxIYW5n
aW5nUHVuY3R1YXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEhhbmdpbmdQdW5j
dHVhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9w
dGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEhhbmdpbmdQdW5jdHVhdGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxIYW5n
aW5nUHVuY3R1YXRpb24oKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKQEAg
LTE2MDksOSArMTYwOSw5IEBAIGlubGluZSBPcHRpb25TZXQ8SGFuZ2luZ1B1bmN0dWF0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1CiAgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotaW5saW5lIEdhcExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRHYXBMZW5ndGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIEdhcExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRH
YXBMZW5ndGgoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgPyBHYXBMZW5ndGgoKSA6IEdh
cExlbmd0aChjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKSk7CisgICAgcmV0dXJu
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZU5vcm1hbCkgPyBHYXBMZW5ndGgoKSA6IEdhcExlbmd0aChjb252ZXJ0TGVuZ3RoKHByb3BlcnR5
Q2FzY2FkZSwgdmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDI4ZGUxMTZjOTI1Li40MTgzNWQ2MWMx
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaApAQCAtNDEsNiArNDEs
NyBAQAogI2luY2x1ZGUgIkZvbnRWYXJpYW50QnVpbGRlci5oIgogI2luY2x1ZGUgIkZyYW1lLmgi
CiAjaW5jbHVkZSAiSFRNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIK
ICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlNW
R1JlbmRlclN0eWxlLmgiCkBAIC01NCw5ICs1NSw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
ICNkZWZpbmUgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExFUlMocHJvcGVydHkpIFwKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImKTsgXAot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCMjcHJvcGVydHkoU3R5bGVSZXNvbHZlciYpOyBc
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZSMjcHJvcGVydHkoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQjI3Byb3BlcnR5KFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmKTsgXAorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCMjcHJvcGVy
dHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOyBcCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1
ZSMjcHJvcGVydHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJikKIAogdGVtcGxh
dGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgZm9yd2FyZEluaGVyaXRlZFZhbHVlKFQmJiB2YWx1ZSkg
eyByZXR1cm4gc3RkOjpmb3J3YXJkPFQ+KHZhbHVlKTsgfQogaW5saW5lIExlbmd0aCBmb3J3YXJk
SW5oZXJpdGVkVmFsdWUoY29uc3QgTGVuZ3RoJiB2YWx1ZSkgeyBhdXRvIGNvcHkgPSB2YWx1ZTsg
cmV0dXJuIGNvcHk7IH0KQEAgLTEwOSwxMjYgKzExMCwxMjYgQEAgcHVibGljOgogICAgIERFQ0xB
UkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKFpvb20pOwogCiAgICAgLy8gQ3VzdG9tIGhhbmRs
aW5nIG9mIGluaXRpYWwgKyBpbmhlcml0IHZhbHVlIHNldHRpbmcgb25seS4KLSAgICBzdGF0aWMg
dm9pZCBhcHBseUluaXRpYWxXZWJraXRNYXNrSW1hZ2UoU3R5bGVSZXNvbHZlciYpIHsgfQotICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZShTdHlsZVJlc29sdmVyJikg
eyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsRm9udEZlYXR1cmVTZXR0aW5ncyhTdHls
ZVJlc29sdmVyJikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udEZlYXR1cmVT
ZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
V2Via2l0TWFza0ltYWdlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKSB7IH0KKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRXZWJraXRNYXNrSW1hZ2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYp
IHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEZv
bnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQogI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsRm9udFZhcmlh
dGlvblNldHRpbmdzKFN0eWxlUmVzb2x2ZXImKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRGb250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZTo6UHJvcGVydHlD
YXNjYWRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNl
dHRpbmdzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKSB7IH0KICNlbmRpZgogCiAgICAgLy8gQ3Vz
dG9tIGhhbmRsaW5nIG9mIGluaGVyaXQgKyB2YWx1ZSBzZXR0aW5nIG9ubHkuCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0RGlzcGxheShTdHlsZVJlc29sdmVyJik7Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZURpc3BsYXkoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0RGlzcGxheShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZURpc3BsYXkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYs
IENTU1ZhbHVlJik7CiAKICAgICAvLyBDdXN0b20gaGFuZGxpbmcgb2YgdmFsdWUgc2V0dGluZyBv
bmx5LgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxlUmVzb2x2
ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXJlY3Rpb24oU3R5
bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVZlcnRp
Y2FsQWxpZ24oU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlJbml0aWFsVGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlVGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRPcmllbnRhdGlvbihTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQmFzZWxpbmVTaGlm
dChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFRleHRBbGln
bihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVRl
eHRBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24o
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKFRFWFRfQVVU
T1NJWklORykKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3Qo
U3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdl
YmtpdFRleHRTaXplQWRqdXN0KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOwog
I2VuZGlmCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRab29tKFN0eWxlUmVz
b2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXcml0aW5nTW9k
ZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
QWx0KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWVXaWxsQ2hhbmdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWVXZWJraXRUZXh0Wm9vbShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUFsdChT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlV2lsbENoYW5nZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NTVmFsdWUmKTsKIAog
I2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVDb2xv
clNjaGVtZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlQ29sb3JTY2hlbWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7CiAj
ZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tlQ29sb3Io
U3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVN0
cm9rZVdpZHRoKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiwgQ1NT
VmFsdWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBB
dG9tU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDdXN0b21Qcm9w
ZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Kiwg
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUN1c3Rv
bVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVy
dHkqLCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIENTU0N1
c3RvbVByb3BlcnR5VmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVm
ZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0
aXZlWm9vbShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CiAKICAgICBzdGF0aWMgTGVuZ3RoIG1t
TGVuZ3RoKGRvdWJsZSBtbSk7CiAgICAgc3RhdGljIExlbmd0aCBpbmNoTGVuZ3RoKGRvdWJsZSBp
bmNoKTsKICAgICBzdGF0aWMgYm9vbCBnZXRQYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZh
bHVlKiBwYWdlU2l6ZU5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlKiBwYWdlT3JpZW50YXRpb24sIExl
bmd0aCYgd2lkdGgsIExlbmd0aCYgaGVpZ2h0KTsKIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0
eUlEIGlkPgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGVS
ZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1
ZShTdHlsZVJlc29sdmVyJiwgRGlzcGxheVR5cGUpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VGV4
dE9yQm94U2hhZG93VmFsdWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYsIENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiwgRGlzcGxheVR5cGUpOwogCiAgICAgZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVudCA9
IDAsIFJlc2V0fTsKICAgICB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlv
cj4KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmKTsKICAgICB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ291bnRlcihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ291bnRlcihTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiwgQ1NTVmFsdWUmKTsKIAogICAgIHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9h
dCBzaXplKTsKICAgICBzdGF0aWMgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUpOwot
ICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxlUmVz
b2x2ZXImKTsKKyAgICBzdGF0aWMgZmxvYXQgZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGll
cihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CiB9OwogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlRGlyZWN0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwg
Q1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0RGlyZWN0
aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldERpcmVjdGlvbih0cnVlKTsKKyAgICBwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXREaXJlY3Rpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRs
eVNldERpcmVjdGlvbih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaXRpYWxUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dEFsaWduKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRBbGlnbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRUZXh0QWxpZ24o
dHJ1ZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEFsaWduKFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dEFsaWduKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dEhhc0V4cGxpY2l0bHlTZXRUZXh0QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVUZXh0QWxpZ24oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFsaWduKHN0eWxlUmVz
b2x2ZXIsIHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNp
dGx5U2V0VGV4dEFsaWduKHRydWUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRl
eHRBbGlnbihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24ocHJvcGVydHlD
YXNjYWRlLCB2YWx1ZSkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEhhc0V4cGxp
Y2l0bHlTZXRUZXh0QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6cmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OnJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7CiAgICAgLy8gUmVzZXQgdGhlIHpv
b20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVs
eSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZm
ZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgp
KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0RWZmZWN0aXZlWm9vbShwcm9wZXJ0eUNhc2NhZGUu
cGFyZW50U3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsWm9vbShTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgcmVzZXRFZmZlY3Rp
dmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJT
dHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgcmVzZXRFZmZlY3RpdmVab29tKHByb3BlcnR5Q2Fz
Y2FkZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Wm9vbShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9w
ZXJ0eUNhc2NhZGUpCiB7Ci0gICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwot
ICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnpv
b20oKSk7CisgICAgcmVzZXRFZmZlY3RpdmVab29tKHByb3BlcnR5Q2FzY2FkZSk7CisgICAgcHJv
cGVydHlDYXNjYWRlLnNldFpvb20ocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuem9vbSgp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlWm9vbShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVab29tKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAg
cmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVy
LnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICByZXNldEVmZmVj
dGl2ZVpvb20ocHJvcGVydHlDYXNjYWRlKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnNldFpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZl
VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAg
ICAgcHJvcGVydHlDYXNjYWRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxa
b29tKCkpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICBmbG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZl
ci5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKS0+
em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRa
b29tKGRvY1pvb20pOworICAgICAgICBmbG9hdCBkb2Nab29tID0gcHJvcGVydHlDYXNjYWRlLnJv
b3RFbGVtZW50U3R5bGUoKS56b29tKCk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRFZmZl
Y3RpdmVab29tKGRvY1pvb20pOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Wm9vbShkb2Na
b29tKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7Ci0g
ICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgcmVzZXRF
ZmZlY3RpdmVab29tKHByb3BlcnR5Q2FzY2FkZSk7CiAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50
ID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRl
LnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVy
KTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHByb3BlcnR5Q2FzY2FkZSk7CiAgICAgICAg
IGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpCi0gICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20obnVtYmVyKTsKKyAgICAgICAgICAgIHByb3BlcnR5
Q2FzY2FkZS5zZXRab29tKG51bWJlcik7CiAgICAgfQogfQogaW5saW5lIExlbmd0aCBTdHlsZUJ1
aWxkZXJDdXN0b206Om1tTGVuZ3RoKGRvdWJsZSBtbSkKQEAgLTMxNSwzMiArMzE2LDMyIEBAIGJv
b2wgU3R5bGVCdWlsZGVyQ3VzdG9tOjpnZXRQYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZh
bHVlKiBwYWdlU2l6ZU5hbWUsIENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVmVydGljYWxBbGlnbihTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRWZXJ0aWNhbEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRl
LnN0eWxlKCkuc2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1ZSk7CiAgICAgZWxzZQotICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0
aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihwcm9wZXJ0eUNhc2NhZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0SW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEltYWdlUmVzb2x1dGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0
eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRp
b25Tb3VyY2Uoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb25Tb3Vy
Y2UoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFw
KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPmltYWdlUmVzb2x1dGlvbigpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0
eWxlKCkuaW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpLnNldEltYWdlUmVzb2x1dGlvblNuYXAocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCku
aW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRJ
bWFnZVJlc29sdXRpb24ocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuaW1hZ2VSZXNvbHV0
aW9uKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bEltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24oU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKFJlbmRlclN0eWxlOjppbml0aWFsSW1h
Z2VSZXNvbHV0aW9uU291cmNlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1h
Z2VSZXNvbHV0aW9uU25hcChSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXAo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24oUmVuZGVy
U3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0
eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VS
ZXNvbHV0aW9uU291cmNlKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdl
UmVzb2x1dGlvblNuYXAoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCkp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvbihSZW5kZXJT
dHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBJbWFnZVJlc29sdXRpb25T
b3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2Uo
KTsKICAgICBJbWFnZVJlc29sdXRpb25TbmFwIHNuYXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbElt
YWdlUmVzb2x1dGlvblNuYXAoKTsKQEAgLTM1NCwyMCArMzU1LDIwIEBAIGlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc29sdXRpb24gPSBwcmltaXRp
dmVWYWx1ZS5kb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAgIH0K
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3Vy
Y2UpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChz
bmFwKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNv
bHV0aW9uKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25T
b3VyY2Uoc291cmNlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRJbWFnZVJlc29s
dXRpb25TbmFwKHNuYXApOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEltYWdlUmVz
b2x1dGlvbihyZXNvbHV0aW9uKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfUkVT
T0xVVElPTikKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRT
aXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0U2l6ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJikgeyB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsU2l6ZShTdHlsZVJlc29sdmVyJikg
eyB9CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVNpemUo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnJlc2V0UGFnZVNpemVUeXBlKCk7CiAKICAgICBpZiAo
IWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICByZXR1cm47CkBAIC0zOTAsNyArMzkx
LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1MKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
CiAgICAgICAgICAgICBpZiAoIXNlY29uZFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZik7CisgICAgICAgICAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gcHJvcGVydHlDYXNjYWRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKICAg
ICAgICAgICAgIHdpZHRoID0gZmlyc3RQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0
aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kUHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTQxMSw3ICs0MTIsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTUwogICAgICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gPGxlbmd0
aD4KICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAg
ICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5n
dGg+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29w
eVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBw
cmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4ocHJvcGVydHlDYXNjYWRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CiAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSkgewogICAgICAgICAgICAgY2FzZSAwOgpAQCAtNDM3LDI5ICs0MzgsMjkgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBDU1MKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRQYWdlU2l6ZSh7IFdURk1vdmUod2lkdGgpLCBX
VEZNb3ZlKGhlaWdodCkgfSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0UGFnZVNp
emVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0UGFn
ZVNpemUoeyBXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpIH0pOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRlbnQoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0VGV4dEluZGVudChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KExlbmd0aCB7
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEluZGVudCgpIH0pOworICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJbmRlbnQoTGVuZ3RoIHsgcHJvcGVydHlDYXNjYWRl
LnBhcmVudFN0eWxlKCkudGV4dEluZGVudCgpIH0pOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZShzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPnRleHRJbmRlbnRMaW5lKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0VGV4dEluZGVudFR5cGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0
SW5kZW50VHlwZSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50
TGluZShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS50ZXh0SW5kZW50TGluZSgpKTsKKyAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZShwcm9wZXJ0eUNhc2Nh
ZGUucGFyZW50U3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpKTsKICNlbmRpZgogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRJbmRlbnQoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsVGV4dEluZGVudChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2Nh
ZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KFJlbmRlclN0
eWxlOjppbml0aWFsVGV4dEluZGVudCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5z
ZXRUZXh0SW5kZW50KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgpKTsKICNpZiBFTkFC
TEUoQ1NTM19URVhUKQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExp
bmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRUeXBlKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dElu
ZGVudFR5cGUoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEluZGVudExp
bmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKKyAgICBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJ
bmRlbnRUeXBlKCkpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
VGV4dEluZGVudChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGggbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWU7CiAjaWYg
RU5BQkxFKENTUzNfVEVYVCkKQEAgLTQ2OSw3ICs0NzAsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZQogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUp
KSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGl0ZW0uZ2V0KCkpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSkKLSAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUu
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVl
ID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihwcm9wZXJ0eUNhc2Nh
ZGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQog
ICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJr
aXRFYWNoTGluZSkKICAgICAgICAgICAgIHRleHRJbmRlbnRMaW5lVmFsdWUgPSBUZXh0SW5kZW50
TGluZTo6RWFjaExpbmU7CkBAIC00ODEsMTAgKzQ4MiwxMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZQogICAgIGlmIChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQo
V1RGTW92ZShsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldFRleHRJbmRlbnQoV1RGTW92ZShsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSkpOwog
I2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0
SW5kZW50TGluZSh0ZXh0SW5kZW50TGluZVZhbHVlKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFRleHRJbmRlbnRUeXBlKHRleHRJbmRlbnRUeXBlVmFsdWUpOworICAgIHByb3BlcnR5
Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKHRleHRJbmRlbnRMaW5lVmFsdWUpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRJbmRlbnRUeXBlKHRleHRJbmRlbnRU
eXBlVmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTQ5MywyOSArNDk0LDI5IEBAIGVudW0gQm9yZGVy
SW1hZ2VNb2RpZmllclR5cGUgeyBPdXRzZXQsIFJlcGVhdCwgU2xpY2UsIFdpZHRoIH07CiB0ZW1w
bGF0ZSA8Qm9yZGVySW1hZ2VUeXBlIHR5cGUsIEJvcmRlckltYWdlTW9kaWZpZXJUeXBlIG1vZGlm
aWVyPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXIgewogcHVibGljOgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2Ug
aW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVj
ZUltYWdlIGltYWdlKGdldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpKSk7CiAgICAgICAg
IHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBp
bWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkp
KTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKHByb3BlcnR5Q2Fz
Y2FkZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9t
KGdldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNs
aWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAg
ICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoK
LSAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNl
c0Zyb20oZ2V0VmFsdWUocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSwg
aW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFs
dWUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogICAgIHsKLSAgICAg
ICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7
CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRz
ZXQ6CiAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTUzOCw1
MyArNTM5LDUzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0
eXBlID09IEJvcmRlckltYWdlID8gbGVuZ3RoQm94IDogTGVuZ3RoQm94KCkpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHls
ZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLCBp
bWFnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2
YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1
ZShwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxl
UmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAg
ICAgICAgICBpbWFnZS5zZXRPdXRzZXQocHJvcGVydHlDYXNjYWRlLnN0eWxlTWFwKCkubWFwTmlu
ZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBSZXBlYXQ6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQ
aWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBwcm9wZXJ0eUNhc2Nh
ZGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsK
KyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdl
U2xpY2UodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdp
ZHRoOgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXIuc3R5
bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAgICAgICBpbWFn
ZS5zZXRCb3JkZXJTbGljZXMocHJvcGVydHlDYXNjYWRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNl
SW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFs
dWUocHJvcGVydHlDYXNjYWRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0g
ICAgc3RhdGljIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShjb25zdCBSZW5kZXJTdHls
ZSogc3R5bGUpCisgICAgc3RhdGljIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3Jk
ZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOwor
ICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLmJvcmRlckltYWdlKCkg
OiBzdHlsZS5tYXNrQm94SW1hZ2UoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1
ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkKKyAgICBz
dGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUlt
YWdlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8g
c3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFs
dWUpOworICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLnNldEJvcmRl
ckltYWdlKHZhbHVlKSA6IHN0eWxlLnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7CiAgICAgfQogfTsK
IAogI2RlZmluZSBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIodHlwZSwgbW9k
aWZpZXIpIFwKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0IyN0
eXBlIyNtb2RpZmllcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKSBcCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdCMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKSBcCiB7IFwKLSAgICBBcHBseVByb3Bl
cnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5SW5oZXJpdFZhbHVl
KHN0eWxlUmVzb2x2ZXIpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8
dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaGVyaXRWYWx1ZShwcm9wZXJ0eUNhc2NhZGUpOyBcCiB9
IFwKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsIyN0eXBlIyNt
b2RpZmllcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKSBcCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbCMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKSBcCiB7IFwKLSAgICBBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxl
UmVzb2x2ZXIpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwg
bW9kaWZpZXI+OjphcHBseUluaXRpYWxWYWx1ZShwcm9wZXJ0eUNhc2NhZGUpOyBcCiB9IFwKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKSBcCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWUjI3R5cGUjI21vZGlmaWVyKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKSBcCiB7
IFwKLSAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46
OmFwcGx5VmFsdWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJv
cmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseVZhbHVlKHByb3BlcnR5Q2Fz
Y2FkZSwgdmFsdWUpOyBcCiB9CiAKIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExF
UihCb3JkZXJJbWFnZSwgT3V0c2V0KQpAQCAtNTk4LDE2ICs1OTksMTYgQEAgREVGSU5FX0JPUkRF
Ul9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgV2lkdGgpCiAKICNp
ZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0TGluZUhlaWdodChT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KExlbmd0aCB7IHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+bGluZUhlaWdodCgpIH0pOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
U3BlY2lmaWVkTGluZUhlaWdodChMZW5ndGggeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PnNwZWNpZmllZExpbmVIZWlnaHQoKSB9KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5z
ZXRMaW5lSGVpZ2h0KExlbmd0aCB7IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmxpbmVI
ZWlnaHQoKSB9KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5l
SGVpZ2h0KExlbmd0aCB7IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLnNwZWNpZmllZExp
bmVIZWlnaHQoKSB9KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0
eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRl
clN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKIH0KIAogc3RhdGljIGlubGlu
ZSBmbG9hdCBjb21wdXRlQmFzZVNwZWNpZmllZEZvbnRTaXplKGNvbnN0IERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIHBlcmNlbnRhZ2VBdXRvc2l6aW5n
RW5hYmxlZCkKQEAgLTY1NCw5ICs2NTUsOSBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbXB1dGVM
aW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNpemUoY29uc3QgRG9jdW1lbnQmIGRvYwogICAg
IHJldHVybiAxOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUxpbmVIZWlnaHQo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgT3B0aW9uYWw8TGVuZ3RoPiBsaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgMSk7CisgICAgT3B0
aW9uYWw8TGVuZ3RoPiBsaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGluZUhlaWdodChwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlLCAxKTsKICAgICBpZiAoIWxpbmVIZWln
aHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjY1LDE0NCArNjY2LDE0NCBAQCBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZQogICAgICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0LnZh
bHVlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICAgICAgYXV0byBtdWx0aXBsaWVyID0g
Y29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShzdHlsZVJlc29sdmVyLmRv
Y3VtZW50KCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAg
ICAgYXV0byBtdWx0aXBsaWVyID0gY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250
U2l6ZShwcm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQoKSwgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgaWYgKG11bHRpcGxpZXIgPT0gMSkKICAgICAgICAg
ICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IGxpbmVIZWlnaHQudmFsdWUoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgbXVsdGlwbGllcikudmFs
dWUoKTsKKyAgICAgICAgICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydExpbmVIZWlnaHQocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSwgbXVsdGlwbGll
cikudmFsdWUoKTsKICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldExpbmVI
ZWlnaHQoV1RGTW92ZShjb21wdXRlZExpbmVIZWlnaHQpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoV1RGTW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkp
KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRMaW5lSGVpZ2h0KFdURk1vdmUoY29t
cHV0ZWRMaW5lSGVpZ2h0KSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0U3BlY2lm
aWVkTGluZUhlaWdodChXVEZNb3ZlKGxpbmVIZWlnaHQudmFsdWUoKSkpOwogfQogCiAjZW5kaWYK
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRPdXRsaW5lU3R5
bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0T3V0bGluZVN0eWxlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxp
bmVTdHlsZUlzQXV0byhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm91dGxpbmVTdHlsZUlz
QXV0bygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm91dGxpbmVTdHlsZSgpKTsKKyAgICBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJvcGVydHlDYXNjYWRlLnBhcmVu
dFN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpLnNldE91dGxpbmVTdHlsZShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5vdXRsaW5l
U3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsT3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZTo6UHJv
cGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5
bGVJc0F1dG8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUo
UmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5l
U3R5bGVJc0F1dG8oKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0T3V0bGluZVN0
eWxlKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZU91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
cHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCi0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJpbWl0aXZlVmFsdWUpOwot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKHByaW1pdGl2ZVZhbHVl
KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJp
bWl0aXZlVmFsdWUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE91dGxpbmVTdHls
ZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbml0aWFsQ2xpcChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlwKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CisgICAgcHJvcGVydHlDYXNjYWRl
LnN0eWxlKCkuc2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7
CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzQ2xpcChmYWxzZSk7CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xpcChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRDbGlwKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsK
LSAgICBhdXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKTsKLSAg
ICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgIHJldHVybiBhcHBseUluaXRp
YWxDbGlwKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q2xp
cChMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxl
LT5jbGlwUmlnaHQoKSB9LAotICAgICAgICBMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRv
bSgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpIH0pOwotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICBhdXRvJiBwYXJlbnRTdHlsZSA9
IHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpOworICAgIGlmICghcGFyZW50U3R5bGUuaGFz
Q2xpcCgpKQorICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChwcm9wZXJ0eUNhc2NhZGUp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENsaXAoTGVuZ3RoIHsgcGFyZW50U3R5
bGUuY2xpcFRvcCgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBSaWdodCgpIH0sCisgICAg
ICAgIExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBCb3R0b20oKSB9LCBMZW5ndGggeyBwYXJlbnRT
dHlsZS5jbGlwTGVmdCgpIH0pOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEhhc0Ns
aXAodHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUNsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ2xpcChTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAg
ICAgaWYgKGF1dG8qIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS5yZWN0VmFsdWUoKSkgewotICAgICAg
ICBhdXRvIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKTsKKyAgICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IHByb3BlcnR5
Q2FzY2FkZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAgICAgICAgIGF1dG8gdG9wID0g
cmVjdC0+dG9wKCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAgICAg
ICBhdXRvIHJpZ2h0ID0gcmVjdC0+cmlnaHQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihjb252ZXJz
aW9uRGF0YSk7CiAgICAgICAgIGF1dG8gYm90dG9tID0gcmVjdC0+Ym90dG9tKCktPmNvbnZlcnRU
b0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRv
Q29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRvIGxlZnQgPSByZWN0LT5s
ZWZ0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENv
bnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAoV1RGTW92ZSh0b3ApLCBXVEZNb3ZlKHJpZ2h0KSwg
V1RGTW92ZShib3R0b20pLCBXVEZNb3ZlKGxlZnQpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRDbGlwKFdURk1vdmUodG9wKSwgV1RGTW92ZShyaWdodCksIFdURk1vdmUoYm90dG9tKSwg
V1RGTW92ZShsZWZ0KSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEhhc0Ns
aXAodHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLnZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAgICAgICBhcHBseUluaXRpYWxDbGlwKHN0eWxl
UmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaXRpYWxDbGlwKHByb3BlcnR5Q2FzY2FkZSk7CiAg
ICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJr
aXRMb2NhbGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0
eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKTsKIAotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmZv
bnREZXNjcmlwdGlvbigpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVBdXRvKQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0TG9jYWxlKG51bGxBdG9tKCkp
OwogICAgIGVsc2UKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldExvY2FsZShwcmltaXRpdmVW
YWx1ZS5zdHJpbmdWYWx1ZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRX
cml0aW5nTW9kZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRXcml0aW5nTW9kZSh0cnVlKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0V3JpdGluZ01vZGUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0SGFzRXhwbGlj
aXRseVNldFdyaXRpbmdNb2RlKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24oU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0VGV4dE9yaWVudGF0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRUZXh0T3JpZW50YXRpb24oZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVB
ZGp1c3QoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1
c3QoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVBdXRvKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0
KFRleHRTaXplQWRqdXN0bWVudChBdXRvVGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAgIHBy
b3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVu
dChBdXRvVGV4dFNpemVBZGp1c3RtZW50KSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQoTm9UZXh0U2l6ZUFkanVzdG1l
bnQpKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3Qo
VGV4dFNpemVBZGp1c3RtZW50KE5vVGV4dFNpemVBZGp1c3RtZW50KSk7CiAgICAgZWxzZQotICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRq
dXN0bWVudChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KHByaW1p
dGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkpOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNl
dEZvbnREaXJ0eSh0cnVlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERpcnR5KCk7CiB9
CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Vi
a2l0VGV4dFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpv
b20oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb3JtYWwpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFpvb20oVGV4
dFpvb206Ok5vcm1hbCk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRa
b29tKFRleHRab29tOjpOb3JtYWwpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZVJlc2V0KQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRab29tKFRleHRab29tOjpSZXNldCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNl
dEZvbnREaXJ0eSh0cnVlKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4
dFpvb20oVGV4dFpvb206OlJlc2V0KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERpcnR5
KCk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29sb3JTY2hlbWUoU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoc3R5
bGVSZXNvbHZlciwgdmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlTZXRDb2xvclNjaGVtZSh0cnVlKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRDb2xvclNjaGVtZShTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVt
ZShwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0SGFzRXhwbGljaXRseVNldENvbG9yU2NoZW1lKHRydWUpOwogfQogI2VuZGlmCiAKIHRlbXBs
YXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBpZiAocHJvcGVydHkgPT0g
Q1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0
eWxlKCkuc2V0VGV4dFNoYWRvdyhudWxscHRyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKICAgICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7CiAgICAgZm9y
IChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAg
YXV0byYgc2hhZG93VmFsdWUgPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oaXRlbS5nZXQoKSk7
Ci0gICAgICAgIGF1dG8gY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0g
cHJvcGVydHlDYXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICAgICAgaW50
IHggPSBzaGFkb3dWYWx1ZS54LT5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOwog
ICAgICAgICBpbnQgeSA9IHNoYWRvd1ZhbHVlLnktPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJz
aW9uRGF0YSk7CiAgICAgICAgIGludCBibHVyID0gc2hhZG93VmFsdWUuYmx1ciA/IHNoYWRvd1Zh
bHVlLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSkgOiAwOwpAQCAtODEw
LDk0ICs4MTEsOTQgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRP
ckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmUKICAgICAgICAgU2hhZG93U3R5
bGUgc2hhZG93U3R5bGUgPSBzaGFkb3dWYWx1ZS5zdHlsZSAmJiBzaGFkb3dWYWx1ZS5zdHlsZS0+
dmFsdWVJRCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgQ29s
b3IgY29sb3I7CiAgICAgICAgIGlmIChzaGFkb3dWYWx1ZS5jb2xvcikKLSAgICAgICAgICAgIGNv
bG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqc2hhZG93VmFsdWUu
Y29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBwcm9wZXJ0eUNhc2NhZGUuY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoKnNoYWRvd1ZhbHVlLmNvbG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgICAgICBj
b2xvciA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmNvbG9yKCk7CiAgICAgICAgIGF1dG8gc2hh
ZG93RGF0YSA9IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNw
cmVhZCwgc2hhZG93U3R5bGUsIHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93
LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAg
IGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlz
Rmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3Qg
ZW50cnkKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRTaGFkb3co
V1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBp
ZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwg
IWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmly
c3QgZW50cnkKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEJveFNoYWRv
dyhXVEZNb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0
IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICBpc0ZpcnN0RW50cnkgPSBm
YWxzZTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsVGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0U2hhZG93KFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFRleHRTaGFkb3cobnVsbHB0cik7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0VGV4dFNoYWRvdyhudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3co
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PnRleHRTaGFkb3coKSA/IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSA6IG51bGxwdHIpOworICAgIHByb3BlcnR5Q2FzY2Fk
ZS5zdHlsZSgpLnNldFRleHRTaGFkb3cocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkudGV4
dFNoYWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqcHJvcGVydHlDYXNjYWRlLnBhcmVu
dFN0eWxlKCkudGV4dFNoYWRvdygpKSA6IG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVRleHRTaGFkb3coU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlD
YXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1
ZTxDU1NQcm9wZXJ0eVRleHRTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBs
eVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5VGV4dFNoYWRvdz4ocHJvcGVydHlDYXNj
YWRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsQm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyhTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEJveFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3coU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Ym94U2hh
ZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPmJveFNoYWRvdygpKSA6IG51bGxwdHIpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldEJveFNoYWRvdyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5ib3hTaGFkb3coKSA/
IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmJv
eFNoYWRvdygpKSA6IG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Qm94U2hhZG93KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFs
dWUmIHZhbHVlKQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlC
b3hTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJveFNoYWRv
d1ZhbHVlPENTU1Byb3BlcnR5Qm94U2hhZG93Pihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hT
aGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Qm94U2hhZG93KFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhcHBseUluaXRpYWxCb3hTaGFkb3coc3R5
bGVSZXNvbHZlcik7CisgICAgYXBwbHlJbml0aWFsQm94U2hhZG93KHByb3BlcnR5Q2FzY2FkZSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0
Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEJveFNoYWRvdyhTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXBwbHlJbmhlcml0Qm94U2hhZG93
KHN0eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdEJveFNoYWRvdyhwcm9wZXJ0eUNhc2Nh
ZGUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJr
aXRCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Qm94U2hh
ZG93KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZh
bHVlKQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlXZWJraXRC
b3hTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJveFNoYWRv
d1ZhbHVlPENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93Pihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVl
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGYW1pbHkoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1
dG8gaW5pdGlhbERlc2MgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBXZSBu
ZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkg
Y2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgaWYgKGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpIHsKICAgICAgICAgaWYgKENTU1ZhbHVlSUQg
c2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIo
KSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9u
LCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCBmYWxzZSwgc3R5bGVS
ZXNvbHZlci5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVu
dGlmaWVyLCBmYWxzZSwgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkpKTsKICAgICB9CiAgICAg
aWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmlzRW1wdHkoKSkKICAgICAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZhbWlsaWVzKGluaXRpYWxEZXNjLmZhbWlsaWVzKCkpOwogCi0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2Ny
aXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0Rm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmFtaWx5KFN0eWxlOjpQcm9wZXJ0
eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgYXV0byBwYXJl
bnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNj
cmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLnN0
eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBwYXJlbnRGb250RGVzY3JpcHRpb24g
PSBwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKIAogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3JpcHRpb24uZmFtaWxp
ZXMoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250
RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNj
YWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgdmFs
dWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAKLSAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBw
cm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KICAgICBib29sIG9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKTsKIApAQCAtOTE2LDcgKzkxNyw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1
ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IHN0eWxlUmVzb2x2ZXIuc2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1p
bHkoKTsKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBwcm9wZXJ0eUNhc2NhZGUuZG9jdW1lbnQo
KS5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgogICAgICAgICAgICAgICAgIGZhbWls
eSA9IHNlcmlmRmFtaWx5OwpAQCAtOTY0LDM2ICs5NjUsMzYgQEAgaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmUKIAogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9
IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CiAgICAgICAgIGlmIChDU1NWYWx1ZUlE
IHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVy
KCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlv
biwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVz
ZWRGaXhlZERlZmF1bHRTaXplLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpKTsKKyAgICAgICAg
ICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSwgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkpKTsKICAgICB9CiAKLSAgICBzdHls
ZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ3VzdG9tOjppc1ZhbGlkRGlz
cGxheVZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIERpc3BsYXlUeXBlIGRpc3Bs
YXkpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBEaXNwbGF5VHlwZSBkaXNw
bGF5KQogewotICAgIGlmIChpczxTVkdFbGVtZW50PihzdHlsZVJlc29sdmVyLmVsZW1lbnQoKSkg
JiYgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkK
KyAgICBpZiAoaXM8U1ZHRWxlbWVudD4ocHJvcGVydHlDYXNjYWRlLmVsZW1lbnQoKSkgJiYgcHJv
cGVydHlDYXNjYWRlLnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCiAgICAg
ICAgIHJldHVybiBkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUgfHwgZGlzcGxheSA9PSBE
aXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6Tm9uZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aGVyaXREaXNwbGF5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAgICBpZiAoaXNWYWxpZERpc3Bs
YXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBw
cm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5kaXNwbGF5KCk7CisgICAgaWYgKGlzVmFsaWRE
aXNwbGF5VmFsdWUocHJvcGVydHlDYXNjYWRlLCBkaXNwbGF5KSkKKyAgICAgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0RGlzcGxheShkaXNwbGF5KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRGlzcGxheShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2Fk
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVl
KHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgaWYgKGlzVmFsaWREaXNwbGF5VmFsdWUocHJvcGVy
dHlDYXNjYWRlLCBkaXNwbGF5KSkKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0
RGlzcGxheShkaXNwbGF5KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVC
YXNlbGluZVNoaWZ0KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NT
VmFsdWUmIHZhbHVlKQogewotICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSYgc3Zn
U3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpIHsKICAgICAgICAgc3dpdGNoIChw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkpIHsKQEAgLTEwMTUsNTcgKzEwMTYsNTcgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc28KICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0QXNwZWN0UmF0aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Vi
a2l0QXNwZWN0UmF0aW8oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQog
ewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKFJlbmRlclN0
eWxlOjppbml0aWFsQXNwZWN0UmF0aW9UeXBlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RS
YXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShSZW5kZXJT
dHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvVHlwZSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0
UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRBc3Bl
Y3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9y
KCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdl
YmtpdEFzcGVjdFJhdGlvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEFzcGVjdFJhdGlvKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBpZiAoc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6
OkF1dG8pCisgICAgaWYgKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlv
VHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0bykKICAgICAgICAgcmV0dXJuOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9UeXBlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVj
dFJhdGlvTnVtZXJhdG9yKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVj
dFJhdGlvVHlwZShwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUo
KSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKHBy
b3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRBc3BlY3RS
YXRpbyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRBc3BlY3RSYXRpbyhT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAK
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21EaW1l
bnNpb25zKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJvbURpbWVuc2lvbnMpOworICAgICAgICAg
ICAgcmV0dXJuIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShBc3Bl
Y3RSYXRpb1R5cGU6OkZyb21EaW1lbnNpb25zKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbnRyaW5zaWMpCi0gICAgICAgICAgICByZXR1cm4g
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBl
OjpGcm9tSW50cmluc2ljKTsKKyAgICAgICAgICAgIHJldHVybiBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpGcm9tSW50cmluc2ljKTsK
IAogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
byk7Ci0gICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
VHlwZShBc3BlY3RSYXRpb1R5cGU6OkF1dG8pOworICAgICAgICByZXR1cm4gcHJvcGVydHlDYXNj
YWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6QXV0byk7CiAg
ICAgfQogCiAgICAgYXV0byYgYXNwZWN0UmF0aW9WYWx1ZSA9IGRvd25jYXN0PENTU0FzcGVjdFJh
dGlvVmFsdWU+KHZhbHVlKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJh
dGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OlNwZWNpZmllZCk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUuZGVub21p
bmF0b3JWYWx1ZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
TnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJhdG9yVmFsdWUoKSk7CisgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6U3Bl
Y2lmaWVkKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb0Rlbm9t
aW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUuZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICBwcm9wZXJ0
eUNhc2NhZGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVl
Lm51bWVyYXRvclZhbHVlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdl
YmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2Fz
Y2FkZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRF
bXBoYXNpc01hcmsoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFz
aXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygp
KTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRl
clN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhh
c2lzTWFyaygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXND
dXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRU
ZXh0RW1waGFzaXNTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRUZXh0RW1waGFzaXNTdHls
ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc01hcmsoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0RW1w
aGFzaXNNYXJrKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
Q3VzdG9tTWFyayhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3Rv
bU1hcmsoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmls
bChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS50ZXh0RW1waGFzaXNGaWxsKCkpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsocHJvcGVydHlDYXNj
YWRlLnBhcmVudFN0eWxlKCkudGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICBwcm9wZXJ0eUNhc2Nh
ZGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRTdHlsZSgpLnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBsaXN0ID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CkBAIC0xMDc0LDM4ICsxMDc1LDM4IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNp
c1N0eWxlKFN0eWxlUmVzb2x2ZXImCiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGxpc3QpIHsK
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
dmFsdWUpOworICAgICAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRF
bXBoYXNpc0ZpbGwodmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayh2YWx1
ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1N0cmluZygpKSB7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0
RW1waGFzaXNGaWxsOjpGaWxsZWQpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6Q3VzdG9tKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZh
bHVlLnN0cmluZ1ZhbHVlKCkpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRU
ZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCk7CisgICAgICAgIHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6
Q3VzdG9tKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lz
Q3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyayhudWxsQXRvbSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRUZXh0
RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbChwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrOjpBdXRvKTsKKyAgICAg
ICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRpdmVW
YWx1ZSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01h
cmsoVGV4dEVtcGhhc2lzTWFyazo6QXV0byk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZp
bGxlZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldFRl
eHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkKTsKKyAgICAgICAgcHJvcGVy
dHlDYXNjYWRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CiAg
ICAgfQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoYXZpb3Ig
Y291bnRlckJlaGF2aW9yPgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIGF1dG8mIG1hcCA9IHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICBmb3IgKGF1dG8mIGtleVZh
bHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBhdXRvJiBtYXAgPSBwcm9wZXJ0
eUNhc2NhZGUuc3R5bGUoKS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgIGZvciAoYXV0
byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4ocHJvcGVydHlDYXNjYWRlLnBh
cmVudFN0eWxlKCkpLmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgYXV0byYg
ZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUua2V5LCBDb3VudGVyRGlyZWN0aXZlcyB7IH0p
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkK
ICAgICAgICAgICAgIGRpcmVjdGl2ZXMucmVzZXRWYWx1ZSA9IGtleVZhbHVlLnZhbHVlLnJlc2V0
VmFsdWU7CkBAIC0xMTE1LDE0ICsxMTE2LDE0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyCiB9
CiAKIHRlbXBsYXRlIDxTdHlsZUJ1aWxkZXJDdXN0b206OkNvdW50ZXJCZWhhdmlvciBjb3VudGVy
QmVoYXZpb3I+Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3Vu
dGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYm9v
bCBzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVu
dCAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKIAogICAgIGlmICghaXM8
Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBDb3VudGVyRGlyZWN0
aXZlTWFwJiBtYXAgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5hY2Nlc3NDb3VudGVyRGlyZWN0
aXZlcygpOwogICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtYXApIHsKICAgICAgICAgaWYgKGNv
dW50ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlLnJlc2V0
VmFsdWUgPSBXVEY6Om51bGxvcHQ7CkBAIC0xMTQ1LDg0ICsxMTQ2LDg0IEBAIGlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbml0aWFsQ291bnRlckluY3JlbWVudChTdHlsZVJlc29sdmVyJikgeyB9CitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJJbmNyZW1lbnQoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdENvdW50ZXJJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRl
ckluY3JlbWVudChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0g
ICAgYXBwbHlJbmhlcml0Q291bnRlcjxJbmNyZW1lbnQ+KHN0eWxlUmVzb2x2ZXIpOworICAgIGFw
cGx5SW5oZXJpdENvdW50ZXI8SW5jcmVtZW50Pihwcm9wZXJ0eUNhc2NhZGUpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVySW5jcmVtZW50KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJJbmNyZW1lbnQoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAg
YXBwbHlWYWx1ZUNvdW50ZXI8SW5jcmVtZW50PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAg
YXBwbHlWYWx1ZUNvdW50ZXI8SW5jcmVtZW50Pihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVyUmVz
ZXQoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb3VudGVyUmVzZXQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpIHsgfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRDb3VudGVyUmVzZXQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlKQogewotICAgIGFwcGx5SW5oZXJpdENvdW50ZXI8UmVzZXQ+KHN0eWxlUmVz
b2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdENvdW50ZXI8UmVzZXQ+KHByb3BlcnR5Q2FzY2FkZSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJS
ZXNldChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgYXBwbHlWYWx1ZUNvdW50ZXI8UmVzZXQ+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBh
cHBseVZhbHVlQ291bnRlcjxSZXNldD4ocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSk7CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3Vyc29yKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbEN1cnNvcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUp
CiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNv
cigpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5jbGVhckN1cnNvckxpc3QoKTsKKyAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxD
dXJzb3IoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0Q3Vyc29yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1cnNvcihTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJz
b3Ioc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
Y3Vyc29ycygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDdXJzb3IocHJvcGVy
dHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuY3Vyc29yKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldEN1cnNvckxpc3QocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuY3Vyc29y
cygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vy
c29yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1cnNvcihTdHlsZTo6UHJvcGVy
dHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgIHByb3BlcnR5Q2FzY2Fk
ZS5zdHlsZSgpLmNsZWFyQ3Vyc29yTGlzdCgpOwogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKSB7CiAgICAgICAgIEN1cnNvclR5cGUgY3Vyc29yID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Y3Vyc29yKCkgIT0gY3Vyc29yKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRDdXJzb3IoY3Vyc29yKTsKKyAgICAgICAgaWYgKHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmN1
cnNvcigpICE9IGN1cnNvcikKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dEN1cnNvcihjdXJzb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoQ3Vyc29yVHlwZTo6QXV0byk7CisgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0Q3Vyc29yKEN1cnNvclR5cGU6OkF1dG8pOwogICAgIGF1dG8mIGxp
c3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0g
OiBsaXN0KSB7CiAgICAgICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtKSkgewog
ICAgICAgICAgICAgYXV0byYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihp
dGVtLmdldCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29y
KHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShpbWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CisgICAg
ICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5hZGRDdXJzb3IocHJvcGVydHlDYXNjYWRl
LmNyZWF0ZVN0eWxlSW1hZ2UoaW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOwogICAgICAgICAgICAg
Y29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEN1cnNvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOworICAgICAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDdXJzb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGl0ZW0uZ2V0KCkpKTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVtLnB0
cigpID09IGxpc3QuaXRlbShsaXN0Lmxlbmd0aCgpIC0gMSksICJDdXJzb3IgSUQgZmFsbGJhY2sg
c2hvdWxkIGFsd2F5cyBiZSBsYXN0IGluIHRoZSBsaXN0Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRmls
bChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxGaWxsKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5
Q2FzY2FkZSkKIHsKLSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
YWNjZXNzU1ZHU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBh
aW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3R5bGVS
ZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gcHJv
cGVydHlDYXNjYWRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRG
aWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRl
clN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxG
aWxsUGFpbnRVcmkoKSwgcHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpLCBwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGaWxsKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdEZpbGwoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nl
c3NTVkdTdHlsZSgpOwotICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQ
YXJlbnRTdHlsZS5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludENvbG9y
KCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gcHJvcGVy
dHlDYXNjYWRlLnBhcmVudFN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRGaWxs
UGFpbnQoc3ZnUGFyZW50U3R5bGUuZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5maWxs
UGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRVcmkoKSwgcHJvcGVydHlDYXNj
YWRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIAogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUZpbGwoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGNvbnN0IGF1dG8qIGxvY2FsVmFsdWUgPSB2
YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgPyAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSA6IG51bGxwdHI7CiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAodmFsdWUuaXNWYWx1ZUxp
c3QoKSkgewpAQCAtMTI0MiwzMSArMTI0MywzMSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTUwog
ICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFs
dWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHko
KSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6IFNWR1BhaW50VHlwZTo6VVJJTm9uZTsKICAgICBlbHNl
IGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGNvbG9yID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
Y29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlw
ZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRUeXBlOjpVUklDdXJyZW50Q29sb3I7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAgY29sb3IgPSBwcm9wZXJ0eUNhc2NhZGUuY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOwogICAgICAgICBwYWludFR5cGUgPSB1cmwu
aXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJUkdC
Q29sb3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChwYWludFR5cGUsIGNvbG9y
LCB1cmwsIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxl
UmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBzdmdTdHls
ZS5zZXRGaWxsUGFpbnQocGFpbnRUeXBlLCBjb2xvciwgdXJsLCBwcm9wZXJ0eUNhc2NhZGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbFN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTdHJva2UoU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIFNWR1JlbmRlclN0eWxlJiBz
dmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKLSAgICBz
dmdTdHlsZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50
VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CisgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJva2VQ
YWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJT
dHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxT
dHJva2VQYWludFVyaSgpLCBwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCksIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFN0cm9r
ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRTdHJva2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBh
aW50KHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5zdHJv
a2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VXJpKCksIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9IHByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnUGFyZW50
U3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5zdmdTdHlsZSgpOworICAgIHN2
Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VHlwZSgpLCBz
dmdQYXJlbnRTdHlsZS5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBh
aW50VXJpKCksIHByb3BlcnR5Q2FzY2FkZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwg
cHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
cHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUg
PSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3Zn
U3R5bGUgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGNv
bnN0IGF1dG8qIGxvY2FsVmFsdWUgPSB2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgPyAmZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSA6IG51bGxwdHI7CiAgICAgU3RyaW5nIHVybDsK
ICAgICBpZiAodmFsdWUuaXNWYWx1ZUxpc3QoKSkgewpAQCAtMTI4NiwzMiArMTI4NywzMiBAQCBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQwogICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1
ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
cGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6IFNWR1BhaW50
VHlwZTo6VVJJTm9uZTsKICAgICBlbHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBs
b2NhbFZhbHVlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAgICAgICAg
Y29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGNvbG9yID0g
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJs
LmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRUeXBlOjpV
UklDdXJyZW50Q29sb3I7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29s
dmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAgY29sb3Ig
PSBwcm9wZXJ0eUNhc2NhZGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOwog
ICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JDb2xv
ciA6IFNWR1BhaW50VHlwZTo6VVJJUkdCQ29sb3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNldFN0
cm9rZVBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwgc3R5bGVSZXNvbHZlci5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOworICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHBhaW50VHlwZSwgY29s
b3IsIHVybCwgcHJvcGVydHlDYXNjYWRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBw
cm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb250ZW50KFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbENvbnRlbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNj
YWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuY2xlYXJDb250ZW50KCk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q29udGVudChTdHlsZVJlc29sdmVyJikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q29udGVudChTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJikKIHsKICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBi
ZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuIEluIENTUzIgaXQgaXMgbm90LiBUaGlzCiAg
ICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMg
dG8gYmUgc3VwcG9ydGVkLgogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgY29u
c3QgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHByaW1pdGl2ZVZhbHVlLCBwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJD
b250ZW50KCk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmNsZWFyQ29udGVudCgp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzE5LDE3ICsxMzIwLDE3IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4o
aXRlbSkpIHsKICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPihpdGVtKSkKLSAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkp
LmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0eWxlUmVzb2x2ZXIpKSwgZGlkU2V0KTsKKyAg
ICAgICAgICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgp
KS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChwcm9wZXJ0eUNhc2NhZGUuc3R5bGVSZXNvbHZl
cigpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShk
b3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRl
bS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
fSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgewotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShp
dGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENv
bnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOwogICAgICAgICAg
ICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxDU1NJbWFnZVZh
bHVlPihpdGVtKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250
ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3Jl
YXRlKGl0ZW0pLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAg
ICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMzM5LDIwICsxMzQwLDIwIEBAIGlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwKIAogICAgICAgICBhdXRvJiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSk7CiAgICAgICAgIGlmIChjb250ZW50VmFsdWUu
aXNTdHJpbmcoKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250
ZW50KGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAg
ICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENvbnRlbnQoY29udGVudFZhbHVlLnN0cmlu
Z1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAg
ICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNBdHRyKCkpIHsKICAgICAgICAgICAgIC8v
IEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0g
ICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBQc2V1
ZG9JZDo6Tm9uZSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhh
c0F0dHJDb250ZW50KCk7CisgICAgICAgICAgICBpZiAocHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgICAgICAgICAgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0SGFzQXR0ckNvbnRlbnQoKTsKICAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpKS0+c2V0SGFzQXR0ckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBjb25zdF9j
YXN0PFJlbmRlclN0eWxlJj4ocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkpLnNldEhhc0F0
dHJDb250ZW50KCk7CiAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20oKSwg
Y29udGVudFZhbHVlLnN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSgpKTsKLSAgICAgICAg
ICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdl
dEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBkaWRT
ZXQpOworICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUgPSBwcm9wZXJ0eUNhc2Nh
ZGUuZWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgIHByb3BlcnR5Q2Fz
Y2FkZS5zdHlsZSgpLnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6IHZh
bHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
ICAgICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0
cyB0aGUgc3R5bGUuCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkubXV0YWJs
ZUZlYXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOwor
ICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11
dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgp
KTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNDb3VudGVyKCkpIHsKICAgICAg
ICAgICAgIGF1dG8qIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS5jb3VudGVyVmFsdWUoKTsK
ICAgICAgICAgICAgIExpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IExpc3RTdHlsZVR5cGU6
Ok5vbmU7CkBAIC0xMzYwLDI0ICsxMzYxLDI0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAg
ICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAg
ICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PExpc3RTdHlsZVR5cGU+KGxpc3RTdHls
ZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgIGF1dG8gY291bnRlciA9IG1ha2VV
bmlxdWU8Q291bnRlckNvbnRlbnQ+KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5
bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKTsKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChXVEZNb3ZlKGNvdW50ZXIpLCBkaWRTZXQpOworICAg
ICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChXVEZNb3ZlKGNvdW50
ZXIpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLnZhbHVlSUQoKSkgewogICAgICAg
ICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVUeXBlOjpPcGVuUXVvdGUsIGRpZFNldCk7Cisg
ICAgICAgICAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5
cGU6Ok9wZW5RdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVv
dGU6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1
b3RlVHlwZTo6Q2xvc2VRdW90ZSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zZXRDb250ZW50KFF1b3RlVHlwZTo6Q2xvc2VRdW90ZSwgZGlkU2V0KTsK
ICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChRdW90ZVR5cGU6Ok5vT3BlblF1b3RlLCBk
aWRTZXQpOworICAgICAgICAgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldENvbnRl
bnQoUXVvdGVUeXBlOjpOb09wZW5RdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NW
YWx1ZU5vQ2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb0Nsb3NlUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6Ok5vQ2xv
c2VRdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzODcsMTI3ICsxMzg4
LDEyNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYg
KCFkaWRTZXQpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7
CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGln
YXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50Q29tbW9uTGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnRE
ZXNjcmlwdGlvbigpLnZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBh
cmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCkpOwotICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoc3R5bGVSZXNv
bHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbW1vbkxp
Z2F0dXJlcyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENv
bW1vbkxpZ2F0dXJlcygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRp
b25hcnlMaWdhdHVyZXMocHJvcGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoKSk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCkpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJlcyhT
dHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0
ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHByb3Bl
cnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlh
bnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRM
aWdhdHVyZXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1dG8gdmFyaWFudExpZ2F0dXJlcyA9IGV4dHJh
Y3RGb250VmFyaWFudExpZ2F0dXJlcyh2YWx1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnRDb21tb25MaWdhdHVyZXModmFyaWFudExpZ2F0dXJlcy5jb21tb25MaWdhdHVyZXMpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyh2YXJp
YW50TGlnYXR1cmVzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyh2YXJpYW50TGlnYXR1cmVzLmhpc3Rvcmlj
YWxMaWdhdHVyZXMpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXModmFyaWFudExpZ2F0dXJlcy5jb250ZXh0dWFsQWx0ZXJuYXRlcyk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
KyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2Ny
aXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0Rm9udFZhcmlhbnROdW1lcmljKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJp
YyhTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShzdHlsZVJlc29sdmVyLnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljRmlndXJlKCkpOwotICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250
RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSk7Ci0gICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpOwotICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50TnVtZXJpY09yZGluYWwoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNl
dFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAg
Zm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKHByb3BlcnR5Q2FzY2FkZS5w
YXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZpZ3VyZSgpKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24ocHJvcGVydHlDYXNjYWRlLnBhcmVu
dEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmljRnJhY3Rpb24oKSk7CisgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljT3JkaW5hbChwcm9wZXJ0eUNhc2NhZGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNPcmRpbmFsKCkpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkpOworICAgIHBy
b3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnROdW1lcmljKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKEZvbnRWYXJpYW50TnVtZXJpY0Zp
Z3VyZTo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFj
aW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlhbnROdW1lcmljRnJhY3Rpb246
Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljT3JkaW5hbChG
b250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJv
OjpOb3JtYWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnROdW1lcmljKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBhdXRv
IHZhcmlhbnROdW1lcmljID0gZXh0cmFjdEZvbnRWYXJpYW50TnVtZXJpYyh2YWx1ZSk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKHZhcmlhbnROdW1lcmljLmZp
Z3VyZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2luZyh2YXJp
YW50TnVtZXJpYy5zcGFjaW5nKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVy
aWNGcmFjdGlvbih2YXJpYW50TnVtZXJpYy5mcmFjdGlvbik7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljT3JkaW5hbCh2YXJpYW50TnVtZXJpYy5vcmRpbmFsKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyh2YXJpYW50TnVtZXJp
Yy5zbGFzaGVkWmVybyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJv
cGVydHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZl
ci5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhblZhcmlhbnQoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50
RWFzdEFzaWFuVmFyaWFudCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhbldpZHRoKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVh
c3RBc2lhbldpZHRoKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFu
UnVieShzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0QXNp
YW5SdWJ5KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNh
c2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50RWFzdEFzaWFuVmFyaWFudCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dEVhc3RBc2lhbldpZHRoKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50RWFzdEFzaWFuV2lkdGgoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRF
YXN0QXNpYW5SdWJ5KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJp
YW50RWFzdEFzaWFuUnVieSgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2Fz
Y2FkZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVh
c3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0
QXNpYW5XaWR0aDo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RB
c2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3JtYWwpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
VmFyaWFudEVhc3RBc2lhbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFy
aWFudEVhc3RBc2lhbihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0
eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgYXV0byB2YXJpYW50RWFzdEFzaWFuID0g
ZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKHZhbHVlKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQodmFyaWFudEVhc3RBc2lhbi52YXJpYW50KTsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhbldpZHRoKHZhcmlhbnRFYXN0QXNp
YW4ud2lkdGgpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuUnVieSh2
YXJpYW50RWFzdEFzaWFuLnJ1YnkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXplKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbEZvbnRTaXplKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsK
LSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQo
Q1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0
eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmbG9hdCBzaXplID0g
U3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9u
LnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgcHJvcGVydHlDYXNjYWRlLmRvY3VtZW50KCkpOwogCiAg
ICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICBmb250RGVzY3JpcHRpb24u
c2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZU1lZGl1bSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAg
cHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZv
bnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRTaXplKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUm
IHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAg
IGNvbnN0IGF1dG8mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250
RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgaWYgKHNpemUgPCAwKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9w
ZXJ0eUNhc2NhZGUuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemUocGFyZW50Rm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkpOwot
ICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNp
emUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250
RGVzY3JpcHRpb24pKTsKIH0KIAogLy8gV2hlbiB0aGUgQ1NTIGtleXdvcmQgImxhcmdlciIgaXMg
dXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQgdG8gbWF0Y2ggd2l0aGluIHRoZSBrZXl3
b3JkCkBAIC0xNTI3LDU5ICsxNTI4LDUzIEBAIGlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0
b206OnNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKQogICAgIHJldHVybiBzaXplIC8gMS4yZjsK
IH0KIAotaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaW5lUnVieVRleHRT
aXplTXVsdGlwbGllcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIGZsb2F0
IFN0eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgaWYgKHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+cnVieVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uOjpJbnRlckNoYXJh
Y3RlcikKKyAgICBpZiAocHJvcGVydHlDYXNjYWRlLnN0eWxlKCkucnVieVBvc2l0aW9uKCkgIT0g
UnVieVBvc2l0aW9uOjpJbnRlckNoYXJhY3RlcikKICAgICAgICAgcmV0dXJuIDAuNWY7CiAKICAg
ICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIHRvIGVuc3VyZSB0b25lIG1hcmtzIGFyZSB0aGUgc2Ft
ZSBzaXplIGFzCiAgICAgLy8gdGhlIGJvcG9tb2ZvLiBUaGlzIGNvZGUgd2lsbCBnbyBhd2F5IGlm
IHdlIG1ha2UgYSBzcGVjaWFsIHJlbmRlcmVyCiAgICAgLy8gZm9yIHRoZSB0b25lIG1hcmtzIGV2
ZW50dWFsbHkuCi0gICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCku
ZWxlbWVudCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3IgOiBhbmNlc3RvcnNPZlR5
cGU8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAgaWYgKGFuY2VzdG9yLmhh
c1RhZ05hbWUoSFRNTE5hbWVzOjpydFRhZykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDEuMGY7
Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPEhU
TUxFbGVtZW50Pihwcm9wZXJ0eUNhc2NhZGUuZWxlbWVudCgpKSkgeworICAgICAgICBpZiAoYW5j
ZXN0b3IuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnJ0VGFnKSkKKyAgICAgICAgICAgIHJldHVybiAx
LjBmOwogICAgIH0KICAgICByZXR1cm4gMC4yNWY7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRT
dHlsZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgYXV0
byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLmZvbnREZXNjcmlwdGlvbigp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6
aW5pdGlhbEl0YWxpYygpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhG
b250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcygpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwor
ICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRGb250U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFN0eWxlKFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEl0
YWxpYyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLml0YWxpYygpKTsKLSAg
ICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhzdHlsZVJlc29sdmVyLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRG
b250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IHByb3BlcnR5Q2FzY2FkZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250
RGVzY3JpcHRpb24uc2V0SXRhbGljKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRGb250RGVzY3JpcHRp
b24oKS5pdGFsaWMoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMocHJv
cGVydHlDYXNjYWRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSk7Cisg
ICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVG
b250U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIGF1dG8mIGZvbnRTdHlsZVZhbHVlID0gZG93bmNhc3Q8Q1NTRm9udFN0eWxlVmFsdWU+KHZh
bHVlKTsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuZm9u
dERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVGcm9tVmFsdWUoZm9udFN0eWxlVmFsdWUpKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhmb250U3R5bGVWYWx1ZS5mb250
U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSXRhbGljID8gRm9udFN0eWxlQXhpczo6
aXRhbCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgcHJvcGVydHlDYXNjYWRl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0
byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5mb250RGVzY3JpcHRp
b24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihD
U1NWYWx1ZUludmFsaWQpOwogCi0gICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7Ci0gICAgYm9vbCBw
YXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgIGlmIChhdXRvKiBwYXJlbnRTdHlsZSA9
IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkgewotICAgICAgICBwYXJlbnRTaXplID0gcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAgICAgcGFy
ZW50SXNBYnNvbHV0ZVNpemUgPSBwYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNv
bHV0ZVNpemUoKTsKLSAgICB9CisgICAgZmxvYXQgcGFyZW50U2l6ZSA9IHByb3BlcnR5Q2FzY2Fk
ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAgICBi
b29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gcHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCku
Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKIAogICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBmbG9hdCBz
aXplOwpAQCAtMTU5Niw3ICsxNTkxLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgIHNpemUgPSBT
dHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAgICAgICAgICAgc2l6
ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCksIHByb3BlcnR5Q2FzY2FkZS5kb2N1bWVudCgpKTsKICAgICAgICAg
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpAQCAtMTYw
Niw3ICsxNjAxLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Rm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAgICAgIHNpemUg
PSBzbWFsbGVyRm9udFNpemUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFJ1YnlUZXh0OgotICAgICAgICAgICAgc2l6ZSA9IGRldGVy
bWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoc3R5bGVSZXNvbHZlcikgKiBwYXJlbnRTaXplOwor
ICAgICAgICAgICAgc2l6ZSA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIocHJvcGVy
dHlDYXNjYWRlKSAqIHBhcmVudFNpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MTQsMTMgKzE2MDksMTMgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwKICAgICB9IGVsc2UgewogICAgICAgICBmb250RGVzY3JpcHRpb24u
c2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwgIShwcmltaXRpdmVWYWx1
ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgp
KSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAg
ICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIu
cm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucmVuZGVyVmlldygp
LCAxLjBmLCB0cnVlKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0Rm9u
dFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdl
TGVuZ3RoKCkpOworICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJnByb3BlcnR5Q2FzY2FkZS5wYXJl
bnRTdHlsZSgpLCAmcHJvcGVydHlDYXNjYWRlLnJvb3RFbGVtZW50U3R5bGUoKSwgcHJvcGVydHlD
YXNjYWRlLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAg
ICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnN0YXRlKCkuc2V0Rm9udFNpemVIYXNW
aWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkp
OwogICAgICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAg
ICAgICAgICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXpl
KSAvIDEwMC4wZjsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVk
UGVyY2VudGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29udmVy
c2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpOwotICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBwYXJlbnRDb252ZXJz
aW9uRGF0YSB7IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgY29udmVyc2lvbkRhdGEucm9v
dFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRy
dWUgfTsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbnZlcnNpb25EYXRhID0gcHJvcGVydHlD
YXNjYWRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICAgICAgICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgcGFyZW50Q29udmVyc2lvbkRhdGEgeyAmcHJvcGVydHlDYXNjYWRl
LnBhcmVudFN0eWxlKCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpLCBwcm9wZXJ0eUNhc2Nh
ZGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUgfTsKICAgICAgICAgICAgIHNp
emUgPSBwcmltaXRpdmVWYWx1ZS5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1
ZShwYXJlbnRDb252ZXJzaW9uRGF0YSktPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICB9
IGVsc2UKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MjksMjUgKzE2MjQsMjUgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHJldHVybjsKIAot
ICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdGQ6Om1pbiht
YXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBwcm9wZXJ0eUNhc2Nh
ZGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZv
bnRTaXplLCBzaXplKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdy
aWRUZW1wbGF0ZUFyZWFzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSkK
IHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoUmVuZGVyU3R5
bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkQXJl
YUNvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNv
bHVtbkNvdW50KFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOworICAg
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWEoUmVuZGVyU3R5bGU6Omlu
aXRpYWxOYW1lZEdyaWRBcmVhKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5h
bWVkR3JpZEFyZWFSb3dDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3Vu
dCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhQ29sdW1u
Q291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQoKSk7CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlQXJl
YXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlQXJlYXMoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
TmFtZWRHcmlkQXJlYShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZEFyZWEo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhUm93Q291bnQoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSk7Cisg
ICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYShwcm9wZXJ0eUNhc2Nh
ZGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRBcmVhKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5
bGUoKS5uYW1lZEdyaWRBcmVhUm93Q291bnQoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxl
KCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHls
ZSgpLm5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudCgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGU6OlByb3BlcnR5Q2FzY2Fk
ZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC0xNjU3LDEw
OCArMTY1MiwxMDggQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
R3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGUKICAgICBhdXRvJiBncmlkVGVt
cGxhdGVBcmVhc1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4odmFs
dWUpOwogICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3Jp
ZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCi0gICAgTmFtZWRHcmlkTGluZXNN
YXAgbmFtZWRHcmlkQ29sdW1uTGluZXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3Jp
ZENvbHVtbkxpbmVzKCk7Ci0gICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGluZXMg
PSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgTmFtZWRH
cmlkTGluZXNNYXAgbmFtZWRHcmlkQ29sdW1uTGluZXMgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5uYW1lZEdyaWRDb2x1bW5MaW5lcygpOworICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3Jp
ZFJvd0xpbmVzID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkubmFtZWRHcmlkUm93TGluZXMoKTsK
ICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNG
cm9tR3JpZEFyZWEobmV3TmFtZWRHcmlkQXJlYXMsIG5hbWVkR3JpZENvbHVtbkxpbmVzLCBGb3JD
b2x1bW5zKTsKICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRH
cmlkTGluZXNGcm9tR3JpZEFyZWEobmV3TmFtZWRHcmlkQXJlYXMsIG5hbWVkR3JpZFJvd0xpbmVz
LCBGb3JSb3dzKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVt
bkxpbmVzKG5hbWVkR3JpZENvbHVtbkxpbmVzKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKKyAgICBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5l
cyk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkUm93TGluZXMobmFt
ZWRHcmlkUm93TGluZXMpOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdy
aWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJl
YXNWYWx1ZS5yb3dDb3VudCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVk
R3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNvbHVtbkNvdW50KCkp
OworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWEoZ3JpZFRlbXBs
YXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5yb3dDb3Vu
dCgpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhQ29sdW1u
Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jb2x1bW5Db3VudCgpKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxHcmlkVGVtcGxhdGVDb2x1bW5z
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYgcHJvcGVydHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQ29sdW1ucygpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKFJlbmRlclN0eWxlOjpp
bml0aWFsTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxPcmRl
cmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQ29sdW1ucygpKTsKKyAgICBw
cm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHls
ZTo6aW5pdGlhbE5hbWVkR3JpZENvbHVtbkxpbmVzKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlh
bE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVy
dHlDYXNjYWRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnMo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ncmlkQ29sdW1ucygpKTsKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5vcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgcHJvcGVydHlD
YXNjYWRlLnN0eWxlKCkuc2V0R3JpZENvbHVtbnMocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxl
KCkuZ3JpZENvbHVtbnMoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0TmFtZWRH
cmlkQ29sdW1uTGluZXMocHJvcGVydHlDYXNjYWRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQ29s
dW1uTGluZXMoKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVk
R3JpZENvbHVtbkxpbmVzKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRTdHlsZSgpLm9yZGVyZWROYW1l
ZEdyaWRDb2x1bW5MaW5lcygpKTsKIH0KIAogI2RlZmluZSBTRVRfVFJBQ0tTX0RBVEEodHJhY2tz
RGF0YSwgc3R5bGUsIFRyYWNrVHlwZSkgXAotICAgIHN0eWxlLT5zZXRHcmlkIyNUcmFja1R5cGUj
I3ModHJhY2tzRGF0YS5tX3RyYWNrU2l6ZXMpOyBcCi0gICAgc3R5bGUtPnNldE5hbWVkR3JpZCMj
VHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fbmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5
bGUtPnNldE9yZGVyZWROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX29y
ZGVyZWROYW1lZEdyaWRMaW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQjI1Ry
YWNrVHlwZSMjcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMpOyBcCi0gICAgc3R5
bGUtPnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NE
YXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50KTsgXAotICAgIHN0eWxlLT5zZXRBdXRvUmVw
ZWF0TmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0TmFt
ZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5bGUtPnNldEF1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlk
IyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3Jp
ZExpbmVzKTsgXAotICAgIHN0eWxlLT5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzVHlw
ZSh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFR5cGUpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRv
UmVwZWF0IyNUcmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVh
dEluc2VydGlvblBvaW50KTsKLQotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlR3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSYgdmFsdWUpCisgICAgc3R5bGUuc2V0R3JpZCMjVHJhY2tUeXBlIyNzKHRyYWNrc0Rh
dGEubV90cmFja1NpemVzKTsgXAorICAgIHN0eWxlLnNldE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNM
aW5lcyh0cmFja3NEYXRhLm1fbmFtZWRHcmlkTGluZXMpOyBcCisgICAgc3R5bGUuc2V0T3JkZXJl
ZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fb3JkZXJlZE5hbWVkR3Jp
ZExpbmVzKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3ModHJh
Y2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRv
UmVwZWF0IyNUcmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVh
dEluc2VydGlvblBvaW50KTsgXAorICAgIHN0eWxlLnNldEF1dG9SZXBlYXROYW1lZEdyaWQjI1Ry
YWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXROYW1lZEdyaWRMaW5lcyk7IFwK
KyAgICBzdHlsZS5zZXRBdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5l
cyh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdE9yZGVyZWROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBz
dHlsZS5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzVHlwZSh0cmFja3NEYXRhLm1fYXV0
b1JlcGVhdFR5cGUpOyBcCisgICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMj
c0luc2VydGlvblBvaW50KHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0SW5zZXJ0aW9uUG9pbnQpOwor
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVD
b2x1bW5zKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6VHJhY2tzRGF0YSB0cmFja3NE
YXRhOwotICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0
KHZhbHVlLCB0cmFja3NEYXRhLCBzdHlsZVJlc29sdmVyKSkKKyAgICBpZiAoIVN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgcHJvcGVy
dHlDYXNjYWRlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAm
IG5hbWVkR3JpZEFyZWFzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7
CisgICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5uYW1lZEdyaWRBcmVhKCk7CiAgICAgaWYgKCFuYW1lZEdyaWRBcmVhcy5p
c0VtcHR5KCkpCiAgICAgICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXRO
YW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShuYW1lZEdyaWRBcmVhcywgdHJhY2tzRGF0YS5tX25h
bWVkR3JpZExpbmVzLCBGb3JDb2x1bW5zKTsKIAotICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NE
YXRhLCBzdHlsZVJlc29sdmVyLnN0eWxlKCksIENvbHVtbik7CisgICAgU0VUX1RSQUNLU19EQVRB
KHRyYWNrc0RhdGEsIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLCBDb2x1bW4pOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZVJvd3Mo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlUm93cyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRHcmlk
Um93cyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRSb3dzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdy
aWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE9yZGVyZWROYW1l
ZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE9yZGVyZWROYW1lZEdyaWRSb3dMaW5l
cygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRHcmlkUm93cyhSZW5kZXJTdHls
ZTo6aW5pdGlhbEdyaWRSb3dzKCkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldE5h
bWVkR3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkUm93TGluZXMoKSk7
CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVz
KFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0ZVJv
d3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyhTdHlsZTo6UHJvcGVydHlDYXNj
YWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRH
cmlkUm93cyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmdyaWRSb3dzKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPm9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUu
c3R5bGUoKS5zZXRHcmlkUm93cyhwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5ncmlkUm93
cygpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhw
cm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBw
cm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMocHJvcGVy
dHlDYXNjYWRlLnBhcmVudFN0eWxlKCkub3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVS
b3dzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZVJvd3MoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpUcmFja3NEYXRhIHRyYWNrc0RhdGE7Ci0gICAg
aWYgKCFTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRy
YWNrc0RhdGEsIHN0eWxlUmVzb2x2ZXIpKQorICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVy
OjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja3NEYXRhLCBwcm9wZXJ0eUNhc2NhZGUp
KQogICAgICAgICByZXR1cm47Ci0gICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlk
QXJlYXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZEFyZWEoKTsKKyAgICBjb25z
dCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1lZEdyaWRBcmVhcyA9IHByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpLm5hbWVkR3JpZEFyZWEoKTsKICAgICBpZiAoIW5hbWVkR3JpZEFyZWFzLmlzRW1wdHkoKSkK
ICAgICAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3JpZExp
bmVzRnJvbUdyaWRBcmVhKG5hbWVkR3JpZEFyZWFzLCB0cmFja3NEYXRhLm1fbmFtZWRHcmlkTGlu
ZXMsIEZvclJvd3MpOwogCi0gICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKSwgUm93KTsKKyAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgcHJv
cGVydHlDYXNjYWRlLnN0eWxlKCksIFJvdyk7CiB9CiAKLXZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQWx0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK3ZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KFN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRDb250ZW50QWx0VGV4dChwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuc2V0Q29udGVudEFsdFRleHQocHJp
bWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNBdHRyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFjZSBiZSBzcGVjaWZp
ZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICBpZiAocHJvcGVydHlDYXNjYWRlLnN0eWxl
KCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgICAgICAgICBwcm9wZXJ0eUNh
c2NhZGUuc3R5bGUoKS5zZXRVbmlxdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldFVu
aXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KHByb3BlcnR5Q2Fz
Y2FkZS5wYXJlbnRTdHlsZSgpKS5zZXRVbmlxdWUoKTsKIAogICAgICAgICBRdWFsaWZpZWROYW1l
IGF0dHIobnVsbEF0b20oKSwgcHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSwgbnVsbEF0b20o
KSk7Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVt
ZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUp
OworICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IHByb3BlcnR5Q2FzY2FkZS5lbGVt
ZW50KCkuZ2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUo
KS5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUp
OwogCiAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1
ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAgICAgc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLm11
dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgp
KTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11
dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgp
KTsKICAgICB9IGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50
QWx0VGV4dChlbXB0eUF0b20oKSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNl
dENvbnRlbnRBbHRUZXh0KGVtcHR5QXRvbSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXaWxsQ2hhbmdlKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2Fk
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFdpbGxDaGFuZ2UobnVsbHB0cik7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHls
ZSgpLnNldFdpbGxDaGFuZ2UobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg
LTE3ODAsNTUgKzE3NzUsNTUgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlV2lsbENoYW5nZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
V2lsbENoYW5nZShXVEZNb3ZlKHdpbGxDaGFuZ2UpKTsKKyAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5
bGUoKS5zZXRXaWxsQ2hhbmdlKFdURk1vdmUod2lsbENoYW5nZSkpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBw
cm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFN0cm9rZVdpZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aChzdHlsZVJlc29sdmVyLCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
SGFzRXhwbGljaXRseVNldFN0cm9rZVdpZHRoKHRydWUpOworICAgIHByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLnNldFN0cm9rZVdpZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aChwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKSk7CisgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
c2V0SGFzRXhwbGljaXRseVNldFN0cm9rZVdpZHRoKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9w
ZXJ0eUNhc2NhZGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgaWYgKHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRp
dmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gZmFsc2UpKTsKLSAg
ICBpZiAoc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0g
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmlzaXRlZExpbmtTdHJva2VDb2xvcihz
dHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBm
b3JWaXNpdGVkTGluayAqLyB0cnVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRI
YXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IodHJ1ZSk7CisgICAgaWYgKHByb3BlcnR5Q2FzY2Fk
ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgcHJvcGVydHlDYXNjYWRl
LnN0eWxlKCkuc2V0U3Ryb2tlQ29sb3IocHJvcGVydHlDYXNjYWRlLmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyBmYWxzZSkpOworICAg
IGlmIChwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQor
ICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS5zZXRWaXNpdGVkTGlua1N0cm9rZUNvbG9y
KHByb3BlcnR5Q2FzY2FkZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwg
LyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgp
LnNldEhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJl
Z2lzdGVyZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlOjpQcm9wZXJ0eUNhc2Nh
ZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiBy
ZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChyZWdpc3RlcmVk
ICYmIHJlZ2lzdGVyZWQtPmluaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGF1dG8gaW5pdGlhbFZh
bHVlID0gcmVnaXN0ZXJlZC0+aW5pdGlhbFZhbHVlQ29weSgpOwotICAgICAgICBhcHBseVZhbHVl
Q3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgKmluaXRpYWxWYWx1ZSk7
CisgICAgICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eUNhc2NhZGUsIHJlZ2lz
dGVyZWQsICppbml0aWFsVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0
byBpbnZhbGlkID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlVW5yZXNvbHZlZChuYW1l
LCBDU1NWYWx1ZUludmFsaWQpOwotICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShzdHlsZVJl
c29sdmVyLCByZWdpc3RlcmVkLCBpbnZhbGlkLmdldCgpKTsKKyAgICBhcHBseVZhbHVlQ3VzdG9t
UHJvcGVydHkocHJvcGVydHlDYXNjYWRlLCByZWdpc3RlcmVkLCBpbnZhbGlkLmdldCgpKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0b21Qcm9w
ZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3Vz
dG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0eWxl
OjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5Q2FzY2FkZSwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1
c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAg
IGF1dG8qIHBhcmVudFZhbHVlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpID8gc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbmhlcml0ZWRDdXN0b21Qcm9wZXJ0aWVzKCkuZ2V0KG5h
bWUpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRWYWx1ZSA9IHByb3BlcnR5Q2FzY2FkZS5w
YXJlbnRTdHlsZSgpLmluaGVyaXRlZEN1c3RvbVByb3BlcnRpZXMoKS5nZXQobmFtZSk7CiAgICAg
aWYgKHBhcmVudFZhbHVlICYmICEocmVnaXN0ZXJlZCAmJiAhcmVnaXN0ZXJlZC0+aW5oZXJpdHMp
KQotICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0
ZXJlZCwgKnBhcmVudFZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHBy
b3BlcnR5Q2FzY2FkZSwgcmVnaXN0ZXJlZCwgKnBhcmVudFZhbHVlKTsKICAgICBlbHNlCi0gICAg
ICAgIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQs
IG5hbWUpOworICAgICAgICBhcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eUNhc2Nh
ZGUsIHJlZ2lzdGVyZWQsIG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENTU0N1c3Rv
bVByb3BlcnR5VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlD
YXNjYWRlLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZS5pc1Jlc29s
dmVkKCkpOwogICAgIGNvbnN0IGF1dG8mIG5hbWUgPSB2YWx1ZS5uYW1lKCk7CiAKICAgICBpZiAo
IXJlZ2lzdGVyZWQgfHwgcmVnaXN0ZXJlZC0+aW5oZXJpdHMpCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0SW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtlUmVm
KHZhbHVlKSk7CisgICAgICAgIHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLnNldEluaGVyaXRlZEN1
c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROb25Jbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKKyAgICAgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxl
KCkuc2V0Tm9uSW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtlUmVmKHZhbHVl
KSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29s
dmVyLmNwcAppbmRleCBmNmM3ZmZhMGI4MC4uY2VhY2IwZmVmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVSZXNvbHZlci5jcHAKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJTdHlsZUdlbmVy
YXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5
bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRz
LmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCkBAIC0xNDMsNyArMTQ0LDYgQEAg
U3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAjaWYgRU5B
QkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVy
KFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKCZkb2N1bWVudCkpCiAjZW5kaWYKLSAgICAs
IG1fc3R5bGVNYXAodGhpcykKICAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1fZG9j
dW1lbnQuc2V0dGluZ3MoKS5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQogewogICAgIEVs
ZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwpAQCAtMjU3LDYgKzI1
Nyw5IEBAIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50
LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAgICAgZWxzZQogICAgICAgICBtX3Jvb3RF
bGVtZW50U3R5bGUgPSBkb2N1bWVudEVsZW1lbnRTdHlsZSA/IGRvY3VtZW50RWxlbWVudFN0eWxl
IDogZG9jdW1lbnRFbGVtZW50LT5yZW5kZXJTdHlsZSgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVt
ZW50U3R5bGUpCisgICAgICAgIG1fcm9vdEVsZW1lbnRTdHlsZSA9ICZSZW5kZXJTdHlsZTo6ZGVm
YXVsdFN0eWxlKCk7CisKICAgICB1cGRhdGVDb252ZXJzaW9uRGF0YSgpOwogfQogCkBAIC0zNjks
NyArMzcyLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpz
dHlsZUZvcktleWZyYW1lKGNvbnN0IFJlbmRlclN0eWxlKgogICAgIGNhc2NhZGUuYXBwbHlQcm9w
ZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAg
ICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVG
b250KCk7CisgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIAogICAgIC8vIE5vdyByZXNvbHZlIHJl
bWFpbmluZyBjdXN0b20gcHJvcGVydGllcyBhbmQgdGhlIHJlc3QsIGluIGFueSBvcmRlcgogICAg
IGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CkBAIC0zNzcsNyArMzgwLDcgQEAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHlsZUZvcktleWZyYW1l
KGNvbnN0IFJlbmRlclN0eWxlKgogICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0TG93
UHJpb3JpdHlQcm9wZXJ0eSwgbGFzdENTU1Byb3BlcnR5KTsKIAogICAgIC8vIElmIG91ciBmb250
IGdvdCBkaXJ0aWVkIGJ5IG9uZSBvZiB0aGUgbm9uLWVzc2VudGlhbCBmb250IHByb3BzLCB1cGRh
dGUgaXQgYSBzZWNvbmQgdGltZS4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChj
YXNjYWRlKTsKIAogICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKIApAQCAt
NTY5LDcgKzU3Miw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZl
cjo6c3R5bGVGb3JQYWdlKGludCBwYWdlSW5kZXgpCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRp
ZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAgIC8v
IElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQo
KTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gTm93IHJlc29sdmUgcmVtYWlu
aW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAgY2Fz
Y2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTExNTYsMTIgKzExNTksMTIgQEAgc3Rh
dGljIHZvaWQgY2hlY2tGb3JPcmllbnRhdGlvbkNoYW5nZShSZW5kZXJTdHlsZSYgc3R5bGUpCiAg
ICAgc3R5bGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUobmV3Rm9udERlc2NyaXB0aW9uKSk7
CiB9CiAKLXZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCit2b2lkIFN0eWxlUmVzb2x2
ZXI6OnVwZGF0ZUZvbnQoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKIHsKLSAgICBp
ZiAoIW1fc3RhdGUuZm9udERpcnR5KCkpCisgICAgYXV0byYgc3R5bGUgPSAqbV9zdGF0ZS5zdHls
ZSgpOworICAgIGlmICghY2FzY2FkZS5mb250RGlydHkoKSAmJiBzdHlsZS5mb250Q2FzY2FkZSgp
LmZvbnRzKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8mIHN0eWxlID0gKm1fc3RhdGUu
c3R5bGUoKTsKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogICAgIGNoZWNrRm9yVGV4dFNp
emVBZGp1c3Qoc3R5bGUpOwogI2VuZGlmCkBAIC0xMTcxLDcgKzExNzQsOCBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OnVwZGF0ZUZvbnQoKQogICAgIHN0eWxlLmZvbnRDYXNjYWRlKCkudXBkYXRlKCZk
b2N1bWVudCgpLmZvbnRTZWxlY3RvcigpKTsKICAgICBpZiAobV9zdGF0ZS5mb250U2l6ZUhhc1Zp
ZXdwb3J0VW5pdHMoKSkKICAgICAgICAgc3R5bGUuc2V0SGFzVmlld3BvcnRVbml0cyh0cnVlKTsK
LSAgICBtX3N0YXRlLnNldEZvbnREaXJ0eShmYWxzZSk7CisKKyAgICBjYXNjYWRlLmNsZWFyRm9u
dERpcnR5KCk7CiB9CiAKIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlPj4gU3R5bGVSZXNvbHZlcjo6
c3R5bGVSdWxlc0ZvckVsZW1lbnQoY29uc3QgRWxlbWVudCogZWxlbWVudCwgdW5zaWduZWQgcnVs
ZXNUb0luY2x1ZGUpCkBAIC0xMzM4LDcgKzEzNDIsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFw
cGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25z
dAogICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0
SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgICAgIC8vIElmIG91ciBmb250IGdvdCBkaXJ0
aWVkLCB1cGRhdGUgaXQgbm93LgotICAgICAgICB1cGRhdGVGb250KCk7CisgICAgICAgIHVwZGF0
ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5nIGN1c3Rv
bSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAgICAgIGNhc2NhZGUu
YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7CkBAIC0xMzY1LDcgKzEzNjksNyBAQCB2b2lkIFN0eWxl
UmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3BlcnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBjb25zdAogICAgICAgICByZXR1cm4gYXBwbHlNYXRjaGVkUHJvcGVydGllcyhtYXRj
aFJlc3VsdCwgZWxlbWVudCwgRG9Ob3RVc2VNYXRjaGVkUHJvcGVydGllc0NhY2hlKTsKIAogICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZv
bnQoKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gSWYgdGhlIGZvbnQgY2hh
bmdlZCwgd2UgY2FuJ3QgdXNlIHRoZSBtYXRjaGVkIHByb3BlcnRpZXMgY2FjaGUuIFN0YXJ0IG92
ZXIuCiAgICAgaWYgKGNhY2hlSXRlbSAmJiBjYWNoZUl0ZW0tPnJlbmRlclN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKSAhPSBzdGF0ZS5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKSkKQEAgLTEzODEs
NyArMTM4NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgLy8gc28gdG8gcHJlc2Vy
dmUgYmVoYXZpb3IsIHdlIHF1ZXVlIHRoZW0gdXAgZHVyaW5nIGNhc2NhZGUgYW5kIGZsdXNoIGhl
cmUuCiAgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCi0gICAgQVNTRVJU
KCFzdGF0ZS5mb250RGlydHkoKSk7CisgICAgQVNTRVJUKCFjYXNjYWRlLmZvbnREaXJ0eSgpKTsK
IAogICAgIGlmIChjYWNoZUl0ZW0gfHwgIWNhY2hlSGFzaCkKICAgICAgICAgcmV0dXJuOwpAQCAt
MTQwMiwxMCArMTQwNiwxMSBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSogdmFsdQogewogICAgIGlmICgh
dmFsdWUpCiAgICAgICAgIHJldHVybjsKKwogICAgIE1hdGNoUmVzdWx0IG1hdGNoUmVzdWx0Owog
ICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgY2FzY2FkZSgqdGhpcywgbWF0Y2hSZXN1bHQsIHsg
fSk7Ci0gICAgaWYgKHZhbHVlKQotICAgICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydHkoaWQsICp2
YWx1ZSk7CisgICAgY2FzY2FkZS5hcHBseVByb3BlcnR5KGlkLCAqdmFsdWUpOworICAgIHVwZGF0
ZUZvbnQoY2FzY2FkZSk7CiB9CiAKIC8vIFNWRyBoYW5kbGVzIHpvb21pbmcgaW4gYSBkaWZmZXJl
bnQgd2F5IGNvbXBhcmVkIHRvIENTUy4gVGhlIHdob2xlIGRvY3VtZW50IGlzIHNjYWxlZCBpbnN0
ZWFkCkBAIC0xNTE2LDcgKzE1MjEsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmluaXRpYWxpemVG
b250U3R5bGUoKQogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlm
aWVyKENTU1ZhbHVlTWVkaXVtKTsKICAgICBzZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0
eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZhbHNlLCBkb2N1bWVudCgp
KSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFNob3VsZEFsbG93VXNlckluc3RhbGxlZEZvbnRz
KHNldHRpbmdzKCkuc2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoKSA/IEFsbG93VXNlcklu
c3RhbGxlZEZvbnRzOjpZZXMgOiBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6Tm8pOwotICAgIHNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIHN0eWxlKCkt
PnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCiB2b2lk
IFN0eWxlUmVzb2x2ZXI6OnNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCmluZGV4
IDU3Yzk4YTE1MmE1Li42MWM4NDY3OWZmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5o
CkBAIC0xNjAsNyArMTYwLDcgQEAgcHVibGljOgogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvU3R5
bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
KTsKICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUlELCBD
U1NWYWx1ZSopOwogCi0gICAgdm9pZCB1cGRhdGVGb250KCk7CisgICAgdm9pZCB1cGRhdGVGb250
KFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKICAgICB2b2lkIGluaXRpYWxpemVGb250U3R5bGUo
KTsKIAogICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYsIGZsb2F0
IHNpemUpOwpAQCAtMjQ1LDEzICsyNDUsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgSW5zaWRlTGlu
ayBlbGVtZW50TGlua1N0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50TGlua1N0YXRlOyB9
CiAKLSAgICAgICAgdm9pZCBzZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoYm9vbCBpc0Fw
cGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlID0gaXNBcHBseTsgfQotICAgICAg
ICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoYm9vbCBpc0FwcGx5KSB7
IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9IGlzQXBwbHk7IH0KLSAgICAgICAg
Ym9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQotICAgICAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGU7IH0KLQotICAgICAgICB2b2lkIHNldEZvbnREaXJ0eShib29sIGlzRGlydHkpIHsg
bV9mb250RGlydHkgPSBpc0RpcnR5OyB9Ci0gICAgICAgIGJvb2wgZm9udERpcnR5KCkgY29uc3Qg
eyByZXR1cm4gbV9mb250RGlydHk7IH0KICAgICAgICAgdm9pZCBzZXRGb250U2l6ZUhhc1ZpZXdw
b3J0VW5pdHMoYm9vbCBoYXNWaWV3cG9ydFVuaXRzKSB7IG1fZm9udFNpemVIYXNWaWV3cG9ydFVu
aXRzID0gaGFzVmlld3BvcnRVbml0czsgfQogICAgICAgICBib29sIGZvbnRTaXplSGFzVmlld3Bv
cnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzOyB9CiAK
QEAgLTI2MSwyMyArMjU0LDEwIEBAIHB1YmxpYzoKICAgICAgICAgRmlsbExheWVyIGJhY2tncm91
bmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kRGF0YTsgfQogICAgICAgICBjb25z
dCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5kQ29s
b3I7IH0KIAotICAgICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3Jp
cHRpb24oKSB7IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICBj
b25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJl
dHVybiBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24oKTsgfQotICAgICAgICB2b2lkIHNl
dEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2NyaXB0aW9uJiYgZm9udERlc2NyaXB0aW9u
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOyB9Ci0gICAgICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7IG1fZm9u
dERpcnR5IHw9IG1fc3R5bGUtPnNldFpvb20oZik7IH0KLSAgICAgICAgdm9pZCBzZXRFZmZlY3Rp
dmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS0+c2V0RWZmZWN0aXZlWm9v
bShmKTsgfQotICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdNb2RlIHdyaXRpbmdN
b2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2Rl
KTsgfQotICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4
dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFRleHRPcmllbnRhdGlv
bih0ZXh0T3JpZW50YXRpb24pOyB9Ci0KICAgICAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBj
b25zdCB7IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50LT5pc1NWR0VsZW1lbnQoKTsgfQog
CiAgICAgICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7
IH0KIAotICAgICAgICBTdHlsZTo6Q2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbCgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FzY2FkZUxldmVsOyB9Ci0gICAgICAgIHZvaWQgc2V0Q2FzY2FkZUxldmVsKFN0
eWxlOjpDYXNjYWRlTGV2ZWwgbGV2ZWwpIHsgbV9jYXNjYWRlTGV2ZWwgPSBsZXZlbDsgfQotICAg
ICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKCkgY29uc3QgeyByZXR1
cm4gbV9zdHlsZVNjb3BlT3JkaW5hbDsgfQotICAgICAgICB2b2lkIHNldFN0eWxlU2NvcGVPcmRp
bmFsKFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwpIHsgbV9zdHlsZVNjb3Bl
T3JkaW5hbCA9IHN0eWxlU2NvcGVPcmRpbmFsOyB9Ci0KICAgICAgICAgY29uc3QgU2VsZWN0b3JG
aWx0ZXIqIHNlbGVjdG9yRmlsdGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3RvckZpbHRlcjsg
fQogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMjk3LDE0ICsyNzcsOCBAQCBwdWJsaWM6CiAK
ICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGE7CiAKLSAgICAgICAgU3R5bGU6OlNjb3BlT3JkaW5hbCBtX3N0eWxlU2NvcGVPcmRpbmFs
IHsgU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCB9OwotCiAgICAgICAgIEluc2lkZUxpbmsg
bV9lbGVtZW50TGlua1N0YXRlIHsgSW5zaWRlTGluazo6Tm90SW5zaWRlIH07Ci0gICAgICAgIFN0
eWxlOjpDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBTdHlsZTo6Q2FzY2FkZUxldmVsOjpV
c2VyQWdlbnQgfTsKIAotICAgICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
IHsgdHJ1ZSB9OwotICAgICAgICBib29sIG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9mb250RGlydHkgeyBmYWxzZSB9OwogICAgICAg
ICBib29sIG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzIHsgZmFsc2UgfTsKICAgICAgICAgYm9v
bCBtX2hhc1VBQXBwZWFyYW5jZSB7IGZhbHNlIH07CiAgICAgfTsKQEAgLTMxNCwxOCArMjg4LDcg
QEAgcHVibGljOgogCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTVmFsdWUm
KTsKIAotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKTsgfQotICAgIGJvb2wgYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9Ci0KLSAgICBDU1NUb1N0eWxlTWFwKiBz
dHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CiAgICAgSW5zcGVjdG9yQ1NTT01XcmFw
cGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsgcmV0dXJuIG1faW5zcGVjdG9yQ1NTT01X
cmFwcGVyczsgfQotICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICBjb25zdCBG
b250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBt
X3N0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgdm9pZCBzZXRGb250RGVzY3Jp
cHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbikgeyBtX3N0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOyB9Ci0gICAgdm9p
ZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRF
ZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9Ci0g
ICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX3N0YXRl
LnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgIHZvaWQgc2V0VGV4dE9yaWVudGF0
aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9zdGF0ZS5zZXRUZXh0T3Jp
ZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogCiAgICAgYm9vbCBhZGp1c3RSZW5kZXJTdHls
ZUZvclRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiwgY29uc3QgRWxlbWVudCYpOwogCkBAIC0z
ODAsNyArMzQzLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8Vmlld3BvcnRTdHlsZVJlc29sdmVy
PiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKICNlbmRpZgogCi0gICAgQ1NTVG9TdHlsZU1hcCBt
X3N0eWxlTWFwOwogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMgbV9pbnNwZWN0b3JDU1NPTVdy
YXBwZXJzOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9tYWtlcHJvcC5wbCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAppbmRleCBi
ZWRiODI0ZWEwYy4uNTc0OThlZjVjNDcgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9t
YWtlcHJvcC5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKQEAgLTU3OSwy
MSArNTc5LDIxIEBAIHN1YiBnZXRBdXRvR2V0dGVyIHsKICAgbXkgJG5hbWUgPSBzaGlmdDsKICAg
bXkgJHJlbmRlclN0eWxlID0gc2hpZnQ7CiAKLSAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICItPmhh
c0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKKyAgcmV0dXJuICRyZW5k
ZXJTdHlsZSAuICIuaGFzQXV0byIgLiBnZXROYW1lRm9yTWV0aG9kcygkbmFtZSkgLiAiKCkiOwog
fQogCiBzdWIgZ2V0QXV0b1NldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5k
ZXJTdHlsZSA9IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5zZXRIYXNBdXRv
IiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CisgIHJldHVybiAkcmVuZGVyU3R5
bGUgLiAiLnNldEhhc0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKIH0K
IAogc3ViIGdldFZpc2l0ZWRMaW5rU2V0dGVyIHsKICAgbXkgJG5hbWUgPSBzaGlmdDsKICAgbXkg
JHJlbmRlclN0eWxlID0gc2hpZnQ7CiAKLSAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICItPnNldFZp
c2l0ZWRMaW5rIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKTsKKyAgcmV0dXJuICRyZW5kZXJT
dHlsZSAuICIuc2V0VmlzaXRlZExpbmsiIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpOwogfQog
CiBzdWIgZ2V0Q2xlYXJGdW5jdGlvbiB7CkBAIC02OTksNyArNjk5LDcgQEAgc3ViIGNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlIHsKICAgbXkgJHByaW1pdGl2ZVZhbHVlID0gc2hpZnQ7CiAgIG15ICRm
b3JWaXNpdGVkTGluayA9IEBfID8gc2hpZnQgOiBOT1RfRk9SX1ZJU0lURURfTElOSzsKIAotICBy
ZXR1cm4gInN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoIiAuICRwcmltaXRp
dmVWYWx1ZSAuICIsIC8qIGZvclZpc2l0ZWRMaW5rICovICIgLiAoJGZvclZpc2l0ZWRMaW5rID8g
InRydWUiIDogImZhbHNlIikgLiAiKSI7CisgIHJldHVybiAicHJvcGVydHlDYXNjYWRlLmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKCIgLiAkcHJpbWl0aXZlVmFsdWUgLiAiLCAvKiBmb3JWaXNpdGVk
TGluayAqLyAiIC4gKCRmb3JWaXNpdGVkTGluayA/ICJ0cnVlIiA6ICJmYWxzZSIpIC4gIikiOwog
fQogCiB1c2UgY29uc3RhbnQgewpAQCAtNzEzLDEyICs3MTMsMTIgQEAgc3ViIGdlbmVyYXRlQ29s
b3JWYWx1ZVNldHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKICAgbXkgJHZhbHVlSXNQcmlt
aXRpdmUgPSBAXyA/IHNoaWZ0IDogVkFMVUVfSVNfQ09MT1I7CiAKLSAgbXkgJHN0eWxlID0gInN0
eWxlUmVzb2x2ZXIuc3R5bGUoKSI7Ci0gIG15ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
aWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpXG4iOwotICBt
eSAkc2V0VmFsdWUgPSAkc3R5bGUgLiAiLT4iIC4gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InNldHRlciJ9OworICBteSAkc3R5bGUgPSAicHJvcGVydHlDYXNjYWRl
LnN0eWxlKCkiOworICBteSAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChwcm9wZXJ0
eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpXG4iOworICBteSAkc2V0VmFs
dWUgPSAkc3R5bGUgLiAiLiIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRu
YW1lfXsic2V0dGVyIn07CiAgIG15ICRjb2xvciA9ICR2YWx1ZUlzUHJpbWl0aXZlID8gY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoJHZhbHVlKSA6ICR2YWx1ZTsKICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgIiAuICRzZXRWYWx1ZSAuICIoIiAuICRjb2xvciAuICIpO1xuIjsKLSAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNvbHZlci5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpXG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gImlmIChwcm9wZXJ0eUNhc2NhZGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KVxuIjsKICAgJGNvbG9yID0gJHZhbHVlSXNQcmltaXRpdmUgPyBjb2xvckZyb21QcmltaXRpdmVW
YWx1ZSgkdmFsdWUsIEZPUl9WSVNJVEVEX0xJTkspIDogJHZhbHVlOwogICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICAiIC4gZ2V0VmlzaXRlZExpbmtTZXR0ZXIoJG5hbWUsICRzdHls
ZSkgLiAiKCIgLiAkY29sb3IgLiAiKTtcbiI7CiAKQEAgLTczMSw3ICs3MzEsNyBAQCBzdWIgaGFu
ZGxlQ3VycmVudENvbG9yVmFsdWUgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJGNv
ZGUgPSAkaW5kZW50IC4gImlmICgiIC4gJHByaW1pdGl2ZVZhbHVlIC4gIi52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVDdXJyZW50Y29sb3IpIHtcbiI7Ci0gICRjb2RlIC49ICRpbmRlbnQgLiAiICAgIGFw
cGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7Cisg
ICRjb2RlIC49ICRpbmRlbnQgLiAiICAgIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9
IC4gIihwcm9wZXJ0eUNhc2NhZGUpO1xuIjsKICAgJGNvZGUgLj0gJGluZGVudCAuICIgICAgcmV0
dXJuO1xuIjsKICAgJGNvZGUgLj0gJGluZGVudCAuICJ9XG4iOwogICByZXR1cm4gJGNvZGU7CkBA
IC03NDIsNyArNzQyLDcgQEAgc3ViIGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJbml0aWFsVmFs
dWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNvbnRlbnQg
PSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJBbmltYXRpb25MaXN0JiBsaXN0
ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5pbWF0aW9uc09yVHJhbnNp
dGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICJBbmltYXRpb25MaXN0JiBsaXN0ID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuIiAuIGdl
dEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiaWYgKGxpc3QuaXNFbXB0eSgpKVxuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9uOjpj
cmVhdGUoKSk7XG4iOwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InNldHRlciJ9OwpAQCAtNzYyLDggKzc2Miw4IEBAIHN1YiBnZW5lcmF0
ZUFuaW1hdGlvblByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNo
aWZ0OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiYXV0byYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldEVuc3Vy
ZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7Ci0gICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogcGFyZW50TGlzdCA9IHN0eWxlUmVzb2x2ZXIu
cGFyZW50U3R5bGUoKS0+IiAuIGdldEFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1l
KSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byYgbGlzdCA9
IHByb3BlcnR5Q2FzY2FkZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0
aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gImF1dG8qIHBhcmVudExpc3QgPSBwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS4iIC4g
Z2V0QW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJl
bnRMaXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiZm9yICggOyBpIDwgcGFyZW50U2l6ZSAmJiBwYXJlbnRMaXN0LT5hbmltYXRp
b24oaSkuIiAuIGdldFRlc3RGdW5jdGlvbigkbmFtZSkgLiAiKCk7ICsraSkge1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKGxpc3Quc2l6ZSgpIDw9IGkpXG4iOwpA
QCAtNzg2LDIwICs3ODYsMjAgQEAgc3ViIGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlWYWx1ZVNl
dHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIi
OwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkFuaW1hdGlvbkxpc3QmIGxpc3QgPSBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9u
c01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IkFuaW1hdGlvbkxpc3QmIGxpc3QgPSBwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0RW5z
dXJlQW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzaXplX3QgY2hpbGRJbmRleCA9IDA7XG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkg
e1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgLyogV2FsayBlYWNoIHZh
bHVlIGFuZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25z
IGFzIG5lZWRlZC4gKi9cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZv
ciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHtc
biI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBpZiAoY2hpbGRJbmRl
eCA8PSBsaXN0LnNpemUoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
ICAgICAgICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7XG4iOwotICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4i
IC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24oJG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGls
ZEluZGV4KSwgY3VycmVudFZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS4iIC4gZ2V0QW5pbWF0aW9uTWFw
ZnVuY3Rpb24oJG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgY3VycmVudFZh
bHVlKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICArK2NoaWxk
SW5kZXg7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICB9XG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIn0gZWxzZSB7XG4iOwogICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBpZiAobGlzdC5pc0VtcHR5KCkpXG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUo
KSk7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVy
LnN0eWxlTWFwKCktPiIgLiBnZXRBbmltYXRpb25NYXBmdW5jdGlvbigkbmFtZSkgLiAiKGxpc3Qu
YW5pbWF0aW9uKGNoaWxkSW5kZXgpLCB2YWx1ZSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS4iIC4gZ2V0QW5pbWF0aW9u
TWFwZnVuY3Rpb24oJG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUp
O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGRJbmRleCA9IDE7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIn1cbiI7CiAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC5zaXplKCk7ICsrY2hp
bGRJbmRleCkge1xuIjsKQEAgLTgyMiwxMSArODIyLDExIEBAIHN1YiBnZW5lcmF0ZUZpbGxMYXll
clByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyIHsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIi
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIi8vIENoZWNrIGZvciAoc2luZ2xlLWxh
eWVyKSBuby1vcCBiZWZvcmUgY2xlYXJpbmcgYW55dGhpbmcuXG4iOwotICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImF1dG8mIGxheWVycyA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAu
IGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiYXV0byYgbGF5ZXJzID0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCkuIiAuIGdl
dExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiaWYgKCFsYXllcnMubmV4dCgpICYmICghbGF5ZXJzLiIgLiAkdGVzdEZ1bmN0aW9u
IC4gIigpIHx8IGxheWVycy4iIC4gJGdldHRlciAuICIoKSA9PSAkaW5pdGlhbCkpXG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICByZXR1cm47XG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAiXG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxk
ID0gJnN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24o
JG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBj
aGlsZCA9ICZwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5j
dGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImNo
aWxkLT4iIC4gJHNldHRlciAuICIoIiAuICRpbml0aWFsIC4gIik7XG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gImZvciAoY2hpbGQgPSBjaGlsZC0+bmV4dCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dCgpKVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgY2hpbGQtPiIgLiAkY2xlYXJGdW5jdGlvbiAuICIoKTtcbiI7CkBAIC04NDUsMTIgKzg0NSwx
MiBAQCBzdWIgZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlciB7CiAK
ICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICIvLyBDaGVjayBmb3Igbm8tb3AgYmVmb3JlIGNvcHlpbmcgYW55dGhpbmcuXG4iOwotICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiIoKSA9PSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCkpXG4iOworICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gImlmIChwcm9wZXJ0eUNhc2NhZGUucGFyZW50U3R5bGUoKS4iIC4g
Z2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4iKCkgPT0gcHJvcGVydHlDYXNjYWRlLnN0eWxlKCku
IiAuIGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAiICAgIHJldHVybjtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICJcbiI7
Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAmc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnByb3Bl
cnR5Q2FzY2FkZS5zdHlsZSgpLiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAu
ICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiRmlsbExheWVyKiBwcmV2
aW91c0NoaWxkID0gbnVsbHB0cjtcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
Zm9yIChhdXRvKiBwYXJlbnQgPSAmc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT4iIC4gZ2V0
TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigpOyBwYXJlbnQgJiYgcGFyZW50LT4iIC4gJHRlc3RG
dW5jdGlvbiAuICIoKTsgcGFyZW50ID0gcGFyZW50LT5uZXh0KCkpIHtcbiI7CisgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiZm9yIChhdXRvKiBwYXJlbnQgPSAmcHJvcGVydHlDYXNjYWRl
LnBhcmVudFN0eWxlKCkuIiAuIGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuICIoKTsgcGFyZW50
ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rpb24gLiAiKCk7IHBhcmVudCA9IHBhcmVudC0+bmV4
dCgpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBpZiAoIWNoaWxk
KSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgcHJldmlvdXND
aGlsZC0+c2V0TmV4dChtYWtlVW5pcXVlPEZpbGxMYXllcj4oIiAuIGdldEZpbGxMYXllclR5cGUo
JG5hbWUpIC4gIikpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAg
IGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsKQEAgLTg3Miw3ICs4NzIsNyBAQCBz
dWIgZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eVZhbHVlU2V0dGVyIHsKICAgbXkgJENTU1Byb3Bl
cnR5SWQgPSAiQ1NTUHJvcGVydHkiIC4gJG5hbWVUb0lkeyRuYW1lfTsKIAogICBteSAkc2V0dGVy
Q29udGVudCA9ICIiOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxk
ID0gJnN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24o
JG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBj
aGlsZCA9ICZwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5j
dGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkZp
bGxMYXllciogcHJldmlvdXNDaGlsZCA9IG51bGxwdHI7XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSAmJiAhaXM8Q1NTSW1hZ2VT
ZXRWYWx1ZT4odmFsdWUpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAvLyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBpbnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5l
dyBsYXllcnMgYXMgbmVlZGVkLlxuIjsKQEAgLTg4MSwxMiArODgxLDEyIEBAIHN1YiBnZW5lcmF0
ZUZpbGxMYXllclByb3BlcnR5VmFsdWVTZXR0ZXIgewogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNldE5leHQobWFrZVVuaXF1ZTxGaWxs
TGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtcbiI7CiAgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAgICAgY2hpbGQgPSBwcmV2aW91c0NoaWxkLT5u
ZXh0KCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgfVxuIjsK
LSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGVNYXAoKS0+IiAuIGdldEZpbGxMYXllck1hcGZ1bmN0aW9uKCRuYW1lKSAuICIoIiAuICRDU1NQ
cm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCBpdGVtKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBwcm9wZXJ0eUNhc2NhZGUuc3R5bGVNYXAoKS4iIC4gZ2V0RmlsbExh
eWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAiLCAqY2hpbGQs
IGl0ZW0pO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHByZXZp
b3VzQ2hpbGQgPSBjaGlsZDtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
ICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0KCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICB9XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIn0gZWxzZSB7
XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnN0
eWxlTWFwKCktPiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFtZSkgLiAiKCIgLiAkQ1NT
UHJvcGVydHlJZCAuICIsICpjaGlsZCwgdmFsdWUpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICIgICAgcHJvcGVydHlDYXNjYWRlLnN0eWxlTWFwKCkuIiAuIGdldEZpbGxMYXll
ck1hcGZ1bmN0aW9uKCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCB2
YWx1ZSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBjaGlsZCA9IGNo
aWxkLT5uZXh0KCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIn1cbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiZm9yICg7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT5uZXh0KCkpXG4iOwpAQCAtOTAyLDcgKzkwMiw3IEBAIHN1YiBnZW5lcmF0ZVNldFZhbHVlU3Rh
dGVtZW50CiAKICAgbXkgJGlzU1ZHID0gZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRl
ck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKICAgbXkgJHNldHRlciA9ICRwcm9wZXJ0aWVzV2l0aFN0
eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIifTsKLSAgcmV0dXJuICJzdHlsZVJlc29s
dmVyLnN0eWxlKCktPiIgLiAgKCRpc1NWRyA/ICJhY2Nlc3NTVkdTdHlsZSgpLiIgOiAiIikgLiAk
c2V0dGVyIC4gIigiIC4gJHZhbHVlIC4gIikiOworICByZXR1cm4gInByb3BlcnR5Q2FzY2FkZS5z
dHlsZSgpLiIgLiAgKCRpc1NWRyA/ICJhY2Nlc3NTVkdTdHlsZSgpLiIgOiAiIikgLiAkc2V0dGVy
IC4gIigiIC4gJHZhbHVlIC4gIikiOwogfQogCiBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0
ZXIgewpAQCAtOTEzLDkgKzkxMyw5IEBAIHN1YiBnZW5lcmF0ZUluaXRpYWxWYWx1ZVNldHRlciB7
CiAgIG15ICRpbml0aWFsID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFt
ZX17ImluaXRpYWwifTsKICAgbXkgJGlzU1ZHID0gZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxl
QnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsK
LSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseUluaXRpYWwi
IC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcilcbiI7
CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbml0aWFs
IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIHByb3BlcnR5
Q2FzY2FkZSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKLSAgbXkg
JHN0eWxlID0gInN0eWxlUmVzb2x2ZXIuc3R5bGUoKSI7CisgIG15ICRzdHlsZSA9ICJwcm9wZXJ0
eUNhc2NhZGUuc3R5bGUoKSI7CiAgIGlmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWls
ZGVyT3B0aW9uc3skbmFtZX17ImF1dG8tZnVuY3Rpb25zIn0pIHsKICAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICAiIC4gZ2V0QXV0b1NldHRlcigkbmFtZSwgJHN0eWxlKSAuICI7
XG4iOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17InZpc2l0ZWQtbGluay1jb2xvci1zdXBwb3J0In0pIHsKQEAgLTkyNCw5ICs5MjQs
OSBAQCBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICB9IGVsc2lmIChleGlzdHMg
JHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImFuaW1hdGFibGUifSkg
ewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJbml0aWFs
VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICB9IGVsc2lmIChleGlzdHMg
JHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImZvbnQtcHJvcGVydHki
fSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBwcm9wZXJ0
eUNhc2NhZGUuZm9udERlc2NyaXB0aW9uKCk7XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoRm9udENhc2NhZGVE
ZXNjcmlwdGlvbjo6IiAuICRpbml0aWFsIC4gIigpKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQg
Lj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICIgICAgcHJvcGVydHlDYXNjYWRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbikpO1xuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVp
bGRlck9wdGlvbnN7JG5hbWV9eyJmaWxsLWxheWVyLXByb3BlcnR5In0pIHsKICAgICAkc2V0dGVy
Q29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRu
YW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgfSBlbHNlIHsKQEAgLTk0MywxMSArOTQzLDExIEBA
IHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsK
IAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKVxuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICJzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoU3R5
bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlKVxuIjsKICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICJ7XG4iOwogICBteSAkaXNTVkcgPSBleGlzdHMgJHByb3BlcnRpZXNX
aXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InN2ZyJ9OwotICBteSAkcGFyZW50U3R5bGUg
PSAic3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpIjsKLSAgbXkgJHN0eWxlID0gInN0eWxlUmVz
b2x2ZXIuc3R5bGUoKSI7CisgIG15ICRwYXJlbnRTdHlsZSA9ICJwcm9wZXJ0eUNhc2NhZGUucGFy
ZW50U3R5bGUoKSI7CisgIG15ICRzdHlsZSA9ICJwcm9wZXJ0eUNhc2NhZGUuc3R5bGUoKSI7CiAg
IG15ICRnZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsi
Z2V0dGVyIn07CiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRp
b25zeyRuYW1lfXsic2V0dGVyIn07CiAgIG15ICRkaWRDYWxsU2V0VmFsdWUgPSAwOwpAQCAtOTU3
LDEwICs5NTcsMTAgQEAgc3ViIGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgcmV0dXJuO1xuIjsKICAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICB9XG4iOwogICB9IGVsc2lmIChleGlzdHMgJHByb3Bl
cnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InZpc2l0ZWQtbGluay1jb2xvci1z
dXBwb3J0In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBDb2xvciBj
b2xvciA9ICIgLiAkcGFyZW50U3R5bGUgLiAiLT4iIC4gJGdldHRlciAuICIoKTtcbiI7CisgICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgQ29sb3IgY29sb3IgPSAiIC4gJHBhcmVu
dFN0eWxlIC4gIi4iIC4gJGdldHRlciAuICIoKTtcbiI7CiAgICAgaWYgKCFleGlzdHMoJHByb3Bl
cnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17Im5vLWRlZmF1bHQtY29sb3IifSkp
IHsKICAgICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmICghY29sb3IuaXNW
YWxpZCgpKVxuIjsKLSAgICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBj
b2xvciA9ICIgLiAkcGFyZW50U3R5bGUgLiAiLT5jb2xvcigpO1xuIjsKKyAgICAgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjb2xvciA9ICIgLiAkcGFyZW50U3R5bGUgLiAi
LmNvbG9yKCk7XG4iOwogICAgIH0KICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUNvbG9y
VmFsdWVTZXR0ZXIoJG5hbWUsICJjb2xvciIsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRD
YWxsU2V0VmFsdWUgPSAxOwpAQCAtOTY4LDE2ICs5NjgsMTYgQEAgc3ViIGdlbmVyYXRlSW5oZXJp
dFZhbHVlU2V0dGVyIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblBy
b3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAk
ZGlkQ2FsbFNldFZhbHVlID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0
eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoc3R5bGVSZXNvbHZlci5w
YXJlbnRGb250RGVzY3JpcHRpb24oKS4iIC4gJGdldHRlciAuICIoKSk7XG4iOwotICAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNjYWRlLmZv
bnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKHByb3BlcnR5Q2FzY2FkZS5wYXJlbnRG
b250RGVzY3JpcHRpb24oKS4iIC4gJGdldHRlciAuICIoKSk7XG4iOworICAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiICAgIHByb3BlcnR5Q2FzY2FkZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7
CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRu
YW1lfXsiZmlsbC1sYXllci1wcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2Vu
ZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAu
ICIgICAgIik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0KICAgaWYgKCEkZGlkQ2Fs
bFNldFZhbHVlKSB7Ci0gICAgbXkgJGluaGVyaXRlZFZhbHVlID0gJHBhcmVudFN0eWxlIC4gIi0+
IiAuICgkaXNTVkcgPyAic3ZnU3R5bGUoKS4iIDogIiIpIC4gICRnZXR0ZXIgLiAiKCkiOworICAg
IG15ICRpbmhlcml0ZWRWYWx1ZSA9ICRwYXJlbnRTdHlsZSAuICIuIiAuICgkaXNTVkcgPyAic3Zn
U3R5bGUoKS4iIDogIiIpIC4gICRnZXR0ZXIgLiAiKCkiOwogICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgICIgLiBnZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50KCRuYW1lLCAiZm9y
d2FyZEluaGVyaXRlZFZhbHVlKCIgLiAkaW5oZXJpdGVkVmFsdWUgLiAiKSIpIC4gIjtcbiI7CiAg
IH0KICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwpAQCAtOTkwLDIwICs5OTAs
MjAgQEAgc3ViIGdlbmVyYXRlVmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAK
ICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICJzdGF0aWMgdm9pZCBhcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSlcbiI7CisgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5h
bWV9IC4gIihTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIENTU1ZhbHVl
JiB2YWx1ZSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKICAgbXkg
JGNvbnZlcnRlZFZhbHVlOwogICBpZiAoZXhpc3RzKCRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRl
ck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0ZXIifSkpIHsKLSAgICAkY29udmVydGVkVmFsdWUgPSAi
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVp
bGRlck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0ZXIifSAuICIoc3R5bGVSZXNvbHZlciwgdmFsdWUp
IjsKKyAgICAkY29udmVydGVkVmFsdWUgPSAiU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0ZXIi
fSAuICIocHJvcGVydHlDYXNjYWRlLCB2YWx1ZSkiOwogICB9IGVsc2lmIChleGlzdHMoJHByb3Bl
cnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImNvbmRpdGlvbmFsLWNvbnZlcnRl
ciJ9KSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gY29udmVy
dGVkVmFsdWUgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnQiIC4gJHByb3BlcnRpZXNX
aXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImNvbmRpdGlvbmFsLWNvbnZlcnRlciJ9IC4g
IihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnQiIC4gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImNvbmRp
dGlvbmFsLWNvbnZlcnRlciJ9IC4gIihwcm9wZXJ0eUNhc2NhZGUsIHZhbHVlKTtcbiI7CiAgICAg
JGNvbnZlcnRlZFZhbHVlID0gIldURk1vdmUoY29udmVydGVkVmFsdWUudmFsdWUoKSkiOwogICB9
IGVsc2UgewogICAgICRjb252ZXJ0ZWRWYWx1ZSA9ICJkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpIjsKICAgfQogCiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1
aWxkZXJPcHRpb25zeyRuYW1lfXsic2V0dGVyIn07Ci0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29s
dmVyLnN0eWxlKCkiOworICBteSAkc3R5bGUgPSAicHJvcGVydHlDYXNjYWRlLnN0eWxlKCkiOwog
ICBteSAkZGlkQ2FsbFNldFZhbHVlID0gMDsKICAgaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhT
dHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiYXV0by1mdW5jdGlvbnMifSkgewogICAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pIHtcbiI7CkBAIC0xMDIyLDkgKzEw
MjIsOSBAQCBzdWIgZ2VuZXJhdGVWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0g
Z2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eVZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAg
ICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlv
biA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gcHJvcGVydHlDYXNj
YWRlLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKCIgLiAkY29udmVydGVkVmFs
dWUgLiAiKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVS
ZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7
CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgcHJvcGVydHlDYXNjYWRlLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpO1xuIjsKICAgICAkZGlk
Q2FsbFNldFZhbHVlID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxl
QnVpbGRlck9wdGlvbnN7JG5hbWV9eyJmaWxsLWxheWVyLXByb3BlcnR5In0pIHsKICAgICAkc2V0
dGVyQ29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5VmFsdWVTZXR0ZXIoJG5hbWUs
ICRpbmRlbnQgLiAiICAgICIpOwpAQCAtMTA1MSwxMSArMTA1MSwxMSBAQCBwcmludCBTVFlMRUJV
SUxERVIgPDwgIkVPRiI7CiAKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHkuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIK
ICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckNvbnZlcnRl
ci5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckN1c3RvbS5oIgogI2luY2x1ZGUgIlN0eWxlUHJv
cGVydHlTaG9ydGhhbmQuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTA4Myw3ICsxMDgzLDcgQEAgZm9yZWFjaCBteSAkbmFtZSAoQG5h
bWVzKSB7CiBwcmludCBTVFlMRUJVSUxERVIgPDwgIkVPRiI7CiB9OwogCi12b2lkIFN0eWxlQnVp
bGRlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUsIGJvb2wgaXNJbml0aWFsLCBib29sIGlz
SW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkKQor
dm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgcHJvcGVydHlDYXNjYWRlLCBDU1NWYWx1ZSYgdmFsdWUs
IGJvb2wgaXNJbml0aWFsLCBib29sIGlzSW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3Rv
bVByb3BlcnR5KiByZWdpc3RlcmVkKQogewogICAgIHN3aXRjaCAocHJvcGVydHkpIHsKICAgICBj
YXNlIENTU1Byb3BlcnR5SW52YWxpZDoKQEAgLTEwOTEsMTEgKzEwOTEsMTEgQEAgdm9pZCBTdHls
ZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXMKICAgICBjYXNlIENTU1Byb3BlcnR5Q3VzdG9tOiB7CiAgICAgICAgIGF1
dG8mIGN1c3RvbVByb3BlcnR5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4odmFs
dWUpOwogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVk
LCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOworICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShwcm9wZXJ0eUNhc2NhZGUsIHJlZ2lzdGVyZWQs
IGN1c3RvbVByb3BlcnR5Lm5hbWUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJpdCkKLSAg
ICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVydHko
c3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkubmFtZSgpKTsKKyAgICAg
ICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVydHkocHJv
cGVydHlDYXNjYWRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Q
cm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eSk7CisgICAg
ICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShwcm9w
ZXJ0eUNhc2NhZGUsIHJlZ2lzdGVyZWQsIGN1c3RvbVByb3BlcnR5KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogRU9GCkBAIC0xMTA3LDExICsxMTA3LDExIEBAIGZvcmVhY2ggbXkgJG5hbWUgKEBu
YW1lcykgewogICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTtcbiI7CiAgIH0gZWxzaWYgKCFleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InNraXAtYnVpbGRlciJ9KSB7CiAgICAgcHJpbnQgU1RZTEVCVUlMREVS
ICIgICAgICAgIGlmIChpc0luaXRpYWwpXG4iOwotICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAg
ICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbml0aWFsIikgLiAiOjph
cHBseUluaXRpYWwiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoc3R5bGVSZXNvbHZlcik7XG4iOwor
ICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rp
b24oJG5hbWUsICJJbml0aWFsIikgLiAiOjphcHBseUluaXRpYWwiIC4gJG5hbWVUb0lkeyRuYW1l
fSAuICIocHJvcGVydHlDYXNjYWRlKTtcbiI7CiAgICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAg
ICAgIGVsc2UgaWYgKGlzSW5oZXJpdClcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAg
ICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIkluaGVyaXQiKSAuICI6OmFw
cGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7Cisg
ICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlv
bigkbmFtZSwgIkluaGVyaXQiKSAuICI6OmFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9
IC4gIihwcm9wZXJ0eUNhc2NhZGUpO1xuIjsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAg
ICAgZWxzZVxuIjsKLSAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRT
Y29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiVmFsdWUiKSAuICI6OmFwcGx5VmFsdWUiIC4gJG5hbWVU
b0lkeyRuYW1lfSAuICIoc3R5bGVSZXNvbHZlciwgdmFsdWUpO1xuIjsKKyAgICBwcmludCBTVFlM
RUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiVmFs
dWUiKSAuICI6OmFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIocHJvcGVydHlDYXNj
YWRlLCB2YWx1ZSk7XG4iOwogICB9CiAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBicmVh
aztcbiI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggY2M5
YmQyOTVmOGIuLjA1ZDY5NjI0NTNiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFy
c2VyL0NTU1BhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJz
ZXIuY3BwCkBAIC0yMzYsNyArMjM2LDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBh
cnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICBm
b3IgKGF1dG8gaWQgOiBkZXBlbmRlbmNpZXMpCiAgICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0
aWVzKGlkLCBpZCk7CiAKLSAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRD
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwg
Y2FzY2FkZS5zdHlsZVJlc29sdmVyKCksIG1fY29udGV4dCk7CisgICAgcmV0dXJuIENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgsIHJl
c29sdmVkRGF0YS0+dG9rZW5zKCksIGNhc2NhZGUsIG1fY29udGV4dCk7CiB9CiAKIHN0ZDo6dW5p
cXVlX3B0cjxWZWN0b3I8ZG91YmxlPj4gQ1NTUGFyc2VyOjpwYXJzZUtleWZyYW1lS2V5TGlzdChj
b25zdCBTdHJpbmcmIHNlbGVjdG9yKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NT
U1Byb3BlcnR5UGFyc2VyLmNwcAppbmRleCBjYzA1ZWYwZGJmZi4uZGZkYjRlZjM0ZTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCkBAIC02
Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiSGFzaFRvb2xzLmgiCiAvLyBGSVhNRS1ORVdQQVJTRVI6
IFJlcGxhY2UgUGFpciBhbmQgUmVjdCB3aXRoIGFjdHVhbCBDU1NWYWx1ZSBzdWJjbGFzc2VzIChD
U1NWYWx1ZVBhaXIgYW5kIENTU1F1YWRWYWx1ZSkuCiAjaW5jbHVkZSAiUGFpci5oIgorI2luY2x1
ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlJlY3QuaCIKICNpbmNsdWRlICJSZW5k
ZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKQEAgLTc1LDcg
Kzc2LDYgQEAKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJT
dHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFu
ZEZ1bmN0aW9ucy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRlIDxiaXRz
ZXQ+CiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIu
aD4KQEAgLTI5NywxMCArMjk3LDEwIEBAIGJvb2wgQ1NTUHJvcGVydHlQYXJzZXI6OmNhblBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgc3ludGF4LCBjCiAgICAgcmV0
dXJuIHBhcnNlci5jYW5QYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShzeW50YXgpOwogfQog
Ci1SZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBzeW50YXgsIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgY29uc3QgU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCkK
K1JlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VU
eXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBjb25zdCBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
IGNvbnRleHQpCiB7CiAgICAgQ1NTUHJvcGVydHlQYXJzZXIgcGFyc2VyKHRva2VucywgY29udGV4
dCwgbnVsbHB0ciwgZmFsc2UpOwotICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2
YWx1ZSA9IHBhcnNlci5wYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgs
IHN0eWxlUmVzb2x2ZXIpOworICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1
ZSA9IHBhcnNlci5wYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgsIHBy
b3BlcnR5Q2FzY2FkZSk7CiAgICAgaWYgKCF2YWx1ZSB8fCAhcGFyc2VyLm1fcmFuZ2UuYXRFbmQo
KSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIHZhbHVlOwpAQCAtNDI4OSwx
MyArNDI4OSwxMyBAQCB2b2lkIENTU1Byb3BlcnR5UGFyc2VyOjpjb2xsZWN0UGFyc2VkQ3VzdG9t
UHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhjb25zdCBTdHJpbgogICAgIH0KIH0KIAotUmVmUHRy
PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3Vz
dG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4
LCBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQorUmVmUHRyPENTU0N1c3RvbVBy
b3BlcnR5VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBTdHls
ZTo6UHJvcGVydHlDYXNjYWRlJiBwcm9wZXJ0eUNhc2NhZGUpCiB7CiAgICAgaWYgKHN5bnRheCAh
PSAiKiIpIHsKICAgICAgICAgbV9yYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwogICAgICAgICBh
dXRvIHByaW1pdGl2ZVZhbCA9IGNvbnN1bWVXaWR0aE9ySGVpZ2h0KG1fcmFuZ2UsIG1fY29udGV4
dCk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWwgJiYgcHJpbWl0aXZlVmFsLT5pc1ByaW1pdGl2
ZVZhbHVlKCkgJiYgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpwcmltaXRpdmVWYWwpLmlz
TGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGF1dG8gbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsICpwcmltaXRpdmVWYWwpOworICAgICAg
ICAgICAgYXV0byBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgo
cHJvcGVydHlDYXNjYWRlLCAqcHJpbWl0aXZlVmFsKTsKICAgICAgICAgICAgIGlmICghbGVuZ3Ro
LmlzQ2FsY3VsYXRlZCgpICYmICFsZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlU3ludGF4TGVuZ3RoKG5hbWUs
IFdURk1vdmUobGVuZ3RoKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAppbmRleCA2NWU4NjA1N2IyNi4uODMyYTE2NmJlMjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKQEAgLTMy
LDcgKzMyLDEwIEBAIGNsYXNzIENTU1Byb3BlcnR5OwogY2xhc3MgQ1NTVmFsdWU7CiBjbGFzcyBT
dHlsZVByb3BlcnR5U2hvcnRoYW5kOwogY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwotY2xhc3Mg
U3R5bGVSZXNvbHZlcjsKKworbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIFByb3BlcnR5Q2FzY2Fk
ZTsKK30KICAgICAKIC8vIElucHV0czogUHJvcGVydHlJRCwgaXNJbXBvcnRhbnQgYm9vbCwgQ1NT
UGFyc2VyVG9rZW5SYW5nZS4KIC8vIE91dHB1dHM6IFZlY3RvciBvZiBDU1NQcm9wZXJ0aWVzCkBA
IC00Nyw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICAvLyBQYXJzZXMgYSBub24tc2hvcnRoYW5kIENT
UyBwcm9wZXJ0eQogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFsdWUo
Q1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IENTU1BhcnNl
ckNvbnRleHQmKTsKICAgICBzdGF0aWMgYm9vbCBjYW5QYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNv
bnN0IENTU1BhcnNlckNvbnRleHQmKTsKLSAgICBzdGF0aWMgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+IHBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25z
dCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOworICAgIHN0YXRpYyBS
ZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gcGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFy
c2VyVG9rZW5SYW5nZSYsIGNvbnN0IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmLCBjb25zdCBDU1NQ
YXJzZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIHZvaWQgY29sbGVjdFBhcnNlZEN1c3RvbVByb3Bl
cnR5VmFsdWVEZXBlbmRlbmNpZXMoY29uc3QgU3RyaW5nJiBzeW50YXgsIGJvb2wgaXNSb290LCBI
YXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBkZXBlbmRlbmNpZXMsIGNvbnN0IENTU1BhcnNlclRva2Vu
UmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAKIHByaXZhdGU6CkBAIC01OCw3ICs2
MSw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBjb25zdW1lQ1NTV2lkZUtleXdvcmQoQ1NTUHJvcGVy
dHlJRCwgYm9vbCBpbXBvcnRhbnQpOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW5nbGVW
YWx1ZShDU1NQcm9wZXJ0eUlELCBDU1NQcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlJbnZhbGlkKTsK
ICAgICBib29sIGNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYg
c3ludGF4KTsKLSAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gcGFyc2VUeXBlZEN1
c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRh
eCwgY29uc3QgU3R5bGVSZXNvbHZlciYpOworICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZh
bHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CiAgICAg
dm9pZCBjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhjb25zdCBT
dHJpbmcmIHN5bnRheCwgYm9vbCBpc1Jvb3QsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4mIGRlcGVu
ZGVuY2llcyk7CiAKICAgICBib29sIGluUXVpcmtzTW9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
dGV4dC5tb2RlID09IEhUTUxRdWlya3NNb2RlOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcAppbmRleCA5NWI3YjFj
NTVmOS4uYWRjMDM2MTlmY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJELmNwcApAQCAtMTc2LDEzICsxNzYsNyBAQCB2
b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRDo6c2V0Rm9udChjb25zdCBTdHJpbmcmIG5ld0Zv
bnQpCiAgICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJv
cGVydHlGb250U3R5bGUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Rm9udFN0eWxlKS5nZXQoKSk7CiAgICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9D
dXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMsIHBhcnNlZFN0eWxlLT5nZXRQ
cm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFZhcmlhbnRDYXBzKS5nZXQoKSk7CiAgICAg
c3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250
V2VpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpLmdldCgpKTsKLQotICAgIC8vIEFzIGRlc2NyaWJlZCBpbiBCVUc2NjI5MSwgc2V0dGlu
ZyBmb250LXNpemUgYW5kIGxpbmUtaGVpZ2h0IG9uIGEgZm9udCBtYXkgZW50YWlsIGEgQ1NTUHJp
bWl0aXZlVmFsdWU6OmNvbXB1dGVMZW5ndGhEb3VibGUgY2FsbCwKLSAgICAvLyB3aGljaCBhc3N1
bWVzIHRoZSBmb250TWV0cmljcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgYWZmZWN0ZWQgZm9udCwg
b3RoZXJ3aXNlIGEgY3Jhc2ggb2NjdXJzIChzZWUgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvOTYxMjIpLgotICAgIC8vIFRoZSB1cGRhdGVGb250KCkgY2FsbHMgYmVsb3cgdXBkYXRl
IHRoZSBmb250TWV0cmljcyBhbmQgZW5zdXJlIHRoZSBwcm9wZXIgc2V0dGluZyBvZiBmb250LXNp
emUgYW5kIGxpbmUtaGVpZ2h0LgotICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAg
IHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9u
dFNpemUsIHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFNp
emUpLmdldCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJl
c29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQs
IHBhcnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5TGluZUhlaWdodCku
Z2V0KCkpOwogCiAgICAgbW9kaWZpYWJsZVN0YXRlKCkuZm9udC5pbml0aWFsaXplKGRvY3VtZW50
LmZvbnRTZWxlY3RvcigpLCAqc3R5bGVSZXNvbHZlci5zdHlsZSgpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGE0Mzk4MTEyMzVhLi4yN2MzODhhNmVmNyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBAIC0xNzcsNiArMTc3
LDEwIEBAIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0CiAgICAgOiBtX3N0eWxlUmVzb2x2ZXIoc3R5
bGVSZXNvbHZlcikKICAgICAsIG1fbWF0Y2hSZXN1bHQobWF0Y2hSZXN1bHQpCiAgICAgLCBtX2lu
Y2x1ZGVkUHJvcGVydGllcyhpbmNsdWRlZFByb3BlcnRpZXMpCisgICAgLCBtX3N0eWxlKCpzdHls
ZVJlc29sdmVyLnN0eWxlKCkpCisgICAgLCBtX3BhcmVudFN0eWxlKCpzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCkpCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoKnN0eWxlUmVzb2x2ZXIucm9v
dEVsZW1lbnRTdHlsZSgpKQorICAgICwgbV9zdHlsZU1hcCgqdGhpcykKIHsKICAgICAvLyBEaXJl
Y3Rpb25hbCBwcm9wZXJ0aWVzICgqLWJlZm9yZS9hZnRlcikgYXJlIGFsaWFzZXMgdGhhdCBkZXBl
bmQgb24gdGhlIFRleHREaXJlY3Rpb24gYW5kIFdyaXRpbmdNb2RlLgogICAgIC8vIFRoZXNlIG11
c3QgYmUgcmVzb2x2ZWQgYmVmb3JlIHdlIGNhbiBiZWdpbiBidWlsZGluZyB0aGUgcHJvcGVydHkg
Y2FzY2FkZS4KQEAgLTE4OSw4ICsxOTMsMTIgQEAgUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNh
c2NhZGUoY29uc3QgUHJvcGVydHlDYXNjYWRlJiBwYXJlbnQsIE9wdGlvblNldDxDYXNjYWQKICAg
ICA6IG1fc3R5bGVSZXNvbHZlcihwYXJlbnQubV9zdHlsZVJlc29sdmVyKQogICAgICwgbV9tYXRj
aFJlc3VsdChwYXJlbnQubV9tYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVz
KHBhcmVudC5tX2luY2x1ZGVkUHJvcGVydGllcykKKyAgICAsIG1fc3R5bGUocGFyZW50Lm1fc3R5
bGUpCisgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudC5tX3BhcmVudFN0eWxlKQorICAgICwgbV9y
b290RWxlbWVudFN0eWxlKHBhcmVudC5tX3Jvb3RFbGVtZW50U3R5bGUpCiAgICAgLCBtX2RpcmVj
dGlvbihwYXJlbnQubV9kaXJlY3Rpb24pCiAgICAgLCBtX3dyaXRpbmdNb2RlKHBhcmVudC5tX3dy
aXRpbmdNb2RlKQorICAgICwgbV9zdHlsZU1hcCgqdGhpcykKIHsKICAgICBidWlsZENhc2NhZGUo
Y2FzY2FkZUxldmVscyk7CiB9CkBAIC00NjYsMjQgKzQ3NCwxMiBAQCB2b2lkIFByb3BlcnR5Q2Fz
Y2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgICAgIH0K
IAogICAgICAgICBpZiAobV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNv
bnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQpIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAg
bV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxl
Y3RvckNoZWNrZXI6Ok1hdGNoTGluaykgewotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZl
ci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAg
ICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKGluZGV4
ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSB7Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGZhbHNl
KTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9hcHBseVN0YXRlLmxpbmtNYXRjaCA9IGluZGV4OwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0
eShDU1NQcm9wZXJ0eUN1c3RvbSwgdmFsdWVUb0FwcGx5LmdldCgpLCBpbmRleCk7CiAgICAgICAg
IH0KICAgICB9CiAKKyAgICBtX2FwcGx5U3RhdGUubGlua01hdGNoID0gU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQ7CiAgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3Vz
dG9tLnJlbW92ZShuYW1lKTsKICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRp
ZXMuYWRkKG5hbWUpOwogCkBAIC01MjgsMzMgKzUyNCwyNSBAQCBjb25zdCBQcm9wZXJ0eUNhc2Nh
ZGUqIFByb3BlcnR5Q2FzY2FkZTo6cHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soQ2FzY2FkZUxl
dmVsCiAKIGlubGluZSB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eShjb25zdCBQ
cm9wZXJ0eSYgcHJvcGVydHkpCiB7Ci0gICAgU3R5bGVSZXNvbHZlcjo6U3RhdGUmIHN0YXRlID0g
bV9zdHlsZVJlc29sdmVyLnN0YXRlKCk7Ci0gICAgc3RhdGUuc2V0Q2FzY2FkZUxldmVsKHByb3Bl
cnR5LmxldmVsKTsKLSAgICBzdGF0ZS5zZXRTdHlsZVNjb3BlT3JkaW5hbChwcm9wZXJ0eS5zdHls
ZVNjb3BlT3JkaW5hbCk7CisgICAgbV9hcHBseVN0YXRlLmNhc2NhZGVMZXZlbCA9IHByb3BlcnR5
LmxldmVsOworICAgIG1fYXBwbHlTdGF0ZS5zdHlsZVNjb3BlT3JkaW5hbCA9IHByb3BlcnR5LnN0
eWxlU2NvcGVPcmRpbmFsOwogCi0gICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0XSkgewotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAq
cHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRdLCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7Ci0gICAgfQorICAgIGF1dG8gYXBwbHlXaXRoTGlua01h
dGNoID0gWyZdKFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2gpIHsKKyAg
ICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0pIHsKKyAgICAgICAgICAgIG1f
YXBwbHlTdGF0ZS5saW5rTWF0Y2ggPSBsaW5rTWF0Y2g7CisgICAgICAgICAgICBhcHBseVByb3Bl
cnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoXSwgbGlua01hdGNo
KTsKKyAgICAgICAgfQorICAgIH07CiAKLSAgICBpZiAoc3RhdGUuc3R5bGUoKS0+aW5zaWRlTGlu
aygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKLSAgICAgICAgcmV0dXJuOworICAgIGFwcGx5
V2l0aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7CiAKLSAgICBpZiAo
cHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmtdKSB7Ci0gICAgICAg
IHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Ci0gICAgICAgIGFw
cGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoTGlua10sIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKLSAgICB9CisgICAg
aWYgKG1fc3R5bGUuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hWaXNpdGVkXSkgewotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoZmFsc2UpOwotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKHRydWUpOwotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVy
dHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCk7Ci0gICAgfQorICAgIGFwcGx5V2l0aExpbmtNYXRjaChTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hWaXNpdGVkKTsKIAotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSh0cnVlKTsKLSAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKGZhbHNlKTsKKyAgICBtX2FwcGx5U3RhdGUubGlua01hdGNoID0gU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaERlZmF1bHQ7CiB9CiAKIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDaGVja2VyOjpMaW5r
TWF0Y2hNYXNrIGxpbmtNYXRjaE1hc2spCkBAIC01OTAsNyArNTc4LDcgQEAgdm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVl
LCBTZWxlY3RvckMKICAgICBib29sIGlzUmV2ZXJ0ID0gdmFsdWVUb0FwcGx5LT5pc1JldmVydFZh
bHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAg
aWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChhdXRvKiByb2xsYmFjayA9IHByb3BlcnR5Q2Fz
Y2FkZUZvclJvbGxiYWNrKHN0YXRlLmNhc2NhZGVMZXZlbCgpKSkgeworICAgICAgICBpZiAoYXV0
byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNhc2NhZGVGb3JSb2xsYmFjayhtX2FwcGx5U3RhdGUuY2Fz
Y2FkZUxldmVsKSkgewogICAgICAgICAgICAgLy8gV2l0aCB0aGUgcm9sbGJhY2sgY2FzY2FkZSBi
dWlsdCwgd2UgbmVlZCB0byBvYnRhaW4gdGhlIHByb3BlcnR5IGFuZCBhcHBseSBpdC4gSWYgdGhl
IHByb3BlcnR5IGlzCiAgICAgICAgICAgICAvLyBub3QgcHJlc2VudCwgdGhlbiB3ZSBiZWhhdmUg
bGlrZSAidW5zZXQuIiBPdGhlcndpc2Ugd2UgYXBwbHkgdGhlIHByb3BlcnR5IGluc3RlYWQgb2YK
ICAgICAgICAgICAgIC8vIG91ciBvd24uCkBAIC02MjEsNyArNjA5LDcgQEAgdm9pZCBQcm9wZXJ0
eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFsdWUmIHZhbHVl
LCBTZWxlY3RvckMKIAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFpc0luaXRpYWwpOyAvLyBp
c0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlzSW5oZXJpdAogCi0gICAg
aWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAmJiAoIXN0YXRlLmFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZpc2l0ZWRMaW5rUHJvcGVy
dHkoaWQpKSkgeworICAgIGlmIChhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgJiYg
IWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkgewogICAgICAgICAvLyBMaW1pdCB0aGUg
cHJvcGVydGllcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIG9ubHkgdGhlIG9uZXMgaG9ub3JlZCBi
eSA6dmlzaXRlZC4KICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTY0Myw3ICs2MzEsNyBAQCB2
b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NW
YWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwogI2VuZGlmCiAKICAgICAvLyBVc2UgdGhlIGdlbmVyYXRl
ZCBTdHlsZUJ1aWxkZXIuCi0gICAgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBtX3N0
eWxlUmVzb2x2ZXIsIHZhbHVlVG9BcHBseS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1
c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7CisgICAgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5
KGlkLCAqdGhpcywgdmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRpYWwsIGlzSW5oZXJpdCwgY3Vz
dG9tUHJvcGVydHlSZWdpc3RlcmVkKTsKIH0KIAogUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2Nh
ZGU6OnJlc29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJiB2YWx1
ZSkKQEAgLTcwNSw1ICs2OTMsNTEgQEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJl
Y3Rpb25BbmRXcml0aW5nTW9kZSgpCiAgICAgfQogfQogCitjb25zdCBEb2N1bWVudCYgUHJvcGVy
dHlDYXNjYWRlOjpkb2N1bWVudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZl
ci5kb2N1bWVudCgpOworfQorCitjb25zdCBFbGVtZW50JiBQcm9wZXJ0eUNhc2NhZGU6OmVsZW1l
bnQoKSBjb25zdAoreworICAgIHJldHVybiAqbV9zdHlsZVJlc29sdmVyLmVsZW1lbnQoKTsKK30K
KworYm9vbCBQcm9wZXJ0eUNhc2NhZGU6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fc3R5bGVSZXNvbHZlci51c2VTVkdab29tUnVsZXMoKTsKK30KKworYm9vbCBQcm9w
ZXJ0eUNhc2NhZGU6OnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1fc3R5bGVSZXNvbHZlci51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKTsKK30KKworY29u
c3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgUHJvcGVydHlDYXNjYWRlOjpjc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnN0
YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworfQorCitSZWZQdHI8U3R5bGVJbWFn
ZT4gUHJvcGVydHlDYXNjYWRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKK3sK
KyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOworfQorCitib29s
IFByb3BlcnR5Q2FzY2FkZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYg
dmFsdWUsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCit7CisgICAgcmV0dXJuIG1f
c3R5bGVSZXNvbHZlci5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvdXRPcGVyYXRpb25z
KTsKK30KKworQ29sb3IgUHJvcGVydHlDYXNjYWRlOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2
YWx1ZSwgZm9yVmlzaXRlZExpbmspOworfQorCit2b2lkIFByb3BlcnR5Q2FzY2FkZTo6c2V0Rm9u
dFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit7
CisgICAgbV9zdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGRlc2NyaXB0aW9uLCBzaXplKTsKK30K
KworCiB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2Nh
ZGUuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCmluZGV4IDQyYzUw
ODVhMzliLi5mMGIxMmFlMGVkNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJv
cGVydHlDYXNjYWRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRl
LmgKQEAgLTI1LDEyICsyNSwxNiBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNTU1Rv
U3R5bGVNYXAuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSA8Yml0c2V0PgogI2luY2x1ZGUgPHd0Zi9CaXRtYXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhOworY2xhc3MgU3R5bGVJbWFnZTsKIGNsYXNzIFN0eWxlUmVzb2x2ZXI7CiAKIG5hbWVzcGFj
ZSBTdHlsZSB7CkBAIC02OSwxMiArNzMsNDQgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBseVBy
b3BlcnRpZXMoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOwogICAgIHZvaWQg
YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKLQogICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0
aWVzKCk7CiAgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0KICAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCBTZWxl
Y3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dCk7CiAKKyAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7IHJldHVybiBtX3N0eWxlOyB9CisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRT
dHlsZTsgfQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiByb290RWxlbWVudFN0eWxlKCkgY29uc3Qg
eyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CisKKyAgICBjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQoKSBjb25zdDsKKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29uc3Q7CisgICAg
Ym9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdDsKKyAgICBib29sIHVzZVNWR1pvb21SdWxlc0Zv
ckxlbmd0aCgpIGNvbnN0OworICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25zdDsKKyAgICBTY29wZU9yZGluYWwgc3R5bGVT
Y29wZU9yZGluYWwoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5U3RhdGUuc3R5bGVTY29wZU9yZGlu
YWw7IH0KKworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVl
Jik7CisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1ZhbHVlJiwgRmls
dGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisgICAgQ29sb3IgY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBib29sIGZvclZpc2l0ZWRMaW5rID0g
ZmFsc2UpIGNvbnN0OworCisgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERl
c2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNv
bnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0
dXJuIG1fcGFyZW50U3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKworICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVN0YXRlLmxpbmtN
YXRjaCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsgfQorICAgIGJvb2wgYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlTdGF0ZS5s
aW5rTWF0Y2ggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7IH0KKworICAgIHZvaWQg
c2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRp
b24pIHsgbV9hcHBseVN0YXRlLmZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOyB9CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250
Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRab29tKGZsb2F0
IGYpIHsgbV9hcHBseVN0YXRlLmZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7IH0KKyAg
ICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2FwcGx5U3RhdGUuZm9udERpcnR5
IHw9IG1fc3R5bGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9hcHBseVN0YXRlLmZvbnREaXJ0eSB8PSBt
X3N0eWxlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZvaWQgc2V0VGV4dE9y
aWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsgbV9hcHBseVN0YXRl
LmZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24p
OyB9CisKKyAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlTdGF0ZS5m
b250RGlydHk7IH0KKyAgICB2b2lkIHNldEZvbnREaXJ0eSgpIHsgbV9hcHBseVN0YXRlLmZvbnRE
aXJ0eSA9IHRydWU7IH0KKyAgICB2b2lkIGNsZWFyRm9udERpcnR5KCkgeyBtX2FwcGx5U3RhdGUu
Zm9udERpcnR5ID0gZmFsc2U7IH0KKworICAgIENTU1RvU3R5bGVNYXAmIHN0eWxlTWFwKCkgeyBy
ZXR1cm4gbV9zdHlsZU1hcDsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRDYXNjYWRlKE9w
dGlvblNldDxDYXNjYWRlTGV2ZWw+KTsKICAgICBib29sIGFkZE5vcm1hbE1hdGNoZXMoQ2FzY2Fk
ZUxldmVsKTsKQEAgLTEwMSw3ICsxMzcsMTEgQEAgcHJpdmF0ZToKIAogICAgIGNvbnN0IE1hdGNo
UmVzdWx0JiBtX21hdGNoUmVzdWx0OwogICAgIGNvbnN0IEluY2x1ZGVkUHJvcGVydGllcyBtX2lu
Y2x1ZGVkUHJvcGVydGllczsKLSAgICAKKworICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOworICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVudFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBtX3Jvb3RFbGVtZW50U3R5bGU7CisKICAgICBUZXh0RGlyZWN0aW9uIG1fZGlyZWN0aW9uOwog
ICAgIFdyaXRpbmdNb2RlIG1fd3JpdGluZ01vZGU7CiAKQEAgLTExMSwxOSArMTUxLDI2IEBAIHBy
aXZhdGU6CiAgICAgVmVjdG9yPFByb3BlcnR5LCA4PiBtX2RlZmVycmVkUHJvcGVydGllczsKICAg
ICBIYXNoTWFwPEF0b21TdHJpbmcsIFByb3BlcnR5PiBtX2N1c3RvbVByb3BlcnRpZXM7CiAKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNr
Q2FzY2FkZTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlDYXNjYWRlPiBtX3Vz
ZXJSb2xsYmFja0Nhc2NhZGU7CisKICAgICAvLyBTdGF0ZSB0byB1c2Ugd2hlbiBhcHBseWluZyBw
cm9wZXJ0aWVzLCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIGN1c3RvbSBhbmQgaGlnaC1wcmlvcml0
eQogICAgIC8vIHByb3BlcnRpZXMgaGF2ZSBiZWVuIHJlc29sdmVkLgogICAgIHN0cnVjdCBBcHBs
eVN0YXRlIHsKLSAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGFwcGxpZWRQcm9wZXJ0
aWVzID0geyB9OwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gYXBwbGllZEN1c3RvbVByb3BlcnRp
ZXMgPSB7IH07Ci0gICAgICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBpblByb2dyZXNzUHJv
cGVydGllcyA9IHsgfTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGluUHJvZ3Jlc3NQcm9wZXJ0
aWVzQ3VzdG9tID0geyB9OworICAgICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBwbGll
ZFByb3BlcnRpZXM7CisgICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3VzdG9tUHJvcGVy
dGllczsKKyAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0
aWVzOworICAgICAgICBIYXNoU2V0PFN0cmluZz4gaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b207
CisKKyAgICAgICAgQ2FzY2FkZUxldmVsIGNhc2NhZGVMZXZlbDsKKyAgICAgICAgU2NvcGVPcmRp
bmFsIHN0eWxlU2NvcGVPcmRpbmFsOworICAgICAgICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRj
aE1hc2sgbGlua01hdGNoOworICAgICAgICAKKyAgICAgICAgYm9vbCBmb250RGlydHkgeyBmYWxz
ZSB9OwogICAgIH07CiAKICAgICBBcHBseVN0YXRlIG1fYXBwbHlTdGF0ZTsKLQotICAgIHN0ZDo6
dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fYXV0aG9yUm9sbGJhY2tDYXNjYWRl
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxjb25zdCBQcm9wZXJ0eUNhc2NhZGU+IG1fdXNlclJvbGxi
YWNrQ2FzY2FkZTsKKyAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CiB9OwogCiBpbmxpbmUg
Ym9vbCBQcm9wZXJ0eUNhc2NhZGU6Omhhc1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQpIGNvbnN0
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382286</attachid>
            <date>2019-10-29 23:36:15 -0700</date>
            <delta_ts>2019-10-29 23:39:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylebuilder-state.patch</filename>
            <type>text/plain</type>
            <size>300278</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZTNiZjUxYTA2Ny4uNThjNDc2Njk3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNTUgQEAKKzIwMTktMTAtMjkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYnVpbGRpbmcgc3RhdGUgdG8gYSBjbGFzcyBvZiBpdHMg
b3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IG1vc3Qgb2YgdGhlIHN0YXRlIG5lZWRlZCBmb3IgYXBwbHlpbmcgcHJvcGVydGllcyBmcm9tIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlIGFuZCBQcm9wZXJ0eUNhc2NhZGU6OkFwcGx5U3RhdGUgdG8KKyAg
ICAgICAgbmV3IFN0eWxlOjpCdWlsZGVyU3RhdGUuIFBhc3MgQnVpbGRlclN0YXRlIGFyb3VuZCBp
biBhbGwgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0eWxlIGJ1aWxkaW5nCisgICAgICAgIGlu
c3RlYWQgb2YgU3R5bGVSZXNvbHZlci4KKworICAgICAgICBVbmxpa2UgU3R5bGVSZXNvbHZlciwg
QnVpbGRlclN0YXRlIGlzIGEgc3RhY2stYWxsb2NhdGVkIG9iamVjdCB0aGF0IGV4aXN0cyBkdXJp
bmcgc3R5bGUgYnVpbGRpbmcgb25seS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0
eWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpyb290RWxlbWVudFN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5oOgorICAgICAgICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlVG9rZW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZVJlZmVyZW5j
ZVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzIGNvbnN0KToKKyAgICAgICAgKiBjc3Mv
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3Vz
dG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxk
ZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoT3JBdXRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aFNpemlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGhNYXhTaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGFiU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRDb21wdXRlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRPYmplY3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Qm9yZGVyTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxp
Z24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb25UaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29udGFpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
blNraXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2hhcGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTY3JvbGxTbmFwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNr
U2l6ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRX
b3JkU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRWYXJpYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZH
TGVuZ3RoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFN0cm9rZURhc2hBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1
bHRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0
byk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRTeW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U3BlYWtBcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3RoKToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmVh
dHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGln
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
QWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVZlcnRpY2FsQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZp
ZXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0TGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtp
dExvY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29sb3JTY2hl
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRX
ZWJraXRCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0Qm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVT
aGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0V2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFz
aXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlcklu
Y3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdENvdW50ZXJJbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJSZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVTdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
VmFyaWFudExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVy
aWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1
YnlUZXh0U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQXJlYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVt
cGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1w
bGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9r
ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUp
OgorCisgICAgICAgIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBub24tbnVsbCByb290IGVsZW1lbnQg
c3R5bGUgc28gdGhlIGNhc2UgZG9lc24ndCBuZWVkIHNwZWNpYWwgYnJhbmNoZXMuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgICogY3NzL1N0eWxl
UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omluc3BlY3RvckNT
U09NV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRGb250RGlydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmZvbnREaXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Zm9udERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZvbnRE
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0Wm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6c2V0RWZmZWN0aXZlWm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0V3JpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFRleHRPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FzY2FkZUxldmVs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRDYXNjYWRlTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnN0eWxlU2NvcGVPcmRpbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZVNjb3BlT3JkaW5hbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZU1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlw
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29t
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2
ZVpvb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0V3Jp
dGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
VGV4dE9yaWVudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvbWFrZXByb3AucGw6Cisg
ICAgICAgIChnZXRBdXRvR2V0dGVyKToKKyAgICAgICAgKGdldEF1dG9TZXR0ZXIpOgorICAgICAg
ICAoZ2V0VmlzaXRlZExpbmtTZXR0ZXIpOgorICAgICAgICAoY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoZ2VuZXJhdGVDb2xvclZhbHVlU2V0dGVyKToKKyAgICAgICAgKGhhbmRs
ZUN1cnJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUlu
aGVyaXRWYWx1ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5VmFs
dWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1
ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZhbHVl
U2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlcik6
CisgICAgICAgIChnZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50KToKKyAgICAgICAgKGdlbmVyYXRl
SW5pdGlhbFZhbHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVy
KToKKyAgICAgICAgKGdlbmVyYXRlVmFsdWVTZXR0ZXIpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpidWlsZGVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAqIHN0eWxlL0Nhc2NhZGVMZXZlbC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6YWxsQ2FzY2FkZUxldmVscyk6CisgICAgICAgICogc3R5bGUvUHJvcGVy
dHlDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6
OlByb3BlcnR5Q2FzY2FkZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjphcHBseVByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0
aW5nTW9kZSk6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpidWlsZGVyU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OmFsbENhc2NhZGVMZXZlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6c3R5bGVSZXNvbHZlcik6IERlbGV0ZWQuCisg
ICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3Ro
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0
eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjpzZXRGb250U2l6ZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpjYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cGFyZW50U3R5bGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cm9vdEVsZW1lbnRT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpkb2N1
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjplbGVt
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0V3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0VGV4
dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmZv
bnREaXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y2xl
YXJGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Zm9u
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVNjb3Bl
T3JkaW5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpj
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnN0eWxlTWFwKToKKwogMjAxOS0xMC0yNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbnRoLWNoaWxkIEFuK0Igc2Vy
aWFsaXphdGlvbiB0byBtYXRjaCB0aGUgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAxZTE3Y2NmNjFi
Ni4uNGYwYTUxYjcwYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMzQzLDYgKzIzNDMsNyBAQCBzdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9u
LmNwcAogc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAogc3R5bGUvUHJvcGVydHlDYXNjYWRl
LmNwcAorc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBzdHlsZS9TdHlsZUNoYW5nZS5jcHAK
IHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwCiBzdHlsZS9TdHlsZUludmFsaWRhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDJhNGQzZjAzN2QyLi5hNWM5ZDY2ZDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgzNyw2ICs0ODM3LDgg
QEAKIAkJRTRBODE0RTAxQzczMzhFQjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTRERjFD
NzMzOEVCMDBCRjg1QUMgLyogSWRDaGFuZ2VJbnZhbGlkYXRpb24uaCAqLzsgfTsKIAkJRTRBOEQy
MTYyMjU3OERCNzAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZl
bnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNEFCQUJFNDIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFCQUJFMjIzNjFBMzI5
MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi87IH07CisJCUU0QUJBQkYzMjM2OEI5NTkw
MEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVp
bGRlclN0YXRlLmggKi87IH07CisJCUU0QUJBQkY1MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRl
TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QUJBQkY0MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLzsgfTsKIAkJRTRBRTdD
MTYxN0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRTdDMTUxN0QxQkI5NTAwMDlGQjMxIC8q
IEVsZW1lbnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0QUU3QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBRTdDMTkxN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRkNGQTUw
REFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6
aWVyLmggKi87IH07CkBAIC05MTM1LDggKzkxMzcsNiBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBC
RUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUw
MDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3Np
YmlsaXR5U1ZHRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQUQ5
RDBCMTIxREZBODBDMDAxQjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBRDlEMEIzMjFERkE4MEUwMDFCMTFDNyAv
KiBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGF6eUxvYWRJbWFnZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5zcGVjdG9yQ2FudmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkE3Mjc5ODgxRjE2QzI5QjAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMzYsNiArMTIxMzYsOCBAQAogCQlB
QUNDODNENjIzMTY1NjlFMDBFQjZCRjUgLyogSFRNTE9yRm9yZWlnbkVsZW1lbnQuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxPckZvcmVpZ25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUFDQzgzRDcyMzE2NTc2QTAwRUI2QkY1IC8qIEpTSFRNTE9yRm9yZWlnbkVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MT3JGb3JlaWduRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQUNDODNEODIzMTY1NzZCMDBFQjZCRjUgLyogSlNIVE1MT3JGb3JlaWduRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPckZvcmVpZ25FbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFEOUQwQjEyMURGQTgwQzAwMUIxMUM3IC8q
IExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBQUQ5RDBCMzIxREZBODBFMDAxQjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NDE2Q0JGQzBEMDA2MjMw
NDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NTE2Q0JGQzBEMDA2MjMwNDMgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUFFMzc1NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTUxNTcsNiArMTUxNTksOSBAQAogCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0Mg
LyogRXZlbnRSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXZlbnRSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFCQUJFMjIz
NjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0QUJBQkYwMjM2OEI5MTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUJ1aWxkZXJTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQkYyMjM2OEI5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxk
ZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUJ1aWxkZXJT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEFCQUJGNDIzNjhDNkVGMDBG
QTQzNDUgLyogQ2FzY2FkZUxldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhc2NhZGVMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFN0MxNTE3
RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVsZW1lbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEFFN0MxOTE3RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEFuY2VzdG9ySXRlcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRkNGQTQwREFGMjlBMzAwRjVG
NTVDIC8qIFVuaXRCZXppZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5p
dEJlemllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY4OTQsNiArMjY4OTks
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTRBODE0RDcxQzcwRTEwNTAwQkY4NUFDIC8qIEF0
dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8sCiAJCQkJRTRBODE0RDkxQzcwRTEwRDAw
QkY4NUFDIC8qIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5oICovLAorCQkJCUU0QUJBQkY0
MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLywKIAkJCQlFNEE4MTRENTFDNkRF
RThEMDBCRjg1QUMgLyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCUU0QTgx
NEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oICovLAogCQkJ
CUU0QTgxNEREMUM3MzM4RDEwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8s
CkBAIC0yNjkwMiw2ICsyNjkwOCw4IEBACiAJCQkJMUMwMTA2RkYxOTI1OTRERjAwOEE0MjAxIC8q
IElubGluZVRleHRCb3hTdHlsZS5oICovLAogCQkJCUU0QUJBQkU1MjM2MUEzNDIwMEZBNDM0NSAv
KiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovLAogCQkJCUU0QUJBQkUyMjM2MUEzMjkwMEZBNDM0NSAv
KiBQcm9wZXJ0eUNhc2NhZGUuaCAqLywKKwkJCQlFNEFCQUJGMDIzNjhCOTE4MDBGQTQzNDUgLyog
U3R5bGVCdWlsZGVyU3RhdGUuY3BwICovLAorCQkJCUU0QUJBQkYyMjM2OEI5NTgwMEZBNDM0NSAv
KiBTdHlsZUJ1aWxkZXJTdGF0ZS5oICovLAogCQkJCUU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAv
KiBTdHlsZUNoYW5nZS5jcHAgKi8sCiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0
eWxlQ2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9u
dFNpemVGdW5jdGlvbnMuY3BwICovLApAQCAtMzAxNjMsNiArMzAxNzEsNyBAQAogCQkJCUJFOEVG
MDQ1MTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1N0QxMzUyQTIyOTRBQTM5MDA4Mjc0MDEgLyogSlNBdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQzJGMjAwOUI3RTEwMDM1
NTk2NSAvKiBKU0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTRBQkFCRjMyMzY4Qjk1OTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzMwM0MyMjIwMDlBRjAzMDAzNTU5NjUgLyogSlNBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNCRTEyMDA5
NUQ2MTAwMzU1OTY1IC8qIEpTQXV0aGVudGljYXRvclJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1N0RDRUQ5ODIxNDg4MjE2MDAxNkI4NDcgLyogSlNBdXRoZW50aWNhdG9yVHJhbnNwb3J0
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDkyLDYgKzMxNTAxLDcgQEAKIAkJCQlCQzNCRTEyQjBF
OTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
RjU2N0NFMTY1MzU4RjQwMERERTkyQiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMTk5REUwODI0NUU1OTAwMUU5QUJDIC8qIFBvc2l0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFNEFCQUJGNTIzNjhDNkVGMDBGQTQzNDUgLyogQ2FzY2FkZUxldmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzQ2QUYyQzE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMzAxNEY0RERFNjAwM0U3QTcwIC8q
IFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MTlDMjQwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmluZGV4IGM4NTkyMGIwMTczLi42MzNmMmI1OGY3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApAQCAtNDUsMjkgKzQ1LDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcChTdHls
ZVJlc29sdmVyKiByZXNvbHZlcikKLSAgICA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpCitDU1NUb1N0
eWxlTWFwOjpDU1NUb1N0eWxlTWFwKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
KyAgICA6IG1fYnVpbGRlclN0YXRlKGJ1aWxkZXJTdGF0ZSkKIHsKIH0KIAogUmVuZGVyU3R5bGUq
IENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+
c3R5bGUoKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJvb3RFbGVt
ZW50U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCk7CisgICAgcmV0dXJuICZtX2J1aWxkZXJTdGF0ZS5zdHlsZSgpOwogfQogCiBib29sIENT
U1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVz
b2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOworICAgIHJldHVybiBtX2J1aWxkZXJTdGF0ZS51c2VT
Vkdab29tUnVsZXMoKTsKIH0KIAogUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHZhbHVlKTsKKyAgICByZXR1cm4gbV9idWlsZGVyU3RhdGUuY3JlYXRlU3R5bGVJbWFn
ZSh2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCkBAIC0yMTQsNyArMjA5LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnMKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGZpbGxTaXplLnR5cGUgPT0g
RmlsbFNpemVUeXBlOjpTaXplKTsKLSAgICAgICAgaWYgKCFjb252ZXJ0VG9MZW5ndGhTaXplKHBy
aW1pdGl2ZVZhbHVlLCBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSwgZmlsbFNpemUuc2l6ZSkpCisgICAgICAgIGlmICghY29udmVydFRvTGVuZ3RoU2l6ZShw
cmltaXRpdmVWYWx1ZSwgbV9idWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
LCBmaWxsU2l6ZS5zaXplKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMjM2LDkgKzIzMSw5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3Np
dGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsCiAgICAgTGVu
Z3RoIGxlbmd0aDsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHByb3Bl
cnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YIHx8IHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YKTsKLSAgICAgICAgbGVu
Z3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKCptX3Jlc29sdmVyLCAq
cGFpci0+c2Vjb25kKCkpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgobV9idWlsZGVyU3RhdGUsICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50WCgqbV9yZXNvbHZlciwgdmFsdWUpOworICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgobV9idWlsZGVyU3Rh
dGUsIHZhbHVlKTsKIAogICAgIGxheWVyLnNldFhQb3NpdGlvbihsZW5ndGgpOwogICAgIGlmIChw
YWlyKQpAQCAtMjYwLDkgKzI1NSw5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3Np
dGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsCiAgICAgTGVu
Z3RoIGxlbmd0aDsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHByb3Bl
cnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIHx8IHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZKTsKLSAgICAgICAgbGVu
Z3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKCptX3Jlc29sdmVyLCAq
cGFpci0+c2Vjb25kKCkpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgobV9idWlsZGVyU3RhdGUsICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50WSgqbV9yZXNvbHZlciwgdmFsdWUpOworICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkobV9idWlsZGVyU3Rh
dGUsIHZhbHVlKTsKICAgICAKICAgICBsYXllci5zZXRZUG9zaXRpb24obGVuZ3RoKTsKICAgICBp
ZiAocGFpcikKQEAgLTQwOSw3ICs0MDQsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1h
dGlvbk5hbWUoQW5pbWF0aW9uJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICBsYXll
ci5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAgICBsYXllci5zZXRO
YW1lKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG1fcmVzb2x2ZXItPnN0YXRlKCkuc3R5
bGVTY29wZU9yZGluYWwoKSk7CisgICAgICAgIGxheWVyLnNldE5hbWUocHJpbWl0aXZlVmFsdWUu
c3RyaW5nVmFsdWUoKSwgbV9idWlsZGVyU3RhdGUuc3R5bGVTY29wZU9yZGluYWwoKSk7CiB9CiAK
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiYgbGF5
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKQEAgLTU5Myw3ICs1ODgsNyBAQCBMZW5ndGhCb3gg
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKICAg
ICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29tIHZhbHVlLgot
ICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29t
UnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
LmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSA9IHVzZVNWR1pvb21SdWxlcygpID8gbV9idWlsZGVyU3RhdGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9idWlsZGVy
U3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhl
IHByaW1pdGl2ZSB2YWx1ZS4KICAgICBhdXRvJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXgg
NGZiMjlhOWQzYTYuLmExYzQ0MjFiYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgK
QEAgLTM0LDE0ICszNCwxNyBAQCBjbGFzcyBMZW5ndGhCb3g7CiBjbGFzcyBOaW5lUGllY2VJbWFn
ZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVz
b2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAKIGNs
YXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1RvU3R5bGVN
YXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9T
dHlsZU1hcChTdHlsZVJlc29sdmVyKik7CisgICAgQ1NTVG9TdHlsZU1hcChTdHlsZTo6QnVpbGRl
clN0YXRlJik7CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtNzIsMTkgKzc1LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiwgTmlu
ZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlc2UgYWNjZXNzb3Jz
IHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJlc29sdmVTdGF0ZSBvYmplY3QKLSAgICAvLyBzaW1p
bGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBmb3IK
LSAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3Q7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dDsKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qg
d2hpY2gKLSAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBhbmQgbGlrZWx5IHBy
b3ZpZGVkIHRvIHRoaXMgb2JqZWN0Ci0gICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBTdHlsZVJlc29s
dmVyKiBtX3Jlc29sdmVyOworICAgIC8vIEZJWE1FOiBUaGlzIHR5cGUgY2FuIG1lcmdlIGludG8g
QnVpbGRlclN0YXRlLgorICAgIFN0eWxlOjpCdWlsZGVyU3RhdGUmIG1fYnVpbGRlclN0YXRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwCmluZGV4IGY4NGI4YjZlOWI5Li5mZTYwZGNmYmZi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcApAQCAtNDUsMjEgKzQ1LDIxIEBAIFN0cmluZyBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
OjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAot
c3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9y
PENTU1BhcnNlclRva2VuPiYsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKK3N0YXRpYyBib29s
IHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJU
b2tlbj4mLCBTdHlsZTo6QnVpbGRlclN0YXRlJik7CiAKLXN0YXRpYyBib29sIHJlc29sdmVWYXJp
YWJsZUZhbGxiYWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJU
b2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK3N0YXRpYyBi
b29sIHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZl
Y3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewogICAgIGlmIChyYW5nZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbik7CiAgICAgcmFu
Z2UuY29uc3VtZSgpOwotICAgIHJldHVybiByZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0
LCBjYXNjYWRlKTsKKyAgICByZXR1cm4gcmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwg
YnVpbGRlclN0YXRlKTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
KENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3Vs
dCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK3N0YXRpYyBib29sIHJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZShDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFy
c2VyVG9rZW4+JiByZXN1bHQsIFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigp
LmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Ci0gICAgYXV0
byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBy
ZWdpc3RlcmVkUHJvcGVydGllcyA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpOworICAgIGF1dG8mIHN0eWxlID0gYnVpbGRlclN0YXRl
LnN0eWxlKCk7CiAKICAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwogICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwpAQCAtNjcsMTEgKzY3LDExIEBAIHN0
YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShDU1NQYXJzZXJUb2tlblJhbmdlIHJh
bmdlLCBWZWN0b3I8Q1NTUGFyc2VyCiAgICAgQVNTRVJUKHJhbmdlLmF0RW5kKCkgfHwgKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikpOwogCiAgICAgLy8gQXBwbHkgdGhpcyB2YXJp
YWJsZSBmaXJzdCwgaW4gY2FzZSBpdCBpcyBzdGlsbCB1bnJlc29sdmVkCi0gICAgY2FzY2FkZS5h
cHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CisgICAgYnVpbGRlclN0YXRlLmNhc2Nh
ZGUoKS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBm
YWxsYmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxs
YmFja1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFs
bGJhY2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBjYXNjYWRl
KTsKKyAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2soQ1NT
UGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBidWlsZGVyU3RhdGUpOwog
CiAgICAgYXV0byogcHJvcGVydHkgPSBzdHlsZS5nZXRDdXN0b21Qcm9wZXJ0eSh2YXJpYWJsZU5h
bWUpOwogCkBAIC05MywyNCArOTMsMjQgQEAgc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXIKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0LCBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0
LCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYm9vbCBzdWNjZXNz
ID0gdHJ1ZTsKICAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkpIHsKICAgICAgICAgaWYgKHJhbmdl
LnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVWYXIgfHwgcmFuZ2UucGVlaygpLmZ1bmN0
aW9uSWQoKSA9PSBDU1NWYWx1ZUVudikKLSAgICAgICAgICAgIHN1Y2Nlc3MgJj0gcmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlKHJhbmdlLmNvbnN1bWVCbG9jaygpLCByZXN1bHQsIGNhc2NhZGUpOwor
ICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29u
c3VtZUJsb2NrKCksIHJlc3VsdCwgYnVpbGRlclN0YXRlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyYW5nZS5jb25zdW1lKCkpOwogICAgIH0KICAgICByZXR1cm4g
c3VjY2VzczsKIH0KIAotUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBjYXNjYWRlKSBjb25zdAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiByZXNv
bHZlZFRva2VuczsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gbV9kYXRhLT50b2tl
blJhbmdlKCk7CiAKLSAgICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRv
a2VucywgY2FzY2FkZSkpCisgICAgaWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2
ZWRUb2tlbnMsIGJ1aWxkZXJTdGF0ZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IDlhMTIwYzM2
Nzc0Li5jNTZmM2JlMzI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zhcmlh
YmxlUmVmZXJlbmNlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZS5oCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKIG5hbWVzcGFjZSBTdHlsZSB7Ci1jbGFzcyBQcm9w
ZXJ0eUNhc2NhZGU7CitjbGFzcyBCdWlsZGVyU3RhdGU7CiB9CiAKIGNsYXNzIENTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewpAQCAtNTUsNyArNTUsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0K
ICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1Zhcmlh
YmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JikgY29uc3Q7CisgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlcyhTdHlsZTo6QnVpbGRlclN0YXRlJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NT
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZShSZWY8Q1NTVmFyaWFibGVEYXRhPiYmIGRhdGEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAK
aW5kZXggMGRmNmFhZTk2ZjAuLjFlN2E1M2IxOTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiQ1NTVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiRE9NQ1NTTmFtZXNwYWNlLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNp
bmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNTEsNyArNTIsNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01DU1NSZWdp
c3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KERvY3VtZW50JiBkb2N1bQogICAg
ICAgICAvLyBXZSBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBzbyB0aGF0IHdlIGNhbiBzdWNjZXNz
ZnVsbHkgcGFyc2UgY29tcHV0YXRpb25hbGx5IGRlcGVuZGVudCB2YWx1ZXMgKGxpa2UgZW0gdW5p
dHMpLgogICAgICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSB2YWx1ZXMgdG8gYmUg
YWNjdXJhdGUsIHNpbmNlIHRoZXkgd2lsbCBiZSByZWplY3RlZCBsYXRlciBhbnl3YXkKICAgICAg
ICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUludmFsaWQs
IG51bGxwdHIsIHN0eWxlUmVzb2x2ZXIuZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAKICAgICAgICAgSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyOjpjb2xsZWN0
UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhkZXNjcmlwdG9yLnN5bnRheCwg
ZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgc3RyaWN0Q1NTUGFy
c2VyQ29udGV4dCgpKTsKQEAgLTU5LDcgKzU5LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NT
UmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eTo6cmVnaXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0K
ICAgICAgICAgaWYgKCFkZXBlbmRlbmNpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhlIGdpdmVuIGluaXRpYWwgdmFsdWUgbXVzdCBi
ZSBjb21wdXRhdGlvbmFsbHkgaW5kZXBlbmRlbnQuIiB9OwogCi0gICAgICAgIGluaXRpYWxWYWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShkZXNj
cmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBz
dHlsZVJlc29sdmVyLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOworICAgICAgICBNYXRjaFJl
c3VsdCBtYXRjaFJlc3VsdDsKKyAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBkdW1teUNh
c2NhZGUoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7CisgICAgICAgIGluaXRpYWxW
YWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShk
ZXNjcmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgp
LCBkdW1teUNhc2NhZGUuYnVpbGRlclN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7
CiAKICAgICAgICAgaWYgKCFpbml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhlIGdp
dmVuIGluaXRpYWwgdmFsdWUgZG9lcyBub3QgcGFyc2UgZm9yIHRoZSBnaXZlbiBzeW50YXguIiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCmluZGV4IDhlZTU4M2VkMTdlLi42NDkxOGFjNzll
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaApAQCAtMzAsMTQgKzMwLDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eTsK
IGNsYXNzIENTU1ZhbHVlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKIHN0cnVjdCBDU1NSZWdpc3Rl
cmVkQ3VzdG9tUHJvcGVydHk7CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3Rh
dGU7Cit9CisKIGNsYXNzIFN0eWxlQnVpbGRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmLCBi
b29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Q
cm9wZXJ0eSopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJiwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNJ
bmhlcml0LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaAppbmRleCA4MmI0NmZlMGQxMi4uYTBlZDU1ODM5OTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTQ3LDExICs0NywxMSBAQAogI2luY2x1ZGUg
IkdyaWRQb3NpdGlvbnNSZXNvbHZlci5oIgogI2luY2x1ZGUgIkxlbmd0aC5oIgogI2luY2x1ZGUg
IlBhaXIuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJRdW90ZXNE
YXRhLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNW
R1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgogI2luY2x1ZGUg
IlRhYlNpemUuaCIKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgpAQCAtNjMsMTA3ICs2MywxMDcg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGUgQ1NTIHBh
cnNlciBvbmx5IGFsbG93cyB2YWxpZCBDU1NWYWx1ZSB0eXBlcy4KIGNsYXNzIFN0eWxlQnVpbGRl
ckNvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoKGNv
bnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5ndGgg
Y29udmVydExlbmd0aE9yQXV0byhjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3QgU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3Ro
TWF4U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0
YXRpYyBUYWJTaXplIGNvbnZlcnRUYWJTaXplKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRDb21w
dXRlZExlbmd0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0U3BhY2luZyhTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoU2l6ZSBjb252ZXJ0
UmFkaXVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5n
dGhQb2ludCBjb252ZXJ0T2JqZWN0UG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7Ci0gICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gY29udmVydFRleHRE
ZWNvcmF0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51
bWJlck9yQXV0byhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
c2hvcnQgY29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIE5pbmVQ
aWVjZUltYWdlIGNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsK
LSAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgTmluZVBpZWNlSW1hZ2UgY29udmVy
dEJvcmRlck1hc2soU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8Q1NT
UHJvcGVydHlJRD4gc3RhdGljIFJlZlB0cjxTdHlsZUltYWdlPiBjb252ZXJ0U3R5bGVJbWFnZShT
dHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9u
cyBjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aChjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhPckF1dG8o
Y29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IExlbmd0aCBjb252ZXJ0TGVuZ3RoU2l6aW5nKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aE1heFNpemlu
Zyhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgVGFiU2l6ZSBjb252ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0
Q29tcHV0ZWRMZW5ndGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydExpbmVXaWR0aChTdHlsZTo6
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgZmxvYXQgY29udmVy
dFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIExlbmd0aFNpemUgY29udmVydFJhZGl1cyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoUG9pbnQgY29udmVydE9iamVjdFBvc2l0aW9u
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRp
b25TZXQ8VGV4dERlY29yYXRpb24+IGNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0
aWMgVCBjb252ZXJ0TnVtYmVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXJPckF1dG8o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIHNob3J0
IGNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBOaW5l
UGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1Zh
bHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIE5pbmVQaWVjZUltYWdl
IGNvbnZlcnRCb3JkZXJNYXNrKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAg
IHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBSZWZQdHI8U3R5bGVJbWFnZT4gY29udmVy
dFN0eWxlSW1hZ2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IFRyYW5zZm9ybU9wZXJhdGlvbnMgY29udmVydFRyYW5zZm9ybShTdHlsZTo6QnVpbGRlclN0YXRl
JiwgY29uc3QgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKLSAgICBzdGF0
aWMgU3R5bGVDb2xvclNjaGVtZSBjb252ZXJ0Q29sb3JTY2hlbWUoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0eWxlQ29sb3JTY2hlbWUgY29udmVydENvbG9y
U2NoZW1lKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCi0g
ICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yQXV0byhTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmdP
ck5vbmUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlv
blNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gY29udmVydFRleHRFbXBoYXNpc1Bvc2l0aW9uKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0QWxpZ25Nb2Rl
IGNvbnZlcnRUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAg
c3RhdGljIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gY29udmVydENsaXBQYXRoKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZXNpemUgY29udmVydFJlc2l6
ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgaW50IGNvbnZl
cnRNYXJxdWVlUmVwZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxRdW90ZXNEYXRhPiBjb252ZXJ0UXVvdGVzKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lUG9z
aXRpb24gY29udmVydFRleHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVGV4dFVuZGVybGluZU9mZnNldCBjb252ZXJ0VGV4dFVu
ZGVybGluZU9mZnNldChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgVGV4dERlY29yYXRpb25UaGlja25lc3MgY29udmVydFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8U3R5
bGVSZWZsZWN0aW9uPiBjb252ZXJ0UmVmbGVjdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjb252ZXJ0SW5pdGlhbExldHRlcihTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgZmxvYXQgY29udmVydFRleHRT
dHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
T3B0aW9uU2V0PExpbmVCb3hDb250YWluPiBjb252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3Jh
dGlvblNraXA+IGNvbnZlcnRUZXh0RGVjb3JhdGlvblNraXAoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZlB0cjxTaGFwZVZhbHVlPiBjb252ZXJ0U2hhcGVW
YWx1ZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZl
cnRTdHJpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIFN0cmluZyBjb252ZXJ0U3RyaW5nT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yTm9uZShTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0
PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBjb252ZXJ0VGV4dEVtcGhhc2lzUG9zaXRpb24oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRBbGlnbk1v
ZGUgY29udmVydFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBjb252ZXJ0Q2xpcFBhdGgo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlc2l6
ZSBjb252ZXJ0UmVzaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVTcGVl
ZChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVm
PFF1b3Rlc0RhdGE+IGNvbnZlcnRRdW90ZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBjb252ZXJ0VGV4dFVu
ZGVybGluZVBvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lT2Zmc2V0IGNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcyBjb252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlZlB0cjxTdHls
ZVJlZmxlY3Rpb24+IGNvbnZlcnRSZWZsZWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBJbnRTaXplIGNvbnZlcnRJbml0aWFsTGV0dGVyKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBmbG9hdCBj
b252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8TGluZUJveENvbnRhaW4+IGNvbnZlcnRMaW5lQm94
Q29udGFpbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uU2tpcD4gY29udmVydFRleHREZWNvcmF0aW9uU2tp
cChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUmVm
UHRyPFNoYXBlVmFsdWU+IGNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBD
U1NWYWx1ZSYpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgc3RhdGljIFNjcm9s
bFNuYXBUeXBlIGNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKLSAgICBzdGF0aWMgU2Nyb2xsU25hcEFsaWduIGNvbnZlcnRTY3JvbGxTbmFwQWxp
Z24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFNjcm9sbFNu
YXBUeXBlIGNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU2Nyb2xsU25hcEFsaWduIGNvbnZlcnRTY3JvbGxTbmFw
QWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKLSAg
ICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBjb252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVmVjdG9yPEdyaWRUcmFja1NpemU+IGNv
bnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBjb252ZXJ0R3JpZFBvc2l0aW9uKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBHcmlkQXV0b0Zsb3cg
Y29udmVydEdyaWRBdXRvRmxvdyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBjb252ZXJ0
UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IE9wdGlvbmFsPExlbmd0aD4gY29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+
IGNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBWZWN0b3I8R3JpZFRy
YWNrU2l6ZT4gY29udmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxHcmlkUG9zaXRpb24+IGNvbnZl
cnRHcmlkUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIEdyaWRBdXRvRmxvdyBjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNv
bnZlcnRXb3JkU3BhY2luZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IGNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3Ro
PiBjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gY29udmVydEZp
bHRlck9wZXJhdGlvbnMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAj
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0VG91Y2hDYWxs
b3V0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBib29sIGNv
bnZlcnRUb3VjaENhbGxvdXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAjZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHN0YXRpYyBDb2xvciBjb252
ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIENvbG9yIGNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZTo6QnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShQT0lOVEVSX0VWRU5U
UykKLSAgICBzdGF0aWMgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBjb252ZXJ0VG91Y2hBY3Rpb24o
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxU
b3VjaEFjdGlvbj4gY29udmVydFRvdWNoQWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VD
SCkKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGJvb2wgY29udmVydE92ZXJmbG93U2Ny
b2xsaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCi0g
ICAgc3RhdGljIEZvbnRGZWF0dXJlU2V0dGluZ3MgY29udmVydEZvbnRGZWF0dXJlU2V0dGluZ3Mo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRGZWF0dXJl
U2V0dGluZ3MgY29udmVydEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0
Rm9udFdlaWdodEZyb21WYWx1ZShjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBGb250U2Vs
ZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJldGNoRnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVlJik7
CiAgICAgc3RhdGljIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gY29udmVydEZvbnRTdHls
ZUZyb21WYWx1ZShjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFs
dWUgY29udmVydEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0g
ICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0cmV0Y2goU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBj
b252ZXJ0Rm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRXZWlnaHQoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBj
b252ZXJ0Rm9udFN0cmV0Y2goU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0eWxlKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9O
VFMpCi0gICAgc3RhdGljIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBjb252ZXJ0Rm9udFZhcmlhdGlv
blNldHRpbmdzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBG
b250VmFyaWF0aW9uU2V0dGluZ3MgY29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZTo6
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0YXRpYyBTVkdM
ZW5ndGhWYWx1ZSBjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFNWR0xl
bmd0aFZlY3RvcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U3Ryb2tlRGFzaEFycmF5KFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBQYWludE9yZGVyIGNvbnZlcnRQYWlu
dE9yZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgU3RyaW5nIGNvbnZlcnRTVkdVUklSZWZlcmVuY2UoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIENvbG9yIGNvbnZlcnRTVkdDb2xvcihTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3R5bGVTZWxmQWxpZ25tZW50RGF0
YSBjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udmVy
dENvbnRlbnRBbGlnbm1lbnREYXRhKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9u
IGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRMaW5lSGVpZ2h0KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYsIGZsb2F0IG11bHRpcGxpZXIgPSAxLmYpOwot
ICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb252ZXJ0
U1ZHTGVuZ3RoVmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFNWR0xlbmd0aFZlY3RvcihT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U3Ryb2tlRGFzaEFycmF5KFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBQYWludE9yZGVyIGNvbnZlcnRQYWlu
dE9yZGVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBmbG9hdCBjb252ZXJ0T3BhY2l0eShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTVkdVUklSZWZlcmVuY2UoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIENvbG9yIGNvbnZlcnRT
VkdDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVudERh
dGEoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0
eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHbHlwaE9yaWVu
dGF0aW9uIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlwaE9y
aWVudGF0aW9uT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYsIGZsb2F0IG11bHRpcGxpZXIgPSAxLmYpOworICAg
IHN0YXRpYyBGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAotICAgIHN0YXRpYyBCcmVha0JldHdlZW4g
Y29udmVydFBhZ2VCcmVha0JldHdlZW4oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRQYWdlQnJlYWtJbnNpZGUoU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEJyZWFrQmV0d2VlbiBjb252ZXJ0
Q29sdW1uQnJlYWtCZXR3ZWVuKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0Q29sdW1uQnJlYWtJbnNpZGUoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEJyZWFrQmV0d2VlbiBjb252ZXJ0UGFn
ZUJyZWFrQmV0d2VlbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydFBhZ2VCcmVha0luc2lkZShTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtCZXR3ZWVuIGNvbnZl
cnRDb2x1bW5CcmVha0JldHdlZW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRDb2x1bW5CcmVha0luc2lkZShTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBPcHRpb25T
ZXQ8SGFuZ2luZ1B1bmN0dWF0aW9uPiBjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8SGFuZ2luZ1B1
bmN0dWF0aW9uPiBjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOwogCi0gICAgc3RhdGljIE9wdGlvblNldDxTcGVha0FzPiBjb252
ZXJ0U3BlYWtBcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
T3B0aW9uU2V0PFNwZWFrQXM+IGNvbnZlcnRTcGVha0FzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOwogCi0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21w
b25lbnRYKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5n
dGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252
ZXJ0UG9zaXRpb25Db21wb25lbnRZKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYpOwogCi0gICAgc3RhdGljIEdhcExlbmd0aCBjb252ZXJ0R2FwTGVuZ3RoKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHYXBMZW5ndGggY29udmVydEdhcExl
bmd0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICAKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlckN1c3RvbTsKQEAgLTE3Miw3ICsxNzIs
NyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+
IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAgICAg
c3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IHZhbHVlVG9EZWNvcmF0aW9uU2tp
cChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVAp
Ci0gICAgc3RhdGljIExlbmd0aCBwYXJzZVNuYXBDb29yZGluYXRlKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggcGFyc2VTbmFwQ29vcmRpbmF0ZShT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKERBUktfTU9ERV9DU1MpCkBAIC0xODAsMjMgKzE4MCwyMyBAQCBwcml2YXRlOgogI2VuZGlm
CiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChjb25z
dCBMZW5ndGgmKTsKLSAgICB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlEPiBzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlEPiBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudChTdHlsZTo6QnVpbGRlclN0YXRl
JiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKIAotICAgIHN0YXRpYyBHcmlkTGVuZ3RoIGNy
ZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBTdHlsZVJlc29s
dmVyJik7Ci0gICAgc3RhdGljIEdyaWRUcmFja1NpemUgY3JlYXRlR3JpZFRyYWNrU2l6ZShjb25z
dCBDU1NWYWx1ZSYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgR3JpZExlbmd0aCBjcmVh
dGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiwgU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYpOworICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNyZWF0ZUdyaWRUcmFja1NpemUo
Y29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6QnVpbGRlclN0YXRlJik7CiAgICAgc3RydWN0IFRyYWNr
c0RhdGE7Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1
ZSYsIFRyYWNrc0RhdGEmLCBTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIGJvb2wgY3JlYXRl
R3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1ZSYsIFRyYWNrc0RhdGEmLCBTdHlsZTo6QnVpbGRl
clN0YXRlJik7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFBvc2l0aW9uKGNvbnN0IENTU1Zh
bHVlJiwgR3JpZFBvc2l0aW9uJik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW1wbGljaXROYW1l
ZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiwgTmFtZWRHcmlk
TGluZXNNYXAmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOwotICAgIHN0YXRpYyBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21G
YWN0b3IoU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYpOwogfTsKIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMZW5ndGgoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0
aCgpID8KLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQotICAgICAgICA6IHN0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS51c2VTVkdab29tUnVs
ZXNGb3JMZW5ndGgoKSA/CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikKKyAgICAgICAgOiBidWlsZGVyU3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzTGVuZ3RoKCkpIHsKICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNv
bXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CkBAIC0yMTQsMTkgKzIxNCwxOSBA
QCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChjb25z
dCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlcwogICAgIHJldHVybiBMZW5ndGgoMCwgRml4ZWQpOwog
fQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aE9y
QXV0byhjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aE9yQXV0byhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gTGVuZ3RoKEF1
dG8pOwotICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAg
ICByZXR1cm4gY29udmVydExlbmd0aChidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5l
IExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3Qg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmcoY29u
c3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpKSB7CiAg
ICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoKHN0
eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoYnVpbGRl
clN0YXRlLCB2YWx1ZSk7CiAgICAgY2FzZSBDU1NWYWx1ZUludHJpbnNpYzoKICAgICAgICAgcmV0
dXJuIExlbmd0aChJbnRyaW5zaWMpOwogICAgIGNhc2UgQ1NTVmFsdWVNaW5JbnRyaW5zaWM6CkBA
IC0yNTAsMjkgKzI1MCwyOSBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExlbmd0aFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBzdAogICAgIH0KIH0KIAot
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhNYXhTaXpp
bmcoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhN
YXhTaXppbmcoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIExlbmd0aChV
bmRlZmluZWQpOwotICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoU2l6aW5nKHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydExlbmd0aFNpemluZyhidWlsZGVyU3RhdGUsIHZh
bHVlKTsKIH0KIAotaW5saW5lIFRhYlNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGFiU2l6ZShjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgVGFiU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
YWJTaXplKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIo
KSkKICAgICAgICAgcmV0dXJuIFRhYlNpemUocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpLCBT
cGFjZVZhbHVlVHlwZSk7Ci0gICAgcmV0dXJuIFRhYlNpemUocHJpbWl0aXZlVmFsdWUuY29tcHV0
ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSksIExlbmd0aFZhbHVlVHlwZSk7CisgICAgcmV0dXJuIFRhYlNpemUocHJpbWl0aXZl
VmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSksIExlbmd0aFZhbHVlVHlwZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb21wdXRlZExlbmd0aChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb21wdXRlZExlbmd0aChTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAg
ICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVuZ3Ro
PFQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwor
ICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmNvbXB1dGVMZW5n
dGg8VD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiB9CiAKIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZVdpZHRo
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkgewpAQCAt
Mjg1LDE2ICsyODUsMTYgQEAgaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGMKICAgICBjYXNlIENTU1Zh
bHVlSW52YWxpZDogewogICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2FzID49
IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgLy8gVGhp
cyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgIFQgcmVzdWx0ID0g
Y29udmVydENvbXB1dGVkTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAgICAg
aWYgKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgPCAxLjBm
ICYmIHJlc3VsdCA8IDEuMCkgewotICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjApKTsKKyAgICAgICAg
VCByZXN1bHQgPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8VD4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7
CisgICAgICAgIGlmIChidWlsZGVyU3RhdGUuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkgPCAxLjBm
ICYmIHJlc3VsdCA8IDEuMCkgeworICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHByaW1p
dGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjApKTsKICAgICAgICAgICAgIGlmIChv
cmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAg
IH0KLSAgICAgICAgZmxvYXQgbWluaW11bUxpbmVXaWR0aCA9IDEgLyBzdHlsZVJlc29sdmVyLmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgZmxvYXQgbWluaW11bUxpbmVX
aWR0aCA9IDEgLyBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOwog
ICAgICAgICBpZiAocmVzdWx0ID4gMCAmJiByZXN1bHQgPCBtaW5pbXVtTGluZVdpZHRoKQogICAg
ICAgICAgICAgcmV0dXJuIG1pbmltdW1MaW5lV2lkdGg7Ci0gICAgICAgIHJldHVybiBmbG9vclRv
RGV2aWNlUGl4ZWwocmVzdWx0LCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVG
YWN0b3IoKSk7CisgICAgICAgIHJldHVybiBmbG9vclRvRGV2aWNlUGl4ZWwocmVzdWx0LCBidWls
ZGVyU3RhdGUuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICB9CiAgICAgZGVm
YXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMDIsMTUgKzMwMiwxNSBA
QCBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgYwogICAgIH0KIH0KIAotaW5saW5lIGZsb2F0IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNwYWNpbmcoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHJldHVybiAwLmY7CiAKLSAg
ICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZl
ci51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSA/Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4w
ZikKLSAgICAgICAgOiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBi
dWlsZGVyU3RhdGUudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPworICAgICAgICBidWlsZGVy
U3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEu
MGYpCisgICAgICAgIDogYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsK
ICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVyc2lv
bkRhdGEpOwogfQogCkBAIC0zMjMsMTMgKzMyMywxMyBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFRvUmFkaXVzTGVuZ3RoKENTU1RvTGVuZ3RoQ29udmVyc2lv
bgogICAgIHJldHVybiB2YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEp
OwogfQogCi1pbmxpbmUgTGVuZ3RoU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRS
YWRpdXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIExlbmd0aFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmFkaXVz
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8qIHBhaXIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnBhaXJWYWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+
c2Vjb25kKCkpCiAgICAgICAgIHJldHVybiB7IHsgMCwgRml4ZWQgfSwgeyAwLCBGaXhlZCB9IH07
CiAKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICBMZW5ndGhTaXplIHJhZGl1cyB7IGNvbnZlcnRUb1Jh
ZGl1c0xlbmd0aChjb252ZXJzaW9uRGF0YSwgKnBhaXItPmZpcnN0KCkpLCBjb252ZXJ0VG9SYWRp
dXNMZW5ndGgoY29udmVyc2lvbkRhdGEsICpwYWlyLT5zZWNvbmQoKSkgfTsKIAogICAgIEFTU0VS
VCghcmFkaXVzLndpZHRoLmlzTmVnYXRpdmUoKSk7CkBAIC0zNTQsMTggKzM1NCwxOCBAQCBpbmxp
bmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvMTAwUGVyY2VudE1pbnVz
TGVuZ3RoKGNvbnN0IExlbmd0aAogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1ZTo6
Y3JlYXRlKFdURk1vdmUob3ApLCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLWlubGluZSBMZW5ndGgg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5n
dGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewot
ICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NWYWx1
ZVJpZ2h0PihzdHlsZVJlc29sdmVyLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KTsKKyAgICByZXR1cm4gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVmdCwgQ1NT
VmFsdWVSaWdodD4oYnVpbGRlclN0YXRlLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKTsKIH0KIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQ
b3NpdGlvbkNvbXBvbmVudFkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQb3NpdGlvbkNvbXBv
bmVudDxDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KHN0eWxlUmVzb2x2ZXIsIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25D
b21wb25lbnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tPihidWlsZGVyU3RhdGUsIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTxDU1NWYWx1ZUlE
IGNzc1ZhbHVlRm9yMCwgQ1NTVmFsdWVJRCBjc3NWYWx1ZUZvcjEwMD4KLWlubGluZSBMZW5ndGgg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnQoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQoraW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVu
dChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ByaW1pdGl2ZVZh
bHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGggbGVuZ3RoOwogCkBAIC0zOTIsNyArMzkyLDcgQEAg
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBv
bmVudChTdHlsZVJlc29sdmVyJiBzdHkKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCi0gICAg
bGVuZ3RoID0gY29udmVydExlbmd0aChzdHlsZVJlc29sdmVyLCAqbGVuZ3RoVmFsdWUpOworICAg
IGxlbmd0aCA9IGNvbnZlcnRMZW5ndGgoYnVpbGRlclN0YXRlLCAqbGVuZ3RoVmFsdWUpOwogCiAg
ICAgaWYgKHJlbGF0aXZlVG9UcmFpbGluZ0VkZ2UpCiAgICAgICAgIGxlbmd0aCA9IGNvbnZlcnRU
bzEwMFBlcmNlbnRNaW51c0xlbmd0aChsZW5ndGgpOwpAQCAtNDAwLDIwICs0MDAsMjAgQEAgaW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVu
dChTdHlsZVJlc29sdmVyJiBzdHkKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi1pbmxpbmUgTGVu
Z3RoUG9pbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T2JqZWN0UG9zaXRpb24oU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IExlbmd0aFBvaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9iamVjdFBvc2l0aW9u
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUucGFpclZhbHVlKCk7
CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkKICAg
ICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjppbml0aWFsT2JqZWN0UG9zaXRpb24oKTsKIAotICAg
IExlbmd0aCBsZW5ndGhYID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVmdCwg
Q1NTVmFsdWVSaWdodD4oc3R5bGVSZXNvbHZlciwgKnBhaXItPmZpcnN0KCkpOwotICAgIExlbmd0
aCBsZW5ndGhZID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1
ZUJvdHRvbT4oc3R5bGVSZXNvbHZlciwgKnBhaXItPnNlY29uZCgpKTsKKyAgICBMZW5ndGggbGVu
Z3RoWCA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVlUmln
aHQ+KGJ1aWxkZXJTdGF0ZSwgKnBhaXItPmZpcnN0KCkpOworICAgIExlbmd0aCBsZW5ndGhZID0g
Y29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4oYnVp
bGRlclN0YXRlLCAqcGFpci0+c2Vjb25kKCkpOwogCiAgICAgcmV0dXJuIExlbmd0aFBvaW50KGxl
bmd0aFgsIGxlbmd0aFkpOwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlv
bj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb24oU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvIHJlc3VsdCA9
IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAgICBpZiAoaXM8Q1NTVmFs
dWVMaXN0Pih2YWx1ZSkpIHsKQEAgLTQyNCwyMCArNDI0LDIwIEBAIGlubGluZSBPcHRpb25TZXQ8
VGV4dERlY29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0
aW9uKFN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlcihTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIHJldHVybiBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlPFQ+KENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfTlVNQkVSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlck9yQXV0byhTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXJPckF1dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAg
ICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjb252ZXJ0TnVtYmVyPFQ+KHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydE51bWJlcjxUPihidWlsZGVyU3RhdGUsIHZhbHVl
KTsKIH0KIAotaW5saW5lIHNob3J0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtp
dEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBzaG9ydCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXZWJraXRIeXBo
ZW5hdGVMaW1pdExpbmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb0xpbWl0KQpAQCAtNDQ2LDMxICs0NDYsMzEgQEAgaW5saW5lIHNob3J0IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNvbHYK
IH0KIAogdGVtcGxhdGU8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KLWlubGluZSBOaW5lUGllY2VJ
bWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2U7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJ
bWFnZShwcm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFw
KCkubWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksICZ2YWx1ZSwgaW1hZ2UpOwogICAgIHJldHVy
biBpbWFnZTsKIH0KIAogdGVtcGxhdGU8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KLWlubGluZSBO
aW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNrKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBOaW5l
UGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNrKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlKE5pbmVQaWVjZUltYWdlOjpUeXBlOjpNYXNrKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCAmdmFsdWUs
IGltYWdlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZShw
cm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CiAgICAgcmV0dXJuIGltYWdlOwogfQogCiB0ZW1wbGF0
ZTxDU1NQcm9wZXJ0eUlEPgotaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRTdHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHls
ZUltYWdlKHZhbHVlKTsKKyAgICByZXR1cm4gYnVpbGRlclN0YXRlLmNyZWF0ZVN0eWxlSW1hZ2Uo
dmFsdWUpOwogfQogCi1pbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFRyYW5zZm9ybU9wZXJhdGlv
bnMgb3BlcmF0aW9uczsKLSAgICB0cmFuc2Zvcm1zRm9yVmFsdWUodmFsdWUsIHN0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9wZXJhdGlvbnMpOworICAg
IHRyYW5zZm9ybXNGb3JWYWx1ZSh2YWx1ZSwgYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSwgb3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIG9wZXJhdGlvbnM7CiB9CiAKQEAg
LTQ5OCw3ICs0OTgsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnVwZGF0
ZUNvbG9yU2NoZW1lKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcgogICAgIH0KIH0KIAotaW5s
aW5lIFN0eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JT
Y2hlbWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHls
ZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbG9yU2NoZW1lKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVD
b2xvclNjaGVtZSBjb2xvclNjaGVtZTsKIApAQCAtNTE2LDIzICs1MTYsMjMgQEAgaW5saW5lIFN0
eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUo
U3R5bGVSZXNvbHZlciYKIH0KICNlbmRpZgogCi1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFN0cmluZyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmco
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1
cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5zdHJpbmdWYWx1ZSgpOwogfQog
Ci1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yQXV0
byhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yQXV0byhT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gbnVsbEF0b20oKTsKLSAgICByZXR1cm4g
Y29udmVydFN0cmluZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRT
dHJpbmcoYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
IHJldHVybiBudWxsQXRvbSgpOwotICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFN0cmluZyhidWlsZGVyU3RhdGUsIHZhbHVl
KTsKIH0KIAogaW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjp2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYgcHJpbWl0aXZlVmFsdWUpCkBAIC01NTYsNyArNTU2LDcgQEAgaW5saW5lIE9wdGlvblNl
dDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjp2YWx1ZVRvRW1w
aGFzaXNQb3MKICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNQb3Np
dGlvbigpOwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbihTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFz
aXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEVtcGhhc2lzUG9z
aXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZhbHVl
VG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwpA
QCAtNTY3LDcgKzU2Nyw3IEBAIGlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRFbXBoYXNpCiAgICAgcmV0dXJuIHBv
c2l0aW9uOwogfQogCi1pbmxpbmUgVGV4dEFsaWduTW9kZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHRBbGlnbk1vZGUgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0VGV4dEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUu
aXNWYWx1ZUlEKCkpOwpAQCAtNTc1LDIxICs1NzUsMjEgQEAgaW5saW5lIFRleHRBbGlnbk1vZGUg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0
eWwKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpICE9IENTU1ZhbHVlV2Via2l0TWF0
Y2hQYXJlbnQpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZTsKIAotICAgIGF1dG8qIHBh
cmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOwotICAgIGlmIChwYXJlbnRT
dHlsZS0+dGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6U3RhcnQpCi0gICAgICAgIHJldHVy
biBwYXJlbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9kZTo6
TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OwotICAgIGlmIChwYXJlbnRTdHlsZS0+dGV4dEFs
aWduKCkgPT0gVGV4dEFsaWduTW9kZTo6RW5kKQotICAgICAgICByZXR1cm4gcGFyZW50U3R5bGUt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1vZGU6OlJpZ2h0IDogVGV4dEFs
aWduTW9kZTo6TGVmdDsKLSAgICByZXR1cm4gcGFyZW50U3R5bGUtPnRleHRBbGlnbigpOworICAg
IGF1dG8mIHBhcmVudFN0eWxlID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCk7CisgICAgaWYg
KHBhcmVudFN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OlN0YXJ0KQorICAgICAg
ICByZXR1cm4gcGFyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWdu
TW9kZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OworICAgIGlmIChwYXJlbnRTdHlsZS50
ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQpCisgICAgICAgIHJldHVybiBwYXJlbnRT
dHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0QWxpZ25Nb2RlOjpSaWdodCA6IFRl
eHRBbGlnbk1vZGU6OkxlZnQ7CisgICAgcmV0dXJuIHBhcmVudFN0eWxlLnRleHRBbGlnbigpOwog
fQogCi1pbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAgICAg
ICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCk7
Ci0gICAgICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50
SWRlbnRpZmllckZyb21JUklTdHJpbmcoY3NzVVJMVmFsdWUsIHN0eWxlUmVzb2x2ZXIuZG9jdW1l
bnQoKSk7CisgICAgICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSBTVkdVUklSZWZlcmVuY2U6OmZy
YWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY3NzVVJMVmFsdWUsIGJ1aWxkZXJTdGF0ZS5k
b2N1bWVudCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0aCBl
eHRlcm5hbCBTVkcgcmVmZXJlbmNlcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjYxMzMpCiAgICAgICAgICAgICByZXR1cm4gUmVmZXJlbmNlQ2xpcFBhdGhP
cGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgZnJhZ21lbnQpOwogICAgICAgICB9CkBAIC02
MDQsNyArNjA0LDcgQEAgaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXMKICAgICAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVlLmdl
dCgpKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkgewogICAgICAgICAg
ICAgQVNTRVJUKCFvcGVyYXRpb24pOwotICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVDbGlw
UGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVyLnN0
YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVW
YWx1ZSgpKSk7CisgICAgICAgICAgICBvcGVyYXRpb24gPSBTaGFwZUNsaXBQYXRoT3BlcmF0aW9u
OjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCksICpwcmltaXRpdmVWYWx1ZS5zaGFwZVZhbHVlKCkpKTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVDb250ZW50Qm94CiAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlQm9yZGVyQm94CkBAIC02MjcsMjAgKzYyNywyMCBAQCBpbmxpbmUgUmVm
UHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlw
UGF0aChTdHlsZVJlcwogICAgIHJldHVybiBvcGVyYXRpb247CiB9CiAKLWlubGluZSBSZXNpemUg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZXNpemUgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIFJlc2l6ZSByZXNp
emUgPSBSZXNpemU6Ok5vbmU7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUF1dG8pCi0gICAgICAgIHJlc2l6ZSA9IHN0eWxlUmVzb2x2ZXIuc2V0dGluZ3MoKS50
ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJlc2l6ZTo6Qm90aCA6IFJlc2l6ZTo6Tm9uZTsKKyAg
ICAgICAgcmVzaXplID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS50ZXh0QXJl
YXNBcmVSZXNpemFibGUoKSA/IFJlc2l6ZTo6Qm90aCA6IFJlc2l6ZTo6Tm9uZTsKICAgICBlbHNl
CiAgICAgICAgIHJlc2l6ZSA9IHByaW1pdGl2ZVZhbHVlOwogCiAgICAgcmV0dXJuIHJlc2l6ZTsK
IH0KIAotaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVw
ZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGlu
dCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVwZXRpdGlvbihTdHlsZTo6
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCkBAIC02NTAsNyAr
NjUwLDcgQEAgaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVl
UmVwZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICByZXR1cm4gcHJpbWl0aXZlVmFs
dWUuaW50VmFsdWUoKTsKIH0KIAotaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVkKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAg
IGludCBzcGVlZCA9IDg1OwpAQCAtNjc5LDcgKzY3OSw3IEBAIGlubGluZSBpbnQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWCiAgICAgcmV0dXJuIHNwZWVkOwogfQogCi1pbmxpbmUgUmVmPFF1b3Rlc0RhdGE+IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFF1b3RlcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZjxRdW90ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRRdW90ZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAg
ICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVOb25lKTsKQEAgLTcwMiwxMyArNzAyLDEzIEBAIGlubGluZSBSZWY8UXVvdGVzRGF0
YT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UXVvdGVzKFN0eWxlUmVzb2x2ZXImLCBj
b25zCiAgICAgcmV0dXJuIFF1b3Rlc0RhdGE6OmNyZWF0ZShxdW90ZXMpOwogfQogCi1pbmxpbmUg
VGV4dFVuZGVybGluZVBvc2l0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRV
bmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7
CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiB9CiAKLWlu
bGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRVbmRlcmxpbmVPZmZzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZU9mZnNldChTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtNzE3LDEyICs3MTcsMTIgQEAgaW5s
aW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4
dFVuZGVybGluZU9mZnNldChTdHkKICAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6
OmNyZWF0ZVdpdGhBdXRvKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKHByaW1pdGl2
ZVZhbHVlLmlzTGVuZ3RoKCkpOwotICAgICAgICBhdXRvIGNvbXB1dGVkTGVuZ3RoID0gY29udmVy
dENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZSk7Cisg
ICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+
KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm4gVGV4dFVuZGVy
bGluZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChjb21wdXRlZExlbmd0aCk7CiAgICAgfQogfQog
Ci1pbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICBhdXRvJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC03
MzMsMTIgKzczMywxMiBAQCBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25UaGljawogICAgICAgICByZXR1cm4g
VGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZUZyb21Gb250KCk7CiAgICAgZGVmYXVsdDoK
ICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpOwotICAgICAgICBhdXRv
IGNvbXB1dGVkTGVuZ3RoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29s
dmVyLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBjb252
ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwog
ICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgo
Y29tcHV0ZWRMZW5ndGgpOwogICAgIH0KIH0KIAotaW5saW5lIFJlZlB0cjxTdHlsZVJlZmxlY3Rp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rpb24oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxT
dHlsZVJlZmxlY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rpb24o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNT
RVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1Zh
bHVlTm9uZSk7CkBAIC03NDksMTYgKzc0OSwxNiBAQCBpbmxpbmUgUmVmUHRyPFN0eWxlUmVmbGVj
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVmbGVjdGlvbihTdHlsZVJlcwog
CiAgICAgYXV0byByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKICAgICBy
ZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24ocmVmbGVjdFZhbHVlLmRpcmVjdGlvbigpKTsKLSAgICBy
ZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLm9mZnNldCgpLmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVk
Q29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkpOworICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUub2Zmc2V0KCku
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpKSk7CiAKICAgICBOaW5lUGllY2VJbWFnZSBtYXNrKE5pbmVQaWVjZUltYWdlOjpU
eXBlOjpNYXNrKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlKENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdCwgcmVmbGVjdFZhbHVlLm1hc2soKSwgbWFz
ayk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2UoQ1NTUHJv
cGVydHlXZWJraXRCb3hSZWZsZWN0LCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAgICBy
ZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwogCiAgICAgcmV0dXJuIHJlZmxlY3Rpb247CiB9CiAK
LWlubGluZSBJbnRTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEluaXRpYWxMZXR0
ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBJbnRTaXpl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEluaXRpYWxMZXR0ZXIoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKQEAgLTc3Myw3ICs3
NzMsNyBAQCBpbmxpbmUgSW50U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRJbml0
aWFsTGV0dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdAogICAgIHJldHVybiBJbnRTaXplKHBhaXIt
PmZpcnN0KCktPmludFZhbHVlKCksIHBhaXItPnNlY29uZCgpLT5pbnRWYWx1ZSgpKTsKIH0KIAot
aW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0
aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdpZHRo
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKIApAQCAtNzg4LDExICs3ODgsMTEgQEAgaW5saW5lIGZsb2F0IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiBzdHls
ZVIKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVl
VGhpY2spCiAgICAgICAgICAgICByZXN1bHQgKj0gNTsKICAgICAgICAgUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiBlbXNWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19FTVMpKTsKLSAgICAgICAgd2lkdGggPSBjb252ZXJ0Q29tcHV0ZWRM
ZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIGVtc1ZhbHVlKTsKKyAgICAgICAgd2lkdGggPSBj
b252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZSwgZW1zVmFsdWUpOwogICAg
ICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6IHsKLSAgICAgICAg
d2lkdGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIHByaW1p
dGl2ZVZhbHVlKTsKKyAgICAgICAgd2lkdGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+
KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgZGVmYXVsdDoKQEAgLTgwMyw3ICs4MDMsNyBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUgog
ICAgIHJldHVybiB3aWR0aDsKIH0KIAotaW5saW5lIE9wdGlvblNldDxMaW5lQm94Q29udGFpbj4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8TGluZUJveENvbnRh
aW4+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVCb3hDb250YWluKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC04MzQsNyAr
ODM0LDcgQEAgaW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6dmFsdWVUb0RlY29yYXRpb25Ta2kKICAgICByZXR1cm4gT3B0aW9uU2V0PFRl
eHREZWNvcmF0aW9uU2tpcD4geyB9OwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0
aW9uU2tpcD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25Ta2lw
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0
PFRleHREZWNvcmF0aW9uU2tpcD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb25Ta2lwKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJldHVy
biB2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSk7CkBAIC04NTAsNyArODUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzSW1hZ2VTaGFwZShj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIGlzPENTU0ltYWdlVmFsdWU+KHZhbHVl
KSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0b3JW
YWx1ZT4odmFsdWUpOwogfQogCi1pbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtODU4LDE0ICs4NTgsMTQgQEAg
aW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
aGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXIKICAgICB9CiAKICAgICBpZiAoaXNJbWFnZVNoYXBlKHZh
bHVlKSkKLSAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZShzdHlsZVJlc29sdmVyLnN0
eWxlSW1hZ2UodmFsdWUpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICByZXR1cm4gU2hhcGVW
YWx1ZTo6Y3JlYXRlKGJ1aWxkZXJTdGF0ZS5jcmVhdGVTdHlsZUltYWdlKHZhbHVlKS5yZWxlYXNl
Tm9uTnVsbCgpKTsKIAogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZTsKICAgICBDU1NCb3hU
eXBlIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGU6OkJveE1pc3Npbmc7CiAgICAgZm9yIChhdXRv
JiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJy
ZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgpKQot
ICAgICAgICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci5zdGF0
ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVlLnNoYXBlVmFs
dWUoKSk7CisgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShidWlsZGVyU3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVWYWx1
ZSgpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1Zh
bHVlQ29udGVudEJveAogICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlQm9yZGVyQm94CiAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94CkBAIC04ODksNyArODg5LDcgQEAgaW5saW5lIFJlZlB0
cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0
eWxlUmVzb2x2ZXIKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAKLWlubGluZSBTY3Jv
bGxTbmFwVHlwZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwVHlwZShT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFNjcm9sbFNuYXBU
eXBlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU2Nyb2xsU25hcFR5
cGUgdHlwZTsKICAgICBhdXRvJiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVl
KTsKQEAgLTkxNCw3ICs5MTQsNyBAQCBpbmxpbmUgU2Nyb2xsU25hcFR5cGUgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGVSZXNvbHZlcgogICAgIHJldHVy
biB0eXBlOwogfQogCi1pbmxpbmUgU2Nyb2xsU25hcEFsaWduIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTY3JvbGxTbmFwQWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKICAgICBhdXRvJiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKTsKICAgICBTY3JvbGxTbmFwQWxpZ24gYWxpZ25tZW50OwpAQCAtOTI4LDcgKzkyOCw3IEBA
IGlubGluZSBTY3JvbGxTbmFwQWxpZ24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2Ny
b2xsU25hcEFsaWduKFN0eWxlUmVzb2x2CiAKICNlbmRpZgogCi1pbmxpbmUgR3JpZExlbmd0aCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQoraW5saW5lIEdyaWRMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJh
Y2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSwgU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5Db250ZW50IHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCiAgICAgICAgIHJldHVybiBMZW5ndGgoTWlu
Q29udGVudCk7CkBAIC05NDAsMjMgKzk0MCwyMyBAQCBpbmxpbmUgR3JpZExlbmd0aCBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0aQog
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0ZsZXgoKSkKICAgICAgICAgcmV0dXJuIEdyaWRMZW5n
dGgocHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUoKSk7CiAKLSAgICByZXR1cm4gcHJpbWl0aXZl
VmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29u
dmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0eWxlUmVz
b2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgIHJldHVybiBw
cmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBl
cmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4o
YnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiB9CiAKLWlubGluZSBH
cmlkVHJhY2tTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6ZShj
b25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxp
bmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja1Np
emUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAgIHJl
dHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSwgc3R5bGVSZXNvbHZlcikpOworICAgICAgICByZXR1cm4gR3Jp
ZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSksIGJ1aWxkZXJTdGF0ZSkpOwogCiAgICAgQVNTRVJUKGlzPENTU0Z1bmN0aW9u
VmFsdWU+KHZhbHVlKSk7CiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBkb3duY2FzdDxDU1NG
dW5jdGlvblZhbHVlPih2YWx1ZSk7CiAKICAgICBpZiAoZnVuY3Rpb24ubGVuZ3RoKCkgPT0gMSkK
LSAgICAgICAgcmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2so
MCkpLCBzdHlsZVJlc29sdmVyKSwgRml0Q29udGVudFRyYWNrU2l6aW5nKTsKKyAgICAgICAgcmV0
dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBidWlsZGVy
U3RhdGUpLCBGaXRDb250ZW50VHJhY2tTaXppbmcpOwogCiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJ
VFlfSU1QTElDQVRJT04oZnVuY3Rpb24ubGVuZ3RoKCkgPT0gMik7Ci0gICAgR3JpZExlbmd0aCBt
aW5UcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBzdHlsZVJlc29s
dmVyKSk7Ci0gICAgR3JpZExlbmd0aCBtYXhUcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJl
YWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91
bmRzQ2hlY2soMSkpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgR3JpZExlbmd0aCBtaW5UcmFja0Jy
ZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
KmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBidWlsZGVyU3RhdGUpKTsKKyAg
ICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygx
KSksIGJ1aWxkZXJTdGF0ZSkpOwogICAgIHJldHVybiBHcmlkVHJhY2tTaXplKG1pblRyYWNrQnJl
YWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKIH0KIApAQCAtOTg4LDcgKzk4OCw3IEBAIHB1YmxpYzoK
ICAgICBBdXRvUmVwZWF0VHlwZSBtX2F1dG9SZXBlYXRUeXBlIHsgUmVuZGVyU3R5bGU6OmluaXRp
YWxHcmlkQXV0b1JlcGVhdFR5cGUoKSB9OwogfTsKIAotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgVHJh
Y2tzRGF0YSYgdHJhY2tzRGF0YSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGlu
ZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBD
U1NWYWx1ZSYgdmFsdWUsIFRyYWNrc0RhdGEmIHRyYWNrc0RhdGEsIFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICAvLyBIYW5kbGUgJ25vbmUnLgogICAgIGlmIChpczxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQpAQCAtMTAwMyw3ICsxMDAzLDcgQEAgaW5saW5lIGJv
b2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSwgVHIKICAgICAgICAgICAgIGNyZWF0ZUdyaWRMaW5lTmFtZXNMaXN0KGN1cnJl
bnRWYWx1ZSwgY3VycmVudE5hbWVkR3JpZExpbmUsIHRyYWNrc0RhdGEubV9uYW1lZEdyaWRMaW5l
cywgdHJhY2tzRGF0YS5tX29yZGVyZWROYW1lZEdyaWRMaW5lcyk7CiAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgKytjdXJyZW50TmFtZWRHcmlkTGluZTsKLSAgICAgICAgICAgIHRyYWNrc0Rh
dGEubV90cmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJlbnRWYWx1ZSwg
c3R5bGVSZXNvbHZlcikpOworICAgICAgICAgICAgdHJhY2tzRGF0YS5tX3RyYWNrU2l6ZXMuYXBw
ZW5kKGNyZWF0ZUdyaWRUcmFja1NpemUoY3VycmVudFZhbHVlLCBidWlsZGVyU3RhdGUpKTsKICAg
ICAgICAgfQogICAgIH07CiAKQEAgLTEwMjAsNyArMTAyMCw3IEBAIGlubGluZSBib29sIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1ZSYgdmFs
dWUsIFRyCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICArK2F1dG9SZXBlYXRJbmRleDsKLSAgICAgICAgICAgICAgICB0cmFj
a3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMuYXBwZW5kKGNyZWF0ZUdyaWRUcmFja1NpemUo
YXV0b1JlcGVhdFZhbHVlLmdldCgpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAgICAgICAgICAg
dHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJhY2tT
aXplKGF1dG9SZXBlYXRWYWx1ZS5nZXQoKSwgYnVpbGRlclN0YXRlKSk7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50ID0gY3Vy
cmVudE5hbWVkR3JpZExpbmUrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTExMSw3ICsx
MTExLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNp
dE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKGNvbnMKICAgICB9CiB9CiAKLWlubGluZSBWZWN0
b3I8R3JpZFRyYWNrU2l6ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNr
U2l6ZUxpc3QoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUuaXNWYWx1ZUxp
c3QoKSk7CiAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1
ZSk7CkBAIC0xMTIxLDE3ICsxMTIxLDE3IEBAIGlubGluZSBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5CiAgICAg
ICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRMaW5lTmFtZXNWYWx1ZSgpKTsKICAgICAgICAg
QVNTRVJUKCFjdXJyVmFsdWUtPmlzR3JpZEF1dG9SZXBlYXRWYWx1ZSgpKTsKICAgICAgICAgQVNT
RVJUKCFjdXJyVmFsdWUtPmlzR3JpZEludGVnZXJSZXBlYXRWYWx1ZSgpKTsKLSAgICAgICAgdHJh
Y2tTaXplcy51bmNoZWNrZWRBcHBlbmQoY29udmVydEdyaWRUcmFja1NpemUoc3R5bGVSZXNvbHZl
ciwgY3VyclZhbHVlKSk7CisgICAgICAgIHRyYWNrU2l6ZXMudW5jaGVja2VkQXBwZW5kKGNvbnZl
cnRHcmlkVHJhY2tTaXplKGJ1aWxkZXJTdGF0ZSwgY3VyclZhbHVlKSk7CiAgICAgfQogICAgIHJl
dHVybiB0cmFja1NpemVzOwogfQogCi1pbmxpbmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHcmlkVHJhY2tTaXplIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNyZWF0
ZUdyaWRUcmFja1NpemUodmFsdWUsIHN0eWxlUmVzb2x2ZXIpOworICAgIHJldHVybiBjcmVhdGVH
cmlkVHJhY2tTaXplKHZhbHVlLCBidWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8
R3JpZFBvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24o
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxH
cmlkUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRQb3NpdGlvbihT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEdyaWRQ
b3NpdGlvbiBncmlkUG9zaXRpb247CiAgICAgaWYgKGNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1ZSwg
Z3JpZFBvc2l0aW9uKSkKQEAgLTExMzksNyArMTEzOSw3IEBAIGlubGluZSBPcHRpb25hbDxHcmlk
UG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRQb3NpdGlvbihTdHls
ZVJlCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotaW5saW5lIEdyaWRBdXRvRmxvdyBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHcmlkQXV0b0Zsb3cgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgbGlzdCA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpOwogICAgIGlmICghbGlzdC5sZW5ndGgoKSkKQEAgLTExNzcsMjMgKzExNzcs
MjMgQEAgaW5saW5lIEdyaWRBdXRvRmxvdyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRH
cmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZlciYsIGMKICAgICByZXR1cm4gYXV0b0Zsb3c7CiB9CiAK
LWlubGluZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyKQoraW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFj
dG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBpZiAoYXV0byog
ZnJhbWUgPSBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZnJhbWUoKSkgewotICAgICAgICBmbG9h
dCB0ZXh0Wm9vbUZhY3RvciA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+dGV4dFpvb20oKSAhPSBU
ZXh0Wm9vbTo6UmVzZXQgPyBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKSA6IDEuMGY7Ci0gICAgICAg
IHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
LmNvcHlXaXRoQWRqdXN0ZWRab29tKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+ZWZmZWN0aXZlWm9v
bSgpICogdGV4dFpvb21GYWN0b3IpOworICAgIGlmIChhdXRvKiBmcmFtZSA9IGJ1aWxkZXJTdGF0
ZS5kb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAgICAgZmxvYXQgdGV4dFpvb21GYWN0b3IgPSBi
dWlsZGVyU3RhdGUuc3R5bGUoKS50ZXh0Wm9vbSgpICE9IFRleHRab29tOjpSZXNldCA/IGZyYW1l
LT50ZXh0Wm9vbUZhY3RvcigpIDogMS4wZjsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oYnVpbGRlclN0
YXRlLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpICogdGV4dFpvb21GYWN0b3IpOwogICAgIH0KLSAg
ICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KTsKKyAgICByZXR1cm4gYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsK
IH0KIAotaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgT3B0aW9uYWw8TGVuZ3RoPiB3b3JkU3BhY2lu
ZzsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5v
cm1hbCkKICAgICAgICAgd29yZFNwYWNpbmcgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRTcGFj
aW5nKCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAgICAg
d29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3NzdG9M
ZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihzdHlsZVJlc29sdmVyKSk7Cisg
ICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoYnVpbGRlclN0YXRl
KSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAgICAg
IHdvcmRTcGFjaW5nID0gTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KHByaW1pdGl2ZVZhbHVlLmRvdWJs
ZVZhbHVlKCksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCksIFBl
cmNlbnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCkBAIC0xMjAy
LDcgKzEyMDIsNyBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJgogICAgIHJldHVybiB3b3JkU3Bh
Y2luZzsKIH0KIAotaW5saW5lIE9wdGlvbmFsPGZsb2F0PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8ZmxvYXQ+IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFBlcnNwZWN0aXZlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKQEAgLTEyMTAsMTYgKzEyMTAsMTYgQEAgaW5s
aW5lIE9wdGlvbmFsPGZsb2F0PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQZXJzcGVj
dGl2ZShTdHlsZVJlc29sdmVyJgogCiAgICAgZmxvYXQgcGVyc3BlY3RpdmUgPSAtMTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKQot
ICAgICAgICBwZXJzcGVjdGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkgKiBzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLnpvb20oKTsKKyAg
ICAgICAgcGVyc3BlY3RpdmUgPSBwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpICogYnVpbGRl
clN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS56b29tKCk7CiAgICAgZWxzZQogICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIHJldHVybiBwZXJzcGVjdGl2ZSA8IDAg
PyBPcHRpb25hbDxmbG9hdD4oV1RGOjpudWxsb3B0KSA6IE9wdGlvbmFsPGZsb2F0PihwZXJzcGVj
dGl2ZSk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBPcHRpb25hbDxM
ZW5ndGg+IG1hcnF1ZWVMZW5ndGg7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtMTIzNCw3ICsxMjM0LDcgQEAgaW5saW5l
IE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZUlu
Y3JlbWVudChTdHlsZVJlc28KICAgICAgICAgbWFycXVlZUxlbmd0aCA9IExlbmd0aCgzNiwgRml4
ZWQpOyAvLyAzNnB4LgogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDog
ewotICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3Ro
PEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRD
b252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAgICAgTGVuZ3RoIGxlbmd0aCA9
IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oYnVpbGRlclN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CiAg
ICAgICAgIGlmICghbGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICBtYXJxdWVlTGVu
Z3RoID0gbGVuZ3RoOwogICAgICAgICBicmVhazsKQEAgLTEyNDUsMTUgKzEyNDUsMTUgQEAgaW5s
aW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZUluY3JlbWVudChTdHlsZVJlc28KICAgICByZXR1cm4gbWFycXVlZUxlbmd0aDsKIH0KIAotaW5s
aW5lIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgRmlsdGVy
T3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGlmIChzdHlsZVJlc29sdmVyLmNyZWF0ZUZpbHRl
ck9wZXJhdGlvbnModmFsdWUsIG9wZXJhdGlvbnMpKQorICAgIGlmIChidWlsZGVyU3RhdGUuY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgb3BlcmF0aW9ucykpCiAgICAgICAgIHJldHVybiBv
cGVyYXRpb25zOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBGb250RmVh
dHVyZVNldHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRGZWF0dXJlU2V0
dGluZ3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250
RmVhdHVyZVNldHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRGZWF0dXJl
U2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVO
b3JtYWwpOwpAQCAtMTMyMywyNyArMTMyMywyNyBAQCBpbmxpbmUgT3B0aW9uYWw8Rm9udFNlbGVj
dGlvblZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVGcm9tVgog
ICAgIHJldHVybiBpdGFsaWNWYWx1ZSgpOwogfQogCi1pbmxpbmUgRm9udFNlbGVjdGlvblZhbHVl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZvbnRTZWxlY3Rp
b25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0KFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKSB7CiAgICAgICAgIGF1dG8gdmFsdWVJRCA9IHByaW1p
dGl2ZVZhbHVlLnZhbHVlSUQoKTsKICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVCb2xk
ZXIpCi0gICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVyV2Vp
Z2h0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkud2VpZ2h0
KCkpOworICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRlcldl
aWdodChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQo
KSk7CiAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTGlnaHRlcikKLSAgICAgICAgICAg
IHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpOworICAgICAgICAg
ICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoYnVpbGRlclN0
YXRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpOwogICAgIH0KICAg
ICByZXR1cm4gY29udmVydEZvbnRXZWlnaHRGcm9tVmFsdWUodmFsdWUpOwogfQogCi1pbmxpbmUg
Rm9udFNlbGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHJl
dGNoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udFNl
bGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHJldGNoKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IGNvbnZlcnRGb250U3RyZXRjaEZyb21WYWx1ZSh2YWx1ZSk7CiB9CiAKICNpZiBFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQotaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKQEAgLTEzNjAsMjEg
KzEzNjAsMjEgQEAgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3MKICNlbmRpZgogCiAjaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLWlubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFRvdWNoQ2FsbG91dChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hDYWxsb3V0KFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuICFl
cXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpLnN0cmluZ1ZhbHVlKCksICJub25lIik7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShU
T1VDSF9FVkVOVFMpCi1pbmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIENvbG9yIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLmNvbG9yRnJv
bVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAg
IHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQT0lOVEVS
X0VWRU5UUykKLWlubGluZSBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFRvdWNoQWN0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTEzOTYs
NDAgKzEzOTYsNDAgQEAgaW5saW5lIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGVSZXMKICNlbmRpZgogCiAjaWYgRU5B
QkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLWlubGluZSBib29sIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydE92ZXJmbG93U2Nyb2xsaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRPdmVyZmxvd1Njcm9sbGluZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRvdWNoOwogfQogI2VuZGlmCiAKLWlubGluZSBTVkdMZW5n
dGhWYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWYWx1ZShTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFNWR0xlbmd0aFZhbHVl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIFNWR0xlbmd0
aFZhbHVlOjpmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSk7CiB9CiAKLWlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZlY3RvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZh
bHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAKICAg
ICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHN2Z0xlbmd0aHM7CiAgICAgc3ZnTGVuZ3Rocy5yZXNl
cnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlTGlzdC5sZW5ndGgoKSk7CiAgICAgZm9yIChhdXRvJiBp
dGVtIDogdmFsdWVMaXN0KQotICAgICAgICBzdmdMZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChjb252
ZXJ0U1ZHTGVuZ3RoVmFsdWUoc3R5bGVSZXNvbHZlciwgaXRlbSkpOworICAgICAgICBzdmdMZW5n
dGhzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoYnVpbGRlclN0YXRlLCBp
dGVtKSk7CiAKICAgICByZXR1cm4gc3ZnTGVuZ3RoczsKIH0KIAotaW5saW5lIFZlY3RvcjxTVkdM
ZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3Ryb2tlRGFzaEFycmF5
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFN0cm9rZURhc2hBcnJheShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsU3Ryb2tlRGFzaEFycmF5KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZlcnRT
VkdMZW5ndGhWZWN0b3Ioc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0
U1ZHTGVuZ3RoVmVjdG9yKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgUGFpbnRP
cmRlciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUGFpbnRPcmRlciBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSku
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIGlubGlu
ZSBQYWludE9yZGVyIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIoU3R5
bGVSZXNvbHZlciYsIGNvbnN0CiAgICAgfQogfQogCi1pbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNp
dHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBh
dXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7
CiAgICAgZmxvYXQgb3BhY2l0eSA9IHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKTsKQEAgLTE0
NTksMjIgKzE0NTksMjIgQEAgaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHUKICAgICByZXR1cm4gb3Bh
Y2l0eTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
VkdVUklSZWZlcmVuY2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
VkdVUklSZWZlcmVuY2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3RyaW5nIHM7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRp
dmVWYWx1ZS5pc1VSSSgpKQogICAgICAgICBzID0gcHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUo
KTsKIAotICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRlbnRpZmllckZyb21J
UklTdHJpbmcocywgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gU1ZHVVJJ
UmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIGJ1aWxkZXJTdGF0
ZS5kb2N1bWVudCgpKTsKIH0KIAotaW5saW5lIENvbG9yIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydFNWR0NvbG9yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBDb2xvciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
VkdDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICByZXR1cm4gYnVp
bGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpOwogfQogCi1pbmxpbmUgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25tZW50RGF0YShTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFN0eWxlU2VsZkFsaWdubWVu
dERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVu
dERhdGEoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIGFsaWdubWVudERhdGEgPSBSZW5kZXJTdHlsZTo6aW5p
dGlhbFNlbGZBbGlnbm1lbnQoKTsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC0xNDk1LDcgKzE0OTUsNyBAQCBpbmxpbmUg
U3R5bGVTZWxmQWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTZWxm
T3JEZWZhdWx0QWxpZ25tZQogICAgIHJldHVybiBhbGlnbm1lbnREYXRhOwogfQogCi1pbmxpbmUg
U3R5bGVDb250ZW50QWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRD
b250ZW50QWxpZ25tZW50RGF0YShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIGFsaWdu
bWVudERhdGEgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbENvbnRlbnRBbGlnbm1lbnQoKTsKICAgICBp
ZiAoIWlzPENTU0NvbnRlbnREaXN0cmlidXRpb25WYWx1ZT4odmFsdWUpKQpAQCAtMTUxMCw3ICsx
NTEwLDcgQEAgaW5saW5lIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0Q29udGVudEFsaWdubWVudEQKICAgICByZXR1cm4gYWxpZ25tZW50RGF0
YTsKIH0KIAotaW5saW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0R2x5cGhPcmllbnRhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0R2x5cGhPcmllbnRhdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIGZsb2F0IGFuZ2xlID0gZmFic2YoZm1vZGYoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS5mbG9hdFZhbHVlKCksIDM2MC4wZikpOwogICAgIGlmIChhbmds
ZSA8PSA0NS4wZiB8fCBhbmdsZSA+IDMxNS4wZikKQEAgLTE1MjIsMjEgKzE1MjIsMjEgQEAgaW5s
aW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhP
cmllbnRhdGlvbihTdHlsZVJlc28KICAgICByZXR1cm4gR2x5cGhPcmllbnRhdGlvbjo6RGVncmVl
czI3MDsKIH0KIAotaW5saW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR2x5cGhPcmllbnRhdGlvbiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9uT3JBdXRvKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZUF1dG8pCiAgICAgICAgIHJldHVybiBHbHlwaE9yaWVudGF0aW9uOjpBdXRvOwotICAgIHJl
dHVybiBjb252ZXJ0R2x5cGhPcmllbnRhdGlvbihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAg
cmV0dXJuIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
aW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSwgZmxvYXQgbXVsdGlwbGllcikKK2lubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIGZsb2F0IG11bHRpcGxpZXIpCiB7CiAg
ICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwp
CiAgICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKTsKIAogICAg
IGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgIExlbmd0aCBsZW5ndGgg
PSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVz
b2x2ZXIpKTsKKyAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVM
ZW5ndGg8TGVuZ3RoPihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNzc3RvTGVuZ3RoQ29udmVyc2lv
bkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoYnVpbGRlclN0YXRlKSk7CiAgICAgICAgIGlmIChtdWx0
aXBsaWVyICE9IDEuZikKICAgICAgICAgICAgIGxlbmd0aCA9IExlbmd0aChsZW5ndGgudmFsdWUo
KSAqIG11bHRpcGxpZXIsIEZpeGVkKTsKICAgICAgICAgcmV0dXJuIGxlbmd0aDsKQEAgLTE1NTAs
NyArMTU1MCw3IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYKICAgICAvLyB2YWx1ZXMgYW5kIHJh
dyBudW1iZXJzIHRvIHBlcmNlbnRhZ2VzLgogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNl
bnRhZ2UoKSkgewogICAgICAgICAvLyBGSVhNRTogcGVyY2VudGFnZSBzaG91bGQgbm90IGJlIHJl
c3RyaWN0ZWQgdG8gYW4gaW50ZWdlciBoZXJlLgotICAgICAgICByZXR1cm4gTGVuZ3RoKChzdHls
ZVJlc29sdmVyLnN0eWxlKCktPmNvbXB1dGVkRm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmlu
dFZhbHVlKCkpIC8gMTAwLCBGaXhlZCk7CisgICAgICAgIHJldHVybiBMZW5ndGgoKGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLmNvbXB1dGVkRm9udFNpemUoKSAqIHByaW1pdGl2ZVZhbHVlLmludFZhbHVl
KCkpIC8gMTAwLCBGaXhlZCk7CiAgICAgfQogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJl
cigpKQogICAgICAgICByZXR1cm4gTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkg
KiAxMDAuMCwgUGVyY2VudCk7CkBAIC0xNTYwLDcgKzE1NjAsNyBAQCBpbmxpbmUgT3B0aW9uYWw8
TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlUmVz
b2x2ZXImCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotaW5saW5lIEZvbnRTeW50aGVz
aXMgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN5bnRoZXNpcyhTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZvbnRTeW50aGVzaXMgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN5bnRoZXNpcyhTdHlsZTo6QnVpbGRlclN0YXRl
JiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtMTU4OSw3ICsxNTg5LDcgQEAg
aW5saW5lIEZvbnRTeW50aGVzaXMgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFN5
bnRoZXNpcyhTdHlsZVJlc29sdmVyJiwKICAgICByZXR1cm4gcmVzdWx0OwogfQogICAgIAotaW5s
aW5lIE9wdGlvblNldDxTcGVha0FzPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGVh
a0FzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9u
U2V0PFNwZWFrQXM+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNwZWFrQXMoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IFJlbmRlclN0eWxlOjppbml0aWFsU3BlYWtBcygpOwogICAgIGlmIChpczxDU1NWYWx1ZUxp
c3Q+KHZhbHVlKSkgewpAQCAtMTU5OSw3ICsxNTk5LDcgQEAgaW5saW5lIE9wdGlvblNldDxTcGVh
a0FzPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGVha0FzKFN0eWxlUmVzb2x2ZXIm
LAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8SGFuZ2luZ1B1bmN0
dWF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24o
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8
SGFuZ2luZ1B1bmN0dWF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRIYW5naW5n
UHVuY3R1YXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBhdXRvIHJlc3VsdCA9IFJlbmRlclN0eWxlOjppbml0aWFsSGFuZ2luZ1B1bmN0dWF0
aW9uKCk7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CkBAIC0xNjA5LDkgKzE2
MDksOSBAQCBpbmxpbmUgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0SGFuZ2luZ1B1bmN0dQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LWlubGluZSBHYXBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3Ro
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBHYXBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3RoKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewotICAgIHJldHVybiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb3JtYWwpID8gR2FwTGVuZ3RoKCkgOiBHYXBMZW5ndGgoY29udmVydExl
bmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZSkpOworICAgIHJldHVybiAoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpID8gR2FwTGVu
Z3RoKCkgOiBHYXBMZW5ndGgoY29udmVydExlbmd0aChidWlsZGVyU3RhdGUsIHZhbHVlKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZUJ1aWxkZXJDdXN0b20uaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJD
dXN0b20uaAppbmRleCAyOGRlMTE2YzkyNS4uZjAzYzExYmVhYTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKQEAgLTQxLDYgKzQxLDcgQEAKICNpbmNsdWRlICJGb250
VmFyaWFudEJ1aWxkZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxFbGVt
ZW50LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgog
I2luY2x1ZGUgIlNWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJTVkdSZW5kZXJTdHlsZS5oIgpAQCAt
NTQsOSArNTUsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIERFQ0xBUkVfUFJP
UEVSVFlfQ1VTVE9NX0hBTkRMRVJTKHByb3BlcnR5KSBcCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0IyNwcm9wZXJ0eShTdHlsZVJlc29sdmVyJik7IFwKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eUluaXRpYWwjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImKTsgXAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWUjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbmhlcml0IyNwcm9wZXJ0eShTdHlsZTo6QnVpbGRlclN0YXRlJik7IFwKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWwjI3Byb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUm
KTsgXAorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUjI3Byb3BlcnR5KFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBDU1NWYWx1ZSYpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBUIGZvcndh
cmRJbmhlcml0ZWRWYWx1ZShUJiYgdmFsdWUpIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxUPih2YWx1
ZSk7IH0KIGlubGluZSBMZW5ndGggZm9yd2FyZEluaGVyaXRlZFZhbHVlKGNvbnN0IExlbmd0aCYg
dmFsdWUpIHsgYXV0byBjb3B5ID0gdmFsdWU7IHJldHVybiBjb3B5OyB9CkBAIC0xMDksMTI2ICsx
MTAsMTI2IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5ETEVSUyha
b29tKTsKIAogICAgIC8vIEN1c3RvbSBoYW5kbGluZyBvZiBpbml0aWFsICsgaW5oZXJpdCB2YWx1
ZSBzZXR0aW5nIG9ubHkuCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsV2Via2l0TWFza0lt
YWdlKFN0eWxlUmVzb2x2ZXImKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRXZWJr
aXRNYXNrSW1hZ2UoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5p
dGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZShTdHlsZTo6QnVpbGRl
clN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0V2Via2l0TWFza0ltYWdl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxG
b250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMg
dm9pZCBhcHBseUluaGVyaXRGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUm
KSB7IH0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
SW5pdGlhbEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlUmVzb2x2ZXIm
KSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxGb250VmFyaWF0aW9uU2V0dGluZ3Mo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEZv
bnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZTo6QnVpbGRlclN0YXRlJikgeyB9CiAjZW5kaWYKIAog
ICAgIC8vIEN1c3RvbSBoYW5kbGluZyBvZiBpbmhlcml0ICsgdmFsdWUgc2V0dGluZyBvbmx5Lgot
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGVSZXNvbHZlciYpOwotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBDU1NWYWx1ZSYpOwogCiAgICAgLy8gQ3VzdG9tIGhhbmRsaW5nIG9mIHZhbHVlIHNldHRp
bmcgb25seS4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZVJl
c29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlRGlyZWN0aW9u
KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVW
ZXJ0aWNhbEFsaWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbFRleHRBbGlnbihTdHlsZVJlc29sdmVyJik7Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZVRleHRBbGlnbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYp
OwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24oU3R5bGVS
ZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUJhc2VsaW5l
U2hpZnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZURpcmVjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVmVydGljYWxBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRl
JiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxUZXh0QWxpZ24oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVUZXh0QWxpZ24o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZVdlYmtpdExvY2FsZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlUmVzb2x2ZXImLCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0U2l6ZUFkanVz
dChTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0Wm9vbShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUFsdChTdHlsZVJlc29sdmVyJiwg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZVJl
c29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4
dFpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVBbHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1Zh
bHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdpbGxDaGFuZ2UoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlQ29sb3JTY2hlbWUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
U3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZVN0cm9rZUNvbG9yKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxD
dXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVBy
b3BlcnR5KiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJ
bmhlcml0Q3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1JlZ2lzdGVyZWRD
dXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOwotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUmVnaXN0
ZXJlZEN1c3RvbVByb3BlcnR5KiwgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSYpOworICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1l
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiwgY29uc3QgQXRv
bVN0cmluZyYgbmFtZSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkq
LCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIHZvaWQg
cmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9pZCByZXNl
dEVmZmVjdGl2ZVpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogCiAgICAgc3RhdGljIExlbmd0
aCBtbUxlbmd0aChkb3VibGUgbW0pOwogICAgIHN0YXRpYyBMZW5ndGggaW5jaExlbmd0aChkb3Vi
bGUgaW5jaCk7CiAgICAgc3RhdGljIGJvb2wgZ2V0UGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRp
dmVWYWx1ZSogcGFnZVNpemVOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZSogcGFnZU9yaWVudGF0aW9u
LCBMZW5ndGgmIHdpZHRoLCBMZW5ndGgmIGhlaWdodCk7CiAKICAgICB0ZW1wbGF0ZSA8Q1NTUHJv
cGVydHlJRCBpZD4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0
eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBib29sIGlzVmFsaWREaXNwbGF5
VmFsdWUoU3R5bGVSZXNvbHZlciYsIERpc3BsYXlUeXBlKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBib29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IERpc3BsYXlUeXBlKTsKIAogICAgIGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1lbnQgPSAw
LCBSZXNldH07CiAgICAgdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVyJik7Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Q291bnRlcihTdHlsZTo6QnVpbGRlclN0YXRlJik7
CiAgICAgdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+Ci0gICAgc3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENT
U1ZhbHVlJik7CiAKICAgICBzdGF0aWMgZmxvYXQgbGFyZ2VyRm9udFNpemUoZmxvYXQgc2l6ZSk7
CiAgICAgc3RhdGljIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKTsKLSAgICBzdGF0
aWMgZmxvYXQgZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZVJlc29sdmVyJik7
CisgICAgc3RhdGljIGZsb2F0IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogfTsKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpcmVj
dGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldERpcmVjdGlvbihkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhh
c0V4cGxpY2l0bHlTZXREaXJlY3Rpb24odHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0RGlyZWN0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24odHJ1ZSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dEFsaWdu
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oUmVuZGVy
U3R5bGU6OmluaXRpYWxUZXh0QWxpZ24oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFRleHRBbGlnbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOwog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0QWxpZ24o
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEFsaWduKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEFsaWduKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRBbGlnbihzdHlsZVJlc29sdmVyLCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0SGFzRXhwbGljaXRseVNldFRleHRBbGlnbih0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRUZXh0QWxpZ24oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFs
aWduKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRI
YXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OnJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVjdGl2ZVpvb20o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIC8vIFJlc2V0IHRoZSB6
b29tIGluIGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFjY3VyYXRl
bHkgY29tcHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KLSAgICBzdHlsZVJlc29sdmVyLnNldEVm
ZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7CisgICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oYnVpbGRlclN0YXRlLnBhcmVu
dFN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFpvb20oU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHls
ZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRp
YWxab29tKCkpOworICAgIHJlc2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOworICAgIGJ1
aWxkZXJTdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRab29tKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHJl
c2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldFpv
b20oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgIHJlc2V0RWZmZWN0
aXZlWm9vbShidWlsZGVyU3RhdGUpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKGJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLnpvb20oKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Wm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSk7CiAKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9ybWFsKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsK
KyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CisgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpv
b20oKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20oUmVuZGVyU3R5
bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgZmxvYXQgZG9jWm9vbSA9IHN0eWxl
UmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0
eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAgICBzdHls
ZVJlc29sdmVyLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgZmxvYXQgZG9jWm9vbSA9IGJ1aWxkZXJTdGF0
ZS5yb290RWxlbWVudFN0eWxlKCkuem9vbSgpOworICAgICAgICBidWlsZGVyU3RhdGUuc2V0RWZm
ZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20oZG9jWm9v
bSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkgewotICAg
ICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIHJlc2V0RWZm
ZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoZmxvYXQgcGVyY2VudCA9IHBy
aW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0
Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29t
KHBlcmNlbnQgLyAxMDAuMGYpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1i
ZXIoKSkgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAg
ICAgIHJlc2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoZmxvYXQg
bnVtYmVyID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc2V0Wm9v
bShudW1iZXIpOwogICAgIH0KIH0KIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ3VzdG9tOjpt
bUxlbmd0aChkb3VibGUgbW0pCkBAIC0zMTUsMzIgKzMxNiwzMiBAQCBib29sIFN0eWxlQnVpbGRl
ckN1c3RvbTo6Z2V0UGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVWYWx1ZSogcGFnZVNpemVO
YW1lLCBDUwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmVydGljYWxBbGlnbihwcmlt
aXRpdmVWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFZlcnRpY2FsQWxp
Z24ocHJpbWl0aXZlVmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVk
Q29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRWZXJ0aWNhbEFsaWduTGVu
Z3RoKHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oYnVpbGRlclN0YXRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwogfQogCiAjaWYgRU5BQkxFKENTU19JTUFH
RV9SRVNPTFVUSU9OKQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KS0+aW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmltYWdl
UmVzb2x1dGlvblNuYXAoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJl
c29sdXRpb24oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb24oKSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmltYWdlUmVzb2x1dGlvblNvdXJjZSgpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25TbmFwKGJ1aWxkZXJTdGF0ZS5wYXJl
bnRTdHlsZSgpLmltYWdlUmVzb2x1dGlvblNuYXAoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0SW1hZ2VSZXNvbHV0aW9uKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmltYWdlUmVz
b2x1dGlvbigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsSW1hZ2VSZXNvbHV0aW9uKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdl
UmVzb2x1dGlvblNvdXJjZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdl
UmVzb2x1dGlvblNuYXAoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKFJlbmRlclN0
eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1
dGlvblNvdXJjZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRp
b25TbmFwKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb24oUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb24oKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVJbWFnZVJlc29sdXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgSW1hZ2VSZXNvbHV0aW9uU291cmNlIHNvdXJjZSA9IFJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCk7CiAgICAgSW1hZ2VSZXNv
bHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFw
KCk7CkBAIC0zNTQsMjAgKzM1NSwyMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZQogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUuZG91YmxlVmFs
dWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKTsKICAgICB9Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7CiB9CiAK
ICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZShTdHlsZVJlc29sdmVyJikgeyB9Citp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFNpemUoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbFNpemUoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+cmVzZXRQ
YWdlU2l6ZVR5cGUoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5yZXNldFBhZ2VTaXplVHlw
ZSgpOwogCiAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKICAgICAgICAgcmV0dXJu
OwpAQCAtMzkwLDcgKzM5MSw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZVNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAgICAgICAg
ICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAgaWYgKCFzZWNvbmRQcmltaXRpdmVWYWx1ZS5p
c0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENTU1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpOwor
ICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IGJ1
aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpv
b20oMS4wZik7CiAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0UHJpbWl0aXZlVmFsdWUuY29tcHV0
ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGhlaWdodCA9IHNl
Y29uZFByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7
CiAgICAgICAgIH0gZWxzZSB7CkBAIC00MTEsNyArNDEyLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1MKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAg
ICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJWkVfUkVT
T0xWRUQ7Ci0gICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAgICAgICAgIHdpZHRo
ID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGJ1aWxkZXJT
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4w
ZikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTQzNywyOSArNDM4LDI5IEBA
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVNpemUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShwYWdlU2l6
ZVR5cGUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemUoeyBXVEZNb3Zl
KHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpIH0pOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dFBhZ2VTaXplKHsgV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSB9KTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0SW5kZW50KFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdFRleHRJbmRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChMZW5ndGggeyBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRJbmRlbnQoKSB9KTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KExlbmd0aCB7IGJ1aWxkZXJTdGF0ZS5wYXJlbnRT
dHlsZSgpLnRleHRJbmRlbnQoKSB9KTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci5wYXJlbnRT
dHlsZSgpLT50ZXh0SW5kZW50TGluZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRJbmRlbnRUeXBlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEluZGVudFR5
cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudExpbmUoYnVpbGRl
clN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEluZGVudExpbmUoKSk7CisgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0VGV4dEluZGVudFR5cGUoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4
dEluZGVudFR5cGUoKSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRJbmRlbnQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0VGV4dEluZGVudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudChSZW5kZXJTdHlsZTo6aW5p
dGlhbFRleHRJbmRlbnQoKSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dElu
ZGVudExpbmUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50VHlw
ZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRUeXBlKCkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVu
dExpbmUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudFR5cGUoUmVu
ZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpKTsKICNlbmRpZgogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aE9yUGVyY2Vu
dGFnZVZhbHVlOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCkBAIC00NjksNyArNDcwLDcgQEAgaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEluZGVudChTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmUKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAgICAgaWYgKCFwcmltaXRp
dmVWYWx1ZS52YWx1ZUlEKCkpCi0gICAgICAgICAgICBsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSA9
IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBsZW5ndGhP
clBlcmNlbnRhZ2VWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZElu
dGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lv
bj4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAjaWYgRU5BQkxF
KENTUzNfVEVYVCkKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCiAgICAgICAgICAgICB0ZXh0SW5kZW50TGluZVZhbHVl
ID0gVGV4dEluZGVudExpbmU6OkVhY2hMaW5lOwpAQCAtNDgxLDEwICs0ODIsMTAgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEluZGVudChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmUKICAgICBpZiAobGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUuaXNVbmRl
ZmluZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRUZXh0SW5kZW50KFdURk1vdmUobGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KFdURk1vdmUobGVuZ3RoT3JQZXJjZW50YWdl
VmFsdWUpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VGV4dEluZGVudExpbmUodGV4dEluZGVudExpbmVWYWx1ZSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50VHlwZSh0ZXh0SW5kZW50VHlwZVZhbHVlKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50TGluZSh0ZXh0SW5kZW50TGluZVZh
bHVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZSh0ZXh0SW5k
ZW50VHlwZVZhbHVlKTsKICNlbmRpZgogfQogCkBAIC00OTMsMjkgKzQ5NCwyOSBAQCBlbnVtIEJv
cmRlckltYWdlTW9kaWZpZXJUeXBlIHsgT3V0c2V0LCBSZXBlYXQsIFNsaWNlLCBXaWR0aCB9Owog
dGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSB0eXBlLCBCb3JkZXJJbWFnZU1vZGlmaWVyVHlwZSBt
b2RpZmllcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJ
bWFnZSBpbWFnZShnZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0
Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uu
Y29weU91dHNldEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7Cisg
ICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShidWlsZGVyU3RhdGUucGFy
ZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0Ogot
ICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1
ZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2Uu
Y29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAgICAgICBp
bWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVl
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCksIGltYWdlKTsKKyAg
ICAgICAgc2V0VmFsdWUoYnVpbGRlclN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdl
dFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBp
bWFnZShnZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1v
ZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0
c2V0KExlbmd0aEJveCgwKSk7CkBAIC01MzgsNTMgKzUzOSw1MyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IGxlbmd0aEJv
eCA6IExlbmd0aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAg
IHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1
ZShidWlsZGVyU3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVl
KQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJbWFnZSBp
bWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKKyAgICAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoYnVpbGRlclN0YXRlLnN0eWxlKCkpKTsKICAgICAgICAgc3dp
dGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAgIGltYWdl
LnNldE91dHNldChzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVh
ZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KGJ1aWxkZXJTdGF0ZS5zdHls
ZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1h
cCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOworICAgICAgICAgICAg
YnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQodmFsdWUsIGlt
YWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNlKHZhbHVl
LCBpbWFnZSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBOaW5lUGll
Y2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHlsZVJlc29s
dmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAg
ICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLm1hcE5pbmVQ
aWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAg
ICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNl
dFZhbHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVuZGVyU3R5
bGUqIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29u
c3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9y
ZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1hZ2UoKTsK
KyAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS5ib3JkZXJJbWFnZSgp
IDogc3R5bGUubWFza0JveEltYWdlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgc2V0VmFs
dWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdmFsdWUpCisgICAg
c3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJ
bWFnZSYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/
IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveEltYWdlKHZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS5zZXRCb3Jk
ZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOwogICAgIH0KIH07
CiAKICNkZWZpbmUgREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKHR5cGUsIG1v
ZGlmaWVyKSBcCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdCMj
dHlwZSMjbW9kaWZpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikgXAoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXQjI3R5cGUjI21vZGlmaWVyKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9wZXJ0eUJv
cmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaGVyaXRWYWx1ZShzdHls
ZVJlc29sdmVyKTsgXAorICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUs
IG1vZGlmaWVyPjo6YXBwbHlJbmhlcml0VmFsdWUoYnVpbGRlclN0YXRlKTsgXAogfSBcCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbCMjdHlwZSMjbW9kaWZpZXIo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikgXAoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWwjI3R5cGUjI21vZGlmaWVyKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZp
ZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaXRpYWxWYWx1ZShzdHlsZVJlc29sdmVyKTsgXAor
ICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVyPjo6YXBw
bHlJbml0aWFsVmFsdWUoYnVpbGRlclN0YXRlKTsgXAogfSBcCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWUjI3R5cGUjI21vZGlmaWVyKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkgXAoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlIyN0eXBlIyNtb2RpZmllcihTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9wZXJ0eUJv
cmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseVZhbHVlKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsgXAorICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUs
IG1vZGlmaWVyPjo6YXBwbHlWYWx1ZShidWlsZGVyU3RhdGUsIHZhbHVlKTsgXAogfQogCiBERUZJ
TkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIoQm9yZGVySW1hZ2UsIE91dHNldCkKQEAg
LTU5OCwxNiArNTk5LDE2IEBAIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUihX
ZWJraXRNYXNrQm94SW1hZ2UsIFdpZHRoKQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykK
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRMaW5lSGVpZ2h0
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdExpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChMZW5n
dGggeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmxpbmVIZWlnaHQoKSB9KTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoTGVuZ3RoIHsgc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkgfSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChMZW5ndGggeyBidWlsZGVyU3RhdGUu
cGFyZW50U3R5bGUoKS5saW5lSGVpZ2h0KCkgfSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0U3BlY2lmaWVkTGluZUhlaWdodChMZW5ndGggeyBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KS5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkgfSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxMaW5lSGVp
Z2h0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0
KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChS
ZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWNpZmllZExpbmVIZWlnaHQoKSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQo
KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0U3BlY2lmaWVkTGluZUhlaWdodChSZW5k
ZXJTdHlsZTo6aW5pdGlhbFNwZWNpZmllZExpbmVIZWlnaHQoKSk7CiB9CiAKIHN0YXRpYyBpbmxp
bmUgZmxvYXQgY29tcHV0ZUJhc2VTcGVjaWZpZWRGb250U2l6ZShjb25zdCBEb2N1bWVudCYgZG9j
dW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBwZXJjZW50YWdlQXV0b3Npemlu
Z0VuYWJsZWQpCkBAIC02NTQsOSArNjU1LDkgQEAgc3RhdGljIGlubGluZSBmbG9hdCBjb21wdXRl
TGluZUhlaWdodE11bHRpcGxpZXJEdWVUb0ZvbnRTaXplKGNvbnN0IERvY3VtZW50JiBkb2MKICAg
ICByZXR1cm4gMTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewot
ICAgIE9wdGlvbmFsPExlbmd0aD4gbGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIDEpOworICAgIE9wdGlvbmFs
PExlbmd0aD4gbGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVI
ZWlnaHQoYnVpbGRlclN0YXRlLCB2YWx1ZSwgMSk7CiAgICAgaWYgKCFsaW5lSGVpZ2h0KQogICAg
ICAgICByZXR1cm47CiAKQEAgLTY2NSwxNDQgKzY2NiwxNDQgQEAgaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmUKICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gbGluZUhlaWdodC52YWx1ZSgpOwog
ICAgIGVsc2UgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGF1dG8gbXVsdGlwbGllciA9IGNvbXB1dGVM
aW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNpemUoc3R5bGVSZXNvbHZlci5kb2N1bWVudCgp
LCAqc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGF1dG8g
bXVsdGlwbGllciA9IGNvbXB1dGVMaW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNpemUoYnVp
bGRlclN0YXRlLmRvY3VtZW50KCksIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBwcmltaXRpdmVWYWx1
ZSk7CiAgICAgICAgIGlmIChtdWx0aXBsaWVyID09IDEpCiAgICAgICAgICAgICBjb21wdXRlZExp
bmVIZWlnaHQgPSBsaW5lSGVpZ2h0LnZhbHVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAg
IGNvbXB1dGVkTGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVI
ZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIG11bHRpcGxpZXIpLnZhbHVlKCk7CisgICAgICAg
ICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
aW5lSGVpZ2h0KGJ1aWxkZXJTdGF0ZSwgdmFsdWUsIG11bHRpcGxpZXIpLnZhbHVlKCk7CiAgICAg
fQogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFdURk1vdmUoY29t
cHV0ZWRMaW5lSGVpZ2h0KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZp
ZWRMaW5lSGVpZ2h0KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChXVEZNb3ZlKGNvbXB1dGVkTGluZUhlaWdodCkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFNwZWNpZmllZExpbmVIZWlnaHQoV1RGTW92ZShs
aW5lSGVpZ2h0LnZhbHVlKCkpKTsKIH0KIAogI2VuZGlmCiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0T3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91
dGxpbmVTdHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5vdXRs
aW5lU3R5bGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlSXNB
dXRvKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGUoYnVpbGRlclN0YXRlLnBhcmVu
dFN0eWxlKCkub3V0bGluZVN0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxPdXRsaW5l
U3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlSXNBdXRvKFJlbmRlclN0eWxlOjppbml0aWFs
T3V0bGluZVN0eWxlSXNBdXRvKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0
bGluZVN0eWxlKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlSXNBdXRvKFJlbmRlclN0eWxlOjppbml0aWFs
T3V0bGluZVN0eWxlSXNBdXRvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE91dGxp
bmVTdHlsZShSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlT3V0bGluZVN0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlSXNBdXRvKHByaW1pdGl2ZVZhbHVlKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShwcmltaXRpdmVWYWx1ZSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlSXNBdXRvKHByaW1pdGl2
ZVZhbHVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGUocHJpbWl0
aXZlVmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ2xpcChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKExlbmd0aCgp
LCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENsaXAo
TGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldEhhc0NsaXAoZmFsc2UpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xpcChTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byogcGFyZW50U3R5bGUgPSBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7Ci0gICAgaWYgKCFwYXJlbnRTdHlsZS0+aGFzQ2xp
cCgpKQotICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVyKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoIHsgcGFyZW50U3R5bGUtPmNs
aXBUb3AoKSB9LCBMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCkgfSwKLSAgICAgICAg
TGVuZ3RoIHsgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSB9LCBMZW5ndGggeyBwYXJlbnRTdHls
ZS0+Y2xpcExlZnQoKSB9KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0NsaXAo
dHJ1ZSk7CisgICAgYXV0byYgcGFyZW50U3R5bGUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KTsKKyAgICBpZiAoIXBhcmVudFN0eWxlLmhhc0NsaXAoKSkKKyAgICAgICAgcmV0dXJuIGFwcGx5
SW5pdGlhbENsaXAoYnVpbGRlclN0YXRlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRD
bGlwKExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBUb3AoKSB9LCBMZW5ndGggeyBwYXJlbnRTdHls
ZS5jbGlwUmlnaHQoKSB9LAorICAgICAgICBMZW5ndGggeyBwYXJlbnRTdHlsZS5jbGlwQm90dG9t
KCkgfSwgTGVuZ3RoIHsgcGFyZW50U3R5bGUuY2xpcExlZnQoKSB9KTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRIYXNDbGlwKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDbGlwKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUNsaXAoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpOwogICAgIGlmIChhdXRvKiByZWN0ID0gcHJpbWl0aXZlVmFsdWUucmVjdFZhbHVl
KCkpIHsKLSAgICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAgIGF1dG8gY29udmVyc2lvbkRh
dGEgPSBidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogICAgICAgICBh
dXRvIHRvcCA9IHJlY3QtPnRvcCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRh
KTsKICAgICAgICAgYXV0byByaWdodCA9IHJlY3QtPnJpZ2h0KCktPmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lv
bj4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRvIGJvdHRvbSA9IHJlY3QtPmJvdHRvbSgp
LT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJz
aW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgYXV0byBsZWZ0
ID0gcmVjdC0+bGVmdCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKTsKLSAg
ICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKFdURk1vdmUodG9wKSwgV1RGTW92
ZShyaWdodCksIFdURk1vdmUoYm90dG9tKSwgV1RGTW92ZShsZWZ0KSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0Q2xpcChXVEZNb3ZlKHRvcCksIFdURk1vdmUocmlnaHQpLCBXVEZNb3ZlKGJv
dHRvbSksIFdURk1vdmUobGVmdCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRI
YXNDbGlwKHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgYXBwbHlJbml0aWFsQ2xpcChz
dHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsQ2xpcChidWlsZGVyU3RhdGUpOwog
ICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Vi
a2l0TG9jYWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdExvY2FsZShT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CiAKLSAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVzY3Jp
cHRpb24oKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
bykKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldExvY2FsZShudWxsQXRvbSgpKTsKICAgICBl
bHNlCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2NhbGUocHJpbWl0aXZlVmFsdWUuc3Ry
aW5nVmFsdWUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc2V0V3JpdGluZ01vZGUoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRIYXNFeHBsaWNpdGx5U2V0V3JpdGluZ01vZGUodHJ1ZSk7CisgICAgYnVpbGRlclN0YXRl
LnNldFdyaXRpbmdNb2RlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRXcml0aW5nTW9kZSh0cnVl
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0
VGV4dE9yaWVudGF0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRl
eHRPcmllbnRhdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnNldFRleHRPcmllbnRhdGlvbihkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0VGV4dE9y
aWVudGF0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogCiAjaWYg
RU5BQkxFKFRFWFRfQVVUT1NJWklORykKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUu
dmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQoQXV0b1RleHRTaXplQWRqdXN0
bWVudCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0U2l6ZUFkanVzdChU
ZXh0U2l6ZUFkanVzdG1lbnQoQXV0b1RleHRTaXplQWRqdXN0bWVudCkpOwogICAgIGVsc2UgaWYg
KHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KE5v
VGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRl
eHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChOb1RleHRTaXplQWRqdXN0bWVudCkpOwog
ICAgIGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVz
dChUZXh0U2l6ZUFkanVzdG1lbnQocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKSk7CisgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0
bWVudChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpKTsKIAotICAgIHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5zZXRGb250RGlydHkodHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREaXJ0
eSgpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVdlYmtpdFRleHRab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtp
dFRleHRab29tKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1Zh
bHVlTm9ybWFsKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRab29tKFRl
eHRab29tOjpOb3JtYWwpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0Wm9v
bShUZXh0Wm9vbTo6Tm9ybWFsKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVSZXNldCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRU
ZXh0Wm9vbShUZXh0Wm9vbTo6UmVzZXQpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRG
b250RGlydHkodHJ1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRab29t
KFRleHRab29tOjpSZXNldCk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREaXJ0eSgpOwogfQog
CiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVDb2xvclNjaGVtZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbG9yU2NoZW1lKFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbG9yU2NoZW1lKHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0Q29s
b3JTY2hlbWUodHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29sb3JTY2hlbWUo
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoYnVpbGRlclN0YXRlLCB2
YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRDb2xv
clNjaGVtZSh0cnVlKTsKIH0KICNlbmRpZgogCiB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5PgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJveFNoYWRv
d1ZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZShT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25l
KTsKICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRyKTsKKyAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaGFkb3cobnVsbHB0cik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hh
ZG93KG51bGxwdHIpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Qm94U2hh
ZG93KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYm9vbCBpc0ZpcnN0
RW50cnkgPSB0cnVlOwogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlz
dD4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHNoYWRvd1ZhbHVlID0gZG93bmNhc3Q8Q1NTU2hh
ZG93VmFsdWU+KGl0ZW0uZ2V0KCkpOwotICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0gc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICAgICAg
YXV0byBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25E
YXRhKCk7CiAgICAgICAgIGludCB4ID0gc2hhZG93VmFsdWUueC0+Y29tcHV0ZUxlbmd0aDxpbnQ+
KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgaW50IHkgPSBzaGFkb3dWYWx1ZS55LT5jb21wdXRl
TGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBpbnQgYmx1ciA9IHNoYWRvd1Zh
bHVlLmJsdXIgPyBzaGFkb3dWYWx1ZS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lv
bkRhdGEpIDogMDsKQEAgLTgxMCw5NCArODExLDk0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
CiAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gc2hhZG93VmFsdWUuc3R5bGUgJiYg
c2hhZG93VmFsdWUuc3R5bGUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5zZXQgOiBO
b3JtYWw7CiAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICBpZiAoc2hhZG93VmFsdWUuY29s
b3IpCi0gICAgICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZl
VmFsdWUoKnNoYWRvd1ZhbHVlLmNvbG9yKTsKKyAgICAgICAgICAgIGNvbG9yID0gYnVpbGRlclN0
YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpzaGFkb3dWYWx1ZS5jb2xvcik7CiAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb2xvcigp
OworICAgICAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5jb2xvcigpOwogICAg
ICAgICBhdXRvIHNoYWRvd0RhdGEgPSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KEludFBvaW50KHgs
IHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdl
YmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJhbnNwYXJl
bnQpOwogICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KFdURk1vdmUoc2hh
ZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRU
ZXh0U2hhZG93KFdURk1vdmUoc2hhZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8g
dGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hhZG93KFdURk1vdmUoc2hh
ZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBu
b3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRC
b3hTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0
aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgaXNGaXJzdEVu
dHJ5ID0gZmFsc2U7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbFRleHRTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dFNoYWRvdyhTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dFRleHRTaGFkb3cobnVsbHB0cik7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0VGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0U2hhZG93KFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFRleHRTaGFkb3coc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0U2hh
ZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPnRleHRTaGFkb3coKSkgOiBudWxscHRyKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRUZXh0U2hhZG93KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRleHRTaGFkb3coKSA/IG1h
a2VVbmlxdWU8U2hhZG93RGF0YT4oKmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRleHRTaGFk
b3coKSkgOiBudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlVGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlUZXh0U2hhZG93
PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxD
U1NQcm9wZXJ0eVRleHRTaGFkb3c+KGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyhTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxCb3hTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3coU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Qm94U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCktPmJveFNoYWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkgOiBudWxscHRyKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRCb3hTaGFkb3coYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuYm94
U2hhZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpidWlsZGVyU3RhdGUucGFyZW50U3R5
bGUoKS5ib3hTaGFkb3coKSkgOiBudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlQm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1Zh
bHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5
Qm94U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JCb3hTaGFk
b3dWYWx1ZTxDU1NQcm9wZXJ0eUJveFNoYWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Qm94U2hh
ZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXBwbHlJbml0aWFsQm94U2hhZG93KHN0eWxlUmVzb2x2
ZXIpOworICAgIGFwcGx5SW5pdGlhbEJveFNoYWRvdyhidWlsZGVyU3RhdGUpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEJveFNoYWRvdyhT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRXZWJraXRCb3hTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIGFwcGx5SW5oZXJpdEJveFNoYWRvdyhzdHlsZVJlc29sdmVyKTsK
KyAgICBhcHBseUluaGVyaXRCb3hTaGFkb3coYnVpbGRlclN0YXRlKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93PihzdHlsZVJlc29sdmVyLCB2
YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eVdlYmtpdEJv
eFNoYWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBhdXRvIGluaXRpYWxEZXNjID0gRm9udENhc2NhZGVEZXNjcmlwdGlv
bigpOwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3VudCBmb3Ig
dGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZSB0byBub24tbW9ub3NwYWNl
LgogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKSB7CiAgICAg
ICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdv
cmRTaXplQXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRT
aXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRp
ZmllciwgZmFsc2UsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkpOworICAgICAgICAgICAgYnVp
bGRlclN0YXRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9y
S2V5d29yZChzaXplSWRlbnRpZmllciwgZmFsc2UsIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKSk7
CiAgICAgfQogICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5pc0VtcHR5KCkpCiAg
ICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhpbml0aWFsRGVzYy5mYW1pbGllcygp
KTsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERl
c2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udEZhbWlseShTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRp
b24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGF1dG8g
cGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gcGFyZW50Rm9udERlc2NyaXB0aW9u
ID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAKICAgICBm
b250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMocGFyZW50Rm9udERlc2NyaXB0aW9uLmZhbWlsaWVz
KCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50Rm9udERl
c2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5z
ZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRv
d25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogCi0gICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9u
dERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHksIHdlIHNo
b3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAgYm9vbCBvbGRGYW1pbHlVc2VkRml4
ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCk7CiAK
QEAgLTkxNiw3ICs5MTcsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUudmFsdWVJRCgpKSB7CiAgICAg
ICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKLSAgICAgICAgICAgICAgICBmYW1pbHkg
PSBzdHlsZVJlc29sdmVyLnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7CisgICAgICAg
ICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS5zdGFu
ZGFyZEZvbnRGYW1pbHkoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNh
c2UgQ1NTVmFsdWVTZXJpZjoKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBzZXJpZkZhbWlseTsK
QEAgLTk2NCwzNiArOTY1LDM2IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAKICAgICBpZiAo
Zm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlVc2VkRml4
ZWREZWZhdWx0U2l6ZSkgewogICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRpZmllciA9
IGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6
ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6
ZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUu
c2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNp
emVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIGJ1aWxkZXJTdGF0
ZS5kb2N1bWVudCgpKSk7CiAgICAgfQogCi0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSBib29s
IFN0eWxlQnVpbGRlckN1c3RvbTo6aXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBEaXNwbGF5VHlwZSBkaXNwbGF5KQoraW5saW5lIGJvb2wgU3R5bGVCdWls
ZGVyQ3VzdG9tOjppc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgRGlzcGxheVR5cGUgZGlzcGxheSkKIHsKLSAgICBpZiAoaXM8U1ZHRWxlbWVudD4o
c3R5bGVSZXNvbHZlci5lbGVtZW50KCkpICYmIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVU
eXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgaWYgKGlzPFNWR0VsZW1lbnQ+KGJ1aWxkZXJT
dGF0ZS5lbGVtZW50KCkpICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgpID09IFBz
ZXVkb0lkOjpOb25lKQogICAgICAgICByZXR1cm4gZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6SW5s
aW5lIHx8IGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2NrIHx8IGRpc3BsYXkgPT0gRGlzcGxh
eVR5cGU6Ok5vbmU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0RGlzcGxheShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBEaXNwbGF5VHlwZSBk
aXNwbGF5ID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0gICAgaWYg
KGlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICBEaXNwbGF5VHlw
ZSBkaXNwbGF5ID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZGlzcGxheSgpOworICAgIGlm
IChpc1ZhbGlkRGlzcGxheVZhbHVlKGJ1aWxkZXJTdGF0ZSwgZGlzcGxheSkpCisgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldERpc3BsYXkoZGlzcGxheSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlRGlzcGxheShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBEaXNwbGF5VHlwZSBkaXNwbGF5ID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBpZiAoaXNWYWxpZERpc3BsYXlWYWx1ZShz
dHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXREaXNwbGF5KGRpc3BsYXkpOworICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVlKGJ1aWxkZXJT
dGF0ZSwgZGlzcGxheSkpCisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldERpc3BsYXko
ZGlzcGxheSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUJhc2VsaW5lU2hpZnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVT
aGlmdChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKLSAgICBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gYnVpbGRl
clN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLmlzVmFsdWVJRCgpKSB7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFs
dWVJRCgpKSB7CkBAIC0xMDE1LDU3ICsxMDE2LDU3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUJhc2VsaW5lU2hpZnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdEFzcGVjdFJhdGlvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEFzcGVjdFJhdGlvKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlv
VHlwZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5
bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb1R5
cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRBc3BlY3RSYXRpbyhTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRXZWJraXRBc3BlY3RSYXRpbyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9UeXBlKCkg
PT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvKQorICAgIGlmIChidWlsZGVyU3RhdGUucGFyZW50U3R5
bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG8pCiAgICAgICAg
IHJldHVybjsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvVHlwZSgpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuYXNwZWN0
UmF0aW9UeXBlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvRGVu
b21pbmF0b3IoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuYXNwZWN0UmF0aW9EZW5vbWluYXRv
cigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihi
dWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0
aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0aW8oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
aWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCiAgICAgICAg
IGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tRGltZW5zaW9ucykK
LSAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
VHlwZShBc3BlY3RSYXRpb1R5cGU6OkZyb21EaW1lbnNpb25zKTsKKyAgICAgICAgICAgIHJldHVy
biBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBl
OjpGcm9tRGltZW5zaW9ucyk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJvbUludHJp
bnNpYyk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0
UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJvbUludHJpbnNpYyk7CiAKICAgICAgICAgQVNT
RVJUKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAgICAgICBy
ZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0
aW9UeXBlOjpBdXRvKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFz
cGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkF1dG8pOwogICAgIH0KIAogICAgIGF1dG8m
IGFzcGVjdFJhdGlvVmFsdWUgPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPih2YWx1ZSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0
aW9UeXBlOjpTcGVjaWZpZWQpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLmRlbm9taW5hdG9yVmFsdWUoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RS
YXRpb1ZhbHVlLm51bWVyYXRvclZhbHVlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OlNwZWNpZmllZCk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVl
LmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0
UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5udW1lcmF0b3JWYWx1ZSgpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1w
aGFzaXNTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lz
RmlsbCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmso
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0ZpbGwoKSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNp
c0N1c3RvbU1hcmsoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0
VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHlsZVJlc29s
dmVyLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0RW1w
aGFzaXNDdXN0b21NYXJrKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBo
YXNpc0ZpbGwoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEVtcGhhc2lzRmlsbCgpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpLnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KS50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgbGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpOwpAQCAtMTA3NCwzOCArMTA3NSwzOCBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZVJl
c29sdmVyJgogICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAgICAgICAgICBD
U1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRl
bS5nZXQoKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlRmls
bGVkIHx8IHZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pCi0gICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHZhbHVlKTsKKyAgICAg
ICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKHZhbHVl
KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsodmFsdWUpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsodmFsdWUpOwogICAgICAgICB9Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxs
QXRvbSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyayhudWxsQXRvbSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRF
bXBoYXNpc01hcms6OkN1c3RvbSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFz
aXNGaWxsOjpGaWxsZWQpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1w
aGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcms6OkN1c3RvbSk7CisgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUuc3RyaW5n
VmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20oKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSgpKTsKIAog
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgcHJp
bWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFsdWUpOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhh
c2lzTWFyazo6QXV0byk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBo
YXNpc0ZpbGwocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcms6OkF1dG8pOwogICAgIH0gZWxzZSB7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0
RW1waGFzaXNGaWxsOjpGaWxsZWQpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRFbXBoYXNpc01hcmsocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCk7Cisg
ICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsocHJpbWl0aXZl
VmFsdWUpOwogICAgIH0KIH0KIAogdGVtcGxhdGUgPFN0eWxlQnVpbGRlckN1c3RvbTo6Q291bnRl
ckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvJiBtYXAgPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChhdXRvJiBr
ZXlWYWx1ZSA6IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCkpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CisgICAgYXV0byYgbWFwID0gYnVp
bGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBmb3IgKGF1
dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KGJ1aWxkZXJTdGF0ZS5wYXJl
bnRTdHlsZSgpKS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CiAgICAgICAgIGF1dG8mIGRp
cmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRlckRpcmVjdGl2ZXMgeyB9KS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVzZXQpCiAg
ICAgICAgICAgICBkaXJlY3RpdmVzLnJlc2V0VmFsdWUgPSBrZXlWYWx1ZS52YWx1ZS5yZXNldFZh
bHVlOwpAQCAtMTExNSwxNCArMTExNiwxNCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcgogfQog
CiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoYXZpb3IgY291bnRlckJl
aGF2aW9yPgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRl
cihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGJvb2wgc2V0Q291
bnRlckluY3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhhdmlvciA9PSBJbmNyZW1lbnQgJiYgaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAKICAgICBpZiAoIWlzPENTU1ZhbHVl
TGlzdD4odmFsdWUpICYmICFzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQogICAgICAgICByZXR1
cm47CiAKLSAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgQ291bnRlckRpcmVjdGl2ZU1hcCYg
bWFwID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKICAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbWFwKSB7CiAgICAgICAgIGlmIChjb3VudGVyQmVoYXZp
b3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZS5yZXNldFZhbHVlID0gV1RG
OjpudWxsb3B0OwpAQCAtMTE0NSw4NCArMTE0Niw4NCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bENvdW50ZXJJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVySW5jcmVtZW50KFN0eWxlOjpCdWlsZGVy
U3RhdGUmKSB7IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRDb3VudGVySW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJJbmNyZW1lbnQoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGFwcGx5SW5oZXJpdENvdW50
ZXI8SW5jcmVtZW50PihzdHlsZVJlc29sdmVyKTsKKyAgICBhcHBseUluaGVyaXRDb3VudGVyPElu
Y3JlbWVudD4oYnVpbGRlclN0YXRlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb3VudGVySW5jcmVtZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGFwcGx5VmFsdWVDb3VudGVyPEluY3JlbWVudD4o
c3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VmFsdWVDb3VudGVyPEluY3JlbWVudD4o
YnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsQ291bnRlclJlc2V0KFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlclJlc2V0KFN0eWxlOjpC
dWlsZGVyU3RhdGUmKSB7IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRDb3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlclJlc2V0KFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhcHBseUluaGVyaXRDb3VudGVy
PFJlc2V0PihzdHlsZVJlc29sdmVyKTsKKyAgICBhcHBseUluaGVyaXRDb3VudGVyPFJlc2V0Pihi
dWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVDb3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRl
clJlc2V0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogewotICAgIGFwcGx5VmFsdWVDb3VudGVyPFJlc2V0PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7
CisgICAgYXBwbHlWYWx1ZUNvdW50ZXI8UmVzZXQ+KGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1cnNvcihTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaXRpYWxDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQog
ewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3Io
KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuY2xlYXJDdXJzb3JMaXN0KCk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vyc29yKCkp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1cnNv
cihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmN1cnNvcnMoKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHls
ZSgpLmN1cnNvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3JMaXN0KGJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmN1cnNvcnMoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1cnNvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckN1cnNvckxp
c3QoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckN1cnNvckxpc3QoKTsKICAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBDdXJzb3JUeXBlIGN1
cnNvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGlmIChz
dHlsZVJlc29sdmVyLnN0eWxlKCktPmN1cnNvcigpICE9IGN1cnNvcikKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKGN1cnNvcik7CisgICAgICAgIGlmIChidWls
ZGVyU3RhdGUuc3R5bGUoKS5jdXJzb3IoKSAhPSBjdXJzb3IpCisgICAgICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoY3Vyc29yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
IAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKEN1cnNvclR5cGU6OkF1dG8p
OworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEN1cnNvcihDdXJzb3JUeXBlOjpBdXRvKTsK
ICAgICBhdXRvJiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAgICAgZm9y
IChhdXRvJiBpdGVtIDogbGlzdCkgewogICAgICAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1hZ2VWYWx1
ZT4oaXRlbSkpIHsKICAgICAgICAgICAgIGF1dG8mIGltYWdlID0gZG93bmNhc3Q8Q1NTQ3Vyc29y
SW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UoaW1hZ2UpLCBpbWFnZS5ob3RT
cG90KCkpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuYWRkQ3Vyc29yKGJ1aWxk
ZXJTdGF0ZS5jcmVhdGVTdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDdXJzb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsK
KyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoaXRl
bS5wdHIoKSA9PSBsaXN0Lml0ZW0obGlzdC5sZW5ndGgoKSAtIDEpLCAiQ3Vyc29yIElEIGZhbGxi
YWNrIHNob3VsZCBhbHdheXMgYmUgbGFzdCBpbiB0aGUgbGlzdCIpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bEZpbGwoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRmlsbChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFj
Y2Vzc1NWR1N0eWxlKCk7Ci0gICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KFNWR1JlbmRlclN0eWxl
Ojppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWlu
dENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9IGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0RmlsbFBh
aW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBh
aW50VXJpKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYnVp
bGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0RmlsbChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aGVyaXRGaWxsKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRv
JiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKLSAg
ICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+c3Zn
U3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUuZmlsbFBh
aW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHls
ZS5maWxsUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwor
ICAgIGF1dG8mIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUo
KTsKKyAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgp
LnN2Z1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0eWxlLmZp
bGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuZmlsbFBhaW50Q29sb3IoKSwgc3ZnUGFyZW50
U3R5bGUuZmlsbFBhaW50VXJpKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFy
U3R5bGUoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CiAKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRmlsbChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0g
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1N0
eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKICAgICBjb25zdCBh
dXRvKiBsb2NhbFZhbHVlID0gdmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpID8gJmRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgOiBudWxscHRyOwogICAgIFN0cmluZyB1cmw7CiAgICAg
aWYgKHZhbHVlLmlzVmFsdWVMaXN0KCkpIHsKQEAgLTEyNDIsMzEgKzEyNDMsMzEgQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRmlsbChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1MKICAgICB9IGVsc2UgaWYgKGxvY2FsVmFsdWUtPmlzVmFsdWVJRCgp
ICYmIGxvY2FsVmFsdWUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHBhaW50
VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWludFR5cGU6Ok5vbmUgOiBTVkdQYWludFR5cGU6
OlVSSU5vbmU7CiAgICAgZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxW
YWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAgIGNvbG9y
ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb2xvcigpOworICAgICAgICBjb2xvciA9IGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7CiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5
KCkgPyBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJQ3VycmVu
dENvbG9yOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZSgqbG9jYWxWYWx1ZSk7CisgICAgICAgIGNvbG9yID0gYnVpbGRl
clN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpsb2NhbFZhbHVlKTsKICAgICAgICAgcGFp
bnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IgOiBTVkdQYWlu
dFR5cGU6OlVSSVJHQkNvbG9yOwogICAgIH0KLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQocGFp
bnRUeXBlLCBjb2xvciwgdXJsLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CisgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwgYnVpbGRl
clN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTdHJva2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsU3Ryb2tlKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBTVkdSZW5kZXJTdHlsZSYg
c3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7Ci0gICAg
c3ZnU3R5bGUuc2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWlu
dFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNWR1Jl
bmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5hcHBseVBy
b3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNp
dGVkTGlua1N0eWxlKCkpOworICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0U3Ryb2tlUGFp
bnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ry
b2tlUGFpbnRVcmkoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgp
LCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRTdHJva2UoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0U3Ryb2tlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5
bGUoKTsKLSAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChzdmdQYXJlbnRT
dHlsZS5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRDb2xvcigp
LCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0
ZWRMaW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUo
KS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gYnVpbGRlclN0
YXRlLnBhcmVudFN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWlu
dChzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuc3Ryb2tl
UGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFVyaSgpLCBidWlsZGVyU3Rh
dGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
U3Ryb2tlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NT
VkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNj
ZXNzU1ZHU3R5bGUoKTsKICAgICBjb25zdCBhdXRvKiBsb2NhbFZhbHVlID0gdmFsdWUuaXNQcmlt
aXRpdmVWYWx1ZSgpID8gJmRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgOiBudWxs
cHRyOwogICAgIFN0cmluZyB1cmw7CiAgICAgaWYgKHZhbHVlLmlzVmFsdWVMaXN0KCkpIHsKQEAg
LTEyODYsMzIgKzEyODcsMzIgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlU3Ryb2tlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEMKICAgICB9IGVsc2Ug
aWYgKGxvY2FsVmFsdWUtPmlzVmFsdWVJRCgpICYmIGxvY2FsVmFsdWUtPnZhbHVlSUQoKSA9PSBD
U1NWYWx1ZU5vbmUpCiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWlu
dFR5cGU6Ok5vbmUgOiBTVkdQYWludFR5cGU6OlVSSU5vbmU7CiAgICAgZWxzZSBpZiAobG9jYWxW
YWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQ3Vy
cmVudGNvbG9yKSB7Ci0gICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb2xv
cigpOworICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7CiAgICAg
ICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xv
ciA6IFNWR1BhaW50VHlwZTo6VVJJQ3VycmVudENvbG9yOwogICAgIH0gZWxzZSB7Ci0gICAgICAg
IGNvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqbG9jYWxWYWx1
ZSk7CisgICAgICAgIGNvbG9yID0gYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KCpsb2NhbFZhbHVlKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1Bh
aW50VHlwZTo6UkdCQ29sb3IgOiBTVkdQYWludFR5cGU6OlVSSVJHQkNvbG9yOwogICAgIH0KLSAg
ICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChwYWludFR5cGUsIGNvbG9yLCB1cmwsIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWlu
dChwYWludFR5cGUsIGNvbG9yLCB1cmwsIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUo
KSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ29u
dGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb250ZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvbnRlbnQoU3R5bGVSZXNvbHZlciYp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvbnRlbnQoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYpCiB7CiAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdpbGwgYmUg
cG9zc2libGUgdG8gaW5oZXJpdCBjb250ZW50LiBJbiBDU1MyIGl0IGlzIG5vdC4gVGhpcwogICAg
IC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5lZWRzIHRv
IGJlIHN1cHBvcnRlZC4KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGNvbnN0IGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAg
ICAgICAgQVNTRVJUX1VOVVNFRChwcmltaXRpdmVWYWx1ZSwgcHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9ybWFsIHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NW
YWx1ZU5vbmUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29udGVudCgp
OworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckNvbnRlbnQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApAQCAtMTMxOSwxNyArMTMyMCwxNyBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsCiAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1
ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0pKSB7CiAg
ICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbSkpCi0gICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6
OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgpKS5ncmFkaWVudFdp
dGhTdHlsZXNSZXNvbHZlZChzdHlsZVJlc29sdmVyKSksIGRpZFNldCk7CisgICAgICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpj
cmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGllbnRXaXRo
U3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKSkpLCBkaWRTZXQpOwog
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VH
ZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRl
KGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8Q1NTSW1h
Z2VTZXRWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAg
ICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6
OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAg
ICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpj
cmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKICAgICAg
ICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpA
QCAtMTMzOSwyMCArMTM0MCwyMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAKICAgICAgICAg
YXV0byYgY29udGVudFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0
KCkpOwogICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAgICAgICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUuc3RyaW5nVmFs
dWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKICAg
ICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVl
LmlzQXR0cigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNlIGJlIHNw
ZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCi0gICAgICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNBdHRyQ29udGVudCgpOworICAgICAgICAgICAg
aWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpOb25lKQor
ICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0F0dHJDb250ZW50KCk7
CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHls
ZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldEhhc0F0dHJDb250ZW50KCk7Cisg
ICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KGJ1aWxkZXJTdGF0ZS5wYXJl
bnRTdHlsZSgpKS5zZXRIYXNBdHRyQ29udGVudCgpOwogICAgICAgICAgICAgUXVhbGlmaWVkTmFt
ZSBhdHRyKG51bGxBdG9tKCksIGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgbnVs
bEF0b20oKSk7Ci0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IHN0eWxlUmVz
b2x2ZXIuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6
IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlID0gYnVpbGRlclN0YXRlLmVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoYXR0cik7CisgICAgICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgpID8gZW1w
dHlBdG9tKCkgOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0cmlidXRl
IHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlLgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5ydWxl
U2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZVJlc29sdmVyKCkucnVs
ZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRBdHRyaWJ1dGUoYXR0ci5s
b2NhbE5hbWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLmlzQ291bnRlcigp
KSB7CiAgICAgICAgICAgICBhdXRvKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUuY291bnRl
clZhbHVlKCk7CiAgICAgICAgICAgICBMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUgPSBMaXN0
U3R5bGVUeXBlOjpOb25lOwpAQCAtMTM2MCwyNCArMTM2MSwyNCBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsCiAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVOb25lKQog
ICAgICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxMaXN0U3R5bGVUeXBl
PihsaXN0U3R5bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICBhdXRvIGNvdW50
ZXIgPSBtYWtlVW5pcXVlPENvdW50ZXJDb250ZW50Pihjb3VudGVyVmFsdWUtPmlkZW50aWZpZXIo
KSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3IoKSk7Ci0gICAgICAgICAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoV1RGTW92ZShjb3VudGVyKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoV1RGTW92
ZShjb3VudGVyKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpIHsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1b3RlVHlwZTo6T3BlblF1b3RlLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoUXVv
dGVUeXBlOjpPcGVuUXVvdGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1
ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVDbG9z
ZVF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVu
dChRdW90ZVR5cGU6OkNsb3NlUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6OkNsb3NlUXVvdGUsIGRpZFNldCk7
CiAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb09wZW5RdW90ZSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50
KFF1b3RlVHlwZTo6Tm9PcGVuUXVvdGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRDb250ZW50KFF1b3RlVHlwZTo6Tm9DbG9zZVF1b3RlLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb0Nsb3NlUXVv
dGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg3LDEyNyArMTM4OCwxMjcg
QEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVudChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgICAgICB9CiAgICAgfQogICAgIGlmICghZGlk
U2V0KQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29udGVudCgpOworICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckNvbnRlbnQoKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudExpZ2F0dXJlcyhT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudExpZ2F0dXJlcyhTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29t
bW9uTGlnYXR1cmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFu
dENvbW1vbkxpZ2F0dXJlcygpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2Ny
ZXRpb25hcnlMaWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcygpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCkudmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoYnVpbGRlclN0
YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb21tb25MaWdhdHVyZXMoKSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0
dXJlcygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVy
ZXMoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRIaXN0b3JpY2Fs
TGlnYXR1cmVzKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXMoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb250
ZXh0dWFsQWx0ZXJuYXRlcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3Jp
cHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbW1vbkxpZ2F0dXJl
cyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRp
b24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERl
c2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Q1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxk
ZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBhdXRvIHZhcmlhbnRMaWdhdHVyZXMgPSBl
eHRyYWN0Rm9udFZhcmlhbnRMaWdhdHVyZXModmFsdWUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKHZhcmlhbnRMaWdhdHVyZXMuY29tbW9uTGlnYXR1cmVz
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMo
dmFyaWFudExpZ2F0dXJlcy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXModmFyaWFudExpZ2F0dXJlcy5oaXN0
b3JpY2FsTGlnYXR1cmVzKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1
YWxBbHRlcm5hdGVzKHZhcmlhbnRMaWdhdHVyZXMuY29udGV4dHVhbEFsdGVybmF0ZXMpOwotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudE51bWVy
aWMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERl
c2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250
RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZpZ3VyZSgpKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkudmFyaWFudE51bWVyaWNTcGFjaW5nKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0
aW9uKCkudmFyaWFudE51bWVyaWNGcmFjdGlvbigpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNPcmRpbmFsKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9u
KCkudmFyaWFudE51bWVyaWNPcmRpbmFsKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY1NsYXNoZWRaZXJvKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9u
KCkudmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGF1dG8gZm9udERl
c2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShidWlsZGVyU3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGaWd1cmUoKSk7CisgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0
aW9uKCkudmFyaWFudE51bWVyaWNTcGFjaW5nKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY09yZGluYWwoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnROdW1lcmljT3JkaW5hbCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51
bWVyaWNTbGFzaGVkWmVybyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybygpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnROdW1lcmljKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNj
cmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnRE
ZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3Vy
ZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5nOjpOb3Jt
YWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKEZvbnRW
YXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRW
YXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9ybWFsKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhGb250VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0
ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnROdW1lcmlj
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50TnVtZXJpYyhTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgYXV0byB2YXJpYW50TnVtZXJpYyA9IGV4dHJhY3RGb250VmFyaWFudE51bWVyaWModmFs
dWUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZSh2YXJpYW50
TnVtZXJpYy5maWd1cmUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1Nw
YWNpbmcodmFyaWFudE51bWVyaWMuc3BhY2luZyk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnROdW1lcmljRnJhY3Rpb24odmFyaWFudE51bWVyaWMuZnJhY3Rpb24pOwogICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwodmFyaWFudE51bWVyaWMub3JkaW5h
bCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU2xhc2hlZFplcm8odmFy
aWFudE51bWVyaWMuc2xhc2hlZFplcm8pOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50RWFzdEFzaWFuKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50RWFzdEFzaWFuKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0
QXNpYW5WYXJpYW50KHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0
QXNpYW5XaWR0aChzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRF
YXN0QXNpYW5XaWR0aCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
blJ1Ynkoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFz
aWFuUnVieSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvbnREZXNjcmlwdGlvbikpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0
YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFz
dEFzaWFuVmFyaWFudChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFu
dEVhc3RBc2lhblZhcmlhbnQoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0
QXNpYW5XaWR0aChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVh
c3RBc2lhbldpZHRoKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFu
UnVieShidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVhc3RBc2lh
blJ1YnkoKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJp
YW50RWFzdEFzaWFuKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KEZvbnRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudEVhc3RBc2lhbldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1hbCk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJpYW50RWFz
dEFzaWFuUnVieTo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVz
Y3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1
dG8gdmFyaWFudEVhc3RBc2lhbiA9IGV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbih2YWx1ZSk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KHZhcmlhbnRF
YXN0QXNpYW4udmFyaWFudCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNp
YW5XaWR0aCh2YXJpYW50RWFzdEFzaWFuLndpZHRoKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudEVhc3RBc2lhblJ1YnkodmFyaWFudEVhc3RBc2lhbi5ydWJ5KTsKLSAgICBzdHlsZVJl
c29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAg
IGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6Zm9udFNp
emVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZh
dWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgZmxv
YXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgp
KTsKIAogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0pOwotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRp
b24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUpCiB7Ci0gICAgY29uc3QgYXV0byYgcGFyZW50Rm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBjb25z
dCBhdXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9hdCBzaXplID0gcGFyZW50Rm9udERlc2NyaXB0
aW9uLnNwZWNpZmllZFNpemUoKTsKIAogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZv
bnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRl
LnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdv
cmRTaXplKHBhcmVudEZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpKTsKLSAgICBzdHlsZVJl
c29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBi
dWlsZGVyU3RhdGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAgICBidWls
ZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9
CiAKIC8vIFdoZW4gdGhlIENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMgZnVuY3Rp
b24gd2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZApAQCAtMTUyNyw1OSAr
MTUyOCw1MyBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpzbWFsbGVyRm9udFNp
emUoZmxvYXQgc2l6ZSkKICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiB9CiAKLWlubGluZSBmbG9h
dCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0
b206OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlKQogewotICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnJ1YnlQb3Np
dGlvbigpICE9IFJ1YnlQb3NpdGlvbjo6SW50ZXJDaGFyYWN0ZXIpCisgICAgaWYgKGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnJ1YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlvbjo6SW50ZXJDaGFyYWN0
ZXIpCiAgICAgICAgIHJldHVybiAwLjVmOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaGFjayBpcyB0
byBlbnN1cmUgdG9uZSBtYXJrcyBhcmUgdGhlIHNhbWUgc2l6ZSBhcwogICAgIC8vIHRoZSBib3Bv
bW9mby4gVGhpcyBjb2RlIHdpbGwgZ28gYXdheSBpZiB3ZSBtYWtlIGEgc3BlY2lhbCByZW5kZXJl
cgogICAgIC8vIGZvciB0aGUgdG9uZSBtYXJrcyBldmVudHVhbGx5LgotICAgIGlmIChhdXRvKiBl
bGVtZW50ID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmVsZW1lbnQoKSkgewotICAgICAgICBmb3Ig
KGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPEhUTUxFbGVtZW50PigqZWxlbWVudCkp
IHsKLSAgICAgICAgICAgIGlmIChhbmNlc3Rvci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6cnRUYWcp
KQotICAgICAgICAgICAgICAgIHJldHVybiAxLjBmOwotICAgICAgICB9CisgICAgZm9yIChhdXRv
JiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxIVE1MRWxlbWVudD4oYnVpbGRlclN0YXRlLmVs
ZW1lbnQoKSkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpy
dFRhZykpCisgICAgICAgICAgICByZXR1cm4gMS4wZjsKICAgICB9CiAgICAgcmV0dXJuIDAuMjVm
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRT
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250U3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5m
b250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0
ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGljKEZvbnRD
YXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxJdGFsaWMoKSk7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldEZvbnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZvbnRTdHls
ZUF4aXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Rm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRTdHlsZShT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRJdGFsaWMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5pdGFs
aWMoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoc3R5bGVSZXNvbHZl
ci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAg
YXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkuaXRhbGljKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlz
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRp
b24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9u
dFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTdHlsZShTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRv
JiBmb250U3R5bGVWYWx1ZSA9IGRvd25jYXN0PENTU0ZvbnRTdHlsZVZhbHVlPih2YWx1ZSk7Ci0g
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlv
bigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlKGZvbnRTdHlsZVZhbHVlKSk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoZm9udFN0eWxlVmFsdWUuZm9udFN0eWxlVmFsdWUt
PnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUl0YWxpYyA/IEZvbnRTdHlsZUF4aXM6Oml0YWwgOiBGb250
U3R5bGVBeGlzOjpzbG50KTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRm9udFNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
YnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0
aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKIAotICAg
IGZsb2F0IHBhcmVudFNpemUgPSAwOwotICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBm
YWxzZTsKLSAgICBpZiAoYXV0byogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCkpIHsKLSAgICAgICAgcGFyZW50U2l6ZSA9IHBhcmVudFN0eWxlLT5mb250RGVzY3JpcHRp
b24oKS5zcGVjaWZpZWRTaXplKCk7Ci0gICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXplID0gcGFy
ZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7Ci0gICAgfQorICAg
IGZsb2F0IHBhcmVudFNpemUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250RGVzY3Jp
cHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9
IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVT
aXplKCk7CiAKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSk7CiAgICAgZmxvYXQgc2l6ZTsKQEAgLTE1OTYsNyArMTU5MSw3IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6CiAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0WHh4
TGFyZ2U6Ci0gICAgICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChpZGVu
dCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNvbHZlci5k
b2N1bWVudCgpKTsKKyAgICAgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3Jk
KGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBidWlsZGVyU3Rh
dGUuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emVGcm9tSWRlbnRpZmllcihpZGVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZUxhcmdlcjoKQEAgLTE2MDYsNyArMTYwMSw3IEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsCiAgICAgICAgICAgICBzaXplID0gc21hbGxlckZvbnRTaXplKHBhcmVudFNpemUpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRSdWJ5VGV4dDoK
LSAgICAgICAgICAgIHNpemUgPSBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKHN0eWxl
UmVzb2x2ZXIpICogcGFyZW50U2l6ZTsKKyAgICAgICAgICAgIHNpemUgPSBkZXRlcm1pbmVSdWJ5
VGV4dFNpemVNdWx0aXBsaWVyKGJ1aWxkZXJTdGF0ZSkgKiBwYXJlbnRTaXplOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjE0
LDEzICsxNjA5LDEzIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgfSBlbHNlIHsKICAg
ICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJzb2x1dGVT
aXplIHx8ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZlVmFsdWUu
aXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNM
ZW5ndGgoKSkgewotICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5n
dGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5wYXJlbnRT
dHlsZSgpLCBzdHlsZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNvbHZlci5k
b2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1
ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNpemUgPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCZidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSwgJmJ1aWxkZXJTdGF0ZS5yb290RWxlbWVudFN0
eWxlKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkp
OworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5zdGF0ZSgpLnNldEZv
bnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFn
ZUxlbmd0aCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRh
Z2UoKSkKICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpICog
cGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
Q2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IGF1
dG8mIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKTsKLSAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgcGFy
ZW50Q29udmVyc2lvbkRhdGEgeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCksIGNvbnZlcnNp
b25EYXRhLnJvb3RTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucmVuZGVyVmlldygp
LCAxLjBmLCB0cnVlIH07CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb252ZXJzaW9uRGF0YSA9
IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAgICAgICBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHBhcmVudENvbnZlcnNpb25EYXRhIHsgJmJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLCBjb252ZXJzaW9uRGF0YS5yb290U3R5bGUoKSwgYnVpbGRlclN0
YXRlLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlIH07CiAgICAgICAgICAgICBz
aXplID0gcHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0aW9uVmFs
dWUocGFyZW50Q29udmVyc2lvbkRhdGEpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAgICAgICAg
fSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjI5LDI1ICsxNjI0LDI1IEBAIGlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAK
LSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc3RkOjptaW4o
bWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRl
LnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc3RkOjptaW4obWF4aW11bUFsbG93ZWRGb250
U2l6ZSwgc2l6ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaXRpYWxHcmlkVGVtcGxhdGVBcmVhcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxHcmlkVGVt
cGxhdGVBcmVhcyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKFJlbmRlclN0eWxlOjppbml0aWFs
TmFtZWRHcmlkQXJlYSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3Jp
ZEFyZWFSb3dDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3VudCgpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChS
ZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3VudCgpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlk
QXJlYSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhUm93Q291
bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQoKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KFJlbmRlclN0eWxlOjpp
bml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KS0+bmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
bmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dE5hbWVkR3JpZEFyZWEoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQXJlYSgp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChidWlsZGVyU3Rh
dGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUFyZWFzKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAt
MTY1NywxMDggKzE2NTIsMTA4IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxlCiAgICAgYXV0byYg
Z3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFyZWFzVmFs
dWU+KHZhbHVlKTsKICAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuZXdOYW1lZEdyaWRBcmVh
cyA9IGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKTsKIAotICAgIE5hbWVkR3Jp
ZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5u
YW1lZEdyaWRDb2x1bW5MaW5lcygpOwotICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZFJv
d0xpbmVzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpOworICAg
IE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gYnVpbGRlclN0YXRlLnN0
eWxlKCkubmFtZWRHcmlkQ29sdW1uTGluZXMoKTsKKyAgICBOYW1lZEdyaWRMaW5lc01hcCBuYW1l
ZEdyaWRSb3dMaW5lcyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLm5hbWVkR3JpZFJvd0xpbmVzKCk7
CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3JpZExpbmVz
RnJvbUdyaWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdyaWRDb2x1bW5MaW5lcywgRm9y
Q29sdW1ucyk7CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVk
R3JpZExpbmVzRnJvbUdyaWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdyaWRSb3dMaW5l
cywgRm9yUm93cyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRDb2x1
bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRSb3dMaW5lcyk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQ29sdW1uTGluZXMobmFtZWRHcmlkQ29sdW1uTGluZXMp
OworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVkR3Jp
ZFJvd0xpbmVzKTsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJl
YShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFs
dWUucm93Q291bnQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRB
cmVhQ29sdW1uQ291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jb2x1bW5Db3VudCgpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFz
VmFsdWUuZ3JpZEFyZWFNYXAoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRH
cmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUucm93Q291bnQoKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdyaWRUZW1w
bGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEdyaWRDb2x1bW5zKFJlbmRlclN0
eWxlOjppbml0aWFsR3JpZENvbHVtbnMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZENvbHVt
bkxpbmVzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3JkZXJlZE5hbWVkR3Jp
ZENvbHVtbkxpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZENvbHVtbkxp
bmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEdyaWRDb2x1bW5zKFJlbmRlclN0
eWxlOjppbml0aWFsR3JpZENvbHVtbnMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
TmFtZWRHcmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRDb2x1bW5M
aW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkQ29s
dW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMo
KSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3Jp
ZFRlbXBsYXRlQ29sdW1ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEdyaWRDb2x1bW5zKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Z3JpZENv
bHVtbnMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRDb2x1bW5M
aW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxpbmVzKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3JkZXJlZE5hbWVkR3JpZENvbHVtbkxp
bmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+b3JkZXJlZE5hbWVkR3JpZENvbHVtbkxp
bmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEdyaWRDb2x1bW5zKGJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLmdyaWRDb2x1bW5zKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm5h
bWVkR3JpZENvbHVtbkxpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE9yZGVy
ZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5vcmRlcmVk
TmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CiB9CiAKICNkZWZpbmUgU0VUX1RSQUNLU19EQVRBKHRy
YWNrc0RhdGEsIHN0eWxlLCBUcmFja1R5cGUpIFwKLSAgICBzdHlsZS0+c2V0R3JpZCMjVHJhY2tU
eXBlIyNzKHRyYWNrc0RhdGEubV90cmFja1NpemVzKTsgXAotICAgIHN0eWxlLT5zZXROYW1lZEdy
aWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzKTsgXAotICAg
IHN0eWxlLT5zZXRPcmRlcmVkTmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEu
bV9vcmRlcmVkTmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRvUmVwZWF0
IyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzKTsgXAotICAg
IHN0eWxlLT5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9pbnQodHJh
Y2tzRGF0YS5tX2F1dG9SZXBlYXRJbnNlcnRpb25Qb2ludCk7IFwKLSAgICBzdHlsZS0+c2V0QXV0
b1JlcGVhdE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVh
dE5hbWVkR3JpZExpbmVzKTsgXAotICAgIHN0eWxlLT5zZXRBdXRvUmVwZWF0T3JkZXJlZE5hbWVk
R3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdE9yZGVyZWROYW1l
ZEdyaWRMaW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMj
c1R5cGUodHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUeXBlKTsgXAotICAgIHN0eWxlLT5zZXRHcmlk
QXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9pbnQodHJhY2tzRGF0YS5tX2F1dG9S
ZXBlYXRJbnNlcnRpb25Qb2ludCk7Ci0KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQorICAgIHN0eWxlLnNldEdyaWQjI1RyYWNrVHlwZSMjcyh0cmFj
a3NEYXRhLm1fdHJhY2tTaXplcyk7IFwKKyAgICBzdHlsZS5zZXROYW1lZEdyaWQjI1RyYWNrVHlw
ZSMjTGluZXModHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzKTsgXAorICAgIHN0eWxlLnNldE9y
ZGVyZWROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX29yZGVyZWROYW1l
ZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNz
KHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcyk7IFwKKyAgICBzdHlsZS5zZXRHcmlk
QXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9pbnQodHJhY2tzRGF0YS5tX2F1dG9S
ZXBlYXRJbnNlcnRpb25Qb2ludCk7IFwKKyAgICBzdHlsZS5zZXRBdXRvUmVwZWF0TmFtZWRHcmlk
IyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0TmFtZWRHcmlkTGluZXMp
OyBcCisgICAgc3R5bGUuc2V0QXV0b1JlcGVhdE9yZGVyZWROYW1lZEdyaWQjI1RyYWNrVHlwZSMj
TGluZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkTGluZXMpOyBcCisg
ICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjc1R5cGUodHJhY2tzRGF0YS5t
X2F1dG9SZXBlYXRUeXBlKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5
cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50
KTsKKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBs
YXRlQ29sdW1ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OlRyYWNrc0RhdGEgdHJhY2tzRGF0
YTsKLSAgICBpZiAoIVN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdCh2
YWx1ZSwgdHJhY2tzRGF0YSwgc3R5bGVSZXNvbHZlcikpCisgICAgaWYgKCFTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIGJ1aWxkZXJT
dGF0ZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1l
ZEdyaWRBcmVhcyA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgpOworICAg
IGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gYnVpbGRlclN0YXRlLnN0
eWxlKCkubmFtZWRHcmlkQXJlYSgpOwogICAgIGlmICghbmFtZWRHcmlkQXJlYXMuaXNFbXB0eSgp
KQogICAgICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlk
TGluZXNGcm9tR3JpZEFyZWEobmFtZWRHcmlkQXJlYXMsIHRyYWNrc0RhdGEubV9uYW1lZEdyaWRM
aW5lcywgRm9yQ29sdW1ucyk7CiAKLSAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLCBDb2x1bW4pOworICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NE
YXRhLCBidWlsZGVyU3RhdGUuc3R5bGUoKSwgQ29sdW1uKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZFJvd3MoUmVuZGVyU3R5bGU6
OmluaXRpYWxHcmlkUm93cygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVk
R3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkUm93TGluZXMoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoUmVu
ZGVyU3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0R3JpZFJvd3MoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkUm93cygp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJT
dHlsZTo6aW5pdGlhbE5hbWVkR3JpZFJvd0xpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE9yZGVy
ZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVSb3dzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEdyaWRU
ZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZFJvd3Moc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5ncmlkUm93cygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3Jp
ZFJvd0xpbmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+bmFtZWRHcmlkUm93TGluZXMo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGlu
ZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5vcmRlcmVkTmFtZWRHcmlkUm93TGluZXMo
KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0R3JpZFJvd3MoYnVpbGRlclN0YXRlLnBh
cmVudFN0eWxlKCkuZ3JpZFJvd3MoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFt
ZWRHcmlkUm93TGluZXMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkUm93TGlu
ZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3JpZFJvd0xp
bmVzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRl
bXBsYXRlUm93cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVS
b3dzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6VHJhY2tzRGF0YSB0cmFja3NEYXRhOwotICAg
IGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0
cmFja3NEYXRhLCBzdHlsZVJlc29sdmVyKSkKKyAgICBpZiAoIVN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFy
ZWFzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7CisgICAgY29uc3Qg
TmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5u
YW1lZEdyaWRBcmVhKCk7CiAgICAgaWYgKCFuYW1lZEdyaWRBcmVhcy5pc0VtcHR5KCkpCiAgICAg
ICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zy
b21HcmlkQXJlYShuYW1lZEdyaWRBcmVhcywgdHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzLCBG
b3JSb3dzKTsKIAotICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBzdHlsZVJlc29sdmVy
LnN0eWxlKCksIFJvdyk7CisgICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLCBSb3cpOwogfQogCi12b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUFsdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCit2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudEFsdFRleHQocHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSk7CisgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnRBbHRUZXh0KHByaW1pdGl2ZVZhbHVlLnN0cmlu
Z1ZhbHVlKCkpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQXR0cigpKSB7CiAgICAg
ICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZv
byk/Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlwZSgpID09IFBz
ZXVkb0lkOjpOb25lKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRVbmlx
dWUoKTsKKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgpID09IFBz
ZXVkb0lkOjpOb25lKQorICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VW5pcXVl
KCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAgICAgIGNv
bnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSkuc2V0VW5p
cXVlKCk7CiAKICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tKCksIHByaW1pdGl2
ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG51bGxBdG9tKCkpOwotICAgICAgICBjb25zdCBBdG9tU3Ry
aW5nJiB2YWx1ZSA9IHN0eWxlUmVzb2x2ZXIuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudEFsdFRleHQodmFsdWUu
aXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6IHZhbHVlKTsKKyAgICAgICAgY29uc3QgQXRvbVN0cmlu
ZyYgdmFsdWUgPSBidWlsZGVyU3RhdGUuZWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudEFsdFRleHQodmFsdWUuaXNOdWxs
KCkgPyBlbXB0eUF0b20oKSA6IHZhbHVlKTsKIAogICAgICAgICAvLyBSZWdpc3RlciB0aGUgZmFj
dCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUuCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRB
dHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZVJl
c29sdmVyKCkucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRBdHRy
aWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0Q29udGVudEFsdFRleHQoZW1wdHlBdG9tKCkpOworICAgICAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dChlbXB0eUF0b20oKSk7CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdpbGxDaGFuZ2UoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRXaWxsQ2hhbmdlKG51bGxwdHIpOworICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRXaWxsQ2hhbmdlKG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQogCkBAIC0xNzgwLDU1ICsxNzc1LDU1IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZVdpbGxDaGFuZ2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFdpbGxDaGFuZ2UoV1RGTW92ZSh3aWxsQ2hhbmdlKSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0V2lsbENoYW5nZShXVEZNb3ZlKHdpbGxDaGFuZ2UpKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlV2lkdGgoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlV2lkdGgoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRTdHJva2VXaWR0aChTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEhhc0V4cGxpY2l0bHlTZXRTdHJva2VXaWR0aCh0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRTdHJva2VXaWR0aChTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgo
YnVpbGRlclN0YXRlLCB2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4
cGxpY2l0bHlTZXRTdHJva2VXaWR0aCh0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmIChzdHlsZVJlc29sdmVyLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFN0cm9rZUNvbG9yKHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUocHJpbWl0
aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIGZhbHNlKSk7Ci0gICAgaWYgKHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3Ioc3R5bGVSZXNvbHZlci5j
b2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsg
Ki8gdHJ1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNl
dFN0cm9rZUNvbG9yKHRydWUpOworICAgIGlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkpCisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFN0cm9rZUNv
bG9yKGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwg
LyogZm9yVmlzaXRlZExpbmsgKi8gZmFsc2UpKTsKKyAgICBpZiAoYnVpbGRlclN0YXRlLmFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0VmlzaXRlZExpbmtTdHJva2VDb2xvcihidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IodHJ1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3Vz
dG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTUmVnaXN0
ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0
eShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1JlZ2lzdGVyZWRD
dXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsKICAg
ICBpZiAocmVnaXN0ZXJlZCAmJiByZWdpc3RlcmVkLT5pbml0aWFsVmFsdWUoKSkgewogICAgICAg
ICBhdXRvIGluaXRpYWxWYWx1ZSA9IHJlZ2lzdGVyZWQtPmluaXRpYWxWYWx1ZUNvcHkoKTsKLSAg
ICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQs
ICppbml0aWFsVmFsdWUpOworICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoYnVpbGRl
clN0YXRlLCByZWdpc3RlcmVkLCAqaW5pdGlhbFZhbHVlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAogICAgIGF1dG8gaW52YWxpZCA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNyZWF0ZVVu
cmVzb2x2ZWQobmFtZSwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICBhcHBseVZhbHVlQ3VzdG9tUHJv
cGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgaW52YWxpZC5nZXQoKSk7CisgICAgYXBw
bHlWYWx1ZUN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgaW52YWxpZC5n
ZXQoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
Q3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTUmVn
aXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1l
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0b21Qcm9w
ZXJ0eShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkKIHsK
LSAgICBhdXRvKiBwYXJlbnRWYWx1ZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSA/IHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW5oZXJpdGVkQ3VzdG9tUHJvcGVydGllcygpLmdl
dChuYW1lKSA6IG51bGxwdHI7CisgICAgYXV0byogcGFyZW50VmFsdWUgPSBidWlsZGVyU3RhdGUu
cGFyZW50U3R5bGUoKS5pbmhlcml0ZWRDdXN0b21Qcm9wZXJ0aWVzKCkuZ2V0KG5hbWUpOwogICAg
IGlmIChwYXJlbnRWYWx1ZSAmJiAhKHJlZ2lzdGVyZWQgJiYgIXJlZ2lzdGVyZWQtPmluaGVyaXRz
KSkKLSAgICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lz
dGVyZWQsICpwYXJlbnRWYWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShi
dWlsZGVyU3RhdGUsIHJlZ2lzdGVyZWQsICpwYXJlbnRWYWx1ZSk7CiAgICAgZWxzZQotICAgICAg
ICBhcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCBu
YW1lKTsKKyAgICAgICAgYXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoYnVpbGRlclN0YXRlLCBy
ZWdpc3RlcmVkLCBuYW1lKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29u
c3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUuaXNSZXNvbHZlZCgpKTsKICAg
ICBjb25zdCBhdXRvJiBuYW1lID0gdmFsdWUubmFtZSgpOwogCiAgICAgaWYgKCFyZWdpc3RlcmVk
IHx8IHJlZ2lzdGVyZWQtPmluaGVyaXRzKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldEluaGVyaXRlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1ZSkpOwor
ICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKICAgICBlbHNlCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0Tm9uSW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtl
UmVmKHZhbHVlKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5vbkluaGVyaXRl
ZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1ZSkpOwogfQogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNv
bHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggZjZj
N2ZmYTBiODAuLjU1ZTBiNzI5MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CkBAIC05OCw2ICs5OCw3IEBACiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhh
bmQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgogI2luY2x1ZGUgIlN0
eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1ZGUgIlRy
YW5zZm9ybUZ1bmN0aW9ucy5oIgpAQCAtMTQzLDcgKzE0NCw2IEBAIFN0eWxlUmVzb2x2ZXI6OlN0
eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FE
QVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0eWxlUmVz
b2x2ZXI6OmNyZWF0ZSgmZG9jdW1lbnQpKQogI2VuZGlmCi0gICAgLCBtX3N0eWxlTWFwKHRoaXMp
CiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtX2RvY3VtZW50LnNldHRpbmdzKCku
YXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKIHsKICAgICBFbGVtZW50KiByb290ID0gbV9k
b2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTI0NCw3ICsyNDQsNiBAQCBTdHlsZVJlc29s
dmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5
bGUqIHBhcmVudFN0eQogICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQogICAgICwgbV9wYXJlbnRT
dHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIoc2VsZWN0b3JGaWx0ZXIp
Ci0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoZWxlbWVudC5kb2N1bWVudCgpLnZpc2l0ZWRMaW5r
U3RhdGUoKS5kZXRlcm1pbmVMaW5rU3RhdGUoZWxlbWVudCkpCiB7CiAgICAgYm9vbCByZXNldFN0
eWxlSW5oZXJpdGFuY2UgPSBoYXNTaGFkb3dSb290UGFyZW50KGVsZW1lbnQpICYmIGRvd25jYXN0
PFNoYWRvd1Jvb3Q+KGVsZW1lbnQucGFyZW50Tm9kZSgpKS0+cmVzZXRTdHlsZUluaGVyaXRhbmNl
KCk7CiAgICAgaWYgKHJlc2V0U3R5bGVJbmhlcml0YW5jZSkKQEAgLTI1Nyw2ICsyNTYsOSBAQCBT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIHBhcmVudFN0eQogICAgIGVsc2UKICAgICAgICAgbV9yb290RWxlbWVudFN0
eWxlID0gZG9jdW1lbnRFbGVtZW50U3R5bGUgPyBkb2N1bWVudEVsZW1lbnRTdHlsZSA6IGRvY3Vt
ZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVudFN0eWxl
KQorICAgICAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSAmUmVuZGVyU3R5bGU6OmRlZmF1bHRTdHls
ZSgpOworCiAgICAgdXBkYXRlQ29udmVyc2lvbkRhdGEoKTsKIH0KIApAQCAtMzA4LDcgKzMxMCw3
IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29uc3QgRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBpZiAoZWxlbWVudC5pc0xpbmsoKSkg
ewogICAgICAgICBzdHlsZS5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAgIEluc2lkZUxpbmsgbGlu
a1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAgICAgICBJbnNpZGVMaW5rIGxp
bmtTdGF0ZSA9IGRvY3VtZW50KCkudmlzaXRlZExpbmtTdGF0ZSgpLmRldGVybWluZUxpbmtTdGF0
ZShlbGVtZW50KTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBJbnNpZGVMaW5rOjpOb3RJbnNp
ZGUpIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5zdHJ1bWVu
dGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKQEAgLTM2OSw3ICszNzEs
NyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9y
S2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMo
Zmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAgIC8vIElm
IG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZvbnQoKTsK
KyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gTm93IHJlc29sdmUgcmVtYWluaW5n
IGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAgY2FzY2Fk
ZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTM3Nyw3ICszNzksNyBAQCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUoY29uc3Qg
UmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQcmlvcml0
eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0ZSBpdCBh
IHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUp
OwogCiAgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCkBAIC01NjksNyAr
NTcxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVyOjpzdHls
ZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJz
dENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3Vy
IGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAg
IHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3Vz
dG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICBjYXNjYWRlLmFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOwpAQCAtMTE1NiwxMiArMTE1OCwxMiBAQCBzdGF0aWMgdm9p
ZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICBzdHls
ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsKIH0KIAot
dm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZlcjo6dXBk
YXRlRm9udChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQogewotICAgIGlmICghbV9z
dGF0ZS5mb250RGlydHkoKSkKKyAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRlLnN0eWxlKCk7Cisg
ICAgaWYgKCFjYXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLmZvbnREaXJ0eSgpICYmIHN0eWxlLmZvbnRD
YXNjYWRlKCkuZm9udHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3R5bGUgPSAq
bV9zdGF0ZS5zdHlsZSgpOwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAgY2hlY2tG
b3JUZXh0U2l6ZUFkanVzdChzdHlsZSk7CiAjZW5kaWYKQEAgLTExNzEsNyArMTE3Myw4IEBAIHZv
aWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiAgICAgc3R5bGUuZm9udENhc2NhZGUoKS51
cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIGlmIChtX3N0YXRlLmZvbnRT
aXplSGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBzdHlsZS5zZXRIYXNWaWV3cG9ydFVuaXRz
KHRydWUpOwotICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKKworICAgIGNhc2NhZGUu
YnVpbGRlclN0YXRlKCkuY2xlYXJGb250RGlydHkoKTsKIH0KIAogVmVjdG9yPFJlZlB0cjxTdHls
ZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBFbGVtZW50
KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTEzMzgsNyArMTM0MSw3IEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBNYXRjaFJl
c3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVz
KGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAgICAg
Ly8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgICAgIHVwZGF0
ZUZvbnQoKTsKKyAgICAgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIAogICAgICAgICAvLyBOb3cg
cmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkg
b3JkZXIKICAgICAgICAgY2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTEzNjUs
NyArMTM2OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhj
b25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIHJldHVybiBhcHBs
eU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBEb05vdFVzZU1hdGNoZWRQ
cm9wZXJ0aWVzQ2FjaGUpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0
ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAK
ICAgICAvLyBJZiB0aGUgZm9udCBjaGFuZ2VkLCB3ZSBjYW4ndCB1c2UgdGhlIG1hdGNoZWQgcHJv
cGVydGllcyBjYWNoZS4gU3RhcnQgb3Zlci4KICAgICBpZiAoY2FjaGVJdGVtICYmIGNhY2hlSXRl
bS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlKCktPmZvbnRE
ZXNjcmlwdGlvbigpKQpAQCAtMTM4MSw3ICsxMzg0LDcgQEAgdm9pZCBTdHlsZVJlc29sdmVyOjph
cHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3VsdCwgY29u
c3QKICAgICAvLyBzbyB0byBwcmVzZXJ2ZSBiZWhhdmlvciwgd2UgcXVldWUgdGhlbSB1cCBkdXJp
bmcgY2FzY2FkZSBhbmQgZmx1c2ggaGVyZS4KICAgICBjYXNjYWRlLmFwcGx5RGVmZXJyZWRQcm9w
ZXJ0aWVzKCk7CiAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKKyAgICBBU1NFUlQo
IWNhc2NhZGUuYnVpbGRlclN0YXRlKCkuZm9udERpcnR5KCkpOwogCiAgICAgaWYgKGNhY2hlSXRl
bSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CkBAIC0xNDAyLDEwICsxNDA1LDExIEBA
IHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3Bl
cnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAgICAgcmV0
dXJuOworCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgU3R5bGU6OlByb3BlcnR5
Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBpZiAodmFsdWUp
Ci0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShpZCwgKnZhbHVlKTsKKyAgICBjYXNjYWRl
LmFwcGx5UHJvcGVydHkoaWQsICp2YWx1ZSk7CisgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIH0K
IAogLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFyZWQgdG8g
Q1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKQEAgLTE1MTYsNyArMTUy
MCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0p
OwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5
d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5zaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6OlllcyA6
IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7Ci0gICAgc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgc3R5bGUoKS0+c2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZlcjo6c2V0
Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBmbG9hdCBz
aXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNTdjOThhMTUyYTUuLjgyMmZh
OTRkMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTI4LDcgKzI4LDYgQEAK
ICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNT
U09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0jaW5jbHVk
ZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRl
ICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCkBAIC04NSw2ICs4NCwx
MCBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgVmlld3BvcnRTdHlsZVJlc29sdmVyOwog
c3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKIAorbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNz
IFByb3BlcnR5Q2FzY2FkZTsKK30KKwogLy8gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMgaXMgdXNl
ZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1bml0cwogLy8gYXJlIGludGVycHJl
dGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBhbmQgc3R5
bGVkIG9ubHkKIC8vIGZyb20gdGhlIFVzZXIgQWdlbnQgU3R5bGVzaGVldCBydWxlcy4KQEAgLTE2
MCw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHlsZShDU1NQ
cm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4pOwogICAg
IHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENTU1ZhbHVl
Kik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnQoU3R5bGU6
OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgpOwogCiAg
ICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQgc2l6ZSk7
CkBAIC0yNDMsMTUgKzI0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUq
IHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQogICAgICAgICBj
b25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcm9v
dEVsZW1lbnRTdHlsZTsgfQogCi0gICAgICAgIEluc2lkZUxpbmsgZWxlbWVudExpbmtTdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQotCi0gICAgICAgIHZvaWQgc2V0
QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSA9IGlzQXBwbHk7IH0KLSAgICAgICAgdm9pZCBzZXRBcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUgPSBpc0FwcGx5OyB9Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGU7IH0KLSAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9Ci0KLSAgICAg
ICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBpc0RpcnR5KSB7IG1fZm9udERpcnR5ID0gaXNEaXJ0
eTsgfQotICAgICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9udERpcnR5
OyB9CiAgICAgICAgIHZvaWQgc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKGJvb2wgaGFzVmll
d3BvcnRVbml0cykgeyBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0cyA9IGhhc1ZpZXdwb3J0VW5p
dHM7IH0KICAgICAgICAgYm9vbCBmb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSBjb25zdCB7IHJl
dHVybiBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0czsgfQogCkBAIC0yNjEsMjMgKzI1NSwxMCBA
QCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICAgICAgY29u
c3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9z
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oRm9u
dENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBt
X3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQot
ICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5z
ZXRab29tKGYpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBmKSB7IG1f
Zm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICAgICAgdm9p
ZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnREaXJ0eSB8
PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICAgICAgdm9pZCBz
ZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2Zv
bnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsg
fQotCiAgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KIAogICAgICAgICBjb25zdCBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkgY29uc3Qg
eyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CiAKLSAgICAgICAgU3R5bGU6
OkNhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2Nhc2NhZGVMZXZl
bDsgfQotICAgICAgICB2b2lkIHNldENhc2NhZGVMZXZlbChTdHlsZTo6Q2FzY2FkZUxldmVsIGxl
dmVsKSB7IG1fY2FzY2FkZUxldmVsID0gbGV2ZWw7IH0KLSAgICAgICAgU3R5bGU6OlNjb3BlT3Jk
aW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29wZU9yZGlu
YWw7IH0KLSAgICAgICAgdm9pZCBzZXRTdHlsZVNjb3BlT3JkaW5hbChTdHlsZTo6U2NvcGVPcmRp
bmFsIHN0eWxlU2NvcGVPcmRpbmFsKSB7IG1fc3R5bGVTY29wZU9yZGluYWwgPSBzdHlsZVNjb3Bl
T3JkaW5hbDsgfQotCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3RvckZpbHRl
cigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0KICAgICAgICAgCiAgICAgcHJp
dmF0ZToKQEAgLTI5NywxNCArMjc4LDYgQEAgcHVibGljOgogCiAgICAgICAgIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogCi0gICAgICAgIFN0
eWxlOjpTY29wZU9yZGluYWwgbV9zdHlsZVNjb3BlT3JkaW5hbCB7IFN0eWxlOjpTY29wZU9yZGlu
YWw6OkVsZW1lbnQgfTsKLQotICAgICAgICBJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtTdGF0ZSB7
IEluc2lkZUxpbms6Ok5vdEluc2lkZSB9OwotICAgICAgICBTdHlsZTo6Q2FzY2FkZUxldmVsIG1f
Y2FzY2FkZUxldmVsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50IH07Ci0KLSAgICAg
ICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKLSAgICAgICAg
Ym9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9OwotICAgICAg
ICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2ZvbnRTaXplSGFz
Vmlld3BvcnRVbml0cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVhcmFuY2Ug
eyBmYWxzZSB9OwogICAgIH07CkBAIC0zMTQsMTggKzI4Nyw3IEBAIHB1YmxpYzoKIAogICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBib29sIGFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKTsgfQotCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJldHVybiAm
bV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3RvckNTU09N
V3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KLSAgICBjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0
YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7
IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0V3JpdGluZ01v
ZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9kZSh3cml0
aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24g
dGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmllbnRh
dGlvbik7IH0KIAogICAgIGJvb2wgYWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3NpemluZyhS
ZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKIApAQCAtMzgwLDcgKzM0Miw2IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0eWxlUmVz
b2x2ZXI7CiAjZW5kaWYKIAotICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAgICBJbnNw
ZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAogICAgIFN0YXRl
IG1fc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKaW5kZXggYmVkYjgyNGVhMGMuLmIxZjIyN2Qx
NzA3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC01NzksMjEgKzU3OSwyMSBAQCBzdWIgZ2V0
QXV0b0dldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHlsZSA9IHNo
aWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5oYXNBdXRvIiAuIGdldE5hbWVGb3JN
ZXRob2RzKCRuYW1lKSAuICIoKSI7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLmhhc0F1dG8i
IC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKIH0KIAogc3ViIGdldEF1dG9TZXR0
ZXIgewogICBteSAkbmFtZSA9IHNoaWZ0OwogICBteSAkcmVuZGVyU3R5bGUgPSBzaGlmdDsKIAot
ICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi0+c2V0SGFzQXV0byIgLiBnZXROYW1lRm9yTWV0aG9k
cygkbmFtZSkgLiAiKCkiOworICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi5zZXRIYXNBdXRvIiAu
IGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CiB9CiAKIHN1YiBnZXRWaXNpdGVkTGlu
a1NldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHlsZSA9IHNoaWZ0
OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5zZXRWaXNpdGVkTGluayIgLiBnZXROYW1l
Rm9yTWV0aG9kcygkbmFtZSk7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLnNldFZpc2l0ZWRM
aW5rIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKTsKIH0KIAogc3ViIGdldENsZWFyRnVuY3Rp
b24gewpAQCAtNjk5LDcgKzY5OSw3IEBAIHN1YiBjb2xvckZyb21QcmltaXRpdmVWYWx1ZSB7CiAg
IG15ICRwcmltaXRpdmVWYWx1ZSA9IHNoaWZ0OwogICBteSAkZm9yVmlzaXRlZExpbmsgPSBAXyA/
IHNoaWZ0IDogTk9UX0ZPUl9WSVNJVEVEX0xJTks7CiAKLSAgcmV0dXJuICJzdHlsZVJlc29sdmVy
LmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCIgLiAkcHJpbWl0aXZlVmFsdWUgLiAiLCAvKiBmb3JW
aXNpdGVkTGluayAqLyAiIC4gKCRmb3JWaXNpdGVkTGluayA/ICJ0cnVlIiA6ICJmYWxzZSIpIC4g
IikiOworICByZXR1cm4gImJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgiIC4g
JHByaW1pdGl2ZVZhbHVlIC4gIiwgLyogZm9yVmlzaXRlZExpbmsgKi8gIiAuICgkZm9yVmlzaXRl
ZExpbmsgPyAidHJ1ZSIgOiAiZmFsc2UiKSAuICIpIjsKIH0KIAogdXNlIGNvbnN0YW50IHsKQEAg
LTcxMywxMiArNzEzLDEyIEBAIHN1YiBnZW5lcmF0ZUNvbG9yVmFsdWVTZXR0ZXIgewogICBteSAk
aW5kZW50ID0gc2hpZnQ7CiAgIG15ICR2YWx1ZUlzUHJpbWl0aXZlID0gQF8gPyBzaGlmdCA6IFZB
TFVFX0lTX0NPTE9SOwogCi0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxlKCkiOwot
ICBteSAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChzdHlsZVJlc29sdmVyLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKVxuIjsKLSAgbXkgJHNldFZhbHVlID0gJHN0eWxlIC4g
Ii0+IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIi
fTsKKyAgbXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKKyAgbXkgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpKVxuIjsKKyAgbXkgJHNldFZhbHVlID0gJHN0eWxlIC4gIi4iIC4gJHByb3BlcnRp
ZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAkY29sb3Ig
PSAkdmFsdWVJc1ByaW1pdGl2ZSA/IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCR2YWx1ZSkgOiAk
dmFsdWU7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICIgLiAkc2V0VmFsdWUg
LiAiKCIgLiAkY29sb3IgLiAiKTtcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
aWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKVxuIjsK
KyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJv
cGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSlcbiI7CiAgICRjb2xvciA9ICR2YWx1ZUlzUHJpbWl0
aXZlID8gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoJHZhbHVlLCBGT1JfVklTSVRFRF9MSU5LKSA6
ICR2YWx1ZTsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdldFZpc2l0
ZWRMaW5rU2V0dGVyKCRuYW1lLCAkc3R5bGUpIC4gIigiIC4gJGNvbG9yIC4gIik7XG4iOwogCkBA
IC03MzEsNyArNzMxLDcgQEAgc3ViIGhhbmRsZUN1cnJlbnRDb2xvclZhbHVlIHsKICAgbXkgJGlu
ZGVudCA9IHNoaWZ0OwogCiAgIG15ICRjb2RlID0gJGluZGVudCAuICJpZiAoIiAuICRwcmltaXRp
dmVWYWx1ZSAuICIudmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7XG4iOwotICAk
Y29kZSAuPSAkaW5kZW50IC4gIiAgICBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAu
ICIoc3R5bGVSZXNvbHZlcik7XG4iOworICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICBhcHBseUlu
aGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAgICRjb2Rl
IC49ICRpbmRlbnQgLiAiICAgIHJldHVybjtcbiI7CiAgICRjb2RlIC49ICRpbmRlbnQgLiAifVxu
IjsKICAgcmV0dXJuICRjb2RlOwpAQCAtNzQyLDcgKzc0Miw3IEBAIHN1YiBnZW5lcmF0ZUFuaW1h
dGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNoaWZ0Owog
CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldEVu
c3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7CisgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01ldGhvZCgk
bmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChsaXN0
LmlzRW1wdHkoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGxpc3Qu
YXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpO1xuIjsKICAgbXkgJHNldHRlciA9ICRwcm9wZXJ0
aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIifTsKQEAgLTc2Miw4ICs3
NjIsOCBAQCBzdWIgZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlciB7
CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8mIGxpc3QgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01ldGhvZCgkbmFtZSkg
LiAiKCk7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIHBhcmVudExp
c3QgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPiIgLiBnZXRBbmltYXRpb25zT3JUcmFu
c2l0aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gImF1dG8mIGxpc3QgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gZ2V0RW5zdXJlQW5p
bWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBwYXJlbnRMaXN0ID0gYnVpbGRlclN0YXRlLnBhcmVu
dFN0eWxlKCkuIiAuIGdldEFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIo
KTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGkgPSAwLCBwYXJl
bnRTaXplID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7XG4iOwogICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYgcGFyZW50
TGlzdC0+YW5pbWF0aW9uKGkpLiIgLiBnZXRUZXN0RnVuY3Rpb24oJG5hbWUpIC4gIigpOyArK2kp
IHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmIChsaXN0LnNpemUo
KSA8PSBpKVxuIjsKQEAgLTc4NiwyMCArNzg2LDIwIEBAIHN1YiBnZW5lcmF0ZUFuaW1hdGlvblBy
b3BlcnR5VmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRl
ckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJBbmltYXRpb25M
aXN0JiBsaXN0ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5pbWF0aW9u
c09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQg
Lj0gJGluZGVudCAuICJBbmltYXRpb25MaXN0JiBsaXN0ID0gYnVpbGRlclN0YXRlLnN0eWxlKCku
IiAuIGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtc
biI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGNoaWxkSW5kZXggPSAw
O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoaXM8Q1NTVmFsdWVMaXN0
Pih2YWx1ZSkpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIC8qIFdh
bGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVhdGluZyBuZXcg
YW5pbWF0aW9ucyBhcyBuZWVkZWQuICovXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgaWYg
KGNoaWxkSW5kZXggPD0gbGlzdC5zaXplKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICAgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpO1xuIjsK
LSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGVNYXAoKS0+IiAuIGdldEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmlt
YXRpb24oY2hpbGRJbmRleCksIGN1cnJlbnRWYWx1ZSk7XG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdldEFuaW1h
dGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRleCksIGN1
cnJlbnRWYWx1ZSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAg
KytjaGlsZEluZGV4O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKGxpc3QuaXNFbXB0eSgpKVxuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6
Y3JlYXRlKCkpO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24oJG5hbWUpIC4g
IihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpO1xuIjsKKyAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICIgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdldEFuaW1h
dGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRleCksIHZh
bHVlKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGNoaWxkSW5kZXgg
PSAxO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3Quc2l6ZSgpOyAr
K2NoaWxkSW5kZXgpIHtcbiI7CkBAIC04MjIsMTEgKzgyMiwxMSBAQCBzdWIgZ2VuZXJhdGVGaWxs
TGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlciB7CiAKICAgbXkgJHNldHRlckNvbnRlbnQg
PSAiIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIvLyBDaGVjayBmb3IgKHNpbmds
ZS1sYXllcikgbm8tb3AgYmVmb3JlIGNsZWFyaW5nIGFueXRoaW5nLlxuIjsKLSAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJhdXRvJiBsYXllcnMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImF1dG8mIGxheWVycyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBn
ZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gImlmICghbGF5ZXJzLm5leHQoKSAmJiAoIWxheWVycy4iIC4gJHRlc3RGdW5jdGlv
biAuICIoKSB8fCBsYXllcnMuIiAuICRnZXR0ZXIgLiAiKCkgPT0gJGluaXRpYWwpKVxuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gIlxuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGls
ZCA9ICZzdHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9u
KCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byog
Y2hpbGQgPSAmYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rp
b24oJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJjaGls
ZC0+IiAuICRzZXR0ZXIgLiAiKCIgLiAkaW5pdGlhbCAuICIpO1xuIjsKICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICJmb3IgKGNoaWxkID0gY2hpbGQtPm5leHQoKTsgY2hpbGQ7IGNoaWxk
ID0gY2hpbGQtPm5leHQoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGNoaWxkLT4iIC4gJGNsZWFyRnVuY3Rpb24gLiAiKCk7XG4iOwpAQCAtODQ1LDEyICs4NDUsMTIg
QEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIgewogCiAg
IG15ICRzZXR0ZXJDb250ZW50ID0gIiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
Ly8gQ2hlY2sgZm9yIG5vLW9wIGJlZm9yZSBjb3B5aW5nIGFueXRoaW5nLlxuIjsKLSAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT4i
IC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4iKCkgPT0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigpKVxuIjsKKyAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuIiAuIGdldExh
eWVyc0Z1bmN0aW9uKCRuYW1lKSAuIigpID09IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBnZXRM
YXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICByZXR1cm47XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAiXG4iOwotICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKKyAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZidWlsZGVyU3RhdGUu
c3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOwog
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXNDaGlsZCA9
IG51bGxwdHI7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoYXV0byog
cGFyZW50ID0gJnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+IiAuIGdldExheWVyc0Z1bmN0
aW9uKCRuYW1lKSAuICIoKTsgcGFyZW50ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rpb24gLiAi
KCk7IHBhcmVudCA9IHBhcmVudC0+bmV4dCgpKSB7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gImZvciAoYXV0byogcGFyZW50ID0gJmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgp
LiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7IHBhcmVudCAmJiBwYXJlbnQtPiIg
LiAkdGVzdEZ1bmN0aW9uIC4gIigpOyBwYXJlbnQgPSBwYXJlbnQtPm5leHQoKSkge1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKCFjaGlsZCkge1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNldE5leHQo
bWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAuICIpKTtc
biI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjaGlsZCA9IHByZXZp
b3VzQ2hpbGQtPm5leHQoKTtcbiI7CkBAIC04NzIsNyArODcyLDcgQEAgc3ViIGdlbmVyYXRlRmls
bExheWVyUHJvcGVydHlWYWx1ZVNldHRlciB7CiAgIG15ICRDU1NQcm9wZXJ0eUlkID0gIkNTU1By
b3BlcnR5IiAuICRuYW1lVG9JZHskbmFtZX07CiAKICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsK
LSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZzdHlsZVJlc29s
dmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAuICIoKTtc
biI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAmYnVpbGRl
clN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigp
O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJGaWxsTGF5ZXIqIHByZXZpb3Vz
Q2hpbGQgPSBudWxscHRyO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYgIWlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSkg
e1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgLy8gV2FsayBlYWNoIHZh
bHVlIGFuZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFzIG5lZWRl
ZC5cbiI7CkBAIC04ODEsMTIgKzg4MSwxMiBAQCBzdWIgZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0
eVZhbHVlU2V0dGVyIHsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgICAg
ICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KG1ha2VVbmlxdWU8RmlsbExheWVyPigiIC4gZ2V0Rmls
bExheWVyVHlwZSgkbmFtZSkgLiAiKSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICAgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIH1cbiI7Ci0gICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAiICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPiIgLiBnZXRG
aWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpj
aGlsZCwgaXRlbSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAg
YnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdldEZpbGxMYXllck1hcGZ1bmN0aW9uKCRuYW1l
KSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCBpdGVtKTtcbiI7CiAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBwcmV2aW91c0NoaWxkID0gY2hpbGQ7XG4i
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY2hpbGQgPSBjaGlsZC0+
bmV4dCgpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKLSAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4gZ2V0Rmls
bExheWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAiLCAqY2hp
bGQsIHZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZU1hcCgpLiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFtZSkgLiAi
KCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgdmFsdWUpO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGQgPSBjaGlsZC0+bmV4dCgpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gImZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCgpKVxuIjsKQEAgLTkwMiw3
ICs5MDIsNyBAQCBzdWIgZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudAogCiAgIG15ICRpc1NWRyA9
IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsic3ZnIn07
CiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic2V0dGVyIn07Ci0gIHJldHVybiAic3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gICgkaXNT
VkcgPyAiYWNjZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2YWx1ZSAu
ICIpIjsKKyAgcmV0dXJuICJidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gICgkaXNTVkcgPyAiYWNj
ZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2YWx1ZSAuICIpIjsKIH0K
IAogc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKQEAgLTkxMyw5ICs5MTMsOSBAQCBz
dWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICBteSAkaW5pdGlhbCA9ICRwcm9wZXJ0
aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJpbml0aWFsIn07CiAgIG15ICRpc1NW
RyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsic3Zn
In07CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpXG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIntcbiI7Ci0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxlKCki
OworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0eWxlKCkiOwogICBpZiAoZXhpc3RzICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJhdXRvLWZ1bmN0aW9ucyJ9
KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdldEF1dG9TZXR0
ZXIoJG5hbWUsICRzdHlsZSkgLiAiO1xuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVz
V2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxpbmstY29sb3Itc3VwcG9y
dCJ9KSB7CkBAIC05MjQsOSArOTI0LDkgQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVy
IHsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7
JG5hbWV9eyJhbmltYXRhYmxlIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFu
aW1hdGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAi
KTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7
JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9u
dERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKICAgICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0
ZXIgLiAiKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OiIgLiAkaW5pdGlhbCAuICIoKSk7XG4iOwot
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVy
dGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZmlsbC1sYXllci1wcm9wZXJ0eSJ9
KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRp
YWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgIH0gZWxzZSB7CkBAIC05
NDMsMTEgKzk0MywxMSBAQCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewogICBteSAk
aW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lk
eyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcilcbiI7CisgICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbmhlcml0IiAuICRuYW1lVG9J
ZHskbmFtZX0gLiAiKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSlcbiI7CiAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKICAgbXkgJGlzU1ZHID0gZXhpc3RzICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKLSAgbXkgJHBh
cmVudFN0eWxlID0gInN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSI7Ci0gIG15ICRzdHlsZSA9
ICJzdHlsZVJlc29sdmVyLnN0eWxlKCkiOworICBteSAkcGFyZW50U3R5bGUgPSAiYnVpbGRlclN0
YXRlLnBhcmVudFN0eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0eWxlKCki
OwogICBteSAkZ2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFt
ZX17ImdldHRlciJ9OwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAkZGlkQ2FsbFNldFZhbHVlID0gMDsKQEAg
LTk1NywxMCArOTU3LDEwIEBAIHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHJldHVybjtcbiI7CiAgICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxpbmstY29s
b3Itc3VwcG9ydCJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgQ29s
b3IgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+IiAuICRnZXR0ZXIgLiAiKCk7XG4iOwor
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIENvbG9yIGNvbG9yID0gIiAuICRw
YXJlbnRTdHlsZSAuICIuIiAuICRnZXR0ZXIgLiAiKCk7XG4iOwogICAgIGlmICghZXhpc3RzKCRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJuby1kZWZhdWx0LWNvbG9y
In0pKSB7CiAgICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBpZiAoIWNvbG9y
LmlzVmFsaWQoKSlcbiI7Ci0gICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAg
ICAgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+Y29sb3IoKTtcbiI7CisgICAgICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxl
IC4gIi5jb2xvcigpO1xuIjsKICAgICB9CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVD
b2xvclZhbHVlU2V0dGVyKCRuYW1lLCAiY29sb3IiLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAk
ZGlkQ2FsbFNldFZhbHVlID0gMTsKQEAgLTk2OCwxNiArOTY4LDE2IEBAIHN1YiBnZW5lcmF0ZUlu
aGVyaXRWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVBbmltYXRp
b25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAg
ICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dp
dGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0gICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKHN0eWxlUmVzb2x2
ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsKLSAgICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5m
b250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihidWlsZGVyU3RhdGUucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAxOwogICB9
IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17
ImZpbGwtbGF5ZXItcHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRl
RmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAg
ICIpOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAxOwogICB9CiAgIGlmICghJGRpZENhbGxTZXRW
YWx1ZSkgewotICAgIG15ICRpbmhlcml0ZWRWYWx1ZSA9ICRwYXJlbnRTdHlsZSAuICItPiIgLiAo
JGlzU1ZHID8gInN2Z1N0eWxlKCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKKyAgICBteSAk
aW5oZXJpdGVkVmFsdWUgPSAkcGFyZW50U3R5bGUgLiAiLiIgLiAoJGlzU1ZHID8gInN2Z1N0eWxl
KCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICAiIC4gZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudCgkbmFtZSwgImZvcndhcmRJ
bmhlcml0ZWRWYWx1ZSgiIC4gJGluaGVyaXRlZFZhbHVlIC4gIikiKSAuICI7XG4iOwogICB9CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifVxuIjsKQEAgLTk5MCwyMCArOTkwLDIwIEBA
IHN1YiBnZW5lcmF0ZVZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNoaWZ0OwogCiAgIG15
ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpXG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRuYW1lfSAu
ICIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpXG4i
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIntcbiI7CiAgIG15ICRjb252ZXJ0ZWRW
YWx1ZTsKICAgaWYgKGV4aXN0cygkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRu
YW1lfXsiY29udmVydGVyIn0pKSB7Ci0gICAgJGNvbnZlcnRlZFZhbHVlID0gIlN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25z
eyRuYW1lfXsiY29udmVydGVyIn0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKSI7CisgICAgJGNv
bnZlcnRlZFZhbHVlID0gIlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJvcGVy
dGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiY29udmVydGVyIn0gLiAiKGJ1aWxk
ZXJTdGF0ZSwgdmFsdWUpIjsKICAgfSBlbHNpZiAoZXhpc3RzKCRwcm9wZXJ0aWVzV2l0aFN0eWxl
QnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSkpIHsKLSAgICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRl
ck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSAuICIoc3R5bGVSZXNvbHZl
ciwgdmFsdWUpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRv
IGNvbnZlcnRlZFZhbHVlID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0
ZXIifSAuICIoYnVpbGRlclN0YXRlLCB2YWx1ZSk7XG4iOwogICAgICRjb252ZXJ0ZWRWYWx1ZSA9
ICJXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlLnZhbHVlKCkpIjsKICAgfSBlbHNlIHsKICAgICAkY29u
dmVydGVkVmFsdWUgPSAiZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSI7CiAgIH0K
IAogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFt
ZX17InNldHRlciJ9OwotICBteSAkc3R5bGUgPSAic3R5bGVSZXNvbHZlci5zdHlsZSgpIjsKKyAg
bXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKICAgbXkgJGRpZENhbGxTZXRWYWx1
ZSA9IDA7CiAgIGlmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImF1dG8tZnVuY3Rpb25zIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVBdXRvKSB7XG4iOwpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgc3ViIGdlbmVyYXRl
VmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJv
cGVydHlWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENhbGxT
ZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxk
ZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQg
Lj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTtc
biI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2NyaXB0aW9u
LiIgLiAkc2V0dGVyIC4gIigiIC4gJGNvbnZlcnRlZFZhbHVlIC4gIik7XG4iOwotICAgICRzZXR0
ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxz
aWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZmls
bC1sYXllci1wcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxs
TGF5ZXJQcm9wZXJ0eVZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKQEAgLTEw
NTIsMTAgKzEwNTIsMTAgQEAgcHJpbnQgU1RZTEVCVUlMREVSIDw8ICJFT0YiOwogI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eS5oIgog
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyU3RhdGUuaCIK
ICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxk
ZXJDdXN0b20uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVk
ZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEwODMsNyAr
MTA4Myw3IEBAIGZvcmVhY2ggbXkgJG5hbWUgKEBuYW1lcykgewogcHJpbnQgU1RZTEVCVUlMREVS
IDw8ICJFT0YiOwogfTsKIAotdm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUm
IHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKK3ZvaWQgU3R5bGVCdWlsZGVyOjphcHBseVBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQs
IGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKIHsKICAgICBz
d2l0Y2ggKHByb3BlcnR5KSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CkBAIC0xMDkx
LDExICsxMDkxLDExIEBAIHZvaWQgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzCiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUN1c3RvbTogewogICAgICAgICBhdXRvJiBjdXN0b21Qcm9wZXJ0eSA9IGRvd25jYXN0PENT
U0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKGlzSW5pdGlhbCkKLSAg
ICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHko
c3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkubmFtZSgpKTsKKyAgICAg
ICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoYnVp
bGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOwogICAgICAgICBl
bHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIGN1c3RvbVBy
b3BlcnR5Lm5hbWUoKSk7CisgICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVy
dHkubmFtZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3Vz
dG9tUHJvcGVydHkpOworICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q3VzdG9tUHJvcGVydHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eSk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KIEVPRgpAQCAtMTEwNywxMSArMTEwNywxMSBAQCBmb3Jl
YWNoIG15ICRuYW1lIChAbmFtZXMpIHsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7XG4iOwogICB9IGVsc2lmICghZXhpc3RzICRwcm9wZXJ0aWVz
V2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJza2lwLWJ1aWxkZXIifSkgewogICAgIHBy
aW50IFNUWUxFQlVJTERFUiAiICAgICAgICBpZiAoaXNJbml0aWFsKVxuIjsKLSAgICBwcmludCBT
VFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAi
SW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxl
UmVzb2x2ZXIpO1xuIjsKKyAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBn
ZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiSW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0aWFsIiAu
ICRuYW1lVG9JZHskbmFtZX0gLiAiKGJ1aWxkZXJTdGF0ZSk7XG4iOwogICAgIHByaW50IFNUWUxF
QlVJTERFUiAiICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpXG4iOwotICAgIHByaW50IFNUWUxF
QlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbmhl
cml0IikgLiAiOjphcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoc3R5bGVSZXNv
bHZlcik7XG4iOworICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNj
b3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbmhlcml0IikgLiAiOjphcHBseUluaGVyaXQiIC4gJG5h
bWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAgICAgcHJpbnQgU1RZTEVCVUlM
REVSICIgICAgICAgIGVsc2VcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAg
ICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIlZhbHVlIikgLiAiOjphcHBseVZhbHVl
IiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTtcbiI7CisgICAg
cHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigk
bmFtZSwgIlZhbHVlIikgLiAiOjphcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKGJ1
aWxkZXJTdGF0ZSwgdmFsdWUpO1xuIjsKICAgfQogICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAg
ICAgYnJlYWs7XG4iOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9D
U1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCmlu
ZGV4IGNjOWJkMjk1ZjhiLi43MmZiYWMzNzM2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUGFyc2VyLmNwcApAQCAtMTc3LDEwICsxNzcsMTAgQEAgdm9pZCBDU1NQYXJzZXI6OnBhcnNl
RGVjbGFyYXRpb25Gb3JJbnNwZWN0b3IoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29udGV4dCwg
Y28KICAgICBDU1NQYXJzZXJJbXBsOjpwYXJzZURlY2xhcmF0aW9uTGlzdEZvckluc3BlY3Rvcihz
dHJpbmcsIGNvbnRleHQsIG9ic2VydmVyKTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcElE
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUp
CitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVy
ZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIEFTU0VSVCgocHJvcElEID09IENT
U1Byb3BlcnR5Q3VzdG9tICYmIHZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSB8fCAocHJv
cElEICE9IENTU1Byb3BlcnR5Q3VzdG9tICYmICF2YWx1ZS5pc0N1c3RvbVByb3BlcnR5VmFsdWUo
KSkpOwotICAgIGF1dG8mIHN0eWxlID0gKmNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnN0eWxlKCk7
CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKTsKICAgICBhdXRvIGRpcmVj
dGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSBzdHlsZS53
cml0aW5nTW9kZSgpOwogCkBAIC0xOTMsNyArMTkzLDcgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJv
cEkKICAgICAgICAgICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVEaXJlY3Rp
b25Bd2FyZVByb3BlcnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2RlKTsKICAg
ICAgICAgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBwZW5kaW5n
U3Vic3RpdHV0aW9uLnNob3J0aGFuZFZhbHVlKCk7CiAKLSAgICAgICAgYXV0byByZXNvbHZlZERh
dGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRlKTsK
KyAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlh
YmxlUmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVkRGF0YSkK
ICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9r
ZW4+IHJlc29sdmVkVG9rZW5zID0gcmVzb2x2ZWREYXRhLT50b2tlbnMoKTsKQEAgLTIxMiw3ICsy
MTIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJs
ZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogCiAgICAgaWYgKHZhbHVlLmlzVmFyaWFi
bGVSZWZlcmVuY2VWYWx1ZSgpKSB7CiAgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWUmIHZhbHVlV2l0aFJlZmVyZW5jZXMgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVJlZmVyZW5j
ZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVXaXRoUmVm
ZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOworICAgICAgICBhdXRv
IHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJl
bmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBh
cnNlU2luZ2xlVmFsdWUocHJvcElELCByZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2NvbnRleHQp
OwpAQCAtMjIyLDkgKzIyMiw5IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZh
bHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAgY29uc3Qg
YXV0byYgdmFsdWVXaXRoUmVmZXJlbmNlcyA9IFdURjo6Z2V0PFJlZjxDU1NWYXJpYWJsZVJlZmVy
ZW5jZVZhbHVlPj4oY3VzdG9tUHJvcFZhbHVlLnZhbHVlKCkpLmdldCgpOwogCiAgICAgYXV0byYg
bmFtZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKS5uYW1lKCk7Ci0g
ICAgYXV0byogcmVnaXN0ZXJlZCA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLmRvY3VtZW50KCku
Z2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCkuZ2V0KG5hbWUpOworICAgIGF1dG8q
IHJlZ2lzdGVyZWQgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3Vz
dG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7CiAgICAgYXV0byYgc3ludGF4ID0gcmVnaXN0ZXJl
ZCA/IHJlZ2lzdGVyZWQtPnN5bnRheCA6ICIqIjsKLSAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZh
bHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRlKTsKKyAg
ICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogCiAgICAgaWYgKCFyZXNvbHZlZERhdGEpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM0LDkgKzIzNCw5IEBAIFJlZlB0cjxDU1NWYWx1ZT4g
Q1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlE
IHByb3BJCiAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0
eVZhbHVlRGVwZW5kZW5jaWVzKHN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgcmVzb2x2ZWRE
YXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKIAogICAgIGZvciAoYXV0byBpZCA6IGRlcGVuZGVu
Y2llcykKLSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKKyAgICAgICAg
YnVpbGRlclN0YXRlLmNhc2NhZGUoKS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKIAotICAgIHJl
dHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFt
ZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxlUmVzb2x2ZXIo
KSwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRD
dXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tlbnMoKSwg
YnVpbGRlclN0YXRlLCBtX2NvbnRleHQpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPGRv
dWJsZT4+IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZUtleUxpc3QoY29uc3QgU3RyaW5nJiBzZWxl
Y3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGQyNjk1NTE0ZTFl
Li41Y2YzNjBhNDk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
YXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCkBAIC00
Miw3ICs0Miw3IEBAIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRlclN0eWxl
OwogCiBuYW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVydHlDYXNjYWRlOworY2xhc3MgQnVp
bGRlclN0YXRlOwogfQogCiBjbGFzcyBDU1NQYXJzZXIgewpAQCAtODEsNyArODEsNyBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgQ1NTU2VsZWN0b3JM
aXN0Jik7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwgU3R5bGU6OlByb3BlcnR5Q2Fz
Y2FkZSYpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVy
ZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6QnVpbGRlclN0YXRl
Jik7CiAKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmLCBib29sIHN0
cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihjb25zdCBT
dHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IGNjMDVlZjBkYmZmLi5mMTU2MmY5
OTgzMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNl
ci5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJIYXNoVG9vbHMuaCIKIC8vIEZJWE1F
LU5FV1BBUlNFUjogUmVwbGFjZSBQYWlyIGFuZCBSZWN0IHdpdGggYWN0dWFsIENTU1ZhbHVlIHN1
YmNsYXNzZXMgKENTU1ZhbHVlUGFpciBhbmQgQ1NTUXVhZFZhbHVlKS4KICNpbmNsdWRlICJQYWly
LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVjdC5oIgogI2lu
Y2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
IgpAQCAtNzUsNyArNzYsNiBAQAogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckNvbnZlcnRlci5oIgog
I2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHlsZVByb3Bl
cnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2lu
Y2x1ZGUgPGJpdHNldD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQnVpbGRlci5oPgpAQCAtMjk3LDEwICsyOTcsMTAgQEAgYm9vbCBDU1NQcm9wZXJ0eVBhcnNl
cjo6Y2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgs
IGMKICAgICByZXR1cm4gcGFyc2VyLmNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKHN5
bnRheCk7CiB9CiAKLVJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBDU1NQcm9wZXJ0eVBh
cnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9rZW5zLCBj
b25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0
JiBjb250ZXh0KQorUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3BlcnR5UGFy
c2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNv
bnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGNv
bnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQcm9wZXJ0eVBhcnNlciBwYXJzZXIodG9rZW5zLCBj
b250ZXh0LCBudWxscHRyLCBmYWxzZSk7Ci0gICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFs
dWU+IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5
bnRheCwgc3R5bGVSZXNvbHZlcik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+
IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRh
eCwgYnVpbGRlclN0YXRlKTsKICAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZXIubV9yYW5nZS5hdEVu
ZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdmFsdWU7CkBAIC00Mjg5
LDEzICs0Mjg5LDEzIEBAIHZvaWQgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0
b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluCiAgICAgfQogfQogCi1SZWZQ
dHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRD
dXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50
YXgsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitSZWZQdHI8Q1NTQ3VzdG9t
UHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0
eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBpZiAoc3ludGF4ICE9ICIq
IikgewogICAgICAgICBtX3JhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGF1dG8g
cHJpbWl0aXZlVmFsID0gY29uc3VtZVdpZHRoT3JIZWlnaHQobV9yYW5nZSwgbV9jb250ZXh0KTsK
ICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbCAmJiBwcmltaXRpdmVWYWwtPmlzUHJpbWl0aXZlVmFs
dWUoKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByaW1pdGl2ZVZhbCkuaXNMZW5n
dGgoKSkgewotICAgICAgICAgICAgYXV0byBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgKnByaW1pdGl2ZVZhbCk7CisgICAgICAgICAg
ICBhdXRvIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChidWls
ZGVyU3RhdGUsICpwcmltaXRpdmVWYWwpOwogICAgICAgICAgICAgaWYgKCFsZW5ndGguaXNDYWxj
dWxhdGVkKCkgJiYgIWxlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAgIHJldHVy
biBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVTeW50YXhMZW5ndGgobmFtZSwgV1RGTW92
ZShsZW5ndGgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQ
cm9wZXJ0eVBhcnNlci5oCmluZGV4IDY1ZTg2MDU3YjI2Li45NGM0YTczZGI5ZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMzIsNyArMzIs
MTAgQEAgY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0eWxlUHJv
cGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBTdHlsZVJl
c29sdmVyOworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQogICAg
IAogLy8gSW5wdXRzOiBQcm9wZXJ0eUlELCBpc0ltcG9ydGFudCBib29sLCBDU1NQYXJzZXJUb2tl
blJhbmdlLgogLy8gT3V0cHV0czogVmVjdG9yIG9mIENTU1Byb3BlcnRpZXMKQEAgLTQ3LDcgKzUw
LDcgQEAgcHVibGljOgogICAgIC8vIFBhcnNlcyBhIG5vbi1zaG9ydGhhbmQgQ1NTIHByb3BlcnR5
CiAgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW5nbGVWYWx1ZShDU1NQcm9wZXJ0
eUlELCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYp
OwogICAgIHN0YXRpYyBib29sIGNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0
IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4g
cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBT
dHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0cjxDU1ND
dXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBT
dHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJh
bmdlJiwgY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1BhcnNlckNvbnRleHQm
KTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVu
ZGVuY2llcyhjb25zdCBTdHJpbmcmIHN5bnRheCwgYm9vbCBpc1Jvb3QsIEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4mIGRlcGVuZGVuY2llcywgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0
IENTU1BhcnNlckNvbnRleHQmKTsKIAogcHJpdmF0ZToKQEAgLTU4LDcgKzYxLDcgQEAgcHJpdmF0
ZToKICAgICBib29sIGNvbnN1bWVDU1NXaWRlS2V5d29yZChDU1NQcm9wZXJ0eUlELCBib29sIGlt
cG9ydGFudCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3Bl
cnR5SUQsIENTU1Byb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUludmFsaWQpOwogICAgIGJvb2wgY2Fu
UGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgpOwotICAg
IFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlW
YWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBTdHls
ZVJlc29sdmVyJik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHBhcnNlVHlw
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBz
eW50YXgsIGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICB2b2lkIGNvbGxlY3RQYXJz
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYgc3ludGF4LCBi
b29sIGlzUm9vdCwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgZGVwZW5kZW5jaWVzKTsKIAogICAg
IGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUgPT0gSFRN
TFF1aXJrc01vZGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0Nh
bnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9D
YW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDk1YjdiMWM1NWY5Li5hZGMwMzYxOWZj
YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5n
Q29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5k
ZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsMTMgKzE3Niw3IEBAIHZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBzdHlsZVJl
c29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSwg
cGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5bGUpLmdl
dCgpKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQ
cm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUo
Q1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBzdHlsZVJlc29sdmVyLmFw
cGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBhcnNlZFN0
eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0KCkpOwot
Ci0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6ZSBhbmQg
bGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1ZTo6Y29t
cHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZvbnRNZXRy
aWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2UgYSBjcmFz
aCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEyMikuCi0g
ICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRNZXRyaWNz
IGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGluZS1oZWln
aHQuCi0gICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNvbHZlci5h
cHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkpOwotICAg
IHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAKICAgICBt
b2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVjdG9yKCks
ICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMzM1MTNkZjRmODMuLjczODhk
OWZjN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFw
aGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAKQEAgLTExMzMsNyArMTEzMyw3IEBAIEZsb2F0UmVjdCBHcmFwaGlj
c0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRleHQoY29u
c3QgRmxvCiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0LndpZHRo
KCksIHRoaWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlTdGF0ZShj
b25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCit2b2lkIEdyYXBoaWNzQ29udGV4dDo6
YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsKICAgICBz
ZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0JsdXIsIHN0
YXRlLnNoYWRvd0NvbG9yKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhzdGF0ZS5z
dHJva2VUaGlja25lc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxM2Y1YTJmNTVkYi4uMDg3OTE0NWIxM2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
CkBAIC00MDIsNyArNDAyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0VtcGhhc2lzTWFya3Mo
Y29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmluZyYgbWFy
aywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1bnNpZ25l
ZD4gdG8gPSBXVEY6Om51bGxvcHQpOwogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0IEZvbnRD
YXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2FzY2FkZTo6
Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJZkZvbnRO
b3RSZWFkeSk7CiAKLSAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250ZXh0U3Rh
dGUmKTsKKyAgICB2b2lkIGJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYp
OwogCiAgICAgZW51bSBSb3VuZGluZ01vZGUgewogICAgICAgICBSb3VuZEFsbFNpZGVzLApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rp
c3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3Bs
YXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggY2YzY2Y5MjkzMGMuLmZiNzNhNjc4MzNm
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTMxNiw3ICszMTYsNyBAQCBw
dWJsaWM6CiAKICAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUmKSBjb25z
dDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3Qg
R3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VG
bGFncyk7CisgICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4dCYsIGNv
bnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hh
bmdlRmxhZ3MpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6OlRleHRT
dHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRl
OjpTdGF0ZUNoYW5nZUZsYWdzKTsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9DYXNjYWRlTGV2ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2NhZGVMZXZl
bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmUzMmE4NzE1Ywot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2NhZGVMZXZlbC5oCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgPHd0
Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0eWxlIHsK
KworZW51bSBjbGFzcyBDYXNjYWRlTGV2ZWwgOiB1aW50OF90IHsKKyAgICBVc2VyQWdlbnQgICA9
IDEgPDwgMCwKKyAgICBVc2VyICAgICAgICA9IDEgPDwgMSwKKyAgICBBdXRob3IgICAgICA9IDEg
PDwgMgorfTsKKworc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBhbGxD
YXNjYWRlTGV2ZWxzKCkgeyByZXR1cm4geyBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgQ2FzY2Fk
ZUxldmVsOjpVc2VyLCBDYXNjYWRlTGV2ZWw6OkF1dGhvciB9OyB9CisKK30KK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGE0Mzk4MTEyMzVhLi4zZThiYzlj
ZDhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBAIC0xNzQs
OSArMTc0LDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQpCiAjZW5kaWYKIAogUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2Nh
ZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNo
UmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNsdWRlZFBy
b3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQotICAgIDogbV9zdHlsZVJlc29sdmVyKHN0eWxl
UmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KG1hdGNoUmVzdWx0KQorICAgIDogbV9tYXRj
aFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVzKGluY2x1ZGVk
UHJvcGVydGllcykKKyAgICAsIG1fYnVpbGRlclN0YXRlKHN0ZDo6aW5fcGxhY2UsICp0aGlzLCBz
dHlsZVJlc29sdmVyKQogewogICAgIC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgKCotYmVmb3Jl
L2FmdGVyKSBhcmUgYWxpYXNlcyB0aGF0IGRlcGVuZCBvbiB0aGUgVGV4dERpcmVjdGlvbiBhbmQg
V3JpdGluZ01vZGUuCiAgICAgLy8gVGhlc2UgbXVzdCBiZSByZXNvbHZlZCBiZWZvcmUgd2UgY2Fu
IGJlZ2luIGJ1aWxkaW5nIHRoZSBwcm9wZXJ0eSBjYXNjYWRlLgpAQCAtMTg2LDggKzE4Niw3IEBA
IFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlD
YXNjYWRlKGNvbnN0IFByb3BlcnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2FzY2FkZUxl
dmVsPiBjYXNjYWRlTGV2ZWxzKQotICAgIDogbV9zdHlsZVJlc29sdmVyKHBhcmVudC5tX3N0eWxl
UmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0KQorICAg
IDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQpCiAgICAgLCBtX2luY2x1ZGVk
UHJvcGVydGllcyhwYXJlbnQubV9pbmNsdWRlZFByb3BlcnRpZXMpCiAgICAgLCBtX2RpcmVjdGlv
bihwYXJlbnQubV9kaXJlY3Rpb24pCiAgICAgLCBtX3dyaXRpbmdNb2RlKHBhcmVudC5tX3dyaXRp
bmdNb2RlKQpAQCAtNDAzLDE5ICs0MDIsMTkgQEAgaW5saW5lIHZvaWQgUHJvcGVydHlDYXNjYWRl
OjphcHBseVByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3AKICAg
ICAgICAgYXV0byYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbcHJvcGVydHlJRF07CiAKICAgICAg
ICAgaWYgKHRyYWNrQ3ljbGVzID09IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZzo6RW5hYmxl
ZCkgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJv
cGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtFTFkoYnVp
bGRlclN0YXRlKCkubV9pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7CiAg
ICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZvbnQgc2l6
ZSB1c2luZyByZWdpc3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5nIGVtKS4K
ICAgICAgICAgICAgICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICAg
ICAgICAgICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3BlcnR5SUQp
OworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZSgpLm1fYXBwbGllZFByb3BlcnRpZXMuc2V0
KHByb3BlcnR5SUQpOwogICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMgaW4gYSBj
eWNsZSwgYW5kIG9ubHkgdGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZlIGZpcnN0
UHJvcGVydHkgIT0gbGFzdFByb3BlcnR5LgogICAgICAgICAgICAgICAgIEFTU0VSVChmaXJzdFBy
b3BlcnR5ID09IGxhc3RQcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGll
cy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9i
dWlsZGVyU3RhdGU7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9pblByb2dyZXNzUHJvcGVy
dGllcy5zZXQocHJvcGVydHlJRCk7CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5
KTsKLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVy
dHlJRCk7Ci0gICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXMuc2V0
KHByb3BlcnR5SUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRQ
cm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7CiAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgfQogCkBAIC00MzIsMzEgKzQzMSwzMiBAQCB2b2lkIFByb3BlcnR5
Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCkKIAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6
OmFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlmIChtX2Fw
cGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkgfHwgIW1fY3Vz
dG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAq
bV9idWlsZGVyU3RhdGU7CisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9w
ZXJ0aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Qcm9wZXJ0
eShuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3Bl
cnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CisgICAgYm9vbCBpbkN5Y2xlID0gYnVpbGRlclN0
YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CiAKICAgICBm
b3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3Rv
ckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewog
ICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQg
JiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lk
ZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYgKGluZGV4ICE9IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmluc2lkZUxpbmsoKSA9PSBJbnNp
ZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBSZWY8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5j
c3NWYWx1ZVtpbmRleF0pKTsKIAogICAgICAgICBpZiAoaW5DeWNsZSkgewotICAgICAgICAgICAg
bV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsgLy8gTWFrZSBz
dXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2FpbiB3aGlsZSByZXNv
bHZpbmcgaXQuCisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJvcGVy
dGllcy5hZGQobmFtZSk7IC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdHJ5IHRvIGFwcGx5IHRoaXMg
cHJvcGVydHkgYWdhaW4gd2hpbGUgcmVzb2x2aW5nIGl0LgogICAgICAgICAgICAgdmFsdWVUb0Fw
cGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENTU1ZhbHVl
SW52YWxpZCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1By
b3BlcnRpZXNDdXN0b20uYWRkKG5hbWUpOworICAgICAgICBidWlsZGVyU3RhdGUubV9pblByb2dy
ZXNzUHJvcGVydGllc0N1c3RvbS5hZGQobmFtZSk7CiAKICAgICAgICAgaWYgKFdURjo6aG9sZHNf
YWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRvQXBwbHkt
PnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZhbHVlID0g
cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBwbHkuZ2V0
KCkpOwogCi0gICAgICAgICAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxp
ZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQogICAgICAgICAgICAgICAgIHJldHVy
bjsgLy8gVGhlcmUgd2FzIGEgY3ljbGUgYW5kIHRoZSB2YWx1ZSB3YXMgcmVzZXQsIHNvIGJhaWwu
CiAKICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCkBAIC00NjUsMzIgKzQ2NSwyMCBAQCB2
b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJpbmcmIG5h
bWUpCiAgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlPigqcGFyc2VkVmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1fYXBwbHlT
dGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKSkgewotICAgICAg
ICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7Ci0gICAg
ICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvUmVn
dWxhclN0eWxlKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgp
LnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaExpbmsp
IHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVy
LnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1h
dGNoVmlzaXRlZCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNl
dEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAgICAgbV9z
dHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSh0
cnVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jl
c3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgICAgICBidWlsZGVy
U3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkoQ1NT
UHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOwogICAgICAgICB9CiAg
ICAgfQogCi0gICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLnJlbW92
ZShuYW1lKTsKLSAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuYWRkKG5h
bWUpOworICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hEZWZhdWx0OworICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9t
LnJlbW92ZShuYW1lKTsKKyAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJvcGVydGll
cy5hZGQobmFtZSk7CiAKICAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWQgfSkgewogICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4
XSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JD
aGVja2VyOjpNYXRjaERlZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+
aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYgKGluZGV4
ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
Lmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5
ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKQEAgLTUyOCwzMyArNTE2LDI2
IEBAIGNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0eUNhc2Nh
ZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwKIAogaW5saW5lIHZvaWQgUHJvcGVydHlDYXNjYWRl
OjphcHBseVByb3BlcnR5KGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkKIHsKLSAgICBTdHlsZVJl
c29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKTsKLSAgICBzdGF0
ZS5zZXRDYXNjYWRlTGV2ZWwocHJvcGVydHkubGV2ZWwpOwotICAgIHN0YXRlLnNldFN0eWxlU2Nv
cGVPcmRpbmFsKHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsKTsKLQotICAgIGlmIChwcm9wZXJ0
eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0pIHsKLSAgICAgICAgc3Rh
dGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICBzdGF0ZS5z
ZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgYXBwbHlQ
cm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6
TWF0Y2hEZWZhdWx0XSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwotICAgIH0KKyAg
ICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7CisgICAgYnVpbGRlclN0YXRl
Lm1fY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7CisgICAgYnVpbGRlclN0YXRlLm1fc3R5
bGVTY29wZU9yZGluYWwgPSBwcm9wZXJ0eS5zdHlsZVNjb3BlT3JkaW5hbDsKKworICAgIGF1dG8g
YXBwbHlXaXRoTGlua01hdGNoID0gWyZdKFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBs
aW5rTWF0Y2gpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0pIHsK
KyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IGxpbmtNYXRjaDsKKyAgICAg
ICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtsaW5r
TWF0Y2hdLCBsaW5rTWF0Y2gpOworICAgICAgICB9CisgICAgfTsKIAotICAgIGlmIChzdGF0ZS5z
dHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAgICAgICBy
ZXR1cm47CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZh
dWx0KTsKIAotICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNo
TGlua10pIHsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRy
dWUpOwotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZh
bHNlKTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1Zh
bHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaExp
bmspOwotICAgIH0KKyAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09
IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHByb3Bl
cnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSkgewotICAgICAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAgICBzdGF0
ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAgICBhcHBs
eVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2Vy
OjpNYXRjaFZpc2l0ZWRdLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0gICAgfQor
ICAgIGFwcGx5V2l0aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7CisgICAg
YXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKIAotICAg
IHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICBzdGF0ZS5z
ZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAgICBidWlsZGVyU3Rh
dGUubV9saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdDsKIH0KIAogdm9p
ZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNoTWFzaykK
QEAgLTU2OSw2ICs1NTAsOCBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwogICAgICAgICByZXR1
cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBsaW5rTWF0Y2hNYXNr
KTsKICAgICB9CiAKKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7CisK
ICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eVZhbHVlID0gbnVsbHB0
cjsKICAgICBDU1NWYWx1ZUlEIGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9IENTU1ZhbHVlSW52YWxp
ZDsKICAgICBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIGN1c3RvbVByb3BlcnR5UmVnaXN0
ZXJlZCA9IG51bGxwdHI7CkBAIC01NzksMTggKzU2MiwxNyBAQCB2b2lkIFByb3BlcnR5Q2FzY2Fk
ZTo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVj
dG9yQwogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDU1NWYWx1ZUlEPihjdXN0
b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKSkKICAgICAgICAgICAgIGN1c3RvbVByb3BlcnR5VmFs
dWVJRCA9IFdURjo6Z2V0PENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUtPnZhbHVlKCkp
OwogICAgICAgICBhdXRvJiBuYW1lID0gY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgpOwotICAg
ICAgICBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQo
KS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7CisgICAgICAg
IGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdldENT
U1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKICAgICB9CiAKLSAgICBh
dXRvJiBzdGF0ZSA9IG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpOwotICAgIGJvb2wgaXNJbmhlcml0
ID0gc3RhdGUucGFyZW50U3R5bGUoKSA/IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRWYWx1ZSgp
IHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQgOiBmYWxzZTsKLSAg
ICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBseS0+aXNJbml0aWFsVmFsdWUoKSB8fCBjdXN0
b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8ICghc3RhdGUucGFyZW50U3R5
bGUoKSAmJiAodmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVy
dHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCkpOworICAgIGJvb2wgaXNJbmhlcml0ID0gdmFs
dWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID09
IENTU1ZhbHVlSW5oZXJpdDsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBseS0+aXNJ
bml0aWFsVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFs
OwogCiAgICAgYm9vbCBpc1Vuc2V0ID0gdmFsdWVUb0FwcGx5LT5pc1Vuc2V0VmFsdWUoKSB8fCBj
dXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVVbnNldDsKICAgICBib29sIGlzUmV2ZXJ0
ID0gdmFsdWVUb0FwcGx5LT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1ZUlE
ID09IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAgIGlmIChh
dXRvKiByb2xsYmFjayA9IHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKHN0YXRlLmNhc2NhZGVM
ZXZlbCgpKSkgeworICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNhc2NhZGVG
b3JSb2xsYmFjayhidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7CiAgICAgICAgICAgICAv
LyBXaXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9idGFpbiB0aGUg
cHJvcGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKICAgICAgICAgICAgIC8v
IG5vdCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVyd2lzZSB3ZSBh
cHBseSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgogICAgICAgICAgICAgLy8gb3VyIG93bi4KQEAg
LTYyMSwyOSArNjAzLDI5IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDCiAKICAgICBBU1NFUlQo
IWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRpYWwgJiYg
aXNJbml0aWFsIC0+ICFpc0luaGVyaXQKIAotICAgIGlmICghc3RhdGUuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAoYnVpbGRl
clN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxpZFZpc2l0
ZWRMaW5rUHJvcGVydHkoaWQpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0aWVzIHRo
YXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNpdGVkLgog
ICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NTUHJvcGVy
dHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5zdHlsZSgpLT5zZXRI
YXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgICAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAjaWYgRU5B
QkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgaWYgKGlzPENTU1BhaW50SW1hZ2VWYWx1ZT4odmFs
dWVUb0FwcGx5KSkgewogICAgICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8Q1NTUGFpbnRJbWFn
ZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUoKTsKLSAgICAgICAgaWYgKGF1dG8qIHBh
aW50V29ya2xldCA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnBhaW50V29ya2xldEdsb2Jh
bFNjb3BlRm9yTmFtZShuYW1lKSkgeworICAgICAgICBpZiAoYXV0byogcGFpbnRXb3JrbGV0ID0g
Y29uc3RfY2FzdDxEb2N1bWVudCY+KGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKS5wYWludFdvcmts
ZXRHbG9iYWxTY29wZUZvck5hbWUobmFtZSkpIHsKICAgICAgICAgICAgIGF1dG8gbG9ja2VyID0g
aG9sZExvY2socGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAgICAgICAg
ICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlvbiA9IHBhaW50V29ya2xldC0+cGFpbnREZWZpbml0aW9u
TWFwKCkuZ2V0KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9wZXJ0eSA6
IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAgICBzdGF0
ZS5zdHlsZSgpLT5hZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkocHJvcGVydHkpOworICAgICAg
ICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5hZGRDdXN0b21QYWludFdhdGNoUHJv
cGVydHkocHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogI2VuZGlm
CiAKICAgICAvLyBVc2UgdGhlIGdlbmVyYXRlZCBTdHlsZUJ1aWxkZXIuCi0gICAgU3R5bGVCdWls
ZGVyOjphcHBseVByb3BlcnR5KGlkLCBtX3N0eWxlUmVzb2x2ZXIsIHZhbHVlVG9BcHBseS5nZXQo
KSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7CisgICAg
U3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBidWlsZGVyU3RhdGUsIHZhbHVlVG9BcHBs
eS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7
CiB9CiAKIFJlZjxDU1NWYWx1ZT4gUHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC02NTMsNyArNjM1LDcgQEAg
UmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIENTU1ZhbHVlJgogICAgIAogICAgIGF1dG8gdmFyaWFibGVWYWx1ZSA9IHJl
c29sdmVkVmFyaWFibGVWYWx1ZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgLy8gSWYgdGhlIGNh
c2NhZGUgaGFzIGFscmVhZHkgYXBwbGllZCB0aGlzIGlkLCB0aGVuIHdlIGRldGVjdGVkIGEgY3lj
bGUsIGFuZCB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICBpZiAoIXZhcmlhYmxlVmFs
dWUgfHwgbV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkgewor
ICAgIGlmICghdmFyaWFibGVWYWx1ZSB8fCBidWlsZGVyU3RhdGUoKS5tX2FwcGxpZWRQcm9wZXJ0
aWVzLmdldChwcm9wZXJ0eUlEKSkgewogICAgICAgICBpZiAoQ1NTUHJvcGVydHk6OmlzSW5oZXJp
dGVkUHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFsdWVQb29s
OjpzaW5nbGV0b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwogICAgICAgICByZXR1cm4gQ1NT
VmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgpOwpAQCAt
NjY0LDEzICs2NDYsMTMgQEAgUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVW
YWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJgogCiBSZWZQdHI8Q1NTVmFs
dWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5SUQg
cHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgQ1NTUGFyc2VyIHBhcnNlciht
X3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJzZVZhbHVl
V2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVlLCAqdGhpcyk7CisgICAgQ1NTUGFy
c2VyIHBhcnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gcGFyc2Vy
LnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGJ1aWxkZXJT
dGF0ZSgpKTsKIH0KIAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRX
cml0aW5nTW9kZSgpCiB7Ci0gICAgYXV0byYgc3R5bGUgPSAqbV9zdHlsZVJlc29sdmVyLnN0eWxl
KCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUoKS5zdHlsZSgpOwogCiAgICAgbV9k
aXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKICAgICBtX3dyaXRpbmdNb2RlID0gc3R5bGUu
d3JpdGluZ01vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5
Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgKaW5kZXgg
NDJjNTA4NWEzOWIuLjlmNTVjZmZiYzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNh
c2NhZGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlICJD
YXNjYWRlTGV2ZWwuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgorI2luY2x1
ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8Yml0c2V0PgotI2luY2x1ZGUgPHd0
Zi9CaXRtYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwxNCArMzYsNiBAQCBj
bGFzcyBTdHlsZVJlc29sdmVyOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1lbnVtIGNsYXNzIENh
c2NhZGVMZXZlbCA6IHVpbnQ4X3QgewotICAgIFVzZXJBZ2VudCAgID0gMSA8PCAwLAotICAgIFVz
ZXIgICAgICAgID0gMSA8PCAxLAotICAgIEF1dGhvciAgICAgID0gMSA8PCAyCi19OwotCi1zdGF0
aWMgY29uc3RleHByIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGFsbENhc2NhZGVMZXZlbHMoKSB7
IHJldHVybiB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgU3R5bGU6OkNhc2NhZGVM
ZXZlbDo6VXNlciwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH07IH0KLQogY2xhc3MgUHJv
cGVydHlDYXNjYWRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAg
LTUyLDggKzQ1LDYgQEAgcHVibGljOgogCiAgICAgflByb3BlcnR5Q2FzY2FkZSgpOwogCi0gICAg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNvbHZlcjsg
fQotCiAgICAgc3RydWN0IFByb3BlcnR5IHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBpZDsKICAg
ICAgICAgQ2FzY2FkZUxldmVsIGxldmVsOwpAQCAtNjksMTIgKzYwLDEyIEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFByb3Bl
cnR5KTsKICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7Ci0KICAgICB2b2lkIGFw
cGx5Q3VzdG9tUHJvcGVydGllcygpOwogICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0eShjb25z
dCBTdHJpbmcmIG5hbWUpOwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQs
IENTU1ZhbHVlJiwgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaERlZmF1bHQpOwogCisgICAgQnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUoKSB7
IHJldHVybiAqbV9idWlsZGVyU3RhdGU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGJ1aWxkQ2Fz
Y2FkZShPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPik7CiAgICAgYm9vbCBhZGROb3JtYWxNYXRjaGVz
KENhc2NhZGVMZXZlbCk7CkBAIC05NywxMSArODgsOSBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBy
ZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKTsKIAotICAgIFN0eWxlUmVzb2x2ZXImIG1f
c3R5bGVSZXNvbHZlcjsKLQogICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtX21hdGNoUmVzdWx0Owog
ICAgIGNvbnN0IEluY2x1ZGVkUHJvcGVydGllcyBtX2luY2x1ZGVkUHJvcGVydGllczsKLSAgICAK
KwogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUgbV93cml0
aW5nTW9kZTsKIApAQCAtMTExLDE5ICsxMDAsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UHJv
cGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0cmluZywg
UHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsKIAotICAgIC8vIFN0YXRlIHRvIHVzZSB3aGVu
IGFwcGx5aW5nIHByb3BlcnRpZXMsIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9tIGFuZCBo
aWdoLXByaW9yaXR5Ci0gICAgLy8gcHJvcGVydGllcyBoYXZlIGJlZW4gcmVzb2x2ZWQuCi0gICAg
c3RydWN0IEFwcGx5U3RhdGUgewotICAgICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gYXBw
bGllZFByb3BlcnRpZXMgPSB7IH07Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBsaWVkQ3Vz
dG9tUHJvcGVydGllcyA9IHsgfTsKLSAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IGlu
UHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OwotICAgICAgICBIYXNoU2V0PFN0cmluZz4gaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20gPSB7IH07Ci0gICAgfTsKLQotICAgIEFwcGx5U3RhdGUgbV9h
cHBseVN0YXRlOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFByb3BlcnR5Q2FzY2FkZT4g
bV9hdXRob3JSb2xsYmFja0Nhc2NhZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFByb3Bl
cnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2tDYXNjYWRlOworCisgICAgT3B0aW9uYWw8QnVpbGRl
clN0YXRlPiBtX2J1aWxkZXJTdGF0ZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5Q2FzY2Fk
ZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMC4uODRhZDBiYTFkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9z
dHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5oIgorCisj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3Bh
Y2UgU3R5bGUgeworCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNhc2NhZGUm
IGNhc2NhZGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgOiBtX2Nhc2NhZGUo
Y2FzY2FkZSkKKyAgICAsIG1fc3R5bGVNYXAoKnRoaXMpCisgICAgLCBtX2Nzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSkKKyAgICAsIG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVyKQorICAgICwgbV9zdHls
ZSgqc3R5bGVSZXNvbHZlci5zdHlsZSgpKQorICAgICwgbV9wYXJlbnRTdHlsZSgqc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpKQorICAgICwgbV9yb290RWxlbWVudFN0eWxlKCpzdHlsZVJlc29s
dmVyLnJvb3RFbGVtZW50U3R5bGUoKSkKKyAgICAsIG1fZG9jdW1lbnQobV9zdHlsZVJlc29sdmVy
LmRvY3VtZW50KCkpCisgICAgLCBtX2VsZW1lbnQoKm1fc3R5bGVSZXNvbHZlci5lbGVtZW50KCkp
Cit7Cit9CisKK2Jvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzKCk7Cit9CisKK2Jvb2wg
QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCk7Cit9CisKK1Jl
ZlB0cjxTdHlsZUltYWdlPiBCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NTVmFsdWUm
IHZhbHVlKQoreworICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSk7
Cit9CisKK2Jvb2wgQnVpbGRlclN0YXRlOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sKKyAgICBy
ZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIG91dE9w
ZXJhdGlvbnMpOworfQorCitDb2xvciBCdWlsZGVyU3RhdGU6OmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVkTGluaykg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKHZhbHVlLCBmb3JWaXNpdGVkTGluayk7Cit9CisKK3ZvaWQgQnVpbGRlclN0YXRlOjpzZXRG
b250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgZmxvYXQgc2l6ZSkK
K3sKKyAgICBtX3N0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZGVzY3JpcHRpb24sIHNpemUpOwor
fQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJT
dGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDg3MTZmZWViMTMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCkBAIC0wLDAg
KzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDU1NUb0xl
bmd0aENvbnZlcnNpb25EYXRhLmgiCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgorI2luY2x1
ZGUgIkNhc2NhZGVMZXZlbC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
U2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFN0eWxlSW1hZ2U7CitjbGFzcyBTdHlsZVJlc29sdmVyOworCitu
YW1lc3BhY2UgU3R5bGUgeworCitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7CisKK2NsYXNzIEJ1aWxk
ZXJTdGF0ZSB7CitwdWJsaWM6CisgICAgQnVpbGRlclN0YXRlKFByb3BlcnR5Q2FzY2FkZSYsIFN0
eWxlUmVzb2x2ZXImKTsKKworICAgIFByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSgpIHsgcmV0dXJu
IG1fY2FzY2FkZTsgfQorICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7IHJldHVy
biBtX3N0eWxlUmVzb2x2ZXI7IH0KKworICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIHsgcmV0dXJu
IG1fc3R5bGU7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUoKSBjb25zdCB7
IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJvb3RFbGVt
ZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKworICAgIGNv
bnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQuZ2V0KCk7
IH0KKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50
LmdldCgpOyB9CisKKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7IH0KKyAgICB2b2lkIHNldEZv
bnRTaXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKKyAgICB2b2lkIHNl
dFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7IH0KKyAg
ICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxl
LnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdyaXRpbmdN
b2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGluZ01vZGUo
d3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0
aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRleHRPcmll
bnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0
IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisgICAgdm9pZCBzZXRGb250RGlydHkoKSB7IG1fZm9u
dERpcnR5ID0gdHJ1ZTsgfQorICAgIHZvaWQgY2xlYXJGb250RGlydHkoKSB7IG1fZm9udERpcnR5
ID0gZmFsc2U7IH0KKworICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbigpIHsgcmV0dXJuIG1fc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAgICBjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7IHJldHVy
biBtX3BhcmVudFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOyB9CisKKyAgICAvLyBGSVhNRTogVGhl
c2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgY2xlYW4gdXAgdGhlIGNvZGUgdG8gdGFrZSB0aGF0
IGludG8gYWNjb3VudC4KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGlua01hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVk
OyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5rTWF0Y2ggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7IH0KKwor
ICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7CisgICAgYm9vbCB1c2VTVkdab29tUnVs
ZXNGb3JMZW5ndGgoKSBjb25zdDsKKyAgICBTY29wZU9yZGluYWwgc3R5bGVTY29wZU9yZGluYWwo
KSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2NvcGVPcmRpbmFsOyB9CisKKyAgICBSZWZQdHI8U3R5
bGVJbWFnZT4gY3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYpOworICAgIGJvb2wgY3JlYXRlRmls
dGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYsIEZpbHRlck9wZXJhdGlvbnMmIG91dE9wZXJh
dGlvbnMpOworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1p
dGl2ZVZhbHVlJiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKworICAgIGNv
bnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7IH0KKyAgICBDU1NU
b1N0eWxlTWFwJiBzdHlsZU1hcCgpIHsgcmV0dXJuIG1fc3R5bGVNYXA7IH0KKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlDYXNjYWRlOworCisgICAgUHJvcGVydHlDYXNjYWRl
JiBtX2Nhc2NhZGU7CisKKyAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CisgICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CisKKyAgICAv
LyBGSVhNRTogUmVtb3ZlLgorICAgIFN0eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZlcjsKKwor
ICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3BhcmVu
dFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3Jvb3RFbGVtZW50U3R5bGU7CisKKyAg
ICBSZWY8Y29uc3QgRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgUmVmPGNvbnN0IEVsZW1lbnQ+
IG1fZWxlbWVudDsKKworICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2FwcGxpZWRQcm9w
ZXJ0aWVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzOwor
ICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzOworICAg
IEhhc2hTZXQ8U3RyaW5nPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tOworCisgICAgQ2Fz
Y2FkZUxldmVsIG1fY2FzY2FkZUxldmVsIHsgfTsKKyAgICBTY29wZU9yZGluYWwgbV9zdHlsZVNj
b3BlT3JkaW5hbCB7IH07CisgICAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrIG1fbGlu
a01hdGNoIHsgfTsKKworICAgIGJvb2wgbV9mb250RGlydHkgeyBmYWxzZSB9OworfTsKKworfQor
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382287</attachid>
            <date>2019-10-29 23:39:36 -0700</date>
            <delta_ts>2019-10-29 23:47:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylebuilder-state-2.patch</filename>
            <type>text/plain</type>
            <size>299977</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiZTNiZjUxYTA2Ny4uNThjNDc2Njk3NTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNTUgQEAKKzIwMTktMTAtMjkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYnVpbGRpbmcgc3RhdGUgdG8gYSBjbGFzcyBvZiBpdHMg
b3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IG1vc3Qgb2YgdGhlIHN0YXRlIG5lZWRlZCBmb3IgYXBwbHlpbmcgcHJvcGVydGllcyBmcm9tIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlIGFuZCBQcm9wZXJ0eUNhc2NhZGU6OkFwcGx5U3RhdGUgdG8KKyAg
ICAgICAgbmV3IFN0eWxlOjpCdWlsZGVyU3RhdGUuIFBhc3MgQnVpbGRlclN0YXRlIGFyb3VuZCBp
biBhbGwgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0eWxlIGJ1aWxkaW5nCisgICAgICAgIGlu
c3RlYWQgb2YgU3R5bGVSZXNvbHZlci4KKworICAgICAgICBVbmxpa2UgU3R5bGVSZXNvbHZlciwg
QnVpbGRlclN0YXRlIGlzIGEgc3RhY2stYWxsb2NhdGVkIG9iamVjdCB0aGF0IGV4aXN0cyBkdXJp
bmcgc3R5bGUgYnVpbGRpbmcgb25seS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0
eWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpyb290RWxlbWVudFN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5oOgorICAgICAgICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlVG9rZW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZVJlZmVyZW5j
ZVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzIGNvbnN0KToKKyAgICAgICAgKiBjc3Mv
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3Vz
dG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxk
ZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoT3JBdXRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aFNpemlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGhNYXhTaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGFiU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRDb21wdXRlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRPYmplY3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Qm9yZGVyTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxp
Z24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb25UaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29udGFpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
blNraXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2hhcGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTY3JvbGxTbmFwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNr
U2l6ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRX
b3JkU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRWYXJpYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZH
TGVuZ3RoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFN0cm9rZURhc2hBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1
bHRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0
byk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRTeW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U3BlYWtBcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3RoKToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmVh
dHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGln
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
QWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVZlcnRpY2FsQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZp
ZXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0TGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtp
dExvY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29sb3JTY2hl
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRX
ZWJraXRCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0Qm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVT
aGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0V2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFz
aXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlcklu
Y3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdENvdW50ZXJJbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJSZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVTdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
VmFyaWFudExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVy
aWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1
YnlUZXh0U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQXJlYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVt
cGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1w
bGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9r
ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUp
OgorCisgICAgICAgIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBub24tbnVsbCByb290IGVsZW1lbnQg
c3R5bGUgc28gdGhlIGNhc2UgZG9lc24ndCBuZWVkIHNwZWNpYWwgYnJhbmNoZXMuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgICogY3NzL1N0eWxl
UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omluc3BlY3RvckNT
U09NV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRGb250RGlydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmZvbnREaXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Zm9udERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZvbnRE
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0Wm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6c2V0RWZmZWN0aXZlWm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0V3JpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFRleHRPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FzY2FkZUxldmVs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRDYXNjYWRlTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnN0eWxlU2NvcGVPcmRpbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZVNjb3BlT3JkaW5hbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZU1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlw
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29t
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2
ZVpvb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0V3Jp
dGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
VGV4dE9yaWVudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvbWFrZXByb3AucGw6Cisg
ICAgICAgIChnZXRBdXRvR2V0dGVyKToKKyAgICAgICAgKGdldEF1dG9TZXR0ZXIpOgorICAgICAg
ICAoZ2V0VmlzaXRlZExpbmtTZXR0ZXIpOgorICAgICAgICAoY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoZ2VuZXJhdGVDb2xvclZhbHVlU2V0dGVyKToKKyAgICAgICAgKGhhbmRs
ZUN1cnJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUlu
aGVyaXRWYWx1ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5VmFs
dWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1
ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZhbHVl
U2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlcik6
CisgICAgICAgIChnZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50KToKKyAgICAgICAgKGdlbmVyYXRl
SW5pdGlhbFZhbHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVy
KToKKyAgICAgICAgKGdlbmVyYXRlVmFsdWVTZXR0ZXIpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpidWlsZGVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAqIHN0eWxlL0Nhc2NhZGVMZXZlbC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6YWxsQ2FzY2FkZUxldmVscyk6CisgICAgICAgICogc3R5bGUvUHJvcGVy
dHlDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6
OlByb3BlcnR5Q2FzY2FkZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjphcHBseVByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0
aW5nTW9kZSk6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpidWlsZGVyU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OmFsbENhc2NhZGVMZXZlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6c3R5bGVSZXNvbHZlcik6IERlbGV0ZWQuCisg
ICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3Ro
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0
eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjpzZXRGb250U2l6ZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpjYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cGFyZW50U3R5bGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cm9vdEVsZW1lbnRT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpkb2N1
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjplbGVt
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0V3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0VGV4
dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmZv
bnREaXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y2xl
YXJGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Zm9u
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVNjb3Bl
T3JkaW5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpj
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnN0eWxlTWFwKToKKwogMjAxOS0xMC0yNyAgU2ltb24gRnJhc2VyICA8
c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggbnRoLWNoaWxkIEFuK0Igc2Vy
aWFsaXphdGlvbiB0byBtYXRjaCB0aGUgc3BlYwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCAxZTE3Y2NmNjFi
Ni4uNGYwYTUxYjcwYTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0Cisr
KyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0yMzQzLDYgKzIzNDMsNyBAQCBzdHls
ZS9DbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAKIHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9u
LmNwcAogc3R5bGUvSW5saW5lVGV4dEJveFN0eWxlLmNwcAogc3R5bGUvUHJvcGVydHlDYXNjYWRl
LmNwcAorc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwCiBzdHlsZS9TdHlsZUNoYW5nZS5jcHAK
IHN0eWxlL1N0eWxlRm9udFNpemVGdW5jdGlvbnMuY3BwCiBzdHlsZS9TdHlsZUludmFsaWRhdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDJhNGQzZjAzN2QyLi5hNWM5ZDY2ZDgwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDgzNyw2ICs0ODM3LDgg
QEAKIAkJRTRBODE0RTAxQzczMzhFQjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTRERjFD
NzMzOEVCMDBCRjg1QUMgLyogSWRDaGFuZ2VJbnZhbGlkYXRpb24uaCAqLzsgfTsKIAkJRTRBOEQy
MTYyMjU3OERCNzAwQTg0NjNDIC8qIEV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZl
bnRSZWdpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQlFNEFCQUJFNDIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFCQUJFMjIzNjFBMzI5
MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi87IH07CisJCUU0QUJBQkYzMjM2OEI5NTkw
MEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVp
bGRlclN0YXRlLmggKi87IH07CisJCUU0QUJBQkY1MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRl
TGV2ZWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0
QUJBQkY0MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLzsgfTsKIAkJRTRBRTdD
MTYxN0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRTdDMTUxN0QxQkI5NTAwMDlGQjMxIC8q
IEVsZW1lbnRJdGVyYXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCUU0QUU3QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTRBRTdDMTkxN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRkNGQTUw
REFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6
aWVyLmggKi87IH07CkBAIC05MTM1LDggKzkxMzcsNiBAQAogCQk2NUZFQTg2ODA5ODMzQURFMDBC
RUQ0QUIgLyogUGFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
UGFnZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA3MUM2QkUxNTUw
MDE4QzdGMSAvKiBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5U1ZHRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY5NzEwMTA4MUM2QkUxNTUwMDE4QzdGMSAvKiBBY2Nlc3Np
YmlsaXR5U1ZHRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nl
c3NpYmlsaXR5U1ZHRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQlBQUQ5
RDBCMTIxREZBODBDMDAxQjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUFBRDlEMEIzMjFERkE4MEUwMDFCMTFDNyAv
KiBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gTGF6eUxvYWRJbWFnZU9ic2VydmVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTZBMjJFODZGMUYxMDQxODYwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5zcGVjdG9yQ2FudmFzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZB
MjJFODcyMUYxMDQyQzQwMEY1NDZDMyAvKiBJbnNwZWN0b3JDYW52YXMuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW5zcGVjdG9yQ2FudmFzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJNkE3Mjc5ODgxRjE2QzI5QjAwM0YzOUI4IC8qIEluc3BlY3RvclNoYWRlclByb2dyYW0uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5zcGVjdG9yU2hhZGVyUHJvZ3JhbS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTIxMzYsNiArMTIxMzYsOCBAQAogCQlB
QUNDODNENjIzMTY1NjlFMDBFQjZCRjUgLyogSFRNTE9yRm9yZWlnbkVsZW1lbnQuaWRsICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IEhUTUxPckZvcmVpZ25FbGVtZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QUFDQzgzRDcyMzE2NTc2QTAwRUI2QkY1IC8qIEpTSFRNTE9yRm9yZWlnbkVsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSlNIVE1MT3JGb3JlaWduRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBQUNDODNEODIzMTY1NzZCMDBFQjZCRjUgLyogSlNIVE1MT3JGb3JlaWduRWxl
bWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0hUTUxPckZvcmVpZ25FbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQUFEOUQwQjEyMURGQTgwQzAwMUIxMUM3IC8q
IExhenlMb2FkSW1hZ2VPYnNlcnZlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBMYXp5TG9hZEltYWdlT2JzZXJ2ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlBQUQ5RDBCMzIxREZBODBFMDAxQjExQzcgLyogTGF6eUxvYWRJbWFnZU9ic2VydmVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhenlMb2FkSW1hZ2VPYnNlcnZl
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NDE2Q0JGQzBEMDA2MjMw
NDMgLyogUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBQUUyN0I3NTE2Q0JGQzBEMDA2MjMwNDMgLyog
UGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGxhdGZvcm1TcGVlY2hTeW50aGVzaXplck1vY2suaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQUFFMzc1NUQxNzQyOUJDQzAwNjIwMEMyIC8qIFBsYXRmb3JtU3BlZWNo
U3ludGhlc2l6ZXJJT1MubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGgg
PSBQbGF0Zm9ybVNwZWVjaFN5bnRoZXNpemVySU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMTUxNTcsNiArMTUxNTksOSBAQAogCQlFNEE4RDIxNTIyNTc4REEwMDBBODQ2M0Mg
LyogRXZlbnRSZWdpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
RXZlbnRSZWdpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFCQUJFMjIz
NjFBMzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFByb3BlcnR5Q2FzY2FkZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCUU0QUJBQkYwMjM2OEI5MTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTdHlsZUJ1aWxkZXJTdGF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQkYyMjM2OEI5NTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxk
ZXJTdGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHlsZUJ1aWxkZXJT
dGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFNEFCQUJGNDIzNjhDNkVGMDBG
QTQzNDUgLyogQ2FzY2FkZUxldmVsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IENhc2NhZGVMZXZlbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFFN0MxNTE3
RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEVsZW1lbnRJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFNEFFN0MxOTE3RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRWxlbWVudEFuY2VzdG9ySXRlcmF0
b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRkNGQTQwREFGMjlBMzAwRjVG
NTVDIC8qIFVuaXRCZXppZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5p
dEJlemllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjY4OTQsNiArMjY4OTks
NyBAQAogCQkJY2hpbGRyZW4gPSAoCiAJCQkJRTRBODE0RDcxQzcwRTEwNTAwQkY4NUFDIC8qIEF0
dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8sCiAJCQkJRTRBODE0RDkxQzcwRTEwRDAw
QkY4NUFDIC8qIEF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5oICovLAorCQkJCUU0QUJBQkY0
MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLywKIAkJCQlFNEE4MTRENTFDNkRF
RThEMDBCRjg1QUMgLyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCUU0QTgx
NEQzMUM2REVDNDAwMEJGODVBQyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5oICovLAogCQkJ
CUU0QTgxNEREMUM3MzM4RDEwMEJGODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8s
CkBAIC0yNjkwMiw2ICsyNjkwOCw4IEBACiAJCQkJMUMwMTA2RkYxOTI1OTRERjAwOEE0MjAxIC8q
IElubGluZVRleHRCb3hTdHlsZS5oICovLAogCQkJCUU0QUJBQkU1MjM2MUEzNDIwMEZBNDM0NSAv
KiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovLAogCQkJCUU0QUJBQkUyMjM2MUEzMjkwMEZBNDM0NSAv
KiBQcm9wZXJ0eUNhc2NhZGUuaCAqLywKKwkJCQlFNEFCQUJGMDIzNjhCOTE4MDBGQTQzNDUgLyog
U3R5bGVCdWlsZGVyU3RhdGUuY3BwICovLAorCQkJCUU0QUJBQkYyMjM2OEI5NTgwMEZBNDM0NSAv
KiBTdHlsZUJ1aWxkZXJTdGF0ZS5oICovLAogCQkJCUU0MDFFMEE1MUMzQzBDRjcwMEYzNEQxMCAv
KiBTdHlsZUNoYW5nZS5jcHAgKi8sCiAJCQkJRTQwMUUwQTMxQzNDMEI4MzAwRjM0RDEwIC8qIFN0
eWxlQ2hhbmdlLmggKi8sCiAJCQkJRTRENThFQjYxN0I0RUQ4OTAwQ0JEQ0E4IC8qIFN0eWxlRm9u
dFNpemVGdW5jdGlvbnMuY3BwICovLApAQCAtMzAxNjMsNiArMzAxNzEsNyBAQAogCQkJCUJFOEVG
MDQ1MTcxQzhGRjkwMDlCNDhDMyAvKiBKU0F1ZGlvVHJhY2tMaXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQk1N0QxMzUyQTIyOTRBQTM5MDA4Mjc0MDEgLyogSlNBdXRoZW50aWNhdGlvbkV4dGVuc2lv
bnNDbGllbnRJbnB1dHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQzJGMjAwOUI3RTEwMDM1
NTk2NSAvKiBKU0F1dGhlbnRpY2F0b3JBc3NlcnRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTRBQkFCRjMyMzY4Qjk1OTAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk1NzMwM0MyMjIwMDlBRjAzMDAzNTU5NjUgLyogSlNBdXRoZW50aWNh
dG9yQXR0ZXN0YXRpb25SZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNCRTEyMDA5
NUQ2MTAwMzU1OTY1IC8qIEpTQXV0aGVudGljYXRvclJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk1N0RDRUQ5ODIxNDg4MjE2MDAxNkI4NDcgLyogSlNBdXRoZW50aWNhdG9yVHJhbnNwb3J0
LmggaW4gSGVhZGVycyAqLywKQEAgLTMxNDkyLDYgKzMxNTAxLDcgQEAKIAkJCQlCQzNCRTEyQjBF
OTgwOTJGMDA4MzU1ODggLyogUG9wdXBNZW51U3R5bGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTM3
RjU2N0NFMTY1MzU4RjQwMERERTkyQiAvKiBQb3B1cE9wZW5pbmdPYnNlcnZlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTNGMTk5REUwODI0NUU1OTAwMUU5QUJDIC8qIFBvc2l0aW9uLmggaW4gSGVh
ZGVycyAqLywKKwkJCQlFNEFCQUJGNTIzNjhDNkVGMDBGQTQzNDUgLyogQ2FzY2FkZUxldmVsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzQ2QUYyQzE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25D
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMzAxNEY0RERFNjAwM0U3QTcwIC8q
IFBvc2l0aW9uRXJyb3JDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzc5MTlDMjQwQjdE
MTg4NjAwQTU2OTk4IC8qIFBvc2l0aW9uSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCmluZGV4IGM4NTkyMGIwMTczLi42MzNmMmI1OGY3MCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcApAQCAtNDUsMjkgKzQ1LDI0IEBACiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTVG9TdHlsZU1hcDo6Q1NTVG9TdHlsZU1hcChTdHls
ZVJlc29sdmVyKiByZXNvbHZlcikKLSAgICA6IG1fcmVzb2x2ZXIocmVzb2x2ZXIpCitDU1NUb1N0
eWxlTWFwOjpDU1NUb1N0eWxlTWFwKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
KyAgICA6IG1fYnVpbGRlclN0YXRlKGJ1aWxkZXJTdGF0ZSkKIHsKIH0KIAogUmVuZGVyU3R5bGUq
IENTU1RvU3R5bGVNYXA6OnN0eWxlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+
c3R5bGUoKTsKLX0KLQotY29uc3QgUmVuZGVyU3R5bGUqIENTU1RvU3R5bGVNYXA6OnJvb3RFbGVt
ZW50U3R5bGUoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5yb290RWxlbWVudFN0
eWxlKCk7CisgICAgcmV0dXJuICZtX2J1aWxkZXJTdGF0ZS5zdHlsZSgpOwogfQogCiBib29sIENT
U1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVz
b2x2ZXItPnVzZVNWR1pvb21SdWxlcygpOworICAgIHJldHVybiBtX2J1aWxkZXJTdGF0ZS51c2VT
Vkdab29tUnVsZXMoKTsKIH0KIAogUmVmUHRyPFN0eWxlSW1hZ2U+IENTU1RvU3R5bGVNYXA6OnN0
eWxlSW1hZ2UoQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHls
ZUltYWdlKHZhbHVlKTsKKyAgICByZXR1cm4gbV9idWlsZGVyU3RhdGUuY3JlYXRlU3R5bGVJbWFn
ZSh2YWx1ZSk7CiB9CiAKIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbEF0dGFjaG1lbnQoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCkBAIC0yMTQsNyArMjA5LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsU2l6
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnMKICAgICAg
ICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKGZpbGxTaXplLnR5cGUgPT0g
RmlsbFNpemVUeXBlOjpTaXplKTsKLSAgICAgICAgaWYgKCFjb252ZXJ0VG9MZW5ndGhTaXplKHBy
aW1pdGl2ZVZhbHVlLCBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKSwgZmlsbFNpemUuc2l6ZSkpCisgICAgICAgIGlmICghY29udmVydFRvTGVuZ3RoU2l6ZShw
cmltaXRpdmVWYWx1ZSwgbV9idWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
LCBmaWxsU2l6ZS5zaXplKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAg
ICAgfQpAQCAtMjM2LDkgKzIzMSw5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFhQb3Np
dGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsCiAgICAgTGVu
Z3RoIGxlbmd0aDsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHByb3Bl
cnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YIHx8IHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YKTsKLSAgICAgICAgbGVu
Z3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKCptX3Jlc29sdmVyLCAq
cGFpci0+c2Vjb25kKCkpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgobV9idWlsZGVyU3RhdGUsICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50WCgqbV9yZXNvbHZlciwgdmFsdWUpOworICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgobV9idWlsZGVyU3Rh
dGUsIHZhbHVlKTsKIAogICAgIGxheWVyLnNldFhQb3NpdGlvbihsZW5ndGgpOwogICAgIGlmIChw
YWlyKQpAQCAtMjYwLDkgKzI1NSw5IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFlQb3Np
dGlvbihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsCiAgICAgTGVu
Z3RoIGxlbmd0aDsKICAgICBpZiAocGFpcikgewogICAgICAgICBBU1NFUlRfVU5VU0VEKHByb3Bl
cnR5SUQsIHByb3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZIHx8IHBy
b3BlcnR5SUQgPT0gQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZKTsKLSAgICAgICAgbGVu
Z3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKCptX3Jlc29sdmVyLCAq
cGFpci0+c2Vjb25kKCkpOworICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgobV9idWlsZGVyU3RhdGUsICpwYWlyLT5zZWNvbmQoKSk7CiAgICAgfSBl
bHNlCi0gICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50WSgqbV9yZXNvbHZlciwgdmFsdWUpOworICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkobV9idWlsZGVyU3Rh
dGUsIHZhbHVlKTsKICAgICAKICAgICBsYXllci5zZXRZUG9zaXRpb24obGVuZ3RoKTsKICAgICBp
ZiAocGFpcikKQEAgLTQwOSw3ICs0MDQsNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1h
dGlvbk5hbWUoQW5pbWF0aW9uJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICBsYXll
ci5zZXRJc05vbmVBbmltYXRpb24odHJ1ZSk7CiAgICAgZWxzZQotICAgICAgICBsYXllci5zZXRO
YW1lKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG1fcmVzb2x2ZXItPnN0YXRlKCkuc3R5
bGVTY29wZU9yZGluYWwoKSk7CisgICAgICAgIGxheWVyLnNldE5hbWUocHJpbWl0aXZlVmFsdWUu
c3RyaW5nVmFsdWUoKSwgbV9idWlsZGVyU3RhdGUuc3R5bGVTY29wZU9yZGluYWwoKSk7CiB9CiAK
IHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uUGxheVN0YXRlKEFuaW1hdGlvbiYgbGF5
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKQEAgLTU5Myw3ICs1ODgsNyBAQCBMZW5ndGhCb3gg
Q1NTVG9TdHlsZU1hcDo6bWFwTmluZVBpZWNlSW1hZ2VRdWFkKENTU1ZhbHVlJiB2YWx1ZSkKICAg
ICAgICAgcmV0dXJuIExlbmd0aEJveCgpOwogCiAgICAgLy8gR2V0IG91ciB6b29tIHZhbHVlLgot
ICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSB1c2VTVkdab29t
UnVsZXMoKSA/IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
LmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252
ZXJzaW9uRGF0YSA9IHVzZVNWR1pvb21SdWxlcygpID8gbV9idWlsZGVyU3RhdGUuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpIDogbV9idWlsZGVy
U3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgLy8gUmV0cmlldmUgdGhl
IHByaW1pdGl2ZSB2YWx1ZS4KICAgICBhdXRvJiBib3JkZXJXaWR0aHMgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgKaW5kZXgg
NGZiMjlhOWQzYTYuLmExYzQ0MjFiYWI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTVG9TdHlsZU1hcC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmgK
QEAgLTM0LDE0ICszNCwxNyBAQCBjbGFzcyBMZW5ndGhCb3g7CiBjbGFzcyBOaW5lUGllY2VJbWFn
ZTsKIGNsYXNzIFJlbmRlclN0eWxlOwogY2xhc3MgU3R5bGVJbWFnZTsKLWNsYXNzIFN0eWxlUmVz
b2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAKIGNs
YXNzIENTU1RvU3R5bGVNYXAgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENTU1RvU3R5bGVN
YXApOwogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogCiBwdWJsaWM6Ci0gICAgQ1NTVG9T
dHlsZU1hcChTdHlsZVJlc29sdmVyKik7CisgICAgQ1NTVG9TdHlsZU1hcChTdHlsZTo6QnVpbGRl
clN0YXRlJik7CiAKICAgICB2b2lkIG1hcEZpbGxBdHRhY2htZW50KENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgdm9pZCBtYXBGaWxsQ2xpcChDU1NQcm9w
ZXJ0eUlELCBGaWxsTGF5ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwpAQCAtNzIsMTkgKzc1LDEyIEBA
IHB1YmxpYzoKICAgICB2b2lkIG1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KENTU1ZhbHVlJiwgTmlu
ZVBpZWNlSW1hZ2UmKTsKIAogcHJpdmF0ZToKLSAgICAvLyBGSVhNRTogVGhlc2UgYWNjZXNzb3Jz
IHNob3VsZCBiZSByZXBsYWNlZCBieSBhIFJlc29sdmVTdGF0ZSBvYmplY3QKLSAgICAvLyBzaW1p
bGFyIHRvIGhvdyBQYWludEluZm8vTGF5b3V0U3RhdGUgY2FjaGUgdmFsdWVzIG5lZWRlZCBmb3IK
LSAgICAvLyB0aGUgY3VycmVudCBwYWludC9sYXlvdXQuCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxl
KCkgY29uc3Q7Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUqIHJvb3RFbGVtZW50U3R5bGUoKSBjb25z
dDsKICAgICBib29sIHVzZVNWR1pvb21SdWxlcygpIGNvbnN0OwotCi0gICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIHBhcnQgb2Ygc29tZSBzb3J0IG9mIFN0eWxlSW1hZ2VDYWNoZSBvYmplY3Qg
d2hpY2gKLSAgICAvLyBpcyBoZWxkIGJ5IHRoZSBTdHlsZVJlc29sdmVyLCBhbmQgbGlrZWx5IHBy
b3ZpZGVkIHRvIHRoaXMgb2JqZWN0Ci0gICAgLy8gZHVyaW5nIHRoZSByZXNvbHZlLgogICAgIFJl
ZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBTdHlsZVJlc29s
dmVyKiBtX3Jlc29sdmVyOworICAgIC8vIEZJWE1FOiBUaGlzIHR5cGUgY2FuIG1lcmdlIGludG8g
QnVpbGRlclN0YXRlLgorICAgIFN0eWxlOjpCdWlsZGVyU3RhdGUmIG1fYnVpbGRlclN0YXRlOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwCmluZGV4IGY4NGI4YjZlOWI5Li5mZTYwZGNmYmZi
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFs
dWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcApAQCAtNDUsMjEgKzQ1LDIxIEBAIFN0cmluZyBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
OjpjdXN0b21DU1NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gbV9zdHJpbmdWYWx1ZTsKIH0KIAot
c3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9y
PENTU1BhcnNlclRva2VuPiYsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKTsKK3N0YXRpYyBib29s
IHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJU
b2tlbj4mLCBTdHlsZTo6QnVpbGRlclN0YXRlJik7CiAKLXN0YXRpYyBib29sIHJlc29sdmVWYXJp
YWJsZUZhbGxiYWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJU
b2tlbj4mIHJlc3VsdCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK3N0YXRpYyBi
b29sIHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZl
Y3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewogICAgIGlmIChyYW5nZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbik7CiAgICAgcmFu
Z2UuY29uc3VtZSgpOwotICAgIHJldHVybiByZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0
LCBjYXNjYWRlKTsKKyAgICByZXR1cm4gcmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwg
YnVpbGRlclN0YXRlKTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNl
KENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3Vs
dCwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK3N0YXRpYyBib29sIHJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZShDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFy
c2VyVG9rZW4+JiByZXN1bHQsIFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBhdXRvJiByZWdpc3RlcmVkUHJvcGVydGllcyA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigp
LmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCk7Ci0gICAgYXV0
byYgc3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBy
ZWdpc3RlcmVkUHJvcGVydGllcyA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpOworICAgIGF1dG8mIHN0eWxlID0gYnVpbGRlclN0YXRl
LnN0eWxlKCk7CiAKICAgICByYW5nZS5jb25zdW1lV2hpdGVzcGFjZSgpOwogICAgIEFTU0VSVChy
YW5nZS5wZWVrKCkudHlwZSgpID09IElkZW50VG9rZW4pOwpAQCAtNjcsMTEgKzY3LDExIEBAIHN0
YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShDU1NQYXJzZXJUb2tlblJhbmdlIHJh
bmdlLCBWZWN0b3I8Q1NTUGFyc2VyCiAgICAgQVNTRVJUKHJhbmdlLmF0RW5kKCkgfHwgKHJhbmdl
LnBlZWsoKS50eXBlKCkgPT0gQ29tbWFUb2tlbikpOwogCiAgICAgLy8gQXBwbHkgdGhpcyB2YXJp
YWJsZSBmaXJzdCwgaW4gY2FzZSBpdCBpcyBzdGlsbCB1bnJlc29sdmVkCi0gICAgY2FzY2FkZS5h
cHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CisgICAgYnVpbGRlclN0YXRlLmNhc2Nh
ZGUoKS5hcHBseUN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKICAgICAvLyBBcHBseSBm
YWxsYmFjayB0byBkZXRlY3QgY3ljbGVzCiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiBmYWxs
YmFja1Jlc3VsdDsKLSAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFs
bGJhY2soQ1NTUGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBjYXNjYWRl
KTsKKyAgICBib29sIGZhbGxiYWNrUmV0dXJuID0gcmVzb2x2ZVZhcmlhYmxlRmFsbGJhY2soQ1NT
UGFyc2VyVG9rZW5SYW5nZShyYW5nZSksIGZhbGxiYWNrUmVzdWx0LCBidWlsZGVyU3RhdGUpOwog
CiAgICAgYXV0byogcHJvcGVydHkgPSBzdHlsZS5nZXRDdXN0b21Qcm9wZXJ0eSh2YXJpYWJsZU5h
bWUpOwogCkBAIC05MywyNCArOTMsMjQgQEAgc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXIKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0LCBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVRva2VuUmFuZ2Uo
Q1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0
LCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgYm9vbCBzdWNjZXNz
ID0gdHJ1ZTsKICAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkpIHsKICAgICAgICAgaWYgKHJhbmdl
LnBlZWsoKS5mdW5jdGlvbklkKCkgPT0gQ1NTVmFsdWVWYXIgfHwgcmFuZ2UucGVlaygpLmZ1bmN0
aW9uSWQoKSA9PSBDU1NWYWx1ZUVudikKLSAgICAgICAgICAgIHN1Y2Nlc3MgJj0gcmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlKHJhbmdlLmNvbnN1bWVCbG9jaygpLCByZXN1bHQsIGNhc2NhZGUpOwor
ICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UocmFuZ2UuY29u
c3VtZUJsb2NrKCksIHJlc3VsdCwgYnVpbGRlclN0YXRlKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgcmVzdWx0LmFwcGVuZChyYW5nZS5jb25zdW1lKCkpOwogICAgIH0KICAgICByZXR1cm4g
c3VjY2VzczsKIH0KIAotUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JiBjYXNjYWRlKSBjb25zdAorUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gQ1NTVmFyaWFibGVSZWZl
cmVuY2VWYWx1ZTo6cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpIGNvbnN0CiB7CiAgICAgVmVjdG9yPENTU1BhcnNlclRva2VuPiByZXNv
bHZlZFRva2VuczsKICAgICBDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlID0gbV9kYXRhLT50b2tl
blJhbmdlKCk7CiAKLSAgICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRv
a2VucywgY2FzY2FkZSkpCisgICAgaWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2
ZWRUb2tlbnMsIGJ1aWxkZXJTdGF0ZSkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAg
cmV0dXJuIENTU1ZhcmlhYmxlRGF0YTo6Y3JlYXRlKHJlc29sdmVkVG9rZW5zKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oCmluZGV4IDlhMTIwYzM2
Nzc0Li5jNTZmM2JlMzI1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Zhcmlh
YmxlUmVmZXJlbmNlVmFsdWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZS5oCkBAIC00Miw3ICs0Miw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIENTU1BhcnNlclRva2VuUmFuZ2U7CiAKIG5hbWVzcGFjZSBTdHlsZSB7Ci1jbGFzcyBQcm9w
ZXJ0eUNhc2NhZGU7CitjbGFzcyBCdWlsZGVyU3RhdGU7CiB9CiAKIGNsYXNzIENTU1ZhcmlhYmxl
UmVmZXJlbmNlVmFsdWUgOiBwdWJsaWMgQ1NTVmFsdWUgewpAQCAtNTUsNyArNTUsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBlcXVhbHMoY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5nZXQoKSA9PSBvdGhlci5tX2RhdGEuZ2V0KCk7IH0K
ICAgICBTdHJpbmcgY3VzdG9tQ1NTVGV4dCgpIGNvbnN0OwogCi0gICAgUmVmUHRyPENTU1Zhcmlh
YmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhTdHlsZTo6UHJvcGVydHlDYXNjYWRl
JikgY29uc3Q7CisgICAgUmVmUHRyPENTU1ZhcmlhYmxlRGF0YT4gcmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlcyhTdHlsZTo6QnVpbGRlclN0YXRlJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgQ1NT
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZShSZWY8Q1NTVmFyaWFibGVEYXRhPiYmIGRhdGEpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAK
aW5kZXggMGRmNmFhZTk2ZjAuLjFlN2E1M2IxOTkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvRE9NQ1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCkBAIC0zMyw2ICszMyw3IEBA
CiAjaW5jbHVkZSAiQ1NTVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAiRE9NQ1NTTmFtZXNwYWNlLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eUNhc2NhZGUuaCIKICNp
bmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZT
dHJpbmcuaD4KIApAQCAtNTEsNyArNTIsNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01DU1NSZWdp
c3RlckN1c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KERvY3VtZW50JiBkb2N1bQogICAg
ICAgICAvLyBXZSBuZWVkIHRvIGluaXRpYWxpemUgdGhpcyBzbyB0aGF0IHdlIGNhbiBzdWNjZXNz
ZnVsbHkgcGFyc2UgY29tcHV0YXRpb25hbGx5IGRlcGVuZGVudCB2YWx1ZXMgKGxpa2UgZW0gdW5p
dHMpLgogICAgICAgICAvLyBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRoZSB2YWx1ZXMgdG8gYmUg
YWNjdXJhdGUsIHNpbmNlIHRoZXkgd2lsbCBiZSByZWplY3RlZCBsYXRlciBhbnl3YXkKICAgICAg
ICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9TdHlsZShDU1NQcm9wZXJ0eUludmFsaWQs
IG51bGxwdHIsIHN0eWxlUmVzb2x2ZXIuZGVmYXVsdFN0eWxlRm9yRWxlbWVudCgpKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAKICAgICAgICAgSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiBkZXBlbmRlbmNpZXM7CiAgICAgICAgIENTU1Byb3BlcnR5UGFyc2VyOjpjb2xsZWN0
UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1ZURlcGVuZGVuY2llcyhkZXNjcmlwdG9yLnN5bnRheCwg
ZmFsc2UsIGRlcGVuZGVuY2llcywgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgc3RyaWN0Q1NTUGFy
c2VyQ29udGV4dCgpKTsKQEAgLTU5LDcgKzU5LDkgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NT
UmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eTo6cmVnaXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0K
ICAgICAgICAgaWYgKCFkZXBlbmRlbmNpZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgcmV0dXJu
IEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhlIGdpdmVuIGluaXRpYWwgdmFsdWUgbXVzdCBi
ZSBjb21wdXRhdGlvbmFsbHkgaW5kZXBlbmRlbnQuIiB9OwogCi0gICAgICAgIGluaXRpYWxWYWx1
ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShkZXNj
cmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBz
dHlsZVJlc29sdmVyLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOworICAgICAgICBNYXRjaFJl
c3VsdCBtYXRjaFJlc3VsdDsKKyAgICAgICAgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSBkdW1teUNh
c2NhZGUoc3R5bGVSZXNvbHZlciwgbWF0Y2hSZXN1bHQsIHsgfSk7CisgICAgICAgIGluaXRpYWxW
YWx1ZSA9IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShk
ZXNjcmlwdG9yLm5hbWUsIGRlc2NyaXB0b3Iuc3ludGF4LCB0b2tlbml6ZXIudG9rZW5SYW5nZSgp
LCBkdW1teUNhc2NhZGUuYnVpbGRlclN0YXRlKCksIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7
CiAKICAgICAgICAgaWYgKCFpbml0aWFsVmFsdWUgfHwgIWluaXRpYWxWYWx1ZS0+aXNSZXNvbHZl
ZCgpKQogICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFN5bnRheEVycm9yLCAiVGhlIGdp
dmVuIGluaXRpYWwgdmFsdWUgZG9lcyBub3QgcGFyc2UgZm9yIHRoZSBnaXZlbiBzeW50YXguIiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCmluZGV4IDhlZTU4M2VkMTdlLi42NDkxOGFjNzll
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaApAQCAtMzAsMTQgKzMwLDE2IEBACiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAotc3RydWN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eTsK
IGNsYXNzIENTU1ZhbHVlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKIHN0cnVjdCBDU1NSZWdpc3Rl
cmVkQ3VzdG9tUHJvcGVydHk7CiAKK25hbWVzcGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3Rh
dGU7Cit9CisKIGNsYXNzIFN0eWxlQnVpbGRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmLCBi
b29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Q
cm9wZXJ0eSopOworICAgIHN0YXRpYyB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJiwgYm9vbCBpc0luaXRpYWwsIGJvb2wgaXNJ
bmhlcml0LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqKTsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXJDb252ZXJ0ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0
ZXIuaAppbmRleCA4MmI0NmZlMGQxMi4uZWE4NWU1MGZhYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKQEAgLTUxLDcgKzUxLDcgQEAKICNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVkZSAiU1ZHVVJJUmVmZXJlbmNlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVk
ZSAiU3R5bGVCdWlsZGVyU3RhdGUuaCIKICNpbmNsdWRlICJTdHlsZVNjcm9sbFNuYXBQb2ludHMu
aCIKICNpbmNsdWRlICJUYWJTaXplLmgiCiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKQEAgLTYz
LDEwNyArNjMsMTA3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIC8vIE5vdGUgdGhhdCB3ZSBhc3N1
bWUgdGhlIENTUyBwYXJzZXIgb25seSBhbGxvd3MgdmFsaWQgQ1NTVmFsdWUgdHlwZXMuCiBjbGFz
cyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBMZW5ndGggY29u
dmVydExlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhPckF1dG8oY29uc3QgU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoU2l6aW5nKGNv
bnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5ndGgg
Y29udmVydExlbmd0aE1heFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgVGFiU2l6ZSBjb252ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
VCBjb252ZXJ0Q29tcHV0ZWRMZW5ndGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydExpbmVXaWR0aChTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgZmxvYXQgY29udmVydFNw
YWNpbmcoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0
aFNpemUgY29udmVydFJhZGl1cyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgTGVuZ3RoUG9pbnQgY29udmVydE9iamVjdFBvc2l0aW9uKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERlY29yYXRpb24+
IGNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TnVtYmVyKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyBUIGNvbnZlcnROdW1iZXJPckF1dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIHNob3J0IGNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+
IHN0YXRpYyBOaW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGVSZXNvbHZlciYs
IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIE5pbmVQaWVj
ZUltYWdlIGNvbnZlcnRCb3JkZXJNYXNrKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAg
IHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBSZWZQdHI8U3R5bGVJbWFnZT4gY29udmVy
dFN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRyYW5z
Zm9ybU9wZXJhdGlvbnMgY29udmVydFRyYW5zZm9ybShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGgoY29uc3QgU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0
TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aFNpemluZyhjb25zdCBTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRM
ZW5ndGhNYXhTaXppbmcoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFRhYlNpemUgY29udmVydFRhYlNpemUoY29uc3QgU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3Rh
dGljIFQgY29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRMaW5l
V2lkdGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IGZsb2F0IGNvbnZlcnRTcGFjaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBMZW5ndGhTaXplIGNvbnZlcnRSYWRpdXMoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aFBvaW50IGNvbnZlcnRP
YmplY3RQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBjb252ZXJ0VGV4dERlY29yYXRpb24o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51bWJlcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0
TnVtYmVyT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBzaG9ydCBjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlE
PiBzdGF0aWMgTmluZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlckltYWdlKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBO
aW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NT
VmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgUmVmUHRyPFN0eWxl
SW1hZ2U+IGNvbnZlcnRTdHlsZUltYWdlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBUcmFuc2Zvcm1PcGVyYXRpb25zIGNvbnZlcnRUcmFuc2Zvcm0oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKERBUktfTU9ERV9D
U1MpCi0gICAgc3RhdGljIFN0eWxlQ29sb3JTY2hlbWUgY29udmVydENvbG9yU2NoZW1lKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHlsZUNvbG9yU2NoZW1l
IGNvbnZlcnRDb2xvclNjaGVtZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKICNlbmRpZgotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZyhTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmdPckF1
dG8oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0cmluZyBj
b252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IGNvbnZlcnRUZXh0RW1waGFz
aXNQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
VGV4dEFsaWduTW9kZSBjb252ZXJ0VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGNvbnZlcnRDbGlw
UGF0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVzaXpl
IGNvbnZlcnRSZXNpemUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWY8UXVvdGVzRGF0YT4gY29udmVy
dFF1b3RlcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVGV4
dFVuZGVybGluZVBvc2l0aW9uIGNvbnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRleHRVbmRlcmxpbmVPZmZzZXQg
Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
Jik7Ci0gICAgc3RhdGljIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGNvbnZlcnRUZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gY29udmVydFJlZmxlY3Rpb24oU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEludFNpemUgY29udmVydEluaXRpYWxM
ZXR0ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGZsb2F0
IGNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIE9wdGlvblNldDxMaW5lQm94Q29udGFpbj4gY29udmVydExpbmVCb3hDb250
YWluKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25T
ZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBjb252ZXJ0VGV4dERlY29yYXRpb25Ta2lwKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8U2hhcGVWYWx1ZT4g
Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IFN0cmluZyBjb252ZXJ0U3RyaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yQXV0byhTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJp
bmdPck5vbmUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gY29udmVydFRleHRFbXBoYXNpc1Bv
c2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBUZXh0QWxpZ25Nb2RlIGNvbnZlcnRUZXh0QWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNv
bnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gY29u
dmVydENsaXBQYXRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBSZXNpemUgY29udmVydFJlc2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVlUmVwZXRpdGlvbihTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgaW50IGNvbnZl
cnRNYXJxdWVlU3BlZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIFJlZjxRdW90ZXNEYXRhPiBjb252ZXJ0UXVvdGVzKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lUG9zaXRpb24g
Y29udmVydFRleHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVGV4dFVuZGVybGluZU9mZnNldCBjb252ZXJ0VGV4dFVu
ZGVybGluZU9mZnNldChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgVGV4dERlY29yYXRpb25UaGlja25lc3MgY29udmVydFRleHREZWNvcmF0aW9uVGhp
Y2tuZXNzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBjb252ZXJ0UmVmbGVjdGlvbihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgSW50U2l6ZSBjb252ZXJ0SW5p
dGlhbExldHRlcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgZmxvYXQgY29udmVydFRleHRTdHJva2VXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uU2V0PExpbmVCb3hDb250YWluPiBj
b252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IGNvbnZlcnRUZXh0
RGVjb3JhdGlvblNraXAoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIFJlZlB0cjxTaGFwZVZhbHVlPiBjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZTo6QnVp
bGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQotICAg
IHN0YXRpYyBTY3JvbGxTbmFwVHlwZSBjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFNjcm9sbFNuYXBBbGlnbiBjb252ZXJ0
U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBTY3JvbGxTbmFwVHlwZSBjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFNjcm9sbFNuYXBBbGlnbiBjb252
ZXJ0U2Nyb2xsU25hcEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OwogI2VuZGlmCi0gICAgc3RhdGljIEdyaWRUcmFja1NpemUgY29udmVydEdyaWRUcmFja1NpemUo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFZlY3RvcjxHcmlk
VHJhY2tTaXplPiBjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEdyaWRQb3NpdGlvbj4gY29udmVydEdy
aWRQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMg
R3JpZEF1dG9GbG93IGNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydFdvcmRTcGFjaW5n
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxm
bG9hdD4gY29udmVydFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYp
OwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxGaWx0
ZXJPcGVyYXRpb25zPiBjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBjb252ZXJ0R3JpZFRyYWNr
U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
VmVjdG9yPEdyaWRUcmFja1NpemU+IGNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8R3JpZFBv
c2l0aW9uPiBjb252ZXJ0R3JpZFBvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBHcmlkQXV0b0Zsb3cgY29udmVydEdyaWRBdXRvRmxvdyhT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9u
YWw8TGVuZ3RoPiBjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBjb252ZXJ0UGVyc3BlY3Rp
dmUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9w
dGlvbmFsPExlbmd0aD4gY29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlv
bnM+IGNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBD
U1NWYWx1ZSYpOwogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgc3RhdGljIGJvb2wgY29u
dmVydFRvdWNoQ2FsbG91dChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgYm9vbCBjb252ZXJ0VG91Y2hDYWxsb3V0KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLSAgICBzdGF0
aWMgQ29sb3IgY29udmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBDb2xvciBjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUo
UE9JTlRFUl9FVkVOVFMpCi0gICAgc3RhdGljIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gY29udmVy
dFRvdWNoQWN0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IGNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShPVkVSRkxPV19T
Q1JPTExJTkdfVE9VQ0gpCi0gICAgc3RhdGljIGJvb2wgY29udmVydE92ZXJmbG93U2Nyb2xsaW5n
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBib29sIGNvbnZl
cnRPdmVyZmxvd1Njcm9sbGluZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKICNlbmRpZgotICAgIHN0YXRpYyBGb250RmVhdHVyZVNldHRpbmdzIGNvbnZlcnRGb250RmVh
dHVyZVNldHRpbmdzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBGb250RmVhdHVyZVNldHRpbmdzIGNvbnZlcnRGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBGb250U2VsZWN0aW9u
VmFsdWUgY29udmVydEZvbnRXZWlnaHRGcm9tVmFsdWUoY29uc3QgQ1NTVmFsdWUmKTsKICAgICBz
dGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3RyZXRjaEZyb21WYWx1ZShjb25z
dCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGNv
bnZlcnRGb250U3R5bGVGcm9tVmFsdWUoY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgRm9u
dFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250V2VpZ2h0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJl
dGNoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2Vs
ZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHlsZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250V2VpZ2h0KFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBGb250U2Vs
ZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJldGNoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRT
dHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQotICAgIHN0YXRpYyBGb250VmFyaWF0aW9uU2V0dGluZ3MgY29udmVy
dEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgRm9udFZhcmlhdGlvblNldHRpbmdzIGNvbnZlcnRGb250VmFyaWF0aW9uU2V0
dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKLSAg
ICBzdGF0aWMgU1ZHTGVuZ3RoVmFsdWUgY29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+
IGNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFN0cm9rZURhc2hBcnJh
eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUGFpbnRPcmRl
ciBjb252ZXJ0UGFpbnRPcmRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgZmxvYXQgY29udmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBDb2xvciBjb252ZXJ0U1ZHQ29s
b3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0eWxlU2Vs
ZkFsaWdubWVudERhdGEgY29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHlsZUNvbnRlbnRBbGlnbm1l
bnREYXRhIGNvbnZlcnRDb250ZW50QWxpZ25tZW50RGF0YShTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgR2x5cGhPcmllbnRhdGlvbiBjb252ZXJ0R2x5cGhPcmll
bnRhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgR2x5
cGhPcmllbnRhdGlvbiBjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0
TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmLCBmbG9hdCBtdWx0aXBs
aWVyID0gMS5mKTsKLSAgICBzdGF0aWMgRm9udFN5bnRoZXNpcyBjb252ZXJ0Rm9udFN5bnRoZXNp
cyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU1ZHTGVuZ3Ro
VmFsdWUgY29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGNvbnZlcnRTVkdM
ZW5ndGhWZWN0b3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFN0cm9rZURhc2hBcnJheShTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgUGFpbnRPcmRl
ciBjb252ZXJ0UGFpbnRPcmRlcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgZmxvYXQgY29udmVydE9wYWNpdHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U1ZHVVJJUmVmZXJl
bmNlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBD
b2xvciBjb252ZXJ0U1ZHQ29sb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIFN0eWxlU2VsZkFsaWdubWVudERhdGEgY29udmVydFNlbGZPckRlZmF1
bHRBbGlnbm1lbnREYXRhKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIGNvbnZlcnRDb250ZW50QWxpZ25t
ZW50RGF0YShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgR2x5cGhPcmllbnRhdGlvbiBjb252ZXJ0R2x5cGhPcmllbnRhdGlvbihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR2x5cGhPcmllbnRhdGlvbiBj
b252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0TGluZUhlaWdo
dChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmLCBmbG9hdCBtdWx0aXBsaWVy
ID0gMS5mKTsKKyAgICBzdGF0aWMgRm9udFN5bnRoZXNpcyBjb252ZXJ0Rm9udFN5bnRoZXNpcyhT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICAKLSAgICBzdGF0aWMg
QnJlYWtCZXR3ZWVuIGNvbnZlcnRQYWdlQnJlYWtCZXR3ZWVuKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0UGFnZUJyZWFrSW5z
aWRlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBCcmVha0Jl
dHdlZW4gY29udmVydENvbHVtbkJyZWFrQmV0d2VlbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKLSAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydENvbHVtbkJyZWFrSW5zaWRl
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0JldHdl
ZW4gY29udmVydFBhZ2VCcmVha0JldHdlZW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRQYWdlQnJlYWtJbnNpZGUo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEJyZWFr
QmV0d2VlbiBjb252ZXJ0Q29sdW1uQnJlYWtCZXR3ZWVuKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0Q29sdW1uQnJl
YWtJbnNpZGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBz
dGF0aWMgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gY29udmVydEhhbmdpbmdQdW5jdHVh
dGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9u
U2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gY29udmVydEhhbmdpbmdQdW5jdHVhdGlvbihTdHlsZTo6
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBPcHRpb25TZXQ8
U3BlYWtBcz4gY29udmVydFNwZWFrQXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIE9wdGlvblNldDxTcGVha0FzPiBjb252ZXJ0U3BlYWtBcyhTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBMZW5ndGggY29udmVy
dFBvc2l0aW9uQ29tcG9uZW50WChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21w
b25lbnRYKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBMZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZTo6QnVpbGRlclN0YXRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBHYXBMZW5ndGggY29udmVydEdhcExlbmd0
aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgR2FwTGVuZ3Ro
IGNvbnZlcnRHYXBMZW5ndGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAgICAgCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBTdHlsZUJ1aWxkZXJDdXN0b207CkBA
IC0xNzIsNyArMTcyLDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgT3B0aW9uU2V0PFRleHRFbXBo
YXNpc1Bvc2l0aW9uPiB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYpOwogICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiB2YWx1ZVRv
RGVjb3JhdGlvblNraXAoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKICNpZiBFTkFCTEUoQ1NT
X1NDUk9MTF9TTkFQKQotICAgIHN0YXRpYyBMZW5ndGggcGFyc2VTbmFwQ29vcmRpbmF0ZShTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIHBhcnNlU25h
cENvb3JkaW5hdGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5k
aWYKIAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQpAQCAtMTgwLDIzICsxODAsMjMgQEAgcHJp
dmF0ZToKICNlbmRpZgogCiAgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0VG8xMDBQZXJjZW50TWlu
dXNMZW5ndGgoY29uc3QgTGVuZ3RoJik7Ci0gICAgdGVtcGxhdGU8Q1NTVmFsdWVJRCwgQ1NTVmFs
dWVJRD4gc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTVmFsdWVJRCwg
Q1NTVmFsdWVJRD4gc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAKLSAgICBzdGF0aWMg
R3JpZExlbmd0aCBjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiwgU3R5bGVSZXNvbHZlciYpOwotICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNyZWF0ZUdyaWRU
cmFja1NpemUoY29uc3QgQ1NTVmFsdWUmLCBTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIEdy
aWRMZW5ndGggY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYs
IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKKyAgICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBjcmVhdGVH
cmlkVHJhY2tTaXplKGNvbnN0IENTU1ZhbHVlJiwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogICAg
IHN0cnVjdCBUcmFja3NEYXRhOwotICAgIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3Qo
Y29uc3QgQ1NTVmFsdWUmLCBUcmFja3NEYXRhJiwgU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRp
YyBib29sIGNyZWF0ZUdyaWRUcmFja0xpc3QoY29uc3QgQ1NTVmFsdWUmLCBUcmFja3NEYXRhJiwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogICAgIHN0YXRpYyBib29sIGNyZWF0ZUdyaWRQb3NpdGlv
bihjb25zdCBDU1NWYWx1ZSYsIEdyaWRQb3NpdGlvbiYpOwogICAgIHN0YXRpYyB2b2lkIGNyZWF0
ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEoY29uc3QgTmFtZWRHcmlkQXJlYU1h
cCYsIE5hbWVkR3JpZExpbmVzTWFwJiwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uKTsKLSAgICBz
dGF0aWMgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRh
V2l0aFRleHRab29tRmFjdG9yKFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSBjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFj
dG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIH07CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBDU1NUb0xlbmd0
aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci51c2VTVkdab29t
UnVsZXNGb3JMZW5ndGgoKSA/Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikKLSAgICAgICAg
OiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAg
IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBidWlsZGVyU3RhdGUu
dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPworICAgICAgICBidWlsZGVyU3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCisgICAgICAg
IDogYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAogICAgIGlmIChw
cmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7CiAgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwpAQCAtMjE0
LDE5ICsyMTQsMTkgQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXMKICAgICByZXR1cm4gTGVuZ3Ro
KDAsIEZpeGVkKTsKIH0KIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMZW5ndGhPckF1dG8oY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGhPckF1dG8oY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgcmV0
dXJuIExlbmd0aChBdXRvKTsKLSAgICByZXR1cm4gY29udmVydExlbmd0aChzdHlsZVJlc29sdmVy
LCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoYnVpbGRlclN0YXRlLCB2YWx1ZSk7
CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3Ro
U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVu
Z3RoU2l6aW5nKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnZh
bHVlSUQoKSkgewogICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlkOgotICAgICAgICByZXR1cm4gY29u
dmVydExlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIHJldHVybiBjb252ZXJ0
TGVuZ3RoKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogICAgIGNhc2UgQ1NTVmFsdWVJbnRyaW5zaWM6
CiAgICAgICAgIHJldHVybiBMZW5ndGgoSW50cmluc2ljKTsKICAgICBjYXNlIENTU1ZhbHVlTWlu
SW50cmluc2ljOgpAQCAtMjUwLDI5ICsyNTAsMjkgQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3QgU3R5bGVSZXNvbHZlciYgc3QK
ICAgICB9CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGVuZ3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGVuZ3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHJl
dHVybiBMZW5ndGgoVW5kZWZpbmVkKTsKLSAgICByZXR1cm4gY29udmVydExlbmd0aFNpemluZyhz
dHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGhTaXppbmcoYnVp
bGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBUYWJTaXplIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFRhYlNpemUoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRhYlNpemUgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBUYWJTaXplKHByaW1pdGl2ZVZhbHVlLmZs
b2F0VmFsdWUoKSwgU3BhY2VWYWx1ZVR5cGUpOwotICAgIHJldHVybiBUYWJTaXplKHByaW1pdGl2
ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpLCBMZW5ndGhWYWx1ZVR5cGUpOworICAgIHJldHVybiBUYWJT
aXplKHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpLCBMZW5ndGhWYWx1ZVR5cGUpOwogfQogCiB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29t
cHV0ZWRMZW5ndGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29tcHV0ZWRM
ZW5ndGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSku
Y29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpKTsKKyAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KS5jb21wdXRlTGVuZ3RoPFQ+KGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCkpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExpbmVXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkpIHsKQEAgLTI4NSwxNiArMjg1LDE2IEBAIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjCiAg
ICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6IHsKICAgICAgICAgLy8gQW55IG9yaWdpbmFsIHJlc3Vs
dCB0aGF0IHdhcyA+PSAxIHNob3VsZCBub3QgYmUgYWxsb3dlZCB0byBmYWxsIGJlbG93IDEuCiAg
ICAgICAgIC8vIFRoaXMga2VlcHMgYm9yZGVyIGxpbmVzIGZyb20gdmFuaXNoaW5nLgotICAgICAg
ICBUIHJlc3VsdCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxUPihzdHlsZVJlc29sdmVyLCB2YWx1
ZSk7Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpIDwgMS4wZiAmJiByZXN1bHQgPCAxLjApIHsKLSAgICAgICAgICAgIFQgb3JpZ2luYWxM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4w
KSk7CisgICAgICAgIFQgcmVzdWx0ID0gY29udmVydENvbXB1dGVkTGVuZ3RoPFQ+KGJ1aWxkZXJT
dGF0ZSwgdmFsdWUpOworICAgICAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuZWZmZWN0aXZl
Wm9vbSgpIDwgMS4wZiAmJiByZXN1bHQgPCAxLjApIHsKKyAgICAgICAgICAgIFQgb3JpZ2luYWxM
ZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPFQ+KGJ1aWxkZXJTdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wKSk7CiAgICAg
ICAgICAgICBpZiAob3JpZ2luYWxMZW5ndGggPj0gMS4wKQogICAgICAgICAgICAgICAgIHJldHVy
biAxOwogICAgICAgICB9Ci0gICAgICAgIGZsb2F0IG1pbmltdW1MaW5lV2lkdGggPSAxIC8gc3R5
bGVSZXNvbHZlci5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCk7CisgICAgICAgIGZsb2F0
IG1pbmltdW1MaW5lV2lkdGggPSAxIC8gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKTsKICAgICAgICAgaWYgKHJlc3VsdCA+IDAgJiYgcmVzdWx0IDwgbWluaW11bUxp
bmVXaWR0aCkKICAgICAgICAgICAgIHJldHVybiBtaW5pbXVtTGluZVdpZHRoOwotICAgICAgICBy
ZXR1cm4gZmxvb3JUb0RldmljZVBpeGVsKHJlc3VsdCwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOworICAgICAgICByZXR1cm4gZmxvb3JUb0RldmljZVBpeGVs
KHJlc3VsdCwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAg
ICAgfQogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMzAy
LDE1ICszMDIsMTUgQEAgaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGlu
ZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGMKICAgICB9CiB9CiAKLWlubGlu
ZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGFjaW5nKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBmbG9hdCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGFjaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICByZXR1
cm4gMC5mOwogCi0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9
IHN0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPwotICAgICAgICBzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRq
dXN0ZWRab29tKDEuMGYpCi0gICAgICAgIDogc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gYnVpbGRlclN0YXRlLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpID8KKyAg
ICAgICAgYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFk
anVzdGVkWm9vbSgxLjBmKQorICAgICAgICA6IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCk7CiAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KGNvbnZlcnNpb25EYXRhKTsKIH0KIApAQCAtMzIzLDEzICszMjMsMTMgQEAgaW5saW5lIExl
bmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb1JhZGl1c0xlbmd0aChDU1NUb0xl
bmd0aENvbnZlcnNpb24KICAgICByZXR1cm4gdmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNv
bnZlcnNpb25EYXRhKTsKIH0KIAotaW5saW5lIExlbmd0aFNpemUgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UmFkaXVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGhTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydFJhZGl1cyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvKiBwYWlyID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS5wYWlyVmFsdWUoKTsKICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0
KCkgfHwgIXBhaXItPnNlY29uZCgpKQogICAgICAgICByZXR1cm4geyB7IDAsIEZpeGVkIH0sIHsg
MCwgRml4ZWQgfSB9OwogCi0gICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9u
RGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7
CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJT
dGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAgICAgTGVuZ3RoU2l6ZSByYWRpdXMg
eyBjb252ZXJ0VG9SYWRpdXNMZW5ndGgoY29udmVyc2lvbkRhdGEsICpwYWlyLT5maXJzdCgpKSwg
Y29udmVydFRvUmFkaXVzTGVuZ3RoKGNvbnZlcnNpb25EYXRhLCAqcGFpci0+c2Vjb25kKCkpIH07
CiAKICAgICBBU1NFUlQoIXJhZGl1cy53aWR0aC5pc05lZ2F0aXZlKCkpOwpAQCAtMzU0LDE4ICsz
NTQsMTggQEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUbzEw
MFBlcmNlbnRNaW51c0xlbmd0aChjb25zdCBMZW5ndGgKICAgICByZXR1cm4gTGVuZ3RoKENhbGN1
bGF0aW9uVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKG9wKSwgVmFsdWVSYW5nZUFsbCkpOwogfQogCi1p
bmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9u
ZW50WChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29t
cG9uZW50WChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVl
TGVmdCwgQ1NTVmFsdWVSaWdodD4oc3R5bGVSZXNvbHZlciwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKSk7CisgICAgcmV0dXJuIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NW
YWx1ZUxlZnQsIENTU1ZhbHVlUmlnaHQ+KGJ1aWxkZXJTdGF0ZSwgZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBjb252ZXJ0
UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tPihzdHlsZVJlc29s
dmVyLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICByZXR1cm4gY29u
dmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4oYnVpbGRl
clN0YXRlLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KIAogdGVtcGxh
dGU8Q1NTVmFsdWVJRCBjc3NWYWx1ZUZvcjAsIENTU1ZhbHVlSUQgY3NzVmFsdWVGb3IxMDA+Ci1p
bmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9u
ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9z
aXRpb25Db21wb25lbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBD
U1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aDsKIApAQCAtMzky
LDcgKzM5Miw3IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UG9zaXRpb25Db21wb25lbnQoU3R5bGVSZXNvbHZlciYgc3R5CiAgICAgICAgIH0KICAgICB9CiAg
ICAgICAgIAotICAgIGxlbmd0aCA9IGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgKmxlbmd0
aFZhbHVlKTsKKyAgICBsZW5ndGggPSBjb252ZXJ0TGVuZ3RoKGJ1aWxkZXJTdGF0ZSwgKmxlbmd0
aFZhbHVlKTsKIAogICAgIGlmIChyZWxhdGl2ZVRvVHJhaWxpbmdFZGdlKQogICAgICAgICBsZW5n
dGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgobGVuZ3RoKTsKQEAgLTQwMCwyMCAr
NDAwLDIwIEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9z
aXRpb25Db21wb25lbnQoU3R5bGVSZXNvbHZlciYgc3R5CiAgICAgcmV0dXJuIGxlbmd0aDsKIH0K
IAotaW5saW5lIExlbmd0aFBvaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9iamVj
dFBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBMZW5ndGhQb2ludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRP
YmplY3RQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgUGFpciogcGFpciA9IHByaW1pdGl2ZVZhbHVl
LnBhaXJWYWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFpci0+
c2Vjb25kKCkpCiAgICAgICAgIHJldHVybiBSZW5kZXJTdHlsZTo6aW5pdGlhbE9iamVjdFBvc2l0
aW9uKCk7CiAKLSAgICBMZW5ndGggbGVuZ3RoWCA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxD
U1NWYWx1ZUxlZnQsIENTU1ZhbHVlUmlnaHQ+KHN0eWxlUmVzb2x2ZXIsICpwYWlyLT5maXJzdCgp
KTsKLSAgICBMZW5ndGggbGVuZ3RoWSA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1
ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KHN0eWxlUmVzb2x2ZXIsICpwYWlyLT5zZWNvbmQoKSk7Cisg
ICAgTGVuZ3RoIGxlbmd0aFggPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVMZWZ0
LCBDU1NWYWx1ZVJpZ2h0PihidWlsZGVyU3RhdGUsICpwYWlyLT5maXJzdCgpKTsKKyAgICBMZW5n
dGggbGVuZ3RoWSA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZVRvcCwgQ1NTVmFs
dWVCb3R0b20+KGJ1aWxkZXJTdGF0ZSwgKnBhaXItPnNlY29uZCgpKTsKIAogICAgIHJldHVybiBM
ZW5ndGhQb2ludChsZW5ndGhYLCBsZW5ndGhZKTsKIH0KIAotaW5saW5lIE9wdGlvblNldDxUZXh0
RGVjb3JhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb24o
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8
VGV4dERlY29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
YXV0byByZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHREZWNvcmF0aW9uKCk7CiAgICAg
aWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CkBAIC00MjQsMjAgKzQyNCwyMCBAQCBpbmxp
bmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRUZXh0RGVjb3JhdGlvbihTdAogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotaW5saW5lIFQg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnROdW1iZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZTxUPihD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUik7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+
Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXJPckF1dG8oU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlm
IChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUF1dG8pCiAgICAgICAgIHJldHVybiAtMTsKLSAgICByZXR1cm4gY29udmVydE51bWJlcjxUPihz
dHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnROdW1iZXI8VD4oYnVpbGRl
clN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBzaG9ydCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgc2hvcnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlTm9MaW1pdCkKQEAgLTQ0NiwzMSArNDQ2LDMxIEBAIGlubGluZSBzaG9y
dCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVz
KFN0eWxlUmVzb2x2CiB9CiAKIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxp
bmUgTmluZVBpZWNlSW1hZ2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1h
Z2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlckltYWdl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIE5pbmVQaWVjZUltYWdlIGltYWdlOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+
bWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksICZ2YWx1ZSwgaW1hZ2UpOworICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCAmdmFsdWUsIGltYWdl
KTsKICAgICByZXR1cm4gaW1hZ2U7CiB9CiAKIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQgcHJvcGVy
dHk+Ci1pbmxpbmUgTmluZVBpZWNlSW1hZ2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Qm9yZGVyTWFzayhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgTmluZVBpZWNlSW1hZ2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9y
ZGVyTWFzayhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShOaW5lUGllY2VJbWFnZTo6VHlwZTo6TWFz
ayk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZShwcm9w
ZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmlu
ZVBpZWNlSW1hZ2UocHJvcGVydHksICZ2YWx1ZSwgaW1hZ2UpOwogICAgIHJldHVybiBpbWFnZTsK
IH0KIAogdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4KLWlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxl
UmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSk7CisgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jcmVh
dGVTdHlsZUltYWdlKHZhbHVlKTsKIH0KIAotaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRyYW5zZm9ybShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBUcmFu
c2Zvcm1PcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgdHJhbnNmb3Jtc0ZvclZhbHVlKHZhbHVl
LCBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBvcGVy
YXRpb25zKTsKKyAgICB0cmFuc2Zvcm1zRm9yVmFsdWUodmFsdWUsIGJ1aWxkZXJTdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9wZXJhdGlvbnMpOwogICAgIHJldHVybiBvcGVyYXRp
b25zOwogfQogCkBAIC00OTgsNyArNDk4LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjp1cGRhdGVDb2xvclNjaGVtZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHIKICAg
ICB9CiB9CiAKLWlubGluZSBTdHlsZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydENvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRD
b2xvclNjaGVtZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIFN0eWxlQ29sb3JTY2hlbWUgY29sb3JTY2hlbWU7CiAKQEAgLTUxNiwyMyArNTE2LDIz
IEBAIGlubGluZSBTdHlsZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dENvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImCiB9CiAjZW5kaWYKIAotaW5saW5lIFN0cmluZyBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U3RyaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuc3RyaW5n
VmFsdWUoKTsKIH0KIAotaW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRTdHJpbmdPckF1dG8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
dHJpbmdPckF1dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgcmV0dXJuIG51bGxBdG9tKCk7
Ci0gICAgcmV0dXJuIGNvbnZlcnRTdHJpbmcoc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJl
dHVybiBjb252ZXJ0U3RyaW5nKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgU3Ry
aW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3RyaW5n
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVO
b25lKQogICAgICAgICByZXR1cm4gbnVsbEF0b20oKTsKLSAgICByZXR1cm4gY29udmVydFN0cmlu
ZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZlcnRTdHJpbmcoYnVpbGRl
clN0YXRlLCB2YWx1ZSk7CiB9CiAKIGlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6dmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oY29uc3Qg
Q1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlKQpAQCAtNTU2LDcgKzU1Niw3IEBAIGlu
bGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6dmFsdWVUb0VtcGhhc2lzUG9zCiAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjppbml0aWFsVGV4
dEVtcGhhc2lzUG9zaXRpb24oKTsKIH0KIAotaW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFzaXNQ
b3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEVtcGhhc2lzUG9zaXRp
b24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25T
ZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRFbXBoYXNpc1Bvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAg
IHJldHVybiB2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKTsKQEAgLTU2Nyw3ICs1NjcsNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBo
YXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaQog
ICAgIHJldHVybiBwb3NpdGlvbjsKIH0KIAotaW5saW5lIFRleHRBbGlnbk1vZGUgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0QWxpZ25Nb2RlIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgQVNTRVJUKHBy
aW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKTsKQEAgLTU3NSwyMSArNTc1LDIxIEBAIGlubGluZSBU
ZXh0QWxpZ25Nb2RlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRBbGlnbihTdHls
ZVJlc29sdmVyJiBzdHlsCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSAhPSBDU1NW
YWx1ZVdlYmtpdE1hdGNoUGFyZW50KQogICAgICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWU7CiAK
LSAgICBhdXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKTsKLSAg
ICBpZiAocGFyZW50U3R5bGUtPnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OlN0YXJ0KQot
ICAgICAgICByZXR1cm4gcGFyZW50U3R5bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRl
eHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKLSAgICBpZiAocGFyZW50
U3R5bGUtPnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OkVuZCkKLSAgICAgICAgcmV0dXJu
IHBhcmVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0QWxpZ25Nb2RlOjpS
aWdodCA6IFRleHRBbGlnbk1vZGU6OkxlZnQ7Ci0gICAgcmV0dXJuIHBhcmVudFN0eWxlLT50ZXh0
QWxpZ24oKTsKKyAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHls
ZSgpOworICAgIGlmIChwYXJlbnRTdHlsZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpT
dGFydCkKKyAgICAgICAgcmV0dXJuIHBhcmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24o
KSA/IFRleHRBbGlnbk1vZGU6OkxlZnQgOiBUZXh0QWxpZ25Nb2RlOjpSaWdodDsKKyAgICBpZiAo
cGFyZW50U3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6RW5kKQorICAgICAgICBy
ZXR1cm4gcGFyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9k
ZTo6UmlnaHQgOiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OworICAgIHJldHVybiBwYXJlbnRTdHlsZS50
ZXh0QWxpZ24oKTsKIH0KIAotaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJh
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xpcFBhdGgoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYg
KGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgcHJpbWl0aXZl
VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUucHJpbWl0aXZlVHlwZSgpID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1Nf
VVJJKSB7CiAgICAgICAgICAgICBTdHJpbmcgY3NzVVJMVmFsdWUgPSBwcmltaXRpdmVWYWx1ZS5z
dHJpbmdWYWx1ZSgpOwotICAgICAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gU1ZHVVJJUmVmZXJl
bmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKGNzc1VSTFZhbHVlLCBzdHlsZVJl
c29sdmVyLmRvY3VtZW50KCkpOworICAgICAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gU1ZHVVJJ
UmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKGNzc1VSTFZhbHVlLCBi
dWlsZGVyU3RhdGUuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICAvLyBGSVhNRTogSXQgZG9lc24n
dCB3b3JrIHdpdGggZXh0ZXJuYWwgU1ZHIHJlZmVyZW5jZXMgKHNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI2MTMzKQogICAgICAgICAgICAgcmV0dXJuIFJlZmVy
ZW5jZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoY3NzVVJMVmFsdWUsIGZyYWdtZW50KTsKICAg
ICAgICAgfQpAQCAtNjA0LDcgKzYwNCw3IEBAIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlUmVzCiAgICAg
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGN1
cnJlbnRWYWx1ZS5nZXQoKSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1NoYXBlKCkp
IHsKICAgICAgICAgICAgIEFTU0VSVCghb3BlcmF0aW9uKTsKLSAgICAgICAgICAgIG9wZXJhdGlv
biA9IFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2
ZVZhbHVlLnNoYXBlVmFsdWUoKSkpOworICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVDbGlw
UGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShidWlsZGVyU3RhdGUuY3Nz
VG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVWYWx1ZSgpKSk7
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUudmFs
dWVJRCgpID09IENTU1ZhbHVlQ29udGVudEJveAogICAgICAgICAgICAgICAgIHx8IHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveApAQCAtNjI3LDIwICs2MjcsMjAg
QEAgaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXMKICAgICByZXR1cm4gb3BlcmF0aW9uOwogfQogCi1p
bmxpbmUgUmVzaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlc2l6ZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVz
aXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlc2l6ZShTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKICAg
ICBSZXNpemUgcmVzaXplID0gUmVzaXplOjpOb25lOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICByZXNpemUgPSBzdHlsZVJlc29sdmVy
LnNldHRpbmdzKCkudGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSZXNpemU6OkJvdGggOiBSZXNp
emU6Ok5vbmU7CisgICAgICAgIHJlc2l6ZSA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnNldHRp
bmdzKCkudGV4dEFyZWFzQXJlUmVzaXphYmxlKCkgPyBSZXNpemU6OkJvdGggOiBSZXNpemU6Ok5v
bmU7CiAgICAgZWxzZQogICAgICAgICByZXNpemUgPSBwcmltaXRpdmVWYWx1ZTsKIAogICAgIHJl
dHVybiByZXNpemU7CiB9CiAKLWlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVJlcGV0
aXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluZmluaXRl
KQpAQCAtNjUwLDcgKzY1MCw3IEBAIGlubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0CiAgICAgcmV0dXJu
IHByaW1pdGl2ZVZhbHVlLmludFZhbHVlKCk7CiB9CiAKLWlubGluZSBpbnQgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1h
cnF1ZWVTcGVlZChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKTsKICAgICBpbnQgc3BlZWQgPSA4NTsKQEAgLTY3OSw3ICs2NzksNyBAQCBpbmxpbmUg
aW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZChTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVgogICAgIHJldHVybiBzcGVlZDsKIH0KIAotaW5saW5lIFJlZjxRdW90
ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWY8UXVvdGVzRGF0YT4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UXVvdGVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSku
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC03MDIsMTMgKzcwMiwxMyBAQCBpbmxpbmUg
UmVmPFF1b3Rlc0RhdGE+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFF1b3RlcyhTdHls
ZVJlc29sdmVyJiwgY29ucwogICAgIHJldHVybiBRdW90ZXNEYXRhOjpjcmVhdGUocXVvdGVzKTsK
IH0KIAotaW5saW5lIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24gU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpOwogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpOwogfQogCi1pbmxpbmUgVGV4dFVuZGVybGluZU9mZnNldCBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
QVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTcxNywxMiAr
NzE3LDEyIEBAIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5CiAgICAgICAgIHJldHVybiBUZXh0VW5k
ZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFT
U0VSVChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKTsKLSAgICAgICAgYXV0byBjb21wdXRlZExl
bmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlciwgcHJpbWl0
aXZlVmFsdWUpOworICAgICAgICBhdXRvIGNvbXB1dGVkTGVuZ3RoID0gY29udmVydENvbXB1dGVk
TGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgcmV0
dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhMZW5ndGgoY29tcHV0ZWRMZW5ndGgp
OwogICAgIH0KIH0KIAotaW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
blRoaWNrbmVzcyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7
CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpOwpAQCAtNzMzLDEyICs3MzMsMTIgQEAgaW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uVGhpY2sKICAg
ICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVGcm9tRm9udCgpOwog
ICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKTsK
LSAgICAgICAgYXV0byBjb21wdXRlZExlbmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9h
dD4oc3R5bGVSZXNvbHZlciwgcHJpbWl0aXZlVmFsdWUpOworICAgICAgICBhdXRvIGNvbXB1dGVk
TGVuZ3RoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUsIHByaW1p
dGl2ZVZhbHVlKTsKICAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVh
dGVXaXRoTGVuZ3RoKGNvbXB1dGVkTGVuZ3RoKTsKICAgICB9CiB9CiAKLWlubGluZSBSZWZQdHI8
U3R5bGVSZWZsZWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZWZsZWN0aW9u
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBSZWZQdHI8U3R5bGVSZWZsZWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRSZWZsZWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7
CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtNzQ5LDE2ICs3NDksMTYgQEAgaW5saW5lIFJlZlB0
cjxTdHlsZVJlZmxlY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rp
b24oU3R5bGVSZXMKIAogICAgIGF1dG8gcmVmbGVjdGlvbiA9IFN0eWxlUmVmbGVjdGlvbjo6Y3Jl
YXRlKCk7CiAgICAgcmVmbGVjdGlvbi0+c2V0RGlyZWN0aW9uKHJlZmxlY3RWYWx1ZS5kaXJlY3Rp
b24oKSk7Ci0gICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1ZS5vZmZzZXQoKS5j
b252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9u
IHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCkpKTsKKyAgICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZh
bHVlLm9mZnNldCgpLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVy
Y2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oYnVpbGRlclN0YXRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwogCiAgICAgTmluZVBpZWNlSW1hZ2UgbWFzayhOaW5l
UGllY2VJbWFnZTo6VHlwZTo6TWFzayk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5t
YXBOaW5lUGllY2VJbWFnZShDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3QsIHJlZmxlY3RWYWx1
ZS5tYXNrKCksIG1hc2spOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVj
ZUltYWdlKENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdCwgcmVmbGVjdFZhbHVlLm1hc2soKSwg
bWFzayk7CiAgICAgcmVmbGVjdGlvbi0+c2V0TWFzayhtYXNrKTsKIAogICAgIHJldHVybiByZWZs
ZWN0aW9uOwogfQogCi1pbmxpbmUgSW50U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRJbml0aWFsTGV0dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgSW50U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVy
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwog
CkBAIC03NzMsNyArNzczLDcgQEAgaW5saW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0SW5pdGlhbExldHRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICByZXR1cm4g
SW50U2l6ZShwYWlyLT5maXJzdCgpLT5pbnRWYWx1ZSgpLCBwYWlyLT5zZWNvbmQoKS0+aW50VmFs
dWUoKSk7CiB9CiAKLWlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRU
ZXh0U3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRTdHJva2VXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKQEAgLTc4OCwxMSArNzg4LDExIEBAIGlubGluZSBm
bG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSCiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZVRoaWNrKQogICAgICAgICAgICAgcmVzdWx0ICo9IDU7CiAgICAgICAgIFJl
ZjxDU1NQcmltaXRpdmVWYWx1ZT4gZW1zVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShy
ZXN1bHQsIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfRU1TKSk7Ci0gICAgICAgIHdpZHRoID0gY29u
dmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLCBlbXNWYWx1ZSk7CisgICAg
ICAgIHdpZHRoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUsIGVt
c1ZhbHVlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgQ1NTVmFsdWVJbnZhbGlk
OiB7Ci0gICAgICAgIHdpZHRoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJl
c29sdmVyLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIHdpZHRoID0gY29udmVydENvbXB1dGVk
TGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUsIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGRlZmF1bHQ6CkBAIC04MDMsNyArODAzLDcgQEAgaW5saW5lIGZsb2F0
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aChTdHlsZVJlc29s
dmVyJiBzdHlsZVIKICAgICByZXR1cm4gd2lkdGg7CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8TGlu
ZUJveENvbnRhaW4+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVCb3hDb250YWlu
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0
PExpbmVCb3hDb250YWluPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29u
dGFpbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUp
OwpAQCAtODM0LDcgKzgzNCw3IEBAIGlubGluZSBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lw
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnZhbHVlVG9EZWNvcmF0aW9uU2tpCiAgICAgcmV0dXJu
IE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IHsgfTsKIH0KIAotaW5saW5lIE9wdGlvblNl
dDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRE
ZWNvcmF0aW9uU2tpcChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydFRleHREZWNvcmF0aW9uU2tpcChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQog
ICAgICAgICByZXR1cm4gdmFsdWVUb0RlY29yYXRpb25Ta2lwKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpOwpAQCAtODUwLDcgKzg1MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBp
c0ltYWdlU2hhcGUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogICAgIHJldHVybiBpczxDU1NJbWFn
ZVZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpIHx8IGlzPENTU0lt
YWdlR2VuZXJhdG9yVmFsdWU+KHZhbHVlKTsKIH0KIAotaW5saW5lIFJlZlB0cjxTaGFwZVZhbHVl
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8U2hhcGVWYWx1
ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTg1OCwx
NCArODU4LDE0IEBAIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZVJlc29sdmVyCiAgICAgfQogCiAgICAgaWYgKGlz
SW1hZ2VTaGFwZSh2YWx1ZSkpCi0gICAgICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGUoc3R5
bGVSZXNvbHZlci5zdHlsZUltYWdlKHZhbHVlKS5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAg
cmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZShidWlsZGVyU3RhdGUuY3JlYXRlU3R5bGVJbWFnZSh2
YWx1ZSkucmVsZWFzZU5vbk51bGwoKSk7CiAKICAgICBSZWZQdHI8QmFzaWNTaGFwZT4gc2hhcGU7
CiAgICAgQ1NTQm94VHlwZSByZWZlcmVuY2VCb3ggPSBDU1NCb3hUeXBlOjpCb3hNaXNzaW5nOwog
ICAgIGZvciAoYXV0byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1
ZSkpIHsKICAgICAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oY3VycmVudFZhbHVlLmdldCgpKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVl
LmlzU2hhcGUoKSkKLSAgICAgICAgICAgIHNoYXBlID0gYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxl
UmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVW
YWx1ZS5zaGFwZVZhbHVlKCkpOworICAgICAgICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFs
dWUoYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZh
bHVlLnNoYXBlVmFsdWUoKSk7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZhbHVl
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUJvcmRlckJveAogICAgICAgICAgICAgfHwgcHJpbWl0aXZl
VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlUGFkZGluZ0JveApAQCAtODg5LDcgKzg4OSw3IEBA
IGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2hhcGVWYWx1ZShTdHlsZVJlc29sdmVyCiAKICNpZiBFTkFCTEUoQ1NTX1NDUk9MTF9TTkFQKQog
Ci1pbmxpbmUgU2Nyb2xsU25hcFR5cGUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2Ny
b2xsU25hcFR5cGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSBTY3JvbGxTbmFwVHlwZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFw
VHlwZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IFNjcm9sbFNuYXBUeXBlIHR5cGU7CiAgICAgYXV0byYgdmFsdWVzID0gZG93bmNhc3Q8Q1NTVmFs
dWVMaXN0Pih2YWx1ZSk7CkBAIC05MTQsNyArOTE0LDcgQEAgaW5saW5lIFNjcm9sbFNuYXBUeXBl
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxlUmVzb2x2
ZXIKICAgICByZXR1cm4gdHlwZTsKIH0KIAotaW5saW5lIFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24oU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTY3JvbGxTbmFwQWxpZ24gU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgdmFsdWVzID0gZG93bmNhc3Q8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSk7CiAgICAgU2Nyb2xsU25hcEFsaWduIGFsaWdubWVudDsKQEAgLTky
OCw3ICs5MjgsNyBAQCBpbmxpbmUgU2Nyb2xsU25hcEFsaWduIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZVJlc29sdgogCiAjZW5kaWYKIAotaW5saW5l
IEdyaWRMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRo
KGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSwgU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSBHcmlkTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZl
VmFsdWUsIFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBpZiAocHJp
bWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTWluQ29udGVudCB8fCBwcmltaXRpdmVW
YWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRNaW5Db250ZW50KQogICAgICAgICByZXR1
cm4gTGVuZ3RoKE1pbkNvbnRlbnQpOwpAQCAtOTQwLDIzICs5NDAsMjMgQEAgaW5saW5lIEdyaWRM
ZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0
IENTU1ByaW1pdGkKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNGbGV4KCkpCiAgICAgICAgIHJl
dHVybiBHcmlkTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkpOwogCi0gICAgcmV0
dXJuIHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEF1dG9Db252ZXJz
aW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsK
KyAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgQXV0
b0NvbnZlcnNpb24+KGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwog
fQogCi1pbmxpbmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdy
aWRUcmFja1NpemUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoraW5saW5lIEdyaWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVh
dGVHcmlkVHJhY2tTaXplKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KQotICAgICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSksIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAg
ICAgcmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLCBidWlsZGVyU3RhdGUpKTsKIAogICAgIEFTU0VSVChp
czxDU1NGdW5jdGlvblZhbHVlPih2YWx1ZSkpOwogICAgIGNvbnN0IGF1dG8mIGZ1bmN0aW9uID0g
ZG93bmNhc3Q8Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpOwogCiAgICAgaWYgKGZ1bmN0aW9uLmxl
bmd0aCgpID09IDEpCi0gICAgICAgIHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFj
a0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91
dEJvdW5kc0NoZWNrKDApKSwgc3R5bGVSZXNvbHZlciksIEZpdENvbnRlbnRUcmFja1NpemluZyk7
CisgICAgICAgIHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNr
KDApKSwgYnVpbGRlclN0YXRlKSwgRml0Q29udGVudFRyYWNrU2l6aW5nKTsKIAogICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGZ1bmN0aW9uLmxlbmd0aCgpID09IDIpOwotICAg
IEdyaWRMZW5ndGggbWluVHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDAp
KSwgc3R5bGVSZXNvbHZlcikpOwotICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoKGNyZWF0
ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5p
dGVtV2l0aG91dEJvdW5kc0NoZWNrKDEpKSwgc3R5bGVSZXNvbHZlcikpOworICAgIEdyaWRMZW5n
dGggbWluVHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJvdW5kc0NoZWNrKDApKSwgYnVpbGRl
clN0YXRlKSk7CisgICAgR3JpZExlbmd0aCBtYXhUcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMSkpLCBidWlsZGVyU3RhdGUpKTsKICAgICByZXR1cm4gR3JpZFRyYWNrU2l6
ZShtaW5UcmFja0JyZWFkdGgsIG1heFRyYWNrQnJlYWR0aCk7CiB9CiAKQEAgLTk4OCw3ICs5ODgs
NyBAQCBwdWJsaWM6CiAgICAgQXV0b1JlcGVhdFR5cGUgbV9hdXRvUmVwZWF0VHlwZSB7IFJlbmRl
clN0eWxlOjppbml0aWFsR3JpZEF1dG9SZXBlYXRUeXBlKCkgfTsKIH07CiAKLWlubGluZSBib29s
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1
ZSYgdmFsdWUsIFRyYWNrc0RhdGEmIHRyYWNrc0RhdGEsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFj
a0xpc3QoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBUcmFja3NEYXRhJiB0cmFja3NEYXRhLCBTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgLy8gSGFuZGxlICdub25lJy4K
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKQEAgLTEwMDMsNyArMTAwMyw3
IEBAIGlubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlz
dChjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFRyCiAgICAgICAgICAgICBjcmVhdGVHcmlkTGluZU5h
bWVzTGlzdChjdXJyZW50VmFsdWUsIGN1cnJlbnROYW1lZEdyaWRMaW5lLCB0cmFja3NEYXRhLm1f
bmFtZWRHcmlkTGluZXMsIHRyYWNrc0RhdGEubV9vcmRlcmVkTmFtZWRHcmlkTGluZXMpOwogICAg
ICAgICBlbHNlIHsKICAgICAgICAgICAgICsrY3VycmVudE5hbWVkR3JpZExpbmU7Ci0gICAgICAg
ICAgICB0cmFja3NEYXRhLm1fdHJhY2tTaXplcy5hcHBlbmQoY3JlYXRlR3JpZFRyYWNrU2l6ZShj
dXJyZW50VmFsdWUsIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAgICAgICAgIHRyYWNrc0RhdGEubV90
cmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJlbnRWYWx1ZSwgYnVpbGRl
clN0YXRlKSk7CiAgICAgICAgIH0KICAgICB9OwogCkBAIC0xMDIwLDcgKzEwMjAsNyBAQCBpbmxp
bmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QoY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlLCBUcgogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKythdXRvUmVwZWF0SW5kZXg7Ci0gICAgICAg
ICAgICAgICAgdHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzLmFwcGVuZChjcmVhdGVH
cmlkVHJhY2tTaXplKGF1dG9SZXBlYXRWYWx1ZS5nZXQoKSwgc3R5bGVSZXNvbHZlcikpOworICAg
ICAgICAgICAgICAgIHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcy5hcHBlbmQoY3Jl
YXRlR3JpZFRyYWNrU2l6ZShhdXRvUmVwZWF0VmFsdWUuZ2V0KCksIGJ1aWxkZXJTdGF0ZSkpOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgdHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRJbnNlcnRp
b25Qb2ludCA9IGN1cnJlbnROYW1lZEdyaWRMaW5lKys7CiAgICAgICAgICAgICBjb250aW51ZTsK
QEAgLTExMTEsNyArMTExMSw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShjb25zCiAgICAgfQogfQog
Ci1pbmxpbmUgVmVjdG9yPEdyaWRUcmFja1NpemU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBWZWN0b3I8R3JpZFRyYWNrU2l6ZT4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKHZh
bHVlLmlzVmFsdWVMaXN0KCkpOwogICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpOwpAQCAtMTEyMSwxNyArMTEyMSwxNyBAQCBpbmxpbmUgVmVjdG9yPEdy
aWRUcmFja1NpemU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemVM
aXN0KFN0eQogICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+aXNHcmlkTGluZU5hbWVzVmFsdWUo
KSk7CiAgICAgICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRBdXRvUmVwZWF0VmFsdWUoKSk7
CiAgICAgICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRJbnRlZ2VyUmVwZWF0VmFsdWUoKSk7
Ci0gICAgICAgIHRyYWNrU2l6ZXMudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRHcmlkVHJhY2tTaXpl
KHN0eWxlUmVzb2x2ZXIsIGN1cnJWYWx1ZSkpOworICAgICAgICB0cmFja1NpemVzLnVuY2hlY2tl
ZEFwcGVuZChjb252ZXJ0R3JpZFRyYWNrU2l6ZShidWlsZGVyU3RhdGUsIGN1cnJWYWx1ZSkpOwog
ICAgIH0KICAgICByZXR1cm4gdHJhY2tTaXplczsKIH0KIAotaW5saW5lIEdyaWRUcmFja1NpemUg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR3JpZFRyYWNr
U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IHJldHVybiBjcmVhdGVHcmlkVHJhY2tTaXplKHZhbHVlLCBzdHlsZVJlc29sdmVyKTsKKyAgICBy
ZXR1cm4gY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1ZSwgYnVpbGRlclN0YXRlKTsKIH0KIAotaW5s
aW5lIE9wdGlvbmFsPEdyaWRQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
R3JpZFBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRH
cmlkUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBHcmlkUG9zaXRpb24gZ3JpZFBvc2l0aW9uOwogICAgIGlmIChjcmVhdGVHcmlkUG9z
aXRpb24odmFsdWUsIGdyaWRQb3NpdGlvbikpCkBAIC0xMTM5LDcgKzExMzksNyBAQCBpbmxpbmUg
T3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlk
UG9zaXRpb24oU3R5bGVSZQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBH
cmlkQXV0b0Zsb3cgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR3JpZEF1dG9GbG93
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRBdXRvRmxvdyhTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIGxpc3QgPSBkb3du
Y2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKICAgICBpZiAoIWxpc3QubGVuZ3RoKCkpCkBAIC0x
MTc3LDIzICsxMTc3LDIzIEBAIGlubGluZSBHcmlkQXV0b0Zsb3cgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlUmVzb2x2ZXImLCBjCiAgICAgcmV0dXJuIGF1
dG9GbG93OwogfQogCi1pbmxpbmUgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Io
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3RvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgaWYgKGF1dG8qIGZyYW1lID0gc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmZyYW1lKCkpIHsK
LSAgICAgICAgZmxvYXQgdGV4dFpvb21GYWN0b3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnRl
eHRab29tKCkgIT0gVGV4dFpvb206OlJlc2V0ID8gZnJhbWUtPnRleHRab29tRmFjdG9yKCkgOiAx
LjBmOwotICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbShzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PmVmZmVjdGl2ZVpvb20oKSAqIHRleHRab29tRmFjdG9yKTsKKyAgICBpZiAoYXV0byogZnJhbWUg
PSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5mcmFtZSgpKSB7CisgICAgICAgIGZsb2F0IHRleHRa
b29tRmFjdG9yID0gYnVpbGRlclN0YXRlLnN0eWxlKCkudGV4dFpvb20oKSAhPSBUZXh0Wm9vbTo6
UmVzZXQgPyBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKSA6IDEuMGY7CisgICAgICAgIHJldHVybiBi
dWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRa
b29tKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmVmZmVjdGl2ZVpvb20oKSAqIHRleHRab29tRmFjdG9y
KTsKICAgICB9Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCk7CisgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIE9wdGlvbmFsPExlbmd0
aD4gd29yZFNwYWNpbmc7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHdvcmRTcGFjaW5nID0gUmVuZGVyU3R5bGU6Omlu
aXRpYWxXb3JkU3BhY2luZygpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3Ro
KCkpCi0gICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxM
ZW5ndGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVS
ZXNvbHZlcikpOworICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVM
ZW5ndGg8TGVuZ3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9y
KGJ1aWxkZXJTdGF0ZSkpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFn
ZSgpKQogICAgICAgICB3b3JkU3BhY2luZyA9IExlbmd0aChjbGFtcFRvPGZsb2F0PihwcmltaXRp
dmVWYWx1ZS5kb3VibGVWYWx1ZSgpLCBtaW5WYWx1ZUZvckNzc0xlbmd0aCwgbWF4VmFsdWVGb3JD
c3NMZW5ndGgpLCBQZXJjZW50KTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJl
cigpKQpAQCAtMTIwMiw3ICsxMjAyLDcgQEAgaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNvbHZlciYKICAgICBy
ZXR1cm4gd29yZFNwYWNpbmc7CiB9CiAKLWlubGluZSBPcHRpb25hbDxmbG9hdD4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPGZsb2F0PiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCkBAIC0xMjEwLDE2ICsx
MjEwLDE2IEBAIGlubGluZSBPcHRpb25hbDxmbG9hdD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYKIAogICAgIGZsb2F0IHBlcnNwZWN0aXZl
ID0gLTE7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCi0gICAgICAgIHBlcnNw
ZWN0aXZlID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZl
ci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgIHBlcnNwZWN0
aXZlID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNOdW1iZXIoKSkKLSAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmltaXRpdmVWYWx1ZS5kb3VibGVW
YWx1ZSgpICogc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KS56b29tKCk7CisgICAgICAgIHBlcnNwZWN0aXZlID0gcHJpbWl0aXZlVmFsdWUuZG91YmxlVmFs
dWUoKSAqIGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuem9vbSgpOwog
ICAgIGVsc2UKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAKICAgICByZXR1cm4gcGVy
c3BlY3RpdmUgPCAwID8gT3B0aW9uYWw8ZmxvYXQ+KFdURjo6bnVsbG9wdCkgOiBPcHRpb25hbDxm
bG9hdD4ocGVyc3BlY3RpdmUpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxMZW5n
dGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgT3B0aW9uYWw8TGVuZ3RoPiBtYXJxdWVlTGVuZ3RoOwogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTEyMzQsNyArMTIz
NCw3IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvCiAgICAgICAgIG1hcnF1ZWVMZW5ndGggPSBM
ZW5ndGgoMzYsIEZpeGVkKTsgLy8gMzZweC4KICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDU1NW
YWx1ZUludmFsaWQ6IHsKLSAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNv
bnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24g
fCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CisgICAgICAgIExl
bmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KGJ1
aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpv
b20oMS4wZikpOwogICAgICAgICBpZiAoIWxlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAg
ICAgbWFycXVlZUxlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgYnJlYWs7CkBAIC0xMjQ1LDE1ICsx
MjQ1LDE1IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvCiAgICAgcmV0dXJuIG1hcnF1ZWVMZW5n
dGg7CiB9CiAKLWlubGluZSBPcHRpb25hbDxGaWx0ZXJPcGVyYXRpb25zPiBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxGaWx0ZXJPcGVy
YXRpb25zPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIEZpbHRlck9wZXJhdGlvbnMgb3BlcmF0aW9uczsKLSAgICBpZiAoc3R5bGVSZXNvbHZl
ci5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvcGVyYXRpb25zKSkKKyAgICBpZiAoYnVp
bGRlclN0YXRlLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUsIG9wZXJhdGlvbnMpKQogICAg
ICAgICByZXR1cm4gb3BlcmF0aW9uczsKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1p
bmxpbmUgRm9udEZlYXR1cmVTZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRG
b250RmVhdHVyZVNldHRpbmdzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgRm9udEZlYXR1cmVTZXR0aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAg
ICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9ybWFsKTsKQEAgLTEzMjMsMjcgKzEzMjMsMjcgQEAgaW5saW5lIE9wdGlv
bmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9u
dFN0eWxlRnJvbVYKICAgICByZXR1cm4gaXRhbGljVmFsdWUoKTsKIH0KIAotaW5saW5lIEZvbnRT
ZWxlY3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSBGb250U2VsZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFdl
aWdodChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
OwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSkgewogICAgICAgICBhdXRvIHZh
bHVlSUQgPSBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCk7CiAgICAgICAgIGlmICh2YWx1ZUlEID09
IENTU1ZhbHVlQm9sZGVyKQotICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRp
b246OmJvbGRlcldlaWdodChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlw
dGlvbigpLndlaWdodCgpKTsKKyAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0
aW9uOjpib2xkZXJXZWlnaHQoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0
aW9uKCkud2VpZ2h0KCkpOwogICAgICAgICBpZiAodmFsdWVJRCA9PSBDU1NWYWx1ZUxpZ2h0ZXIp
Ci0gICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdo
dChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpLndlaWdodCgp
KTsKKyAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2Vp
Z2h0KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLndlaWdodCgp
KTsKICAgICB9CiAgICAgcmV0dXJuIGNvbnZlcnRGb250V2VpZ2h0RnJvbVZhbHVlKHZhbHVlKTsK
IH0KIAotaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRGb250U3RyZXRjaChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRG
b250U3RyZXRjaChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIHJldHVybiBjb252ZXJ0Rm9udFN0cmV0Y2hGcm9tVmFsdWUodmFsdWUpOwogfQogCiAj
aWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLWlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9udFZhcmlhdGlvblNl
dHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5n
cyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlm
IChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7
CkBAIC0xMzYwLDIxICsxMzYwLDIxIEBAIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzCiAjZW5kaWYK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi1pbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvdWNo
Q2FsbG91dChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIHJldHVybiAhZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS5zdHJpbmdWYWx1ZSgpLCAibm9uZSIpOwogfQogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotaW5saW5lIENvbG9yIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBDb2xvciBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNv
bHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKTsKKyAgICByZXR1cm4gYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVl
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogI2VuZGlmCiAKICNpZiBF
TkFCTEUoUE9JTlRFUl9FVkVOVFMpCi1pbmxpbmUgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CkBAIC0xMzk2LDQwICsxMzk2LDQwIEBAIGlubGluZSBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvdWNoQWN0aW9uKFN0eWxlUmVzCiAjZW5k
aWYKIAogI2lmIEVOQUJMRShPVkVSRkxPV19TQ1JPTExJTkdfVE9VQ0gpCi1pbmxpbmUgYm9vbCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPdmVyZmxvd1Njcm9sbGluZyhTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVUb3VjaDsKIH0KICNlbmRpZgogCi1p
bmxpbmUgU1ZHTGVuZ3RoVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHTGVu
Z3RoVmFsdWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBT
VkdMZW5ndGhWYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWYWx1
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIHJl
dHVybiBTVkdMZW5ndGhWYWx1ZTo6ZnJvbUNTU1ByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogCi1pbmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVl
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFZlY3Rv
cjxTVkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3Ro
VmVjdG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIGF1dG8mIHZhbHVlTGlzdCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4o
dmFsdWUpOwogCiAgICAgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBzdmdMZW5ndGhzOwogICAgIHN2
Z0xlbmd0aHMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZUxpc3QubGVuZ3RoKCkpOwogICAg
IGZvciAoYXV0byYgaXRlbSA6IHZhbHVlTGlzdCkKLSAgICAgICAgc3ZnTGVuZ3Rocy51bmNoZWNr
ZWRBcHBlbmQoY29udmVydFNWR0xlbmd0aFZhbHVlKHN0eWxlUmVzb2x2ZXIsIGl0ZW0pKTsKKyAg
ICAgICAgc3ZnTGVuZ3Rocy51bmNoZWNrZWRBcHBlbmQoY29udmVydFNWR0xlbmd0aFZhbHVlKGJ1
aWxkZXJTdGF0ZSwgaXRlbSkpOwogCiAgICAgcmV0dXJuIHN2Z0xlbmd0aHM7CiB9CiAKLWlubGlu
ZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0
cm9rZURhc2hBcnJheShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTdHJva2VEYXNoQXJyYXkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CiAgICAgICAgIHJldHVybiBT
VkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZURhc2hBcnJheSgpOwogICAgIH0KIAotICAgIHJl
dHVybiBjb252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBy
ZXR1cm4gY29udmVydFNWR0xlbmd0aFZlY3RvcihidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAot
aW5saW5lIFBhaW50T3JkZXIgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGFpbnRPcmRl
cihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFBhaW50T3Jk
ZXIgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGFpbnRPcmRlcihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCk7CkBAIC0xNDUwLDcgKzE0
NTAsNyBAQCBpbmxpbmUgUGFpbnRPcmRlciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQ
YWludE9yZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdAogICAgIH0KIH0KIAotaW5saW5lIGZsb2F0
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRPcGFjaXR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwogICAgIGZsb2F0IG9wYWNpdHkgPSBwcmltaXRpdmVWYWx1ZS5mbG9hdFZh
bHVlKCk7CkBAIC0xNDU5LDIyICsxNDU5LDIyIEBAIGlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1CiAg
ICAgcmV0dXJuIG9wYWNpdHk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0cmluZyBzOwogICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNVUkkoKSkKICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVl
LnN0cmluZ1ZhbHVlKCk7CiAKLSAgICByZXR1cm4gU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElk
ZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAg
cmV0dXJuIFNWR1VSSVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhz
LCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKSk7CiB9CiAKLWlubGluZSBDb2xvciBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdDb2xvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuY29sb3JG
cm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7Cisg
ICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KIAotaW5saW5lIFN0eWxlU2VsZkFsaWdubWVu
dERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVu
dERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHls
ZVNlbGZBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRl
ZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBhbGlnbm1lbnREYXRhID0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxTZWxmQWxpZ25tZW50KCk7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtMTQ5NSw3ICsxNDk1
LDcgQEAgaW5saW5lIFN0eWxlU2VsZkFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWUKICAgICByZXR1cm4gYWxpZ25tZW50RGF0YTsK
IH0KIAotaW5saW5lIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVDb250ZW50QWxpZ25t
ZW50RGF0YSBhbGlnbm1lbnREYXRhID0gUmVuZGVyU3R5bGU6OmluaXRpYWxDb250ZW50QWxpZ25t
ZW50KCk7CiAgICAgaWYgKCFpczxDU1NDb250ZW50RGlzdHJpYnV0aW9uVmFsdWU+KHZhbHVlKSkK
QEAgLTE1MTAsNyArMTUxMCw3IEBAIGlubGluZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnRECiAgICAgcmV0dXJu
IGFsaWdubWVudERhdGE7CiB9CiAKLWlubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBmbG9hdCBhbmdsZSA9IGZhYnNmKGZtb2RmKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkuZmxvYXRWYWx1ZSgpLCAzNjAuMGYpKTsK
ICAgICBpZiAoYW5nbGUgPD0gNDUuMGYgfHwgYW5nbGUgPiAzMTUuMGYpCkBAIC0xNTIyLDIxICsx
NTIyLDIxIEBAIGlubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGVSZXNvCiAgICAgcmV0dXJuIEdseXBoT3JpZW50
YXRpb246OkRlZ3JlZXMyNzA7CiB9CiAKLWlubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEdseXBoT3Jp
ZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9y
QXV0byhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gR2x5cGhPcmllbnRhdGlvbjo6
QXV0bzsKLSAgICByZXR1cm4gY29udmVydEdseXBoT3JpZW50YXRpb24oc3R5bGVSZXNvbHZlciwg
dmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0R2x5cGhPcmllbnRhdGlvbihidWlsZGVyU3RhdGUs
IHZhbHVlKTsKIH0KIAotaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUsIGZsb2F0IG11bHRpcGxpZXIpCitpbmxpbmUgT3B0aW9uYWw8TGVu
Z3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBmbG9hdCBtdWx0
aXBsaWVyKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9ybWFsKQogICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVp
Z2h0KCk7CiAKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICBM
ZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3RvcihzdHlsZVJlc29sdmVyKSk7CisgICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjc3N0b0xl
bmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKGJ1aWxkZXJTdGF0ZSkpOwogICAg
ICAgICBpZiAobXVsdGlwbGllciAhPSAxLmYpCiAgICAgICAgICAgICBsZW5ndGggPSBMZW5ndGgo
bGVuZ3RoLnZhbHVlKCkgKiBtdWx0aXBsaWVyLCBGaXhlZCk7CiAgICAgICAgIHJldHVybiBsZW5n
dGg7CkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImCiAgICAgLy8g
dmFsdWVzIGFuZCByYXcgbnVtYmVycyB0byBwZXJjZW50YWdlcy4KICAgICBpZiAocHJpbWl0aXZl
VmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKICAgICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hv
dWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFuIGludGVnZXIgaGVyZS4KLSAgICAgICAgcmV0dXJu
IExlbmd0aCgoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmlt
aXRpdmVWYWx1ZS5pbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOworICAgICAgICByZXR1cm4gTGVu
Z3RoKChidWlsZGVyU3RhdGUuc3R5bGUoKS5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVW
YWx1ZS5pbnRWYWx1ZSgpKSAvIDEwMCwgRml4ZWQpOwogICAgIH0KICAgICBpZiAocHJpbWl0aXZl
VmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAgcmV0dXJuIExlbmd0aChwcmltaXRpdmVWYWx1ZS5k
b3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNlbnQpOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgaW5s
aW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhl
aWdodChTdHlsZVJlc29sdmVyJgogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGlu
ZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVz
aXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250U3lu
dGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTE1ODks
NyArMTU4OSw3IEBAIGlubGluZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGVSZXNvbHZlciYsCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KICAgICAKLWlubGluZSBPcHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U3BlYWtBcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIE9wdGlvblNldDxTcGVha0FzPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRT
cGVha0FzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYXV0byByZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWFrQXMoKTsKICAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKQEAgLTE1OTksNyArMTU5OSw3IEBAIGlubGluZSBP
cHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhT
dHlsZVJlc29sdmVyJiwKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgT3B0aW9uU2V0
PEhhbmdpbmdQdW5jdHVhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SGFuZ2lu
Z1B1bmN0dWF0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byByZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEhh
bmdpbmdQdW5jdHVhdGlvbigpOwogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewpA
QCAtMTYwOSw5ICsxNjA5LDkgQEAgaW5saW5lIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEhhbmdpbmdQdW5jdHUKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbmxpbmUgR2FwTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEdhcExlbmd0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgR2FwTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEdhcExlbmd0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKSA/IEdhcExlbmd0aCgpIDogR2FwTGVu
Z3RoKGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpKTsKKyAgICByZXR1cm4gKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9y
bWFsKSA/IEdhcExlbmd0aCgpIDogR2FwTGVuZ3RoKGNvbnZlcnRMZW5ndGgoYnVpbGRlclN0YXRl
LCB2YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXggMjhkZTExNmM5MjUuLmI2MDFhOTU1Y2YyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCkBAIC01NCw5ICs1NCw5IEBACiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZpbmUgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFO
RExFUlMocHJvcGVydHkpIFwKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQjI3Byb3BlcnR5
KFN0eWxlUmVzb2x2ZXImKTsgXAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCMjcHJvcGVy
dHkoU3R5bGVSZXNvbHZlciYpOyBcCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZSMjcHJvcGVy
dHkoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXQjI3Byb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsgXAorICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbCMjcHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOyBcCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZSMjcHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVl
JikKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gaW5saW5lIFQgZm9yd2FyZEluaGVyaXRlZFZhbHVl
KFQmJiB2YWx1ZSkgeyByZXR1cm4gc3RkOjpmb3J3YXJkPFQ+KHZhbHVlKTsgfQogaW5saW5lIExl
bmd0aCBmb3J3YXJkSW5oZXJpdGVkVmFsdWUoY29uc3QgTGVuZ3RoJiB2YWx1ZSkgeyBhdXRvIGNv
cHkgPSB2YWx1ZTsgcmV0dXJuIGNvcHk7IH0KQEAgLTEwOSwxMjYgKzEwOSwxMjYgQEAgcHVibGlj
OgogICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKFpvb20pOwogCiAgICAgLy8g
Q3VzdG9tIGhhbmRsaW5nIG9mIGluaXRpYWwgKyBpbmhlcml0IHZhbHVlIHNldHRpbmcgb25seS4K
LSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxXZWJraXRNYXNrSW1hZ2UoU3R5bGVSZXNvbHZl
ciYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZShTdHls
ZVJlc29sdmVyJikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsRm9udEZlYXR1cmVT
ZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0
Rm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9CisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbml0aWFsV2Via2l0TWFza0ltYWdlKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAg
ICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRXZWJraXRNYXNrSW1hZ2UoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGlu
Z3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJp
dEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsRm9udFZhcmlh
dGlvblNldHRpbmdzKFN0eWxlUmVzb2x2ZXImKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aGVyaXRGb250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQorICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZTo6QnVpbGRlclN0
YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRp
bmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KICNlbmRpZgogCiAgICAgLy8gQ3VzdG9tIGhh
bmRsaW5nIG9mIGluaGVyaXQgKyB2YWx1ZSBzZXR0aW5nIG9ubHkuCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0RGlzcGxheShTdHlsZVJlc29sdmVyJik7Ci0gICAgc3RhdGljIHZvaWQgYXBw
bHlWYWx1ZURpc3BsYXkoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZv
aWQgYXBwbHlJbmhlcml0RGlzcGxheShTdHlsZTo6QnVpbGRlclN0YXRlJik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZURpc3BsYXkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7
CiAKICAgICAvLyBDdXN0b20gaGFuZGxpbmcgb2YgdmFsdWUgc2V0dGluZyBvbmx5LgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1
ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYs
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5
bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVGV4
dEFsaWduKFN0eWxlUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVGV4dEFs
aWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFs
dWVXZWJraXRMb2NhbGUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRPcmllbnRhdGlvbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZTo6QnVp
bGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlRGlyZWN0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFw
cGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRl
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0
YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0TG9jYWxl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVl
Jik7CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlV2Via2l0VGV4dFNpemVBZGp1c3QoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBDU1NWYWx1ZSYpOwogI2VuZGlmCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdl
YmtpdFRleHRab29tKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lk
IGFwcGx5VmFsdWVXcml0aW5nTW9kZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgdm9pZCBhcHBseVZhbHVlQWx0KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXaWxsQ2hhbmdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0Wm9vbShTdHlsZTo6QnVp
bGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV3JpdGlu
Z01vZGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZUFsdChTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFs
dWUmKTsKIAogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NTKQotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
dm9pZCBhcHBseVZhbHVlQ29sb3JTY2hlbWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVl
Jik7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHls
ZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tl
Q29sb3IoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZVN0cm9rZVdpZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NT
VmFsdWUmKTsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBB
dG9tU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDdXN0b21Qcm9w
ZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Kiwg
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUN1c3Rv
bVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVy
dHkqLCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOworICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIENTU0N1c3RvbVByb3Bl
cnR5VmFsdWUmKTsKIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpv
b20oU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZlWm9vbShT
dHlsZTo6QnVpbGRlclN0YXRlJik7CiAKICAgICBzdGF0aWMgTGVuZ3RoIG1tTGVuZ3RoKGRvdWJs
ZSBtbSk7CiAgICAgc3RhdGljIExlbmd0aCBpbmNoTGVuZ3RoKGRvdWJsZSBpbmNoKTsKICAgICBz
dGF0aWMgYm9vbCBnZXRQYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZhbHVlKiBwYWdlU2l6
ZU5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlKiBwYWdlT3JpZW50YXRpb24sIExlbmd0aCYgd2lkdGgs
IExlbmd0aCYgaGVpZ2h0KTsKIAogICAgIHRlbXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAg
IHN0YXRpYyB2b2lkIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29s
dmVyJiwgRGlzcGxheVR5cGUpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VGV4dE9yQm94U2hhZG93
VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIGJvb2wg
aXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgRGlzcGxheVR5cGUpOwog
CiAgICAgZW51bSBDb3VudGVyQmVoYXZpb3Ige0luY3JlbWVudCA9IDAsIFJlc2V0fTsKICAgICB0
ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseUluaGVyaXRDb3VudGVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICB0ZW1wbGF0ZSA8
Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZh
bHVlQ291bnRlcihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBh
cHBseVZhbHVlQ291bnRlcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKIAogICAg
IHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6ZShmbG9hdCBzaXplKTsKICAgICBzdGF0aWMgZmxv
YXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNpemUpOwotICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1p
bmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgZmxv
YXQgZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZTo6QnVpbGRlclN0YXRlJik7
CiB9OwogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVEaXJlY3Rp
b24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0RGlyZWN0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldERp
cmVjdGlvbih0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXREaXJlY3Rpb24oZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0SGFzRXhwbGljaXRseVNldERpcmVjdGlvbih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsVGV4dEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRBbGlnbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRl
eHRBbGlnbigpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlT
ZXRUZXh0QWxpZ24odHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEFsaWdu
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEFsaWduKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRUZXh0QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVUZXh0QWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRU
ZXh0QWxpZ24oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFsaWduKHN0eWxlUmVz
b2x2ZXIsIHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNp
dGx5U2V0VGV4dEFsaWduKHRydWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRB
bGlnbihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24oYnVpbGRlclN0YXRl
LCB2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRU
ZXh0QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6cmVz
ZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OnJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgLy8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBU
aGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRob2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3
IHpvb20gaW4gZWZmZWN0LgotICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmVm
ZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICBidWlsZGVy
U3RhdGUuc2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5lZmZlY3Rp
dmVab29tKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsWm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAg
cmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CisgICAgYnVpbGRlclN0YXRlLnNldFpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Wm9vbShTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgcmVzZXRFZmZlY3RpdmVab29t
KHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPnpvb20oKSk7CisgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJT
dGF0ZSk7CisgICAgYnVpbGRlclN0YXRlLnNldFpvb20oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCkuem9vbSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlWm9vbShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVab29tKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAg
IGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAg
ICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICByZXNldEVm
ZmVjdGl2ZVpvb20oYnVpbGRlclN0YXRlKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20o
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlUmVzZXQpIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5z
ZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgc3R5
bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAg
YnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OworICAgICAgICBidWlsZGVyU3RhdGUuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20o
KSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVE
b2N1bWVudCkgewotICAgICAgICBmbG9hdCBkb2Nab29tID0gc3R5bGVSZXNvbHZlci5yb290RWxl
bWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDog
UmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZm
ZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKGRvY1pv
b20pOworICAgICAgICBmbG9hdCBkb2Nab29tID0gYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5
bGUoKS56b29tKCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRFZmZlY3RpdmVab29tKGRvY1pv
b20pOworICAgICAgICBidWlsZGVyU3RhdGUuc2V0Wm9vbShkb2Nab29tKTsKICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0
aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxk
ZXJTdGF0ZSk7CiAgICAgICAgIGlmIChmbG9hdCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUuZmxv
YXRWYWx1ZSgpKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKHBlcmNlbnQgLyAx
MDAuMGYpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20ocGVyY2VudCAvIDEwMC4w
Zik7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAg
IHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgcmVzZXRFZmZlY3Rp
dmVab29tKGJ1aWxkZXJTdGF0ZSk7CiAgICAgICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRp
dmVWYWx1ZS5mbG9hdFZhbHVlKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20o
bnVtYmVyKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKG51bWJlcik7CiAgICAg
fQogfQogaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDdXN0b206Om1tTGVuZ3RoKGRvdWJsZSBt
bSkKQEAgLTMxNSwzMiArMzE1LDMyIEBAIGJvb2wgU3R5bGVCdWlsZGVyQ3VzdG9tOjpnZXRQYWdl
U2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZhbHVlKiBwYWdlU2l6ZU5hbWUsIENTCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZVZlcnRpY2FsQWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVmVydGljYWxB
bGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkKLSAgICAgICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1
ZSk7CiAgICAgZWxzZQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFZlcnRpY2Fs
QWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CisgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFs
dWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKSk7CiB9CiAKICNpZiBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0SW1hZ2VSZXNvbHV0
aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdEltYWdlUmVzb2x1dGlvbihTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJl
c29sdXRpb25Tb3VyY2Uoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRp
b25Tb3VyY2UoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRp
b25TbmFwKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU25hcCgp
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCktPmltYWdlUmVzb2x1dGlvbigpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2UoYnVpbGRlclN0YXRlLnBhcmVudFN0
eWxlKCkuaW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldEltYWdlUmVzb2x1dGlvblNuYXAoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuaW1hZ2VS
ZXNvbHV0aW9uU25hcCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29s
dXRpb24oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuaW1hZ2VSZXNvbHV0aW9uKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEltYWdlUmVzb2x1
dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VS
ZXNvbHV0aW9uU291cmNlKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNl
KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChS
ZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXAoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFn
ZVJlc29sdXRpb24oKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0
aW9uU291cmNlKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvblNuYXAoUmVuZGVyU3R5
bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25TbmFwKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldEltYWdlUmVzb2x1dGlvbihSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlv
bigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1h
Z2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1
dGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBJbWFnZVJlc29sdXRpb25Tb3VyY2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxJbWFnZVJlc29sdXRpb25Tb3VyY2UoKTsKICAgICBJbWFnZVJlc29sdXRpb25TbmFwIHNuYXAg
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvblNuYXAoKTsKQEAgLTM1NCwyMCAr
MzU0LDIwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdl
UmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlCiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlc29sdXRpb24gPSBwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZShDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX0RQUFgpOwogICAgIH0KLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldElt
YWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2UpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHNuYXApOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0aW9uKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJM
RShDU1NfSU1BR0VfUkVTT0xVVElPTikKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRTaXplKFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJikgeyB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsU2l6ZShTdHls
ZVJlc29sdmVyJikgeyB9CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFs
dWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnJlc2V0UGFnZVNpemVUeXBlKCk7CiAKICAgICBpZiAo
IWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQogICAgICAgICByZXR1cm47CkBAIC0zOTAsNyArMzkw
LDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1MKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9
CiAgICAgICAgICAgICBpZiAoIXNlY29uZFByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZik7CisgICAgICAgICAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKICAgICAg
ICAgICAgIHdpZHRoID0gZmlyc3RQcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
Y29udmVyc2lvbkRhdGEpOwogICAgICAgICAgICAgaGVpZ2h0ID0gc2Vjb25kUHJpbWl0aXZlVmFs
dWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgfSBlbHNl
IHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTUwogICAgICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewogICAgICAgICAgICAgLy8gPGxlbmd0aD4K
ICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAg
ICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+
KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdp
dGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkgewog
ICAgICAgICAgICAgY2FzZSAwOgpAQCAtNDM3LDI5ICs0MzcsMjkgQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1MKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRQYWdlU2l6ZSh7IFdURk1vdmUod2lkdGgpLCBXVEZNb3Zl
KGhlaWdodCkgfSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0UGFnZVNpemVUeXBlKHBh
Z2VTaXplVHlwZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0UGFnZVNpemUoeyBXVEZN
b3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpIH0pOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0VGV4
dEluZGVudChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KExlbmd0aCB7IHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+dGV4dEluZGVudCgpIH0pOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dFRleHRJbmRlbnQoTGVuZ3RoIHsgYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEluZGVu
dCgpIH0pOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0SW5kZW50TGluZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRJbmRl
bnRMaW5lKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudFR5cGUo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0SW5kZW50VHlwZSgpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50TGluZShidWlsZGVyU3RhdGUucGFyZW50U3R5
bGUoKS50ZXh0SW5kZW50TGluZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0
SW5kZW50VHlwZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpKTsK
ICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dEluZGVudChTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0
SW5kZW50KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgp
KTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
VGV4dEluZGVudExpbmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRUeXBlKFJlbmRlclN0eWxlOjpp
bml0aWFsVGV4dEluZGVudFR5cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4
dEluZGVudExpbmUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZShSZW5kZXJTdHlsZTo6aW5pdGlh
bFRleHRJbmRlbnRUeXBlKCkpOwogI2VuZGlmCiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlVGV4dEluZGVudChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGggbGVuZ3RoT3JQZXJjZW50YWdlVmFsdWU7CiAjaWYg
RU5BQkxFKENTUzNfVEVYVCkKQEAgLTQ2OSw3ICs0NjksNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZQogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUp
KSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGl0ZW0uZ2V0KCkpOwogICAgICAgICBpZiAoIXByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSkKLSAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUu
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVl
ID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24g
fCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihidWlsZGVyU3RhdGUu
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQogICAg
ICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRF
YWNoTGluZSkKICAgICAgICAgICAgIHRleHRJbmRlbnRMaW5lVmFsdWUgPSBUZXh0SW5kZW50TGlu
ZTo6RWFjaExpbmU7CkBAIC00ODEsMTAgKzQ4MSwxMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZQogICAgIGlmIChsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQoV1RG
TW92ZShsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldFRleHRJbmRlbnQoV1RGTW92ZShsZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSkpOwogI2lmIEVO
QUJMRShDU1MzX1RFWFQpCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50
TGluZSh0ZXh0SW5kZW50TGluZVZhbHVlKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRJbmRlbnRUeXBlKHRleHRJbmRlbnRUeXBlVmFsdWUpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKHRleHRJbmRlbnRMaW5lVmFsdWUpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRlbnRUeXBlKHRleHRJbmRlbnRUeXBlVmFsdWUpOwog
I2VuZGlmCiB9CiAKQEAgLTQ5MywyOSArNDkzLDI5IEBAIGVudW0gQm9yZGVySW1hZ2VNb2RpZmll
clR5cGUgeyBPdXRzZXQsIFJlcGVhdCwgU2xpY2UsIFdpZHRoIH07CiB0ZW1wbGF0ZSA8Qm9yZGVy
SW1hZ2VUeXBlIHR5cGUsIEJvcmRlckltYWdlTW9kaWZpZXJUeXBlIG1vZGlmaWVyPgogY2xhc3Mg
QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2
b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5
bGVSZXNvbHZlci5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZh
bHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsK
ICAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShn
ZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdl
LmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFn
ZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpKTsK
KyAgICAgICAgICAgIGltYWdlLmNvcHlSZXBlYXRGcm9tKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToK
LSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFnZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNG
cm9tKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJT
bGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAgICAg
ICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNlc0Zyb20oZ2V0VmFsdWUoYnVpbGRlclN0YXRlLnBh
cmVudFN0eWxlKCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNl
dFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShi
dWlsZGVyU3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogICAgIHsKLSAgICAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNv
bHZlci5zdHlsZSgpKSk7CisgICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpKSk7CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAg
ICAgY2FzZSBPdXRzZXQ6CiAgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDAp
KTsKQEAgLTUzOCw1MyArNTM4LDUzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGltYWdlLnNldEJv
cmRlclNsaWNlcyh0eXBlID09IEJvcmRlckltYWdlID8gbGVuZ3RoQm94IDogTGVuZ3RoQm94KCkp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAgICAgIHNldFZhbHVlKGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVl
JiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRW
YWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7
CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxl
UmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAg
ICAgICAgICBpbWFnZS5zZXRPdXRzZXQoYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBp
ZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBS
ZXBlYXQ6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVj
ZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAg
ICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFs
dWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAg
ICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+
bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAgICAgICBpbWFnZS5zZXRCb3Jk
ZXJTbGljZXMoYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZh
bHVlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShz
dHlsZVJlc29sdmVyLnN0eWxlKCksIGltYWdlKTsKKyAgICAgICAgc2V0VmFsdWUoYnVpbGRlclN0
YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCisgICAg
c3RhdGljIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxl
LT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1hc2tCb3hJbWFnZSgpOworICAgICAgICByZXR1cm4g
dHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLmJvcmRlckltYWdlKCkgOiBzdHlsZS5tYXNrQm94
SW1hZ2UoKTsKICAgICB9CiAKLSAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSog
c3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRW
YWx1ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkKICAg
ICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJvcmRl
ckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOworICAgICAgICBy
ZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLnNldEJvcmRlckltYWdlKHZhbHVlKSA6
IHN0eWxlLnNldE1hc2tCb3hJbWFnZSh2YWx1ZSk7CiAgICAgfQogfTsKIAogI2RlZmluZSBERUZJ
TkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIodHlwZSwgbW9kaWZpZXIpIFwKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0IyN0eXBlIyNtb2RpZmllcihT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKSBcCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdCMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlKSBcCiB7IFwKLSAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjx0eXBlLCBtb2RpZmllcj46OmFwcGx5SW5oZXJpdFZhbHVlKHN0eWxlUmVzb2x2ZXIpOyBcCisg
ICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBs
eUluaGVyaXRWYWx1ZShidWlsZGVyU3RhdGUpOyBcCiB9IFwKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsIyN0eXBlIyNtb2RpZmllcihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKSBcCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbCMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKSBc
CiB7IFwKLSAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmll
cj46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxlUmVzb2x2ZXIpOyBcCisgICAgQXBwbHlQcm9wZXJ0
eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaXRpYWxWYWx1ZShi
dWlsZGVyU3RhdGUpOyBcCiB9IFwKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKSBcCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWUjI3R5cGUjI21vZGlmaWVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdWUmIHZhbHVlKSBcCiB7IFwKLSAgICBBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmll
cjx0eXBlLCBtb2RpZmllcj46OmFwcGx5VmFsdWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpOyBcCisg
ICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBs
eVZhbHVlKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOyBcCiB9CiAKIERFRklORV9CT1JERVJfSU1BR0Vf
TU9ESUZJRVJfSEFORExFUihCb3JkZXJJbWFnZSwgT3V0c2V0KQpAQCAtNTk4LDE2ICs1OTgsMTYg
QEAgREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFn
ZSwgV2lkdGgpCiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0TGluZUhlaWdodChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KExlbmd0aCB7IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+bGluZUhlaWdodCgpIH0pOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhlaWdodChMZW5ndGggeyBzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWlnaHQoKSB9KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRMaW5lSGVpZ2h0KExlbmd0aCB7IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmxp
bmVIZWlnaHQoKSB9KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5l
SGVpZ2h0KExlbmd0aCB7IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnNwZWNpZmllZExpbmVI
ZWlnaHQoKSB9KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFs
U3BlY2lmaWVkTGluZUhlaWdodCgpKTsKIH0KIAogc3RhdGljIGlubGluZSBmbG9hdCBjb21wdXRl
QmFzZVNwZWNpZmllZEZvbnRTaXplKGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUmIHN0eWxlLCBib29sIHBlcmNlbnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCkKQEAgLTY1
NCw5ICs2NTQsOSBAQCBzdGF0aWMgaW5saW5lIGZsb2F0IGNvbXB1dGVMaW5lSGVpZ2h0TXVsdGlw
bGllckR1ZVRvRm9udFNpemUoY29uc3QgRG9jdW1lbnQmIGRvYwogICAgIHJldHVybiAxOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUxpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgT3B0aW9uYWw8TGVu
Z3RoPiBsaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdo
dChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgMSk7CisgICAgT3B0aW9uYWw8TGVuZ3RoPiBsaW5lSGVp
Z2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChidWlsZGVyU3Rh
dGUsIHZhbHVlLCAxKTsKICAgICBpZiAoIWxpbmVIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtNjY1LDE0NCArNjY1LDE0NCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgICAgICBj
b21wdXRlZExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0LnZhbHVlKCk7CiAgICAgZWxzZSB7CiAgICAg
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKTsKLSAgICAgICAgYXV0byBtdWx0aXBsaWVyID0gY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBs
aWVyRHVlVG9Gb250U2l6ZShzdHlsZVJlc29sdmVyLmRvY3VtZW50KCksICpzdHlsZVJlc29sdmVy
LnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYXV0byBtdWx0aXBsaWVyID0gY29t
cHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShidWlsZGVyU3RhdGUuZG9jdW1l
bnQoKSwgYnVpbGRlclN0YXRlLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgaWYg
KG11bHRpcGxpZXIgPT0gMSkKICAgICAgICAgICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IGxpbmVI
ZWlnaHQudmFsdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29tcHV0ZWRMaW5lSGVp
Z2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29s
dmVyLCB2YWx1ZSwgbXVsdGlwbGllcikudmFsdWUoKTsKKyAgICAgICAgICAgIGNvbXB1dGVkTGlu
ZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQoYnVpbGRl
clN0YXRlLCB2YWx1ZSwgbXVsdGlwbGllcikudmFsdWUoKTsKICAgICB9CiAKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldExpbmVIZWlnaHQoV1RGTW92ZShjb21wdXRlZExpbmVIZWlnaHQp
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoV1RG
TW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRM
aW5lSGVpZ2h0KFdURk1vdmUoY29tcHV0ZWRMaW5lSGVpZ2h0KSk7CisgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0U3BlY2lmaWVkTGluZUhlaWdodChXVEZNb3ZlKGxpbmVIZWlnaHQudmFsdWUo
KSkpOwogfQogCiAjZW5kaWYKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRPdXRsaW5lU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0T3V0bGluZVN0eWxlKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldE91dGxpbmVTdHlsZUlzQXV0byhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm91
dGxpbmVTdHlsZUlzQXV0bygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxp
bmVTdHlsZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm91dGxpbmVTdHlsZSgpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkub3V0bGluZVN0eWxlSXNBdXRvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldE91dGxpbmVTdHlsZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5vdXRsaW5l
U3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsT3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1
dG8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUoUmVuZGVy
U3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVyU3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1
dG8oKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlKFJlbmRlclN0
eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZU91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVPdXRsaW5lU3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJpbWl0aXZlVmFsdWUpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKHByaW1pdGl2ZVZhbHVlKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJpbWl0aXZlVmFsdWUpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE91dGxpbmVTdHlsZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ2xpcChTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDbGlwKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5n
dGgoKSwgTGVuZ3RoKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcChm
YWxzZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3Ro
KCksIExlbmd0aCgpLCBMZW5ndGgoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFz
Q2xpcChmYWxzZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Q2xpcChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDbGlwKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKTsKLSAgICBpZiAoIXBhcmVudFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgIHJl
dHVybiBhcHBseUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q2xpcChMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcFRvcCgpIH0sIExlbmd0
aCB7IHBhcmVudFN0eWxlLT5jbGlwUmlnaHQoKSB9LAotICAgICAgICBMZW5ndGggeyBwYXJlbnRT
dHlsZS0+Y2xpcEJvdHRvbSgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpIH0p
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICBhdXRv
JiBwYXJlbnRTdHlsZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpOworICAgIGlmICghcGFy
ZW50U3R5bGUuaGFzQ2xpcCgpKQorICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChidWls
ZGVyU3RhdGUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENsaXAoTGVuZ3RoIHsgcGFy
ZW50U3R5bGUuY2xpcFRvcCgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBSaWdodCgpIH0s
CisgICAgICAgIExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBCb3R0b20oKSB9LCBMZW5ndGggeyBw
YXJlbnRTdHlsZS5jbGlwTGVmdCgpIH0pOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhh
c0NsaXAodHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUNsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ2xpcChTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBw
cmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAg
aWYgKGF1dG8qIHJlY3QgPSBwcmltaXRpdmVWYWx1ZS5yZWN0VmFsdWUoKSkgewotICAgICAgICBh
dXRvIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKTsKKyAgICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0
ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAgICAgICAgIGF1dG8gdG9wID0gcmVjdC0+
dG9wKCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENv
bnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRv
IHJpZ2h0ID0gcmVjdC0+cmlnaHQoKS0+Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZl
cnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IEF1dG9Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0
YSk7CiAgICAgICAgIGF1dG8gYm90dG9tID0gcmVjdC0+Ym90dG9tKCktPmNvbnZlcnRUb0xlbmd0
aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVy
c2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRvIGxlZnQgPSByZWN0LT5sZWZ0KCkt
PmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNp
b24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwotICAgICAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldENsaXAoV1RGTW92ZSh0b3ApLCBXVEZNb3ZlKHJpZ2h0KSwgV1RGTW92
ZShib3R0b20pLCBXVEZNb3ZlKGxlZnQpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRIYXNDbGlwKHRydWUpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDbGlw
KFdURk1vdmUodG9wKSwgV1RGTW92ZShyaWdodCksIFdURk1vdmUoYm90dG9tKSwgV1RGTW92ZShs
ZWZ0KSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0NsaXAodHJ1ZSk7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBD
U1NWYWx1ZUF1dG8pOwotICAgICAgICBhcHBseUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOwor
ICAgICAgICBhcHBseUluaXRpYWxDbGlwKGJ1aWxkZXJTdGF0ZSk7CiAgICAgfQogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAotICAgIEZvbnRD
YXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNj
cmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGlm
IChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICBmb250
RGVzY3JpcHRpb24uc2V0TG9jYWxlKG51bGxBdG9tKCkpOwogICAgIGVsc2UKICAgICAgICAgZm9u
dERlc2NyaXB0aW9uLnNldExvY2FsZShwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlV3JpdGluZ01vZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV3JpdGluZ01v
ZGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7
Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRXcml0aW5nTW9kZShkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0
bHlTZXRXcml0aW5nTW9kZSh0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0V3JpdGluZ01vZGUo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0SGFzRXhwbGljaXRseVNldFdyaXRpbmdNb2RlKHRydWUpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24o
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0VGV4dE9yaWVudGF0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24oZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRP
U0laSU5HKQotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0
VGV4dFNpemVBZGp1c3QoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4
dFNpemVBZGp1c3QoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVBdXRvKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaXplQWRq
dXN0KFRleHRTaXplQWRqdXN0bWVudChBdXRvVGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVu
dChBdXRvVGV4dFNpemVBZGp1c3RtZW50KSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQoTm9UZXh0U2l6ZUFkanVzdG1l
bnQpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3QoVGV4
dFNpemVBZGp1c3RtZW50KE5vVGV4dFNpemVBZGp1c3RtZW50KSk7CiAgICAgZWxzZQotICAgICAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0
bWVudChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpKTsKKyAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KHByaW1pdGl2ZVZh
bHVlLmZsb2F0VmFsdWUoKSkpOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEZvbnRE
aXJ0eSh0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERpcnR5KCk7CiB9CiAjZW5kaWYK
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpv
b20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwog
ICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFpvb20oVGV4dFpvb206Ok5vcm1hbCk7
CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRab29tKFRleHRab29tOjpOb3Jt
YWwpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJl
c2V0KQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRab29tKFRleHRab29t
OjpSZXNldCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEZvbnREaXJ0eSh0cnVlKTsK
KyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFpvb20oVGV4dFpvb206OlJlc2V0
KTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERpcnR5KCk7CiB9CiAKICNpZiBFTkFCTEUoREFS
S19NT0RFX0NTUykKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNv
bG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29sb3JTY2hlbWUoU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpKTsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRDb2xvclNjaGVtZSh0cnVlKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb2xvclNjaGVtZShTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZShidWlsZGVyU3RhdGUsIHZhbHVlKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseVNldENvbG9yU2NoZW1lKHRydWUpOwog
fQogI2VuZGlmCiAKIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBpZiAo
cHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93KQotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRvdyhudWxscHRyKTsKICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7Cisg
ICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7CiAg
ICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAg
ICAgICAgYXV0byYgc2hhZG93VmFsdWUgPSBkb3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oaXRlbS5n
ZXQoKSk7Ci0gICAgICAgIGF1dG8gY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRl
KCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOworICAgICAgICBhdXRvIGNvbnZlcnNpb25E
YXRhID0gYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICAgICAg
aW50IHggPSBzaGFkb3dWYWx1ZS54LT5jb21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEp
OwogICAgICAgICBpbnQgeSA9IHNoYWRvd1ZhbHVlLnktPmNvbXB1dGVMZW5ndGg8aW50Pihjb252
ZXJzaW9uRGF0YSk7CiAgICAgICAgIGludCBibHVyID0gc2hhZG93VmFsdWUuYmx1ciA/IHNoYWRv
d1ZhbHVlLmJsdXItPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSkgOiAwOwpAQCAt
ODEwLDk0ICs4MTAsOTQgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRl
eHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmUKICAgICAgICAgU2hhZG93
U3R5bGUgc2hhZG93U3R5bGUgPSBzaGFkb3dWYWx1ZS5zdHlsZSAmJiBzaGFkb3dWYWx1ZS5zdHls
ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSW5zZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAg
Q29sb3IgY29sb3I7CiAgICAgICAgIGlmIChzaGFkb3dWYWx1ZS5jb2xvcikKLSAgICAgICAgICAg
IGNvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqc2hhZG93VmFs
dWUuY29sb3IpOworICAgICAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoKnNoYWRvd1ZhbHVlLmNvbG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgICAgICBj
b2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7CiAgICAgICAgIGF1dG8gc2hhZG93
RGF0YSA9IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVh
ZCwgc2hhZG93U3R5bGUsIHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBj
b2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENvbG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgIGlm
IChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRleHRTaGFkb3cpCi0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmly
c3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50
cnkKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaGFkb3coV1RGTW92
ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlz
IGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmly
c3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50
cnkKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEJveFNoYWRvdyhXVEZNb3Zl
KHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMg
aXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAgICAgICBpc0ZpcnN0RW50cnkgPSBmYWxzZTsKICAg
ICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4
dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFk
b3cobnVsbHB0cik7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRvdyhudWxs
cHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRU
ZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNo
YWRvdyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRTaGFkb3coKSA/IG1ha2VVbmlx
dWU8U2hhZG93RGF0YT4oKnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygp
KSA6IG51bGxwdHIpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaGFkb3coYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dFNoYWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dE
YXRhPigqYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dFNoYWRvdygpKSA6IG51bGxwdHIp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0U2hh
ZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRTaGFkb3coU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlU
ZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eVRleHRTaGFkb3c+KHN0eWxlUmVzb2x2ZXIs
IHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5VGV4dFNo
YWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsQm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRv
dyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3co
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Ym94U2hh
ZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPmJveFNoYWRvdygpKSA6IG51bGxwdHIpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEJveFNoYWRvdyhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5ib3hTaGFkb3coKSA/IG1ha2VV
bmlxdWU8U2hhZG93RGF0YT4oKmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmJveFNoYWRvdygp
KSA6IG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQm94U2hhZG93
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewot
ICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlCb3hTaGFkb3c+KHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3Bl
cnR5Qm94U2hhZG93PihidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFkb3coU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsV2Via2l0Qm94U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
IHsKLSAgICBhcHBseUluaXRpYWxCb3hTaGFkb3coc3R5bGVSZXNvbHZlcik7CisgICAgYXBwbHlJ
bml0aWFsQm94U2hhZG93KGJ1aWxkZXJTdGF0ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Via2l0Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dFdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgYXBwbHlJbmhlcml0Qm94U2hhZG93KHN0eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5oZXJp
dEJveFNoYWRvdyhidWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVXZWJraXRCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NT
UHJvcGVydHlXZWJraXRCb3hTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBs
eVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93PihidWlsZGVy
U3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGYW1pbHkoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnRE
ZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGF1dG8gaW5pdGlhbERlc2MgPSBGb250Q2FzY2FkZURlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBX
ZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1p
bHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRvIG5vbi1tb25vc3BhY2UuCiAgICAgaWYgKGZvbnRE
ZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCkpIHsKICAgICAgICAgaWYgKENTU1ZhbHVl
SUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVzY3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZp
ZXIoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0
aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCBmYWxzZSwgc3R5
bGVSZXNvbHZlci5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc2V0Rm9u
dFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVu
dGlmaWVyLCBmYWxzZSwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpKTsKICAgICB9CiAgICAgaWYg
KCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgpLmlzRW1wdHkoKSkKICAgICAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEZhbWlsaWVzKGluaXRpYWxEZXNjLmZhbWlsaWVzKCkpOwogCi0gICAgc3R5bGVS
ZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAg
ICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9u
dEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgYXV0byBwYXJlbnRGb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwor
ICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2Ny
aXB0aW9uKCk7CisgICAgYXV0byBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUu
cGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3JpcHRpb24uZmFtaWxpZXMoKSk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9udChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVj
aWZpZWRGb250KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlv
bihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVM
aXN0Pih2YWx1ZSk7CiAKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICAvLyBCZWZvcmUgbWFw
cGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBwcm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBn
ZW5lcmljIGZhbWlseS4KICAgICBib29sIG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0g
Zm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKTsKIApAQCAtOTE2LDcgKzkxNiw3
IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHko
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NT
VmFsdWVXZWJraXRCb2R5OgotICAgICAgICAgICAgICAgIGZhbWlseSA9IHN0eWxlUmVzb2x2ZXIu
c2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKKyAgICAgICAgICAgICAgICBmYW1pbHkg
PSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5zZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlm
OgogICAgICAgICAgICAgICAgIGZhbWlseSA9IHNlcmlmRmFtaWx5OwpAQCAtOTY0LDM2ICs5NjQs
MzYgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWls
eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKIAogICAgIGlmIChmb250RGVzY3JpcHRpb24u
dXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7
CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXpl
SWRlbnRpZmllciwgIW9sZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplLCBzdHlsZVJlc29sdmVy
LmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250U2l6ZShmb250
RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFv
bGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6ZSwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpKTsK
ICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjppc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIERp
c3BsYXlUeXBlIGRpc3BsYXkpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFs
aWREaXNwbGF5VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBEaXNwbGF5
VHlwZSBkaXNwbGF5KQogewotICAgIGlmIChpczxTVkdFbGVtZW50PihzdHlsZVJlc29sdmVyLmVs
ZW1lbnQoKSkgJiYgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9J
ZDo6Tm9uZSkKKyAgICBpZiAoaXM8U1ZHRWxlbWVudD4oYnVpbGRlclN0YXRlLmVsZW1lbnQoKSkg
JiYgYnVpbGRlclN0YXRlLnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCiAg
ICAgICAgIHJldHVybiBkaXNwbGF5ID09IERpc3BsYXlUeXBlOjpJbmxpbmUgfHwgZGlzcGxheSA9
PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6Tm9uZTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXREaXNwbGF5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCktPmRpc3BsYXkoKTsKLSAgICBpZiAoaXNWYWxpZERpc3BsYXlW
YWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBidWls
ZGVyU3RhdGUucGFyZW50U3R5bGUoKS5kaXNwbGF5KCk7CisgICAgaWYgKGlzVmFsaWREaXNwbGF5
VmFsdWUoYnVpbGRlclN0YXRlLCBkaXNwbGF5KSkKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0RGlzcGxheShkaXNwbGF5KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlRGlzcGxheShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVE
aXNwbGF5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpOwotICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRp
c3BsYXkpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxh
eSk7CisgICAgaWYgKGlzVmFsaWREaXNwbGF5VmFsdWUoYnVpbGRlclN0YXRlLCBkaXNwbGF5KSkK
KyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0RGlzcGxheShkaXNwbGF5KTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVTaGlmdChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIFNWR1JlbmRl
clN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUo
KTsKKyAgICBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5h
Y2Nlc3NTVkdTdHlsZSgpOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlE
KCkpIHsKICAgICAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkpIHsKQEAgLTEw
MTUsNTcgKzEwMTUsNTcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlQmFzZWxpbmVTaGlmdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc28KICAgICB9CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0QXNwZWN0UmF0
aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0QXNwZWN0UmF0aW8oU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0
UmF0aW9UeXBlKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9UeXBlKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHls
ZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVj
dFJhdGlvTnVtZXJhdG9yKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJh
dGlvVHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvVHlwZSgpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjpp
bml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlv
TnVtZXJhdG9yKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFdlYmtpdEFzcGVjdFJhdGlvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEFzcGVjdFJh
dGlvKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBpZiAoc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5
cGU6OkF1dG8pCisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlv
VHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6QXV0bykKICAgICAgICAgcmV0dXJuOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9UeXBlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVj
dFJhdGlvTnVtZXJhdG9yKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJh
dGlvVHlwZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihidWlsZGVy
U3RhdGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGJ1aWxkZXJTdGF0ZS5wYXJl
bnRTdHlsZSgpLmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRBc3BlY3RSYXRpbyhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRBc3BlY3RSYXRpbyhTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21EaW1lbnNpb25zKQotICAgICAgICAgICAgcmV0
dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlv
VHlwZTo6RnJvbURpbWVuc2lvbnMpOworICAgICAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkZyb21EaW1lbnNpb25z
KTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21J
bnRyaW5zaWMpCi0gICAgICAgICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRB
c3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpGcm9tSW50cmluc2ljKTsKKyAgICAgICAg
ICAgIHJldHVybiBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0
UmF0aW9UeXBlOjpGcm9tSW50cmluc2ljKTsKIAogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0byk7Ci0gICAgICAgIHJldHVybiBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkF1dG8pOwor
ICAgICAgICByZXR1cm4gYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFz
cGVjdFJhdGlvVHlwZTo6QXV0byk7CiAgICAgfQogCiAgICAgYXV0byYgYXNwZWN0UmF0aW9WYWx1
ZSA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlvVmFsdWU+KHZhbHVlKTsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OlNwZWNpZmll
ZCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9y
KGFzcGVjdFJhdGlvVmFsdWUuZGVub21pbmF0b3JWYWx1ZSgpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVtZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJh
dG9yVmFsdWUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBl
KEFzcGVjdFJhdGlvVHlwZTo6U3BlY2lmaWVkKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUuZGVub21pbmF0b3JWYWx1
ZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihh
c3BlY3RSYXRpb1ZhbHVlLm51bWVyYXRvclZhbHVlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5p
dGlhbFRleHRFbXBoYXNpc01hcmsoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3Vz
dG9tTWFyaygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxs
KFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzRmlsbCgpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVt
cGhhc2lzTWFyaygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXND
dXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRU
ZXh0RW1waGFzaXNTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRUZXh0RW1waGFzaXNTdHls
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRl
eHRFbXBoYXNpc01hcmsoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNN
YXJrKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9t
TWFyayhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmso
KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmlsbChidWlsZGVy
U3RhdGUucGFyZW50U3R5bGUoKS50ZXh0RW1waGFzaXNGaWxsKCkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCku
dGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1w
aGFzaXNDdXN0b21NYXJrKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRleHRFbXBoYXNpc0N1
c3RvbU1hcmsoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVl
KSkgewogICAgICAgICBhdXRvJiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7
CkBAIC0xMDc0LDM4ICsxMDc0LDM4IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlUmVzb2x2ZXImCiAgICAgICAg
IGZvciAoYXV0byYgaXRlbSA6IGxpc3QpIHsKICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVl
JiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAg
ICAgICAgIGlmICh2YWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUudmFs
dWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwodmFsdWUpOworICAgICAgICAgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0ZpbGwodmFsdWUpOwogICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhh
c2lzTWFyayh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
VGV4dEVtcGhhc2lzTWFyayh2YWx1ZSk7CiAgICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOworICAgICAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9t
KCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNGaWxsOjpGaWxsZWQpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6Q3Vz
dG9tKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0
b21NYXJrKHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCkpOworICAgICAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCk7
CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVt
cGhhc2lzTWFyazo6Q3VzdG9tKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4
dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVt
cGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOwogCiAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRpdmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhUZXh0RW1waGFzaXNNYXJrOjpBdXRvKTsK
KyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRp
dmVWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01h
cmsoVGV4dEVtcGhhc2lzTWFyazo6QXV0byk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZp
bGxlZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFy
ayhwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRF
bXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6RmlsbGVkKTsKKyAgICAgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CiAgICAgfQog
fQogCiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoYXZpb3IgY291bnRl
ckJlaGF2aW9yPgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRD
b3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIGF1dG8mIG1hcCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNj
ZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogY29uc3Rf
Y2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPmFjY2Vzc0Nv
dW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBhdXRvJiBtYXAgPSBidWlsZGVyU3RhdGUuc3R5bGUo
KS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBj
b25zdF9jYXN0PFJlbmRlclN0eWxlJj4oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkpLmFjY2Vz
c0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAgICAgICAgYXV0byYgZGlyZWN0aXZlcyA9IG1hcC5h
ZGQoa2V5VmFsdWUua2V5LCBDb3VudGVyRGlyZWN0aXZlcyB7IH0pLml0ZXJhdG9yLT52YWx1ZTsK
ICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGRpcmVj
dGl2ZXMucmVzZXRWYWx1ZSA9IGtleVZhbHVlLnZhbHVlLnJlc2V0VmFsdWU7CkBAIC0xMTE1LDE0
ICsxMTE1LDE0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyCiB9CiAKIHRlbXBsYXRlIDxTdHls
ZUJ1aWxkZXJDdXN0b206OkNvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+Ci1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50VG9O
b25lID0gY291bnRlckJlaGF2aW9yID09IEluY3JlbWVudCAmJiBpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgp
ID09IENTU1ZhbHVlTm9uZTsKIAogICAgIGlmICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYg
IXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUpCiAgICAgICAgIHJldHVybjsKIAotICAgIENvdW50
ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzQ291bnRl
ckRpcmVjdGl2ZXMoKTsKKyAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpOwogICAgIGZvciAoYXV0byYga2V5
VmFsdWUgOiBtYXApIHsKICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKICAg
ICAgICAgICAgIGtleVZhbHVlLnZhbHVlLnJlc2V0VmFsdWUgPSBXVEY6Om51bGxvcHQ7CkBAIC0x
MTQ1LDg0ICsxMTQ1LDg0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUNvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICB9CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlckluY3JlbWVu
dChTdHlsZVJlc29sdmVyJikgeyB9CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbENvdW50ZXJJbmNyZW1lbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJJbmNyZW1l
bnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlckluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXBwbHlJbmhlcml0Q291bnRlcjxJbmNyZW1lbnQ+KHN0
eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdENvdW50ZXI8SW5jcmVtZW50PihidWlsZGVy
U3RhdGUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVD
b3VudGVySW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJJ
bmNyZW1lbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFs
dWUpCiB7Ci0gICAgYXBwbHlWYWx1ZUNvdW50ZXI8SW5jcmVtZW50PihzdHlsZVJlc29sdmVyLCB2
YWx1ZSk7CisgICAgYXBwbHlWYWx1ZUNvdW50ZXI8SW5jcmVtZW50PihidWlsZGVyU3RhdGUsIHZh
bHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxD
b3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVyUmVzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsg
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJS
ZXNldChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyUmVzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlKQogewotICAgIGFwcGx5SW5oZXJpdENvdW50ZXI8UmVzZXQ+KHN0eWxlUmVz
b2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdENvdW50ZXI8UmVzZXQ+KGJ1aWxkZXJTdGF0ZSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJSZXNl
dChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlW
YWx1ZUNvdW50ZXI8UmVzZXQ+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVZhbHVl
Q291bnRlcjxSZXNldD4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3Vyc29yKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1
cnNvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5jbGVhckN1cnNvckxpc3QoKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEN1cnNvcigpKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5jbGVhckN1cnNvckxpc3QoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxDdXJzb3IoKSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3Vyc29yKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEN1cnNvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3Ioc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT5jdXJzb3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0
eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Y3Vyc29ycygpKTsKKyAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRDdXJzb3IoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuY3Vyc29yKCkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEN1cnNvckxpc3QoYnVpbGRlclN0YXRlLnBhcmVu
dFN0eWxlKCkuY3Vyc29ycygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ3Vyc29yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1cnNv
cihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ3Vyc29yTGlzdCgpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ3Vyc29yTGlzdCgpOwogICAgIGlmIChpczxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEN1cnNvclR5cGUgY3Vyc29yID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+Y3Vyc29yKCkgIT0gY3Vyc29yKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDdXJzb3IoY3Vyc29yKTsKKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LmN1cnNvcigpICE9IGN1cnNvcikKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEN1cnNvcihjdXJzb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoQ3Vyc29yVHlwZTo6QXV0byk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKEN1cnNvclR5cGU6OkF1dG8pOwogICAgIGF1dG8mIGxpc3Qg
PSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBs
aXN0KSB7CiAgICAgICAgIGlmIChpczxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtKSkgewogICAg
ICAgICAgICAgYXV0byYgaW1hZ2UgPSBkb3duY2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVt
LmdldCgpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29yKHN0
eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShpbWFnZSksIGltYWdlLmhvdFNwb3QoKSk7CisgICAgICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5hZGRDdXJzb3IoYnVpbGRlclN0YXRlLmNyZWF0ZVN0
eWxlSW1hZ2UoaW1hZ2UpLCBpbWFnZS5ob3RTcG90KCkpOwogICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgIH0KIAotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNvcihk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSkpOworICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0u
Z2V0KCkpKTsKICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShpdGVtLnB0cigpID09IGxpc3Qu
aXRlbShsaXN0Lmxlbmd0aCgpIC0gMSksICJDdXJzb3IgSUQgZmFsbGJhY2sgc2hvdWxkIGFsd2F5
cyBiZSBsYXN0IGluIHRoZSBsaXN0Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRmlsbChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxGaWxsKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBh
dXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsK
LSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFp
bnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCku
YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBh
aW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgYnVpbGRl
clN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGaWxsKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZpbGwoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgIGF1dG8mIHN2Z1BhcmVu
dFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIHN2
Z1N0eWxlLnNldEZpbGxQYWludChzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRUeXBlKCksIHN2Z1Bh
cmVudFN0eWxlLmZpbGxQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludFVyaSgp
LCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29s
dmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5
bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2
Z1BhcmVudFN0eWxlID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAg
ICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUuZmlsbFBhaW50VHlwZSgpLCBz
dmdQYXJlbnRTdHlsZS5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRV
cmkoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVy
U3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIAogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUZpbGwoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGNvbnN0IGF1dG8qIGxvY2FsVmFsdWUg
PSB2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgPyAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSA6IG51bGxwdHI7CiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAodmFsdWUuaXNWYWx1
ZUxpc3QoKSkgewpAQCAtMTI0MiwzMSArMTI0MiwzMSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
UwogICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1w
dHkoKSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6IFNWR1BhaW50VHlwZTo6VVJJTm9uZTsKICAgICBl
bHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGNvbG9yID0gYnVpbGRlclN0YXRlLnN0eWxlKCku
Y29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlw
ZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRUeXBlOjpVUklDdXJyZW50Q29sb3I7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOwogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNF
bXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJUkdCQ29s
b3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChwYWludFR5cGUsIGNvbG9yLCB1
cmwsIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBzdmdTdHlsZS5z
ZXRGaWxsUGFpbnQocGFpbnRUeXBlLCBjb2xvciwgdXJsLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbFN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTdHJva2UoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRTdHJv
a2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5k
ZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRp
YWxTdHJva2VQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7
CisgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNj
ZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHls
ZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9r
ZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBi
dWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5h
cHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRTdHJv
a2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8mIHN2Z1N0
eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgIGF1dG8m
IHN2Z1BhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgp
OwotICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50
VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxl
LnN0cm9rZVBhaW50VXJpKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
KyAgICBhdXRvJiBzdmdTdHlsZSA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxl
KCk7CisgICAgYXV0byYgc3ZnUGFyZW50U3R5bGUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KS5zdmdTdHlsZSgpOworICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxl
LnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludENvbG9yKCksIHN2
Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VXJpKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZVN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byYg
c3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAg
YXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwog
ICAgIGNvbnN0IGF1dG8qIGxvY2FsVmFsdWUgPSB2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgPyAm
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSA6IG51bGxwdHI7CiAgICAgU3RyaW5n
IHVybDsKICAgICBpZiAodmFsdWUuaXNWYWx1ZUxpc3QoKSkgewpAQCAtMTI4NiwzMiArMTI4Niwz
MiBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQwogICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1ZS0+
aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAg
ICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6IFNW
R1BhaW50VHlwZTo6VVJJTm9uZTsKICAgICBlbHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQo
KSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAg
ICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGNv
bG9yID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuY29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBlID0g
dXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRUeXBl
OjpVUklDdXJyZW50Q29sb3I7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJl
c29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAgY29s
b3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOwog
ICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JDb2xv
ciA6IFNWR1BhaW50VHlwZTo6VVJJUkdCQ29sb3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNldFN0
cm9rZVBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwgc3R5bGVSZXNvbHZlci5hcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKCkpOworICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHBhaW50VHlwZSwgY29s
b3IsIHVybCwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWls
ZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb250ZW50KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbENvbnRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CisgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuY2xlYXJDb250ZW50KCk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Q29udGVudChTdHlsZVJlc29sdmVyJikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q29udGVudChTdHlsZTo6QnVpbGRlclN0YXRl
JikKIHsKICAgICAvLyBGSVhNRTogSW4gQ1NTMywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBpbmhl
cml0IGNvbnRlbnQuIEluIENTUzIgaXQgaXMgbm90LiBUaGlzCiAgICAgLy8gbm90ZSBpcyBhIHJl
bWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5oZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgY29uc3QgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgICAgICBBU1NFUlRfVU5V
U0VEKHByaW1pdGl2ZVZhbHVlLCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVO
b3JtYWwgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7Ci0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQog
CkBAIC0xMzE5LDE3ICsxMzE5LDE3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICBmb3Ig
KGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBp
ZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbSkpIHsKICAgICAgICAgICAgIGlmIChp
czxDU1NHcmFkaWVudFZhbHVlPihpdGVtKSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0
PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVk
KHN0eWxlUmVzb2x2ZXIpKSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUu
c3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxD
U1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgpKS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChi
dWlsZGVyU3RhdGUuc3R5bGVSZXNvbHZlcigpKSksIGRpZFNldCk7CiAgICAgICAgICAgICBlbHNl
Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihp
dGVtLmdldCgpKSksIGRpZFNldCk7CisgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1h
Z2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlk
U2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVt
KSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxl
Q2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBk
aWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAg
IGlmIChpczxDU1NJbWFnZVZhbHVlPihpdGVtKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVD
YWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0g
dHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMzM5LDIwICsxMzM5
LDIwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKIAogICAgICAgICBhdXRvJiBjb250ZW50VmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oaXRlbS5nZXQoKSk7CiAgICAgICAgIGlm
IChjb250ZW50VmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlk
U2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoY29udGVu
dFZhbHVlLnN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNBdHRyKCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBh
dHRyKGZvbyk/Ci0gICAgICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5
cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEhhc0F0dHJDb250ZW50KCk7CisgICAgICAgICAgICBpZiAoYnVpbGRlclN0YXRl
LnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgICAgICAgICAgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzQXR0ckNvbnRlbnQoKTsKICAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzQXR0ckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBj
b25zdF9jYXN0PFJlbmRlclN0eWxlJj4oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkpLnNldEhh
c0F0dHJDb250ZW50KCk7CiAgICAgICAgICAgICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20o
KSwgY29udGVudFZhbHVlLnN0cmluZ1ZhbHVlKCkuaW1wbCgpLCBudWxsQXRvbSgpKTsKLSAgICAg
ICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCkt
PmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBk
aWRTZXQpOworICAgICAgICAgICAgY29uc3QgQXRvbVN0cmluZyYgdmFsdWUgPSBidWlsZGVyU3Rh
dGUuZWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRyKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6IHZhbHVl
LmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAg
ICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0
aGUgc3R5bGUuCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnJ1bGVTZXRzKCkubXV0YWJsZUZl
YXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxOYW1lKCkpOworICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11dGFibGVG
ZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKICAg
ICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNDb3VudGVyKCkpIHsKICAgICAgICAgICAg
IGF1dG8qIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS5jb3VudGVyVmFsdWUoKTsKICAgICAg
ICAgICAgIExpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IExpc3RTdHlsZVR5cGU6Ok5vbmU7
CkBAIC0xMzYwLDI0ICsxMzYwLDI0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAg
ICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgICAgICAgICAg
bGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PExpc3RTdHlsZVR5cGU+KGxpc3RTdHlsZUlkZW50
IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgIGF1dG8gY291bnRlciA9IG1ha2VVbmlxdWU8
Q291bnRlckNvbnRlbnQ+KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBsaXN0U3R5bGVUeXBl
LCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKTsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0Q29udGVudChXVEZNb3ZlKGNvdW50ZXIpLCBkaWRTZXQpOworICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChXVEZNb3ZlKGNvdW50ZXIpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAg
ICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLnZhbHVlSUQoKSkgewogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldENvbnRlbnQoUXVvdGVUeXBlOjpPcGVuUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6Ok9wZW5RdW90
ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVvdGU6Ci0gICAgICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1b3RlVHlwZTo6Q2xv
c2VRdW90ZSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb250ZW50KFF1b3RlVHlwZTo6Q2xvc2VRdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAg
ICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0Q29udGVudChRdW90ZVR5cGU6Ok5vT3BlblF1b3RlLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb09w
ZW5RdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vQ2xvc2VRdW90ZToK
LSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVU
eXBlOjpOb0Nsb3NlUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6Ok5vQ2xvc2VRdW90ZSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgZGVmYXVsdDoKQEAgLTEzODcsMTI3ICsxMzg3LDEyNyBAQCBpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFkaWRTZXQpCi0gICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
IHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoc3R5
bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29tbW9uTGlnYXR1cmVz
KCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJl
cyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnREaXNjcmV0aW9u
YXJ5TGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50SGlzdG9yaWNh
bExpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRI
aXN0b3JpY2FsTGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29u
dGV4dHVhbEFsdGVybmF0ZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudENvbW1vbkxpZ2F0dXJlcyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudENvbW1vbkxpZ2F0dXJlcygpKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoYnVpbGRlclN0YXRlLnBhcmVudEZv
bnREZXNjcmlwdGlvbigpLnZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyhidWlsZGVyU3RhdGUu
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoKSk7Cisg
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJuYXRlcyhidWlsZGVy
U3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVz
KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxGb250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExp
Z2F0dXJlcyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBm
b250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKEZvbnRWYXJpYW50TGln
YXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVy
ZXM6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0
ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRM
aWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRMaWdh
dHVyZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlw
dGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNj
cmlwdGlvbigpOwogICAgIGF1dG8gdmFyaWFudExpZ2F0dXJlcyA9IGV4dHJhY3RGb250VmFyaWFu
dExpZ2F0dXJlcyh2YWx1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25M
aWdhdHVyZXModmFyaWFudExpZ2F0dXJlcy5jb21tb25MaWdhdHVyZXMpOwogICAgIGZvbnREZXNj
cmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyh2YXJpYW50TGlnYXR1cmVz
LmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50
SGlzdG9yaWNhbExpZ2F0dXJlcyh2YXJpYW50TGlnYXR1cmVzLmhpc3RvcmljYWxMaWdhdHVyZXMp
OwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXModmFy
aWFudExpZ2F0dXJlcy5jb250ZXh0dWFsQWx0ZXJuYXRlcyk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
ZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVy
U3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRO
dW1lcmljKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY0ZpZ3VyZShzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnROdW1lcmljRmlndXJlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVt
ZXJpY1NwYWNpbmcoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50
TnVtZXJpY1NwYWNpbmcoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmlj
RnJhY3Rpb24oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVt
ZXJpY0ZyYWN0aW9uKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09y
ZGluYWwoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJp
Y09yZGluYWwoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU2xhc2hl
ZFplcm8oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWls
ZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnROdW1lcmljRmlndXJlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJp
YW50TnVtZXJpY0ZpZ3VyZSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVy
aWNTcGFjaW5nKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVt
ZXJpY1NwYWNpbmcoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJh
Y3Rpb24oYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnROdW1lcmlj
RnJhY3Rpb24oKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljT3JkaW5h
bChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNPcmRp
bmFsKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJv
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlh
bnROdW1lcmljKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRv
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAg
YXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKEZvbnRWYXJpYW50TnVt
ZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVy
aWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlhbnROdW1lcmljRnJh
Y3Rpb246Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljT3Jk
aW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJpYW50TnVtZXJpY1NsYXNo
ZWRaZXJvOjpOb3JtYWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnROdW1lcmljKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBhdXRvIHZhcmlh
bnROdW1lcmljID0gZXh0cmFjdEZvbnRWYXJpYW50TnVtZXJpYyh2YWx1ZSk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKHZhcmlhbnROdW1lcmljLmZpZ3VyZSk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2luZyh2YXJpYW50TnVt
ZXJpYy5zcGFjaW5nKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNGcmFj
dGlvbih2YXJpYW50TnVtZXJpYy5mcmFjdGlvbik7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnROdW1lcmljT3JkaW5hbCh2YXJpYW50TnVtZXJpYy5vcmRpbmFsKTsKICAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyh2YXJpYW50TnVtZXJpYy5zbGFz
aGVkWmVybyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShm
b250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQog
ewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRp
b24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoc3R5
bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuVmFyaWFu
dCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhbldpZHRoKHN0eWxl
UmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVhc3RBc2lhbldpZHRoKCkp
OwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuUnVieShzdHlsZVJlc29s
dmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0QXNpYW5SdWJ5KCkpOwotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KGJ1
aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuVmFyaWFu
dCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhbldpZHRoKGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuV2lkdGgoKSk7
CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KGJ1aWxkZXJTdGF0
ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuUnVieSgpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZh
cmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRFYXN0QXNpYW5WYXJp
YW50OjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuV2lk
dGgoRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudEVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNpYW5SdWJ5OjpOb3Jt
YWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERl
c2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgYXV0byB2YXJpYW50RWFzdEFz
aWFuID0gZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKHZhbHVlKTsKICAgICBmb250RGVzY3Jp
cHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQodmFyaWFudEVhc3RBc2lhbi52YXJpYW50
KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhbldpZHRoKHZhcmlhbnRF
YXN0QXNpYW4ud2lkdGgpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFu
UnVieSh2YXJpYW50RWFzdEFzaWFuLnJ1YnkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXplKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbEZvbnRTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NT
VmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIHN0eWxl
UmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVy
U3RhdGUuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmbG9hdCBzaXplID0gU3R5bGU6
OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2NyaXB0aW9uLnVzZUZp
eGVkRGVmYXVsdFNpemUoKSwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpOwogCiAgICAgaWYgKHNp
emUgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29y
ZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZU1lZGl1bSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
ZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0
YXRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAgYnVpbGRlclN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRTaXplKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEZvbnRTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1dG8mIHBhcmVudEZv
bnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlv
bigpOwogICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250RGVzY3JpcHRpb24uc3BlY2lmaWVkU2l6
ZSgpOwogCiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemUocGFyZW50Rm9u
dERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRG
b250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAogLy8gV2hlbiB0aGUg
Q1NTIGtleXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGF0dGVtcHQg
dG8gbWF0Y2ggd2l0aGluIHRoZSBrZXl3b3JkCkBAIC0xNTI3LDU5ICsxNTI3LDUzIEBAIGlubGlu
ZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OnNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKQog
ICAgIHJldHVybiBzaXplIC8gMS4yZjsKIH0KIAotaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1
c3RvbTo6ZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaW5lUnVi
eVRleHRTaXplTXVsdGlwbGllcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+cnVieVBvc2l0aW9uKCkgIT0gUnVieVBv
c2l0aW9uOjpJbnRlckNoYXJhY3RlcikKKyAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkucnVi
eVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uOjpJbnRlckNoYXJhY3RlcikKICAgICAgICAgcmV0
dXJuIDAuNWY7CiAKICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIHRvIGVuc3VyZSB0b25lIG1h
cmtzIGFyZSB0aGUgc2FtZSBzaXplIGFzCiAgICAgLy8gdGhlIGJvcG9tb2ZvLiBUaGlzIGNvZGUg
d2lsbCBnbyBhd2F5IGlmIHdlIG1ha2UgYSBzcGVjaWFsIHJlbmRlcmVyCiAgICAgLy8gZm9yIHRo
ZSB0b25lIG1hcmtzIGV2ZW50dWFsbHkuCi0gICAgaWYgKGF1dG8qIGVsZW1lbnQgPSBzdHlsZVJl
c29sdmVyLnN0YXRlKCkuZWxlbWVudCgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgYW5jZXN0b3Ig
OiBhbmNlc3RvcnNPZlR5cGU8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewotICAgICAgICAgICAg
aWYgKGFuY2VzdG9yLmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpydFRhZykpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIDEuMGY7Ci0gICAgICAgIH0KKyAgICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5j
ZXN0b3JzT2ZUeXBlPEhUTUxFbGVtZW50PihidWlsZGVyU3RhdGUuZWxlbWVudCgpKSkgeworICAg
ICAgICBpZiAoYW5jZXN0b3IuaGFzVGFnTmFtZShIVE1MTmFtZXM6OnJ0VGFnKSkKKyAgICAgICAg
ICAgIHJldHVybiAxLjBmOwogICAgIH0KICAgICByZXR1cm4gMC4yNWY7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbEZvbnRTdHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigp
OworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlv
bigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6aW5pdGlhbEl0YWxpYygpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhp
cyhGb250Q2FzY2FkZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcygpKTsKLSAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRGb250U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFN0eWxlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVz
b2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhz
dHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLml0YWxpYygpKTsKLSAgICBmb250
RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVz
Y3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNjcmlw
dGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRp
b24uc2V0SXRhbGljKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5pdGFsaWMo
KSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoYnVpbGRlclN0YXRlLnBh
cmVudEZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSk7CisgICAgYnVpbGRlclN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U3R5bGUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIGZvbnRTdHlsZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTRm9udFN0eWxlVmFsdWU+KHZhbHVlKTsKLSAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEl0YWxpYyhTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5
bGVGcm9tVmFsdWUoZm9udFN0eWxlVmFsdWUpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9u
dFN0eWxlQXhpcyhmb250U3R5bGVWYWx1ZS5mb250U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENT
U1ZhbHVlSXRhbGljID8gRm9udFN0eWxlQXhpczo6aXRhbCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2Ny
aXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5
bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZUludmFsaWQpOwogCi0gICAgZmxvYXQgcGFyZW50U2l6
ZSA9IDA7Ci0gICAgYm9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgIGlmIChh
dXRvKiBwYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkgewotICAgICAg
ICBwYXJlbnRTaXplID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNp
emUoKTsKLSAgICAgICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBwYXJlbnRTdHlsZS0+Zm9udERl
c2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKLSAgICB9CisgICAgZmxvYXQgcGFyZW50U2l6
ZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmll
ZFNpemUoKTsKKyAgICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gYnVpbGRlclN0YXRlLnBh
cmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKIAogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBmbG9hdCBzaXplOwpAQCAtMTU5Niw3ICsxNTkwLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwKICAgICAgICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgY2FzZSBDU1NWYWx1
ZVh4TGFyZ2U6CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAg
ICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRp
b24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAg
ICAgICAgICAgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNj
cmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKTsK
ICAgICAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVy
KGlkZW50KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2Vy
OgpAQCAtMTYwNiw3ICsxNjAwLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAg
ICAgIHNpemUgPSBzbWFsbGVyRm9udFNpemUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdFJ1YnlUZXh0OgotICAgICAgICAgICAgc2l6
ZSA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoc3R5bGVSZXNvbHZlcikgKiBwYXJl
bnRTaXplOworICAgICAgICAgICAgc2l6ZSA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxp
ZXIoYnVpbGRlclN0YXRlKSAqIHBhcmVudFNpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MTQsMTMgKzE2MDgsMTMgQEAg
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICB9IGVsc2UgewogICAgICAgICBmb250RGVzY3Jp
cHRpb24uc2V0SXNBYnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwgIShwcmltaXRp
dmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRSZWxhdGl2ZUxl
bmd0aCgpKSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAg
ICAgICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCksIHN0eWxlUmVz
b2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucmVuZGVy
VmlldygpLCAxLjBmLCB0cnVlKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCku
c2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJj
ZW50YWdlTGVuZ3RoKCkpOworICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJmJ1aWxkZXJTdGF0ZS5w
YXJlbnRTdHlsZSgpLCAmYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgYnVpbGRlclN0
YXRlLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGVSZXNvbHZlcigpLnN0YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9y
dFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAg
ICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAg
ICAgc2l6ZSA9IChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEw
MC4wZjsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2Vu
dGFnZVdpdGhMZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29udmVyc2lvbkRh
dGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwot
ICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBwYXJlbnRDb252ZXJzaW9uRGF0
YSB7IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxl
KCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUgfTsK
KyAgICAgICAgICAgIGNvbnN0IGF1dG8mIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNz
c1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEgcGFyZW50Q29udmVyc2lvbkRhdGEgeyAmYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCksIGNvbnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpLCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5y
ZW5kZXJWaWV3KCksIDEuMGYsIHRydWUgfTsKICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVW
YWx1ZS5jc3NDYWxjVmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShwYXJlbnRDb252ZXJz
aW9uRGF0YSktPmV2YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAg
ICAgIHJldHVybjsKQEAgLTE2MjksMjUgKzE2MjMsMjUgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwKICAgICBpZiAoc2l6ZSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZv
bnRTaXplLCBzaXplKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udFNpemUoZm9u
dERlc2NyaXB0aW9uLCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdy
aWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldE5hbWVkR3JpZEFyZWEoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KFJl
bmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KFJlbmRlclN0eWxlOjppbml0
aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5h
bWVkR3JpZEFyZWEoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhKCkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChSZW5kZXJTdHlsZTo6
aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3VudCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXROYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRB
cmVhQ291bnQoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0R3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlQXJl
YXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
Pm5hbWVkR3JpZEFyZWEoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdy
aWRBcmVhUm93Q291bnQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVh
Um93Q291bnQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVh
Q29sdW1uQ291bnQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhQ29s
dW1uQ291bnQoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYShi
dWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRBcmVhKCkpOworICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKS5uYW1lZEdyaWRBcmVhUm93Q291bnQoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgp
Lm5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudCgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC0xNjU3LDEwOCArMTY1MSwx
MDggQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBs
YXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGUKICAgICBhdXRvJiBncmlkVGVtcGxhdGVBcmVh
c1ZhbHVlID0gZG93bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4odmFsdWUpOwogICAg
IGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpOwogCi0gICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRH
cmlkQ29sdW1uTGluZXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxp
bmVzKCk7Ci0gICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGluZXMgPSBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgTmFtZWRHcmlkTGluZXNN
YXAgbmFtZWRHcmlkQ29sdW1uTGluZXMgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5uYW1lZEdyaWRD
b2x1bW5MaW5lcygpOworICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZFJvd0xpbmVzID0g
YnVpbGRlclN0YXRlLnN0eWxlKCkubmFtZWRHcmlkUm93TGluZXMoKTsKICAgICBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEobmV3
TmFtZWRHcmlkQXJlYXMsIG5hbWVkR3JpZENvbHVtbkxpbmVzLCBGb3JDb2x1bW5zKTsKICAgICBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3Jp
ZEFyZWEobmV3TmFtZWRHcmlkQXJlYXMsIG5hbWVkR3JpZFJvd0xpbmVzLCBGb3JSb3dzKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5hbWVkR3Jp
ZENvbHVtbkxpbmVzKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZFJv
d0xpbmVzKG5hbWVkR3JpZFJvd0xpbmVzKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRO
YW1lZEdyaWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkUm93TGluZXMobmFtZWRHcmlkUm93TGluZXMpOwogCi0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFy
ZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRO
YW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChn
cmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmNvbHVtbkNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldE5hbWVkR3JpZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1h
cCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQo
Z3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXROYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5j
b2x1bW5Db3VudCgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIp
CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0
ZUNvbHVtbnMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlk
Q29sdW1ucygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVt
bkxpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoUmVu
ZGVyU3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlk
Q29sdW1ucygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1bW5M
aW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZENvbHVtbkxpbmVzKCkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJT
dHlsZTo6aW5pdGlhbE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5z
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZENv
bHVtbnMoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ncmlkQ29sdW1ucygpKTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT5vcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0R3JpZENvbHVtbnMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCkuZ3JpZENvbHVtbnMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlk
Q29sdW1uTGluZXMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQ29sdW1uTGlu
ZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3JpZENvbHVt
bkxpbmVzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm9yZGVyZWROYW1lZEdyaWRDb2x1bW5M
aW5lcygpKTsKIH0KIAogI2RlZmluZSBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgc3R5bGUs
IFRyYWNrVHlwZSkgXAotICAgIHN0eWxlLT5zZXRHcmlkIyNUcmFja1R5cGUjI3ModHJhY2tzRGF0
YS5tX3RyYWNrU2l6ZXMpOyBcCi0gICAgc3R5bGUtPnNldE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNM
aW5lcyh0cmFja3NEYXRhLm1fbmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5bGUtPnNldE9yZGVy
ZWROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX29yZGVyZWROYW1lZEdy
aWRMaW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjcyh0
cmFja3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRB
dXRvUmVwZWF0IyNUcmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1Jl
cGVhdEluc2VydGlvblBvaW50KTsgXAotICAgIHN0eWxlLT5zZXRBdXRvUmVwZWF0TmFtZWRHcmlk
IyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0TmFtZWRHcmlkTGluZXMp
OyBcCi0gICAgc3R5bGUtPnNldEF1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkIyNUcmFja1R5cGUj
I0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3JpZExpbmVzKTsgXAot
ICAgIHN0eWxlLT5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzVHlwZSh0cmFja3NEYXRh
Lm1fYXV0b1JlcGVhdFR5cGUpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRvUmVwZWF0IyNUcmFj
a1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBv
aW50KTsKLQotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRl
bXBsYXRlQ29sdW1ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCisgICAgc3R5bGUuc2V0R3JpZCMjVHJhY2tUeXBlIyNzKHRyYWNrc0RhdGEubV90cmFja1Np
emVzKTsgXAorICAgIHN0eWxlLnNldE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NE
YXRhLm1fbmFtZWRHcmlkTGluZXMpOyBcCisgICAgc3R5bGUuc2V0T3JkZXJlZE5hbWVkR3JpZCMj
VHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fb3JkZXJlZE5hbWVkR3JpZExpbmVzKTsgXAor
ICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX2F1
dG9SZXBlYXRUcmFja1NpemVzKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNUcmFj
a1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBv
aW50KTsgXAorICAgIHN0eWxlLnNldEF1dG9SZXBlYXROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGlu
ZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5z
ZXRBdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRh
Lm1fYXV0b1JlcGVhdE9yZGVyZWROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRHcmlk
QXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzVHlwZSh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFR5cGUp
OyBcCisgICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjc0luc2VydGlvblBv
aW50KHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0SW5zZXJ0aW9uUG9pbnQpOworCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6VHJhY2tzRGF0YSB0cmFja3NEYXRhOwotICAgIGlmICghU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja3NEYXRh
LCBzdHlsZVJlc29sdmVyKSkKKyAgICBpZiAoIVN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRl
R3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlKSkKICAgICAgICAg
cmV0dXJuOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7CisgICAgY29uc3QgTmFtZWRHcmlk
QXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5uYW1lZEdyaWRB
cmVhKCk7CiAgICAgaWYgKCFuYW1lZEdyaWRBcmVhcy5pc0VtcHR5KCkpCiAgICAgICAgIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJl
YShuYW1lZEdyaWRBcmVhcywgdHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzLCBGb3JDb2x1bW5z
KTsKIAotICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBzdHlsZVJlc29sdmVyLnN0eWxl
KCksIENvbHVtbik7CisgICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLCBDb2x1bW4pOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBs
YXRlUm93cyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRHcmlkUm93cyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRSb3dz
KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoUmVu
ZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlh
bE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRHcmlkUm93cyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRSb3dzKCkpOworICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFt
ZWRHcmlkUm93TGluZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5h
bWVkR3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZFJvd0xp
bmVzKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyhTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRHcmlkUm93cyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmdyaWRSb3dzKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPm9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRHcmlkUm93cyhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5ncmlk
Um93cygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhi
dWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkub3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpUcmFja3NEYXRhIHRyYWNrc0RhdGE7Ci0gICAgaWYgKCFTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIHN0eWxl
UmVzb2x2ZXIpKQorICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJh
Y2tMaXN0KHZhbHVlLCB0cmFja3NEYXRhLCBidWlsZGVyU3RhdGUpKQogICAgICAgICByZXR1cm47
Ci0gICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPm5hbWVkR3JpZEFyZWEoKTsKKyAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFw
JiBuYW1lZEdyaWRBcmVhcyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLm5hbWVkR3JpZEFyZWEoKTsK
ICAgICBpZiAoIW5hbWVkR3JpZEFyZWFzLmlzRW1wdHkoKSkKICAgICAgICAgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKG5hbWVk
R3JpZEFyZWFzLCB0cmFja3NEYXRhLm1fbmFtZWRHcmlkTGluZXMsIEZvclJvd3MpOwogCi0gICAg
U0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgUm93KTsK
KyAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlLnN0eWxlKCksIFJv
dyk7CiB9CiAKLXZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK3ZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlQWx0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJp
bmcoKSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50QWx0VGV4dChw
cmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0Q29udGVudEFsdFRleHQocHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSk7CiAgICAg
ZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNBdHRyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IENh
biBhIG5hbWVzcGFjZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgaWYg
KHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCi0g
ICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICBp
ZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisg
ICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRVbmlxdWUoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKSktPnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJT
dHlsZSY+KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKS5zZXRVbmlxdWUoKTsKIAogICAgICAg
ICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20oKSwgcHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFs
dWUoKSwgbnVsbEF0b20oKSk7Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gc3R5
bGVSZXNvbHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5
QXRvbSgpIDogdmFsdWUpOworICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IGJ1aWxk
ZXJTdGF0ZS5lbGVtZW50KCkuZ2V0QXR0cmlidXRlKGF0dHIpOworICAgICAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgp
IDogdmFsdWUpOwogCiAgICAgICAgIC8vIFJlZ2lzdGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJp
YnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4KLSAgICAgICAgc3R5bGVSZXNvbHZlci5ydWxl
U2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxv
Y2FsTmFtZSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0
cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2Fs
TmFtZSgpKTsKICAgICB9IGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRD
b250ZW50QWx0VGV4dChlbXB0eUF0b20oKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldENvbnRlbnRBbHRUZXh0KGVtcHR5QXRvbSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZh
bHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldFdpbGxDaGFuZ2UobnVsbHB0cik7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dFdpbGxDaGFuZ2UobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTE3ODAs
NTUgKzE3NzQsNTUgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
V2lsbENoYW5nZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgfQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0V2lsbENo
YW5nZShXVEZNb3ZlKHdpbGxDaGFuZ2UpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRX
aWxsQ2hhbmdlKFdURk1vdmUod2lsbENoYW5nZSkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFN0cm9r
ZVdpZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChzdHlsZVJlc29sdmVy
LCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNl
dFN0cm9rZVdpZHRoKHRydWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFN0cm9rZVdp
ZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChidWlsZGVyU3RhdGUsIHZh
bHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseVNldFN0cm9r
ZVdpZHRoKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVTdHJva2VDb2xvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VD
b2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSk7Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U3Ryb2tlQ29sb3Ioc3R5
bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9y
VmlzaXRlZExpbmsgKi8gZmFsc2UpKTsKLSAgICBpZiAoc3R5bGVSZXNvbHZlci5hcHBseVByb3Bl
cnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0VmlzaXRlZExpbmtTdHJva2VDb2xvcihzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyB0cnVlKSk7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IodHJ1
ZSk7CisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkK
KyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0U3Ryb2tlQ29sb3IoYnVpbGRlclN0YXRl
LmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGlu
ayAqLyBmYWxzZSkpOworICAgIGlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKQorICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRWaXNpdGVkTGlu
a1N0cm9rZUNvbG9yKGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRp
dmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gdHJ1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRTdHJva2VDb2xvcih0cnVlKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVy
dHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiBy
ZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewogICAgIGlmIChyZWdpc3RlcmVk
ICYmIHJlZ2lzdGVyZWQtPmluaXRpYWxWYWx1ZSgpKSB7CiAgICAgICAgIGF1dG8gaW5pdGlhbFZh
bHVlID0gcmVnaXN0ZXJlZC0+aW5pdGlhbFZhbHVlQ29weSgpOwotICAgICAgICBhcHBseVZhbHVl
Q3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgKmluaXRpYWxWYWx1ZSk7
CisgICAgICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShidWlsZGVyU3RhdGUsIHJlZ2lzdGVy
ZWQsICppbml0aWFsVmFsdWUpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBp
bnZhbGlkID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlVW5yZXNvbHZlZChuYW1lLCBD
U1NWYWx1ZUludmFsaWQpOwotICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29s
dmVyLCByZWdpc3RlcmVkLCBpbnZhbGlkLmdldCgpKTsKKyAgICBhcHBseVZhbHVlQ3VzdG9tUHJv
cGVydHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBpbnZhbGlkLmdldCgpKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJv
cGVydHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5
KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKQogewotICAgIGF1dG8qIHBhcmVu
dFZhbHVlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5pbmhlcml0ZWRDdXN0b21Qcm9wZXJ0aWVzKCkuZ2V0KG5hbWUpIDogbnVsbHB0
cjsKKyAgICBhdXRvKiBwYXJlbnRWYWx1ZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmlu
aGVyaXRlZEN1c3RvbVByb3BlcnRpZXMoKS5nZXQobmFtZSk7CiAgICAgaWYgKHBhcmVudFZhbHVl
ICYmICEocmVnaXN0ZXJlZCAmJiAhcmVnaXN0ZXJlZC0+aW5oZXJpdHMpKQotICAgICAgICBhcHBs
eVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgKnBhcmVudFZh
bHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVn
aXN0ZXJlZCwgKnBhcmVudFZhbHVlKTsKICAgICBlbHNlCi0gICAgICAgIGFwcGx5SW5pdGlhbEN1
c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIG5hbWUpOworICAgICAgICBh
cHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShidWlsZGVyU3RhdGUsIHJlZ2lzdGVyZWQsIG5hbWUp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Q
cm9wZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVk
Q3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENTU0N1c3RvbVByb3BlcnR5VmFsdWUmIHZhbHVl
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3VzdG9tUHJvcGVy
dHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NSZWdpc3RlcmVk
Q3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENTU0N1c3RvbVByb3BlcnR5VmFsdWUmIHZhbHVl
KQogewogICAgIEFTU0VSVCh2YWx1ZS5pc1Jlc29sdmVkKCkpOwogICAgIGNvbnN0IGF1dG8mIG5h
bWUgPSB2YWx1ZS5uYW1lKCk7CiAKICAgICBpZiAoIXJlZ2lzdGVyZWQgfHwgcmVnaXN0ZXJlZC0+
aW5oZXJpdHMpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW5oZXJpdGVkQ3Vz
dG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtlUmVmKHZhbHVlKSk7CisgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldEluaGVyaXRlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJl
Zih2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRO
b25Jbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Tm9uSW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlW
YWx1ZShuYW1lLCBtYWtlUmVmKHZhbHVlKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAppbmRleCBmNmM3ZmZhMGI4MC4uNTVlMGI3
MjkwNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTk4LDYgKzk4LDcg
QEAKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUg
IlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAjaW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5j
bHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAjaW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25z
LmgiCkBAIC0xNDMsNyArMTQ0LDYgQEAgU3R5bGVSZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1
bWVudCYgZG9jdW1lbnQpCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKICAgICAs
IG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdwb3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKCZk
b2N1bWVudCkpCiAjZW5kaWYKLSAgICAsIG1fc3R5bGVNYXAodGhpcykKICAgICAsIG1fbWF0Y2hB
dXRob3JBbmRVc2VyU3R5bGVzKG1fZG9jdW1lbnQuc2V0dGluZ3MoKS5hdXRob3JBbmRVc2VyU3R5
bGVzRW5hYmxlZCgpKQogewogICAgIEVsZW1lbnQqIHJvb3QgPSBtX2RvY3VtZW50LmRvY3VtZW50
RWxlbWVudCgpOwpAQCAtMjQ0LDcgKzI0NCw2IEBAIFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0
ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAg
ICAgOiBtX2VsZW1lbnQoJmVsZW1lbnQpCiAgICAgLCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxl
KQogICAgICwgbV9zZWxlY3RvckZpbHRlcihzZWxlY3RvckZpbHRlcikKLSAgICAsIG1fZWxlbWVu
dExpbmtTdGF0ZShlbGVtZW50LmRvY3VtZW50KCkudmlzaXRlZExpbmtTdGF0ZSgpLmRldGVybWlu
ZUxpbmtTdGF0ZShlbGVtZW50KSkKIHsKICAgICBib29sIHJlc2V0U3R5bGVJbmhlcml0YW5jZSA9
IGhhc1NoYWRvd1Jvb3RQYXJlbnQoZWxlbWVudCkgJiYgZG93bmNhc3Q8U2hhZG93Um9vdD4oZWxl
bWVudC5wYXJlbnROb2RlKCkpLT5yZXNldFN0eWxlSW5oZXJpdGFuY2UoKTsKICAgICBpZiAocmVz
ZXRTdHlsZUluaGVyaXRhbmNlKQpAQCAtMjU3LDYgKzI1Niw5IEBAIFN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogcGFy
ZW50U3R5CiAgICAgZWxzZQogICAgICAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSBkb2N1bWVudEVs
ZW1lbnRTdHlsZSA/IGRvY3VtZW50RWxlbWVudFN0eWxlIDogZG9jdW1lbnRFbGVtZW50LT5yZW5k
ZXJTdHlsZSgpOwogCisgICAgaWYgKCFtX3Jvb3RFbGVtZW50U3R5bGUpCisgICAgICAgIG1fcm9v
dEVsZW1lbnRTdHlsZSA9ICZSZW5kZXJTdHlsZTo6ZGVmYXVsdFN0eWxlKCk7CisKICAgICB1cGRh
dGVDb252ZXJzaW9uRGF0YSgpOwogfQogCkBAIC0zMDgsNyArMzEwLDcgQEAgRWxlbWVudFN0eWxl
IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yRWxlbWVudChjb25zdCBFbGVtZW50JiBlbGVtZW50LCBj
b25zdCBSZW5kZXIKIAogICAgIGlmIChlbGVtZW50LmlzTGluaygpKSB7CiAgICAgICAgIHN0eWxl
LnNldElzTGluayh0cnVlKTsKLSAgICAgICAgSW5zaWRlTGluayBsaW5rU3RhdGUgPSBzdGF0ZS5l
bGVtZW50TGlua1N0YXRlKCk7CisgICAgICAgIEluc2lkZUxpbmsgbGlua1N0YXRlID0gZG9jdW1l
bnQoKS52aXNpdGVkTGlua1N0YXRlKCkuZGV0ZXJtaW5lTGlua1N0YXRlKGVsZW1lbnQpOwogICAg
ICAgICBpZiAobGlua1N0YXRlICE9IEluc2lkZUxpbms6Ok5vdEluc2lkZSkgewogICAgICAgICAg
ICAgYm9vbCBmb3JjZVZpc2l0ZWQgPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmZvcmNlUHNl
dWRvU3RhdGUoZWxlbWVudCwgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVmlzaXRlZCk7CiAgICAg
ICAgICAgICBpZiAoZm9yY2VWaXNpdGVkKQpAQCAtMzY5LDcgKzM3MSw3IEBAIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBS
ZW5kZXJTdHlsZSoKICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdENTU1Byb3BlcnR5
LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRp
cnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQo
Y2FzY2FkZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRp
ZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICBjYXNjYWRlLmFwcGx5Q3VzdG9tUHJv
cGVydGllcygpOwpAQCAtMzc3LDcgKzM3OSw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gU3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZShjb25zdCBSZW5kZXJTdHlsZSoKICAg
ICBjYXNjYWRlLmFwcGx5UHJvcGVydGllcyhmaXJzdExvd1ByaW9yaXR5UHJvcGVydHksIGxhc3RD
U1NQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCBieSBvbmUgb2Yg
dGhlIG5vbi1lc3NlbnRpYWwgZm9udCBwcm9wcywgdXBkYXRlIGl0IGEgc2Vjb25kIHRpbWUuCi0g
ICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICBjYXNjYWRl
LmFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7CiAKQEAgLTU2OSw3ICs1NzEsNyBAQCBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yUGFnZShpbnQgcGFn
ZUluZGV4KQogICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxh
c3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGll
ZCwgdXBkYXRlIGl0IG5vdy4KLSAgICB1cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChjYXNj
YWRlKTsKIAogICAgIC8vIE5vdyByZXNvbHZlIHJlbWFpbmluZyBjdXN0b20gcHJvcGVydGllcyBh
bmQgdGhlIHJlc3QsIGluIGFueSBvcmRlcgogICAgIGNhc2NhZGUuYXBwbHlDdXN0b21Qcm9wZXJ0
aWVzKCk7CkBAIC0xMTU2LDEyICsxMTU4LDEyIEBAIHN0YXRpYyB2b2lkIGNoZWNrRm9yT3JpZW50
YXRpb25DaGFuZ2UoUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIHN0eWxlLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKG5ld0ZvbnREZXNjcmlwdGlvbikpOwogfQogCi12b2lkIFN0eWxlUmVzb2x2
ZXI6OnVwZGF0ZUZvbnQoKQordm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KFN0eWxlOjpQ
cm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCiB7Ci0gICAgaWYgKCFtX3N0YXRlLmZvbnREaXJ0eSgp
KQorICAgIGF1dG8mIHN0eWxlID0gKm1fc3RhdGUuc3R5bGUoKTsKKyAgICBpZiAoIWNhc2NhZGUu
YnVpbGRlclN0YXRlKCkuZm9udERpcnR5KCkgJiYgc3R5bGUuZm9udENhc2NhZGUoKS5mb250cygp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRlLnN0eWxlKCk7
CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKICAgICBjaGVja0ZvclRleHRTaXplQWRqdXN0
KHN0eWxlKTsKICNlbmRpZgpAQCAtMTE3MSw3ICsxMTczLDggQEAgdm9pZCBTdHlsZVJlc29sdmVy
Ojp1cGRhdGVGb250KCkKICAgICBzdHlsZS5mb250Q2FzY2FkZSgpLnVwZGF0ZSgmZG9jdW1lbnQo
KS5mb250U2VsZWN0b3IoKSk7CiAgICAgaWYgKG1fc3RhdGUuZm9udFNpemVIYXNWaWV3cG9ydFVu
aXRzKCkpCiAgICAgICAgIHN0eWxlLnNldEhhc1ZpZXdwb3J0VW5pdHModHJ1ZSk7Ci0gICAgbV9z
dGF0ZS5zZXRGb250RGlydHkoZmFsc2UpOworCisgICAgY2FzY2FkZS5idWlsZGVyU3RhdGUoKS5j
bGVhckZvbnREaXJ0eSgpOwogfQogCiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZT4+IFN0eWxlUmVz
b2x2ZXI6OnN0eWxlUnVsZXNGb3JFbGVtZW50KGNvbnN0IEVsZW1lbnQqIGVsZW1lbnQsIHVuc2ln
bmVkIHJ1bGVzVG9JbmNsdWRlKQpAQCAtMTMzOCw3ICsxMzQxLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QKICAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RDU1NQcm9wZXJ0
eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAgICAgICAvLyBJZiBvdXIgZm9udCBn
b3QgZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KLSAgICAgICAgdXBkYXRlRm9udCgpOworICAgICAg
ICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgICAgIC8vIE5vdyByZXNvbHZlIHJlbWFpbmlu
ZyBjdXN0b20gcHJvcGVydGllcyBhbmQgdGhlIHJlc3QsIGluIGFueSBvcmRlcgogICAgICAgICBj
YXNjYWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwpAQCAtMTM2NSw3ICsxMzY4LDcgQEAgdm9p
ZCBTdHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0
JiBtYXRjaFJlc3VsdCwgY29uc3QKICAgICAgICAgcmV0dXJuIGFwcGx5TWF0Y2hlZFByb3BlcnRp
ZXMobWF0Y2hSZXN1bHQsIGVsZW1lbnQsIERvTm90VXNlTWF0Y2hlZFByb3BlcnRpZXNDYWNoZSk7
CiAKICAgICAvLyBJZiBvdXIgZm9udCBnb3QgZGlydGllZCwgdXBkYXRlIGl0IG5vdy4KLSAgICB1
cGRhdGVGb250KCk7CisgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIAogICAgIC8vIElmIHRoZSBm
b250IGNoYW5nZWQsIHdlIGNhbid0IHVzZSB0aGUgbWF0Y2hlZCBwcm9wZXJ0aWVzIGNhY2hlLiBT
dGFydCBvdmVyLgogICAgIGlmIChjYWNoZUl0ZW0gJiYgY2FjaGVJdGVtLT5yZW5kZXJTdHlsZS0+
Zm9udERlc2NyaXB0aW9uKCkgIT0gc3RhdGUuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkpCkBA
IC0xMzgxLDcgKzEzODQsNyBAQCB2b2lkIFN0eWxlUmVzb2x2ZXI6OmFwcGx5TWF0Y2hlZFByb3Bl
cnRpZXMoY29uc3QgTWF0Y2hSZXN1bHQmIG1hdGNoUmVzdWx0LCBjb25zdAogICAgIC8vIHNvIHRv
IHByZXNlcnZlIGJlaGF2aW9yLCB3ZSBxdWV1ZSB0aGVtIHVwIGR1cmluZyBjYXNjYWRlIGFuZCBm
bHVzaCBoZXJlLgogICAgIGNhc2NhZGUuYXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKIAotICAg
IEFTU0VSVCghc3RhdGUuZm9udERpcnR5KCkpOworICAgIEFTU0VSVCghY2FzY2FkZS5idWlsZGVy
U3RhdGUoKS5mb250RGlydHkoKSk7CiAKICAgICBpZiAoY2FjaGVJdGVtIHx8ICFjYWNoZUhhc2gp
CiAgICAgICAgIHJldHVybjsKQEAgLTE0MDIsMTAgKzE0MDUsMTEgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCBpZCwgQ1NTVmFs
dWUqIHZhbHUKIHsKICAgICBpZiAoIXZhbHVlKQogICAgICAgICByZXR1cm47CisKICAgICBNYXRj
aFJlc3VsdCBtYXRjaFJlc3VsdDsKICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGNhc2NhZGUo
KnRoaXMsIG1hdGNoUmVzdWx0LCB7IH0pOwotICAgIGlmICh2YWx1ZSkKLSAgICAgICAgY2FzY2Fk
ZS5hcHBseVByb3BlcnR5KGlkLCAqdmFsdWUpOworICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShp
ZCwgKnZhbHVlKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogfQogCiAvLyBTVkcgaGFuZGxl
cyB6b29taW5nIGluIGEgZGlmZmVyZW50IHdheSBjb21wYXJlZCB0byBDU1MuIFRoZSB3aG9sZSBk
b2N1bWVudCBpcyBzY2FsZWQgaW5zdGVhZApAQCAtMTUxNiw3ICsxNTIwLDcgQEAgdm9pZCBTdHls
ZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKCkKICAgICBmb250RGVzY3JpcHRpb24uc2V0
S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZU1lZGl1bSk7CiAgICAgc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVk
aXVtLCBmYWxzZSwgZG9jdW1lbnQoKSkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRTaG91bGRB
bGxvd1VzZXJJbnN0YWxsZWRGb250cyhzZXR0aW5ncygpLnNob3VsZEFsbG93VXNlckluc3RhbGxl
ZEZvbnRzKCkgPyBBbGxvd1VzZXJJbnN0YWxsZWRGb250czo6WWVzIDogQWxsb3dVc2VySW5zdGFs
bGVkRm9udHM6Ok5vKTsKLSAgICBzZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKKyAgICBzdHlsZSgpLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKIH0KIAogdm9pZCBTdHlsZVJlc29sdmVyOjpzZXRGb250U2l6ZShGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5oIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuaAppbmRleCA1N2M5OGExNTJhNS4uODIyZmE5NGQxOWMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlUmVzb2x2ZXIuaApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkVsZW1l
bnRSdWxlQ29sbGVjdG9yLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ1NTT01XcmFwcGVycy5oIgog
I2luY2x1ZGUgIk1lZGlhUXVlcnlFdmFsdWF0b3IuaCIKLSNpbmNsdWRlICJQcm9wZXJ0eUNhc2Nh
ZGUuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJ1bGVTZXQuaCIKICNp
bmNsdWRlICJTZWxlY3RvckNoZWNrZXIuaCIKQEAgLTg1LDYgKzg0LDEwIEBAIGNsYXNzIFNWR1NW
R0VsZW1lbnQ7CiBjbGFzcyBWaWV3cG9ydFN0eWxlUmVzb2x2ZXI7CiBzdHJ1Y3QgUmVzb3VyY2VM
b2FkZXJPcHRpb25zOwogCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgUHJvcGVydHlDYXNjYWRl
OworfQorCiAvLyBNYXRjaE9ubHlVc2VyQWdlbnRSdWxlcyBpcyB1c2VkIGluIG1lZGlhIHF1ZXJp
ZXMsIHdoZXJlIHJlbGF0aXZlIHVuaXRzCiAvLyBhcmUgaW50ZXJwcmV0ZWQgYWNjb3JkaW5nIHRv
IHRoZSBkb2N1bWVudCByb290IGVsZW1lbnQgc3R5bGUsIGFuZCBzdHlsZWQgb25seQogLy8gZnJv
bSB0aGUgVXNlciBBZ2VudCBTdHlsZXNoZWV0IHJ1bGVzLgpAQCAtMTYwLDcgKzE2Myw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIGFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SUQsIENTU1Zh
bHVlKiwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPik7CiAgICAgdm9pZCBhcHBseVByb3Bl
cnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUqKTsKIAotICAgIHZvaWQg
dXBkYXRlRm9udCgpOworICAgIHZvaWQgdXBkYXRlRm9udChTdHlsZTo6UHJvcGVydHlDYXNjYWRl
Jik7CiAgICAgdm9pZCBpbml0aWFsaXplRm9udFN0eWxlKCk7CiAKICAgICB2b2lkIHNldEZvbnRT
aXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKQEAgLTI0MywxNSArMjQ2
LDYgQEAgcHVibGljOgogICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CiAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
KiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9yb290RWxlbWVudFN0eWxlOyB9
CiAKLSAgICAgICAgSW5zaWRlTGluayBlbGVtZW50TGlua1N0YXRlKCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50TGlua1N0YXRlOyB9Ci0KLSAgICAgICAgdm9pZCBzZXRBcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoYm9vbCBpc0FwcGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxl
ID0gaXNBcHBseTsgfQotICAgICAgICB2b2lkIHNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoYm9vbCBpc0FwcGx5KSB7IG1fYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSA9
IGlzQXBwbHk7IH0KLSAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZTsgfQotICAgICAgICBi
b29sIGFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Fw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGU7IH0KLQotICAgICAgICB2b2lkIHNldEZvbnRE
aXJ0eShib29sIGlzRGlydHkpIHsgbV9mb250RGlydHkgPSBpc0RpcnR5OyB9Ci0gICAgICAgIGJv
b2wgZm9udERpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250RGlydHk7IH0KICAgICAgICAgdm9p
ZCBzZXRGb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoYm9vbCBoYXNWaWV3cG9ydFVuaXRzKSB7IG1f
Zm9udFNpemVIYXNWaWV3cG9ydFVuaXRzID0gaGFzVmlld3BvcnRVbml0czsgfQogICAgICAgICBi
b29sIGZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udFNpemVI
YXNWaWV3cG9ydFVuaXRzOyB9CiAKQEAgLTI2MSwyMyArMjU1LDEwIEBAIHB1YmxpYzoKICAgICAg
ICAgRmlsbExheWVyIGJhY2tncm91bmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9iYWNrZ3JvdW5k
RGF0YTsgfQogICAgICAgICBjb25zdCBDb2xvciYgYmFja2dyb3VuZENvbG9yKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYWNrZ3JvdW5kQ29sb3I7IH0KIAotICAgICAgICBjb25zdCBGb250Q2FzY2FkZURl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0eWxlLT5mb250RGVzY3Jp
cHRpb24oKTsgfQotICAgICAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRG
b250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3BhcmVudFN0eWxlLT5mb250RGVzY3JpcHRpb24o
KTsgfQotICAgICAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2FkZURlc2NyaXB0
aW9uJiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEZvbnRE
ZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOyB9Ci0gICAgICAgIHZvaWQgc2V0
Wm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFpvb20oZik7IH0KLSAg
ICAgICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9z
dHlsZS0+c2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgICAgICB2b2lkIHNldFdyaXRpbmdNb2Rl
KFdyaXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldFdy
aXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAgICAgICB2b2lkIHNldFRleHRPcmllbnRhdGlv
bihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5
bGUtPnNldFRleHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9Ci0KICAgICAgICAgYm9v
bCB1c2VTVkdab29tUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQgJiYgbV9lbGVtZW50
LT5pc1NWR0VsZW1lbnQoKTsgfQogCiAgICAgICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGE7IH0KIAotICAgICAgICBTdHlsZTo6Q2FzY2FkZUxldmVsIGNh
c2NhZGVMZXZlbCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzY2FkZUxldmVsOyB9Ci0gICAgICAgIHZv
aWQgc2V0Q2FzY2FkZUxldmVsKFN0eWxlOjpDYXNjYWRlTGV2ZWwgbGV2ZWwpIHsgbV9jYXNjYWRl
TGV2ZWwgPSBsZXZlbDsgfQotICAgICAgICBTdHlsZTo6U2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVP
cmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZVNjb3BlT3JkaW5hbDsgfQotICAgICAgICB2
b2lkIHNldFN0eWxlU2NvcGVPcmRpbmFsKFN0eWxlOjpTY29wZU9yZGluYWwgc3R5bGVTY29wZU9y
ZGluYWwpIHsgbV9zdHlsZVNjb3BlT3JkaW5hbCA9IHN0eWxlU2NvcGVPcmRpbmFsOyB9Ci0KICAg
ICAgICAgY29uc3QgU2VsZWN0b3JGaWx0ZXIqIHNlbGVjdG9yRmlsdGVyKCkgY29uc3QgeyByZXR1
cm4gbV9zZWxlY3RvckZpbHRlcjsgfQogICAgICAgICAKICAgICBwcml2YXRlOgpAQCAtMjk3LDE0
ICsyNzgsNiBAQCBwdWJsaWM6CiAKICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBt
X2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CiAKLSAgICAgICAgU3R5bGU6OlNjb3BlT3JkaW5h
bCBtX3N0eWxlU2NvcGVPcmRpbmFsIHsgU3R5bGU6OlNjb3BlT3JkaW5hbDo6RWxlbWVudCB9Owot
Ci0gICAgICAgIEluc2lkZUxpbmsgbV9lbGVtZW50TGlua1N0YXRlIHsgSW5zaWRlTGluazo6Tm90
SW5zaWRlIH07Ci0gICAgICAgIFN0eWxlOjpDYXNjYWRlTGV2ZWwgbV9jYXNjYWRlTGV2ZWwgeyBT
dHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyQWdlbnQgfTsKLQotICAgICAgICBib29sIG1fYXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlIHsgdHJ1ZSB9OwotICAgICAgICBib29sIG1fYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgbV9mb250RGly
dHkgeyBmYWxzZSB9OwogICAgICAgICBib29sIG1fZm9udFNpemVIYXNWaWV3cG9ydFVuaXRzIHsg
ZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2hhc1VBQXBwZWFyYW5jZSB7IGZhbHNlIH07CiAgICAg
fTsKQEAgLTMxNCwxOCArMjg3LDcgQEAgcHVibGljOgogCiAgICAgUmVmUHRyPFN0eWxlSW1hZ2U+
IHN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKIAotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5
bGUoKTsgfQotICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpOyB9Ci0K
LSAgICBDU1NUb1N0eWxlTWFwKiBzdHlsZU1hcCgpIHsgcmV0dXJuICZtX3N0eWxlTWFwOyB9CiAg
ICAgSW5zcGVjdG9yQ1NTT01XcmFwcGVycyYgaW5zcGVjdG9yQ1NTT01XcmFwcGVycygpIHsgcmV0
dXJuIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsgfQotICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7IH0KLSAgICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVz
Y3JpcHRpb24oKSB7IHJldHVybiBtX3N0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpOyB9Ci0g
ICAgdm9pZCBzZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnRE
ZXNjcmlwdGlvbikgeyBtX3N0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbikpOyB9Ci0gICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRab29t
KGYpOyB9Ci0gICAgdm9pZCBzZXRFZmZlY3RpdmVab29tKGZsb2F0IGYpIHsgbV9zdGF0ZS5zZXRF
ZmZlY3RpdmVab29tKGYpOyB9Ci0gICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3
cml0aW5nTW9kZSkgeyBtX3N0YXRlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQotICAg
IHZvaWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24p
IHsgbV9zdGF0ZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9uKTsgfQogCiAgICAg
Ym9vbCBhZGp1c3RSZW5kZXJTdHlsZUZvclRleHRBdXRvc2l6aW5nKFJlbmRlclN0eWxlJiwgY29u
c3QgRWxlbWVudCYpOwogCkBAIC0zODAsNyArMzQyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8
Vmlld3BvcnRTdHlsZVJlc29sdmVyPiBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcjsKICNlbmRpZgog
Ci0gICAgQ1NTVG9TdHlsZU1hcCBtX3N0eWxlTWFwOwogICAgIEluc3BlY3RvckNTU09NV3JhcHBl
cnMgbV9pbnNwZWN0b3JDU1NPTVdyYXBwZXJzOwogCiAgICAgU3RhdGUgbV9zdGF0ZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbCBiL1NvdXJjZS9XZWJDb3JlL2Nz
cy9tYWtlcHJvcC5wbAppbmRleCBiZWRiODI0ZWEwYy4uYjFmMjI3ZDE3MDcgMTAwNzU1Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9tYWtlcHJvcC5wbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
bWFrZXByb3AucGwKQEAgLTU3OSwyMSArNTc5LDIxIEBAIHN1YiBnZXRBdXRvR2V0dGVyIHsKICAg
bXkgJG5hbWUgPSBzaGlmdDsKICAgbXkgJHJlbmRlclN0eWxlID0gc2hpZnQ7CiAKLSAgcmV0dXJu
ICRyZW5kZXJTdHlsZSAuICItPmhhc0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4g
IigpIjsKKyAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICIuaGFzQXV0byIgLiBnZXROYW1lRm9yTWV0
aG9kcygkbmFtZSkgLiAiKCkiOwogfQogCiBzdWIgZ2V0QXV0b1NldHRlciB7CiAgIG15ICRuYW1l
ID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHlsZSA9IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVy
U3R5bGUgLiAiLT5zZXRIYXNBdXRvIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7
CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLnNldEhhc0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhv
ZHMoJG5hbWUpIC4gIigpIjsKIH0KIAogc3ViIGdldFZpc2l0ZWRMaW5rU2V0dGVyIHsKICAgbXkg
JG5hbWUgPSBzaGlmdDsKICAgbXkgJHJlbmRlclN0eWxlID0gc2hpZnQ7CiAKLSAgcmV0dXJuICRy
ZW5kZXJTdHlsZSAuICItPnNldFZpc2l0ZWRMaW5rIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1l
KTsKKyAgcmV0dXJuICRyZW5kZXJTdHlsZSAuICIuc2V0VmlzaXRlZExpbmsiIC4gZ2V0TmFtZUZv
ck1ldGhvZHMoJG5hbWUpOwogfQogCiBzdWIgZ2V0Q2xlYXJGdW5jdGlvbiB7CkBAIC02OTksNyAr
Njk5LDcgQEAgc3ViIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlIHsKICAgbXkgJHByaW1pdGl2ZVZh
bHVlID0gc2hpZnQ7CiAgIG15ICRmb3JWaXNpdGVkTGluayA9IEBfID8gc2hpZnQgOiBOT1RfRk9S
X1ZJU0lURURfTElOSzsKIAotICByZXR1cm4gInN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0
aXZlVmFsdWUoIiAuICRwcmltaXRpdmVWYWx1ZSAuICIsIC8qIGZvclZpc2l0ZWRMaW5rICovICIg
LiAoJGZvclZpc2l0ZWRMaW5rID8gInRydWUiIDogImZhbHNlIikgLiAiKSI7CisgIHJldHVybiAi
YnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCIgLiAkcHJpbWl0aXZlVmFsdWUg
LiAiLCAvKiBmb3JWaXNpdGVkTGluayAqLyAiIC4gKCRmb3JWaXNpdGVkTGluayA/ICJ0cnVlIiA6
ICJmYWxzZSIpIC4gIikiOwogfQogCiB1c2UgY29uc3RhbnQgewpAQCAtNzEzLDEyICs3MTMsMTIg
QEAgc3ViIGdlbmVyYXRlQ29sb3JWYWx1ZVNldHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsK
ICAgbXkgJHZhbHVlSXNQcmltaXRpdmUgPSBAXyA/IHNoaWZ0IDogVkFMVUVfSVNfQ09MT1I7CiAK
LSAgbXkgJHN0eWxlID0gInN0eWxlUmVzb2x2ZXIuc3R5bGUoKSI7Ci0gIG15ICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiaWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxh
clN0eWxlKCkpXG4iOwotICBteSAkc2V0VmFsdWUgPSAkc3R5bGUgLiAiLT4iIC4gJHByb3BlcnRp
ZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OworICBteSAkc3R5bGUg
PSAiYnVpbGRlclN0YXRlLnN0eWxlKCkiOworICBteSAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gImlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpXG4iOwor
ICBteSAkc2V0VmFsdWUgPSAkc3R5bGUgLiAiLiIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxk
ZXJPcHRpb25zeyRuYW1lfXsic2V0dGVyIn07CiAgIG15ICRjb2xvciA9ICR2YWx1ZUlzUHJpbWl0
aXZlID8gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoJHZhbHVlKSA6ICR2YWx1ZTsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuICRzZXRWYWx1ZSAuICIoIiAuICRjb2xvciAu
ICIpO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNvbHZl
ci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpXG4iOworICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExp
bmtTdHlsZSgpKVxuIjsKICAgJGNvbG9yID0gJHZhbHVlSXNQcmltaXRpdmUgPyBjb2xvckZyb21Q
cmltaXRpdmVWYWx1ZSgkdmFsdWUsIEZPUl9WSVNJVEVEX0xJTkspIDogJHZhbHVlOwogICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAiIC4gZ2V0VmlzaXRlZExpbmtTZXR0ZXIoJG5h
bWUsICRzdHlsZSkgLiAiKCIgLiAkY29sb3IgLiAiKTtcbiI7CiAKQEAgLTczMSw3ICs3MzEsNyBA
QCBzdWIgaGFuZGxlQ3VycmVudENvbG9yVmFsdWUgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAK
ICAgbXkgJGNvZGUgPSAkaW5kZW50IC4gImlmICgiIC4gJHByaW1pdGl2ZVZhbHVlIC4gIi52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHtcbiI7Ci0gICRjb2RlIC49ICRpbmRlbnQg
LiAiICAgIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVy
KTtcbiI7CisgICRjb2RlIC49ICRpbmRlbnQgLiAiICAgIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRv
SWR7JG5hbWV9IC4gIihidWlsZGVyU3RhdGUpO1xuIjsKICAgJGNvZGUgLj0gJGluZGVudCAuICIg
ICAgcmV0dXJuO1xuIjsKICAgJGNvZGUgLj0gJGluZGVudCAuICJ9XG4iOwogICByZXR1cm4gJGNv
ZGU7CkBAIC03NDIsNyArNzQyLDcgQEAgc3ViIGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJbml0
aWFsVmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNv
bnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJBbmltYXRpb25MaXN0
JiBsaXN0ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5pbWF0aW9uc09y
VHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICJBbmltYXRpb25MaXN0JiBsaXN0ID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAu
IGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7
CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiaWYgKGxpc3QuaXNFbXB0eSgpKVxuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9u
OjpjcmVhdGUoKSk7XG4iOwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWls
ZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwpAQCAtNzYyLDggKzc2Miw4IEBAIHN1YiBnZW5l
cmF0ZUFuaW1hdGlvblByb3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9
IHNoaWZ0OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiYXV0byYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldEVu
c3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7Ci0gICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogcGFyZW50TGlzdCA9IHN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+IiAuIGdldEFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRu
YW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byYgbGlz
dCA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0
aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gImF1dG8qIHBhcmVudExpc3QgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS4iIC4gZ2V0
QW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJzaXplX3QgaSA9IDAsIHBhcmVudFNpemUgPSBwYXJlbnRM
aXN0ID8gcGFyZW50TGlzdC0+c2l6ZSgpIDogMDtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiZm9yICggOyBpIDwgcGFyZW50U2l6ZSAmJiBwYXJlbnRMaXN0LT5hbmltYXRpb24o
aSkuIiAuIGdldFRlc3RGdW5jdGlvbigkbmFtZSkgLiAiKCk7ICsraSkge1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKGxpc3Quc2l6ZSgpIDw9IGkpXG4iOwpAQCAt
Nzg2LDIwICs3ODYsMjAgQEAgc3ViIGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlWYWx1ZVNldHRl
ciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkFuaW1hdGlvbkxpc3QmIGxpc3QgPSBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01l
dGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkFu
aW1hdGlvbkxpc3QmIGxpc3QgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gZ2V0RW5zdXJlQW5p
bWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJzaXplX3QgY2hpbGRJbmRleCA9IDA7XG4iOwogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gImlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkge1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgLyogV2FsayBlYWNoIHZhbHVlIGFu
ZCBwdXQgaXQgaW50byBhbiBhbmltYXRpb24sIGNyZWF0aW5nIG5ldyBhbmltYXRpb25zIGFzIG5l
ZWRlZC4gKi9cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZvciAoYXV0
byYgY3VycmVudFZhbHVlIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBpZiAoY2hpbGRJbmRleCA8PSBs
aXN0LnNpemUoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAg
ICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7XG4iOwotICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4gZ2V0
QW5pbWF0aW9uTWFwZnVuY3Rpb24oJG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4
KSwgY3VycmVudFZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
ICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS4iIC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24o
JG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgY3VycmVudFZhbHVlKTtcbiI7
CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICArK2NoaWxkSW5kZXg7XG4i
OwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICB9XG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIn0gZWxzZSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gIiAgICBpZiAobGlzdC5pc0VtcHR5KCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICAgICAgbGlzdC5hcHBlbmQoQW5pbWF0aW9uOjpjcmVhdGUoKSk7XG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFw
KCktPiIgLiBnZXRBbmltYXRpb25NYXBmdW5jdGlvbigkbmFtZSkgLiAiKGxpc3QuYW5pbWF0aW9u
KGNoaWxkSW5kZXgpLCB2YWx1ZSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IiAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS4iIC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24o
JG5hbWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGRJbmRleCA9IDE7XG4iOwogICAkc2V0
dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIn1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiZm9yICggOyBjaGlsZEluZGV4IDwgbGlzdC5zaXplKCk7ICsrY2hpbGRJbmRleCkge1xu
IjsKQEAgLTgyMiwxMSArODIyLDExIEBAIHN1YiBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5p
dGlhbFZhbHVlU2V0dGVyIHsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIi8vIENoZWNrIGZvciAoc2luZ2xlLWxheWVyKSBuby1vcCBi
ZWZvcmUgY2xlYXJpbmcgYW55dGhpbmcuXG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gImF1dG8mIGxheWVycyA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0Z1
bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
YXV0byYgbGF5ZXJzID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0Z1bmN0aW9u
KCRuYW1lKSAuICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiaWYgKCFs
YXllcnMubmV4dCgpICYmICghbGF5ZXJzLiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigpIHx8IGxheWVy
cy4iIC4gJGdldHRlciAuICIoKSA9PSAkaW5pdGlhbCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICByZXR1cm47XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAiXG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xu
IjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZidWlsZGVy
U3RhdGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImNoaWxkLT4iIC4gJHNldHRlciAu
ICIoIiAuICRpbml0aWFsIC4gIik7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
ImZvciAoY2hpbGQgPSBjaGlsZC0+bmV4dCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCgp
KVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGQtPiIgLiAkY2xl
YXJGdW5jdGlvbiAuICIoKTtcbiI7CkBAIC04NDUsMTIgKzg0NSwxMiBAQCBzdWIgZ2VuZXJhdGVG
aWxsTGF5ZXJQcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlciB7CiAKICAgbXkgJHNldHRlckNvbnRl
bnQgPSAiIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIvLyBDaGVjayBmb3Igbm8t
b3AgYmVmb3JlIGNvcHlpbmcgYW55dGhpbmcuXG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5k
ZW50IC4gImlmIChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPiIgLiBnZXRMYXllcnNGdW5j
dGlvbigkbmFtZSkgLiIoKSA9PSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNG
dW5jdGlvbigkbmFtZSkgLiAiKCkpXG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
ImlmIChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5h
bWUpIC4iKCkgPT0gYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0Z1bmN0aW9uKCRu
YW1lKSAuICIoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHJldHVy
bjtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICJcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiYXV0byogY2hpbGQgPSAmc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0TGF5
ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJmJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBnZXRM
YXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50
IC49ICRpbmRlbnQgLiAiRmlsbExheWVyKiBwcmV2aW91c0NoaWxkID0gbnVsbHB0cjtcbiI7Ci0g
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiZm9yIChhdXRvKiBwYXJlbnQgPSAmc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigp
OyBwYXJlbnQgJiYgcGFyZW50LT4iIC4gJHRlc3RGdW5jdGlvbiAuICIoKTsgcGFyZW50ID0gcGFy
ZW50LT5uZXh0KCkpIHtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiZm9yIChh
dXRvKiBwYXJlbnQgPSAmYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuIiAuIGdldExheWVyc0Z1
bmN0aW9uKCRuYW1lKSAuICIoKTsgcGFyZW50ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rpb24g
LiAiKCk7IHBhcmVudCA9IHBhcmVudC0+bmV4dCgpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICBpZiAoIWNoaWxkKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICAgICAgcHJldmlvdXNDaGlsZC0+c2V0TmV4dChtYWtlVW5pcXVlPEZpbGxM
YXllcj4oIiAuIGdldEZpbGxMYXllclR5cGUoJG5hbWUpIC4gIikpO1xuIjsKICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgp
O1xuIjsKQEAgLTg3Miw3ICs4NzIsNyBAQCBzdWIgZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eVZh
bHVlU2V0dGVyIHsKICAgbXkgJENTU1Byb3BlcnR5SWQgPSAiQ1NTUHJvcGVydHkiIC4gJG5hbWVU
b0lkeyRuYW1lfTsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAu
IGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZidWlsZGVyU3RhdGUuc3R5bGUoKS4i
IC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXNDaGlsZCA9IG51bGxwdHI7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChpczxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKSAmJiAhaXM8Q1NTSW1hZ2VTZXRWYWx1ZT4odmFsdWUpKSB7XG4iOwogICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICAvLyBXYWxrIGVhY2ggdmFsdWUgYW5kIHB1dCBpdCBp
bnRvIGEgbGF5ZXIsIGNyZWF0aW5nIG5ldyBsYXllcnMgYXMgbmVlZGVkLlxuIjsKQEAgLTg4MSwx
MiArODgxLDEyIEBAIHN1YiBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5VmFsdWVTZXR0ZXIgewog
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgICAgIHByZXZpb3VzQ2hpbGQt
PnNldE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1l
KSAuICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICAgICAg
Y2hpbGQgPSBwcmV2aW91c0NoaWxkLT5uZXh0KCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICAgICAgfVxuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+IiAuIGdldEZpbGxMYXllck1hcGZ1bmN0
aW9uKCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCBpdGVtKTtcbiI7
CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGVNYXAoKS4iIC4gZ2V0RmlsbExheWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1By
b3BlcnR5SWQgLiAiLCAqY2hpbGQsIGl0ZW0pO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgICAgIHByZXZpb3VzQ2hpbGQgPSBjaGlsZDtcbiI7CiAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0KCk7XG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICB9XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIn0gZWxzZSB7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IiAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlv
bigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgdmFsdWUpO1xuIjsK
KyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFw
KCkuIiAuIGdldEZpbGxMYXllck1hcGZ1bmN0aW9uKCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0
eUlkIC4gIiwgKmNoaWxkLCB2YWx1ZSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBjaGlsZCA9IGNoaWxkLT5uZXh0KCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIn1cbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiZm9yICg7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0KCkpXG4iOwpAQCAtOTAyLDcgKzkwMiw3IEBAIHN1YiBn
ZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50CiAKICAgbXkgJGlzU1ZHID0gZXhpc3RzICRwcm9wZXJ0
aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKICAgbXkgJHNldHRlciA9
ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIifTsKLSAg
cmV0dXJuICJzdHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiAgKCRpc1NWRyA/ICJhY2Nlc3NTVkdT
dHlsZSgpLiIgOiAiIikgLiAkc2V0dGVyIC4gIigiIC4gJHZhbHVlIC4gIikiOworICByZXR1cm4g
ImJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiAgKCRpc1NWRyA/ICJhY2Nlc3NTVkdTdHlsZSgpLiIg
OiAiIikgLiAkc2V0dGVyIC4gIigiIC4gJHZhbHVlIC4gIikiOwogfQogCiBzdWIgZ2VuZXJhdGVJ
bml0aWFsVmFsdWVTZXR0ZXIgewpAQCAtOTEzLDkgKzkxMyw5IEBAIHN1YiBnZW5lcmF0ZUluaXRp
YWxWYWx1ZVNldHRlciB7CiAgIG15ICRpbml0aWFsID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWls
ZGVyT3B0aW9uc3skbmFtZX17ImluaXRpYWwifTsKICAgbXkgJGlzU1ZHID0gZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKICAgbXkgJHNldHRl
ckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWwiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcilcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZv
aWQgYXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xu
IjsKLSAgbXkgJHN0eWxlID0gInN0eWxlUmVzb2x2ZXIuc3R5bGUoKSI7CisgIG15ICRzdHlsZSA9
ICJidWlsZGVyU3RhdGUuc3R5bGUoKSI7CiAgIGlmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5
bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImF1dG8tZnVuY3Rpb25zIn0pIHsKICAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICAiIC4gZ2V0QXV0b1NldHRlcigkbmFtZSwgJHN0eWxl
KSAuICI7XG4iOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InZpc2l0ZWQtbGluay1jb2xvci1zdXBwb3J0In0pIHsKQEAgLTkyNCw5
ICs5MjQsOSBAQCBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICB9IGVsc2lmIChl
eGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImFuaW1hdGFi
bGUifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwogICB9IGVsc2lmIChl
eGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17ImZvbnQtcHJv
cGVydHkifSkgewotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9u
dERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBi
dWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7XG4iOwogICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGZvbnREZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbjo6IiAuICRpbml0aWFsIC4gIigpKTtcbiI7Ci0gICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICIgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNj
cmlwdGlvbikpO1xuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVp
bGRlck9wdGlvbnN7JG5hbWV9eyJmaWxsLWxheWVyLXByb3BlcnR5In0pIHsKICAgICAkc2V0dGVy
Q29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRu
YW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgfSBlbHNlIHsKQEAgLTk0MywxMSArOTQzLDExIEBA
IHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsK
IAogICBteSAkc2V0dGVyQ29udGVudCA9ICIiOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKVxuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICJzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0g
JGluZGVudCAuICJ7XG4iOwogICBteSAkaXNTVkcgPSBleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5
bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InN2ZyJ9OwotICBteSAkcGFyZW50U3R5bGUgPSAic3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpIjsKLSAgbXkgJHN0eWxlID0gInN0eWxlUmVzb2x2ZXIu
c3R5bGUoKSI7CisgIG15ICRwYXJlbnRTdHlsZSA9ICJidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KSI7CisgIG15ICRzdHlsZSA9ICJidWlsZGVyU3RhdGUuc3R5bGUoKSI7CiAgIG15ICRnZXR0ZXIg
PSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZ2V0dGVyIn07CiAg
IG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsi
c2V0dGVyIn07CiAgIG15ICRkaWRDYWxsU2V0VmFsdWUgPSAwOwpAQCAtOTU3LDEwICs5NTcsMTAg
QEAgc3ViIGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVyIHsKICAgICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAgICAgcmV0dXJuO1xuIjsKICAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICB9XG4iOwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5
bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InZpc2l0ZWQtbGluay1jb2xvci1zdXBwb3J0In0pIHsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBDb2xvciBjb2xvciA9ICIgLiAk
cGFyZW50U3R5bGUgLiAiLT4iIC4gJGdldHRlciAuICIoKTtcbiI7CisgICAgJHNldHRlckNvbnRl
bnQgLj0gJGluZGVudCAuICIgICAgQ29sb3IgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi4i
IC4gJGdldHRlciAuICIoKTtcbiI7CiAgICAgaWYgKCFleGlzdHMoJHByb3BlcnRpZXNXaXRoU3R5
bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17Im5vLWRlZmF1bHQtY29sb3IifSkpIHsKICAgICAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmICghY29sb3IuaXNWYWxpZCgpKVxuIjsK
LSAgICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjb2xvciA9ICIgLiAk
cGFyZW50U3R5bGUgLiAiLT5jb2xvcigpO1xuIjsKKyAgICAgICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiICAgICAgICBjb2xvciA9ICIgLiAkcGFyZW50U3R5bGUgLiAiLmNvbG9yKCk7XG4i
OwogICAgIH0KICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUNvbG9yVmFsdWVTZXR0ZXIo
JG5hbWUsICJjb2xvciIsICRpbmRlbnQgLiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0VmFsdWUg
PSAxOwpAQCAtOTY4LDE2ICs5NjgsMTYgQEAgc3ViIGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVy
IHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5SW5oZXJp
dFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZh
bHVlID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGZv
bnREZXNjcmlwdGlvbi4iIC4gJHNldHRlciAuICIoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKS4iIC4gJGdldHRlciAuICIoKSk7XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
ICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigp
O1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRp
b24uIiAuICRzZXR0ZXIgLiAiKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS4i
IC4gJGdldHRlciAuICIoKSk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
ICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRp
b24pKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZmlsbC1sYXllci1wcm9w
ZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0
eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRpZENh
bGxTZXRWYWx1ZSA9IDE7CiAgIH0KICAgaWYgKCEkZGlkQ2FsbFNldFZhbHVlKSB7Ci0gICAgbXkg
JGluaGVyaXRlZFZhbHVlID0gJHBhcmVudFN0eWxlIC4gIi0+IiAuICgkaXNTVkcgPyAic3ZnU3R5
bGUoKS4iIDogIiIpIC4gICRnZXR0ZXIgLiAiKCkiOworICAgIG15ICRpbmhlcml0ZWRWYWx1ZSA9
ICRwYXJlbnRTdHlsZSAuICIuIiAuICgkaXNTVkcgPyAic3ZnU3R5bGUoKS4iIDogIiIpIC4gICRn
ZXR0ZXIgLiAiKCkiOwogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICIgLiBn
ZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50KCRuYW1lLCAiZm9yd2FyZEluaGVyaXRlZFZhbHVlKCIg
LiAkaW5oZXJpdGVkVmFsdWUgLiAiKSIpIC4gIjtcbiI7CiAgIH0KICAgJHNldHRlckNvbnRlbnQg
Lj0gJGluZGVudCAuICJ9XG4iOwpAQCAtOTkwLDIwICs5OTAsMjAgQEAgc3ViIGdlbmVyYXRlVmFs
dWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNvbnRlbnQg
PSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseVZh
bHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSlcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3Rh
dGljIHZvaWQgYXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSlcbiI7CiAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKICAgbXkgJGNvbnZlcnRlZFZhbHVlOwogICBpZiAoZXhp
c3RzKCRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0ZXIi
fSkpIHsKLSAgICAkY29udmVydGVkVmFsdWUgPSAiU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0
ZXIifSAuICIoc3R5bGVSZXNvbHZlciwgdmFsdWUpIjsKKyAgICAkY29udmVydGVkVmFsdWUgPSAi
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVp
bGRlck9wdGlvbnN7JG5hbWV9eyJjb252ZXJ0ZXIifSAuICIoYnVpbGRlclN0YXRlLCB2YWx1ZSki
OwogICB9IGVsc2lmIChleGlzdHMoJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImNvbmRpdGlvbmFsLWNvbnZlcnRlciJ9KSkgewotICAgICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAiICAgIGF1dG8gY29udmVydGVkVmFsdWUgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnQiIC4gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17
ImNvbmRpdGlvbmFsLWNvbnZlcnRlciJ9IC4gIihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7XG4iOwor
ICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gY29udmVydGVkVmFsdWUg
PSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnQiIC4gJHByb3BlcnRpZXNXaXRoU3R5bGVC
dWlsZGVyT3B0aW9uc3skbmFtZX17ImNvbmRpdGlvbmFsLWNvbnZlcnRlciJ9IC4gIihidWlsZGVy
U3RhdGUsIHZhbHVlKTtcbiI7CiAgICAgJGNvbnZlcnRlZFZhbHVlID0gIldURk1vdmUoY29udmVy
dGVkVmFsdWUudmFsdWUoKSkiOwogICB9IGVsc2UgewogICAgICRjb252ZXJ0ZWRWYWx1ZSA9ICJk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpIjsKICAgfQogCiAgIG15ICRzZXR0ZXIg
PSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsic2V0dGVyIn07Ci0g
IG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVp
bGRlclN0YXRlLnN0eWxlKCkiOwogICBteSAkZGlkQ2FsbFNldFZhbHVlID0gMDsKICAgaWYgKGV4
aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiYXV0by1mdW5j
dGlvbnMifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmIChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8p
IHtcbiI7CkBAIC0xMDIyLDkgKzEwMjIsOSBAQCBzdWIgZ2VuZXJhdGVWYWx1ZVNldHRlciB7CiAg
ICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eVZhbHVlU2V0dGVy
KCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAg
fSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9
eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7
XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1dG8gZm9udERlc2Ny
aXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKICAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAi
KCIgLiAkY29udmVydGVkVmFsdWUgLiAiKTtcbiI7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGlu
ZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250
RGVzY3JpcHRpb24pKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
YnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
O1xuIjsKICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJmaWxsLWxheWVyLXByb3BlcnR5
In0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5VmFs
dWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQgLiAiICAgICIpOwpAQCAtMTA1MiwxMCArMTA1MiwxMCBA
QCBwcmludCBTVFlMRUJVSUxERVIgPDwgIkVPRiI7CiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFs
dWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5LmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5oIgogI2luY2x1ZGUgIlN0eWxl
QnVpbGRlckNvbnZlcnRlci5oIgogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckN1c3RvbS5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVy
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMTA4Myw3ICsxMDgzLDcgQEAgZm9yZWFj
aCBteSAkbmFtZSAoQG5hbWVzKSB7CiBwcmludCBTVFlMRUJVSUxERVIgPDwgIkVPRiI7CiB9Owog
Ci12b2lkIFN0eWxlQnVpbGRlcjo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUsIGJvb2wgaXNJ
bml0aWFsLCBib29sIGlzSW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5
KiByZWdpc3RlcmVkKQordm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1
ZSYgdmFsdWUsIGJvb2wgaXNJbml0aWFsLCBib29sIGlzSW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0
ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkKQogewogICAgIHN3aXRjaCAocHJvcGVydHkp
IHsKICAgICBjYXNlIENTU1Byb3BlcnR5SW52YWxpZDoKQEAgLTEwOTEsMTEgKzEwOTEsMTEgQEAg
dm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXMKICAgICBjYXNlIENTU1Byb3BlcnR5Q3VzdG9tOiB7CiAg
ICAgICAgIGF1dG8mIGN1c3RvbVByb3BlcnR5ID0gZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4odmFsdWUpOwogICAgICAgICBpZiAoaXNJbml0aWFsKQotICAgICAgICAgICAgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCBy
ZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOworICAgICAgICAgICAgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShidWlsZGVyU3RhdGUsIHJlZ2lz
dGVyZWQsIGN1c3RvbVByb3BlcnR5Lm5hbWUoKSk7CiAgICAgICAgIGVsc2UgaWYgKGlzSW5oZXJp
dCkKLSAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3VzdG9tUHJv
cGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkubmFtZSgpKTsK
KyAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVy
dHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOwogICAg
ICAgICBlbHNlCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0
b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eSk7Cisg
ICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShi
dWlsZGVyU3RhdGUsIHJlZ2lzdGVyZWQsIGN1c3RvbVByb3BlcnR5KTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQogRU9GCkBAIC0xMTA3LDExICsxMTA3LDExIEBAIGZvcmVhY2ggbXkgJG5hbWUgKEBu
YW1lcykgewogICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTtcbiI7CiAgIH0gZWxzaWYgKCFleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVy
T3B0aW9uc3skbmFtZX17InNraXAtYnVpbGRlciJ9KSB7CiAgICAgcHJpbnQgU1RZTEVCVUlMREVS
ICIgICAgICAgIGlmIChpc0luaXRpYWwpXG4iOwotICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAg
ICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbml0aWFsIikgLiAiOjph
cHBseUluaXRpYWwiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoc3R5bGVSZXNvbHZlcik7XG4iOwor
ICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rp
b24oJG5hbWUsICJJbml0aWFsIikgLiAiOjphcHBseUluaXRpYWwiIC4gJG5hbWVUb0lkeyRuYW1l
fSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAgICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAg
IGVsc2UgaWYgKGlzSW5oZXJpdClcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAg
ICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIkluaGVyaXQiKSAuICI6OmFwcGx5
SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihzdHlsZVJlc29sdmVyKTtcbiI7CisgICAg
cHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigk
bmFtZSwgIkluaGVyaXQiKSAuICI6OmFwcGx5SW5oZXJpdCIgLiAkbmFtZVRvSWR7JG5hbWV9IC4g
IihidWlsZGVyU3RhdGUpO1xuIjsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgZWxz
ZVxuIjsKLSAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZv
ckZ1bmN0aW9uKCRuYW1lLCAiVmFsdWUiKSAuICI6OmFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRu
YW1lfSAuICIoc3R5bGVSZXNvbHZlciwgdmFsdWUpO1xuIjsKKyAgICBwcmludCBTVFlMRUJVSUxE
RVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiVmFsdWUiKSAu
ICI6OmFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlLCB2YWx1
ZSk7XG4iOwogICB9CiAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBicmVhaztcbiI7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKaW5kZXggY2M5YmQyOTVmOGIu
LjcyZmJhYzM3MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCkBA
IC0xNzcsMTAgKzE3NywxMCBAQCB2b2lkIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbkZvcklu
c3BlY3Rvcihjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0LCBjbwogICAgIENTU1BhcnNl
ckltcGw6OnBhcnNlRGVjbGFyYXRpb25MaXN0Rm9ySW5zcGVjdG9yKHN0cmluZywgY29udGV4dCwg
b2JzZXJ2ZXIpOwogfQogCi1SZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0
eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUpCiB7CiAgICAgQVNTRVJUKChwcm9wSUQgPT0gQ1NTUHJvcGVydHlDdXN0b20g
JiYgdmFsdWUuaXNDdXN0b21Qcm9wZXJ0eVZhbHVlKCkpIHx8IChwcm9wSUQgIT0gQ1NTUHJvcGVy
dHlDdXN0b20gJiYgIXZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSk7Ci0gICAgYXV0byYg
c3R5bGUgPSAqY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuc3R5bGUoKTsKKyAgICBhdXRvJiBzdHls
ZSA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpOwogICAgIGF1dG8gZGlyZWN0aW9uID0gc3R5bGUuZGly
ZWN0aW9uKCk7CiAgICAgYXV0byB3cml0aW5nTW9kZSA9IHN0eWxlLndyaXRpbmdNb2RlKCk7CiAK
QEAgLTE5Myw3ICsxOTMsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1
ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogICAgICAgICAgICAg
c2hvcnRoYW5kSUQgPSBDU1NQcm9wZXJ0eTo6cmVzb2x2ZURpcmVjdGlvbkF3YXJlUHJvcGVydHko
c2hvcnRoYW5kSUQsIGRpcmVjdGlvbiwgd3JpdGluZ01vZGUpOwogICAgICAgICBDU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlKiBzaG9ydGhhbmRWYWx1ZSA9IHBlbmRpbmdTdWJzdGl0dXRpb24uc2hv
cnRoYW5kVmFsdWUoKTsKIAotICAgICAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHNob3J0aGFuZFZh
bHVlLT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOworICAgICAgICBhdXRvIHJl
c29sdmVkRGF0YSA9IHNob3J0aGFuZFZhbHVlLT5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGJ1
aWxkZXJTdGF0ZSk7CiAgICAgICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2ZWRUb2tl
bnMgPSByZXNvbHZlZERhdGEtPnRva2VucygpOwpAQCAtMjEyLDcgKzIxMiw3IEBAIFJlZlB0cjxD
U1NWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQ
cm9wZXJ0eUlEIHByb3BJCiAKICAgICBpZiAodmFsdWUuaXNWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
KCkpIHsKICAgICAgICAgY29uc3QgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSYgdmFsdWVXaXRo
UmVmZXJlbmNlcyA9IGRvd25jYXN0PENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+KHZhbHVlKTsK
LSAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSB2YWx1ZVdpdGhSZWZlcmVuY2VzLnJlc29sdmVW
YXJpYWJsZVJlZmVyZW5jZXMoY2FzY2FkZSk7CisgICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0g
dmFsdWVXaXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGJ1aWxkZXJTdGF0
ZSk7CiAgICAgICAgIGlmICghcmVzb2x2ZWREYXRhKQogICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VTaW5nbGVWYWx1ZShw
cm9wSUQsIHJlc29sdmVkRGF0YS0+dG9rZW5zKCksIG1fY29udGV4dCk7CkBAIC0yMjIsOSArMjIy
LDkgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVS
ZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICBjb25zdCBhdXRvJiB2YWx1ZVdpdGhS
ZWZlcmVuY2VzID0gV1RGOjpnZXQ8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+PihjdXN0
b21Qcm9wVmFsdWUudmFsdWUoKSkuZ2V0KCk7CiAKICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8
Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4odmFsdWUpLm5hbWUoKTsKLSAgICBhdXRvKiByZWdpc3Rl
cmVkID0gY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVk
Q3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7CisgICAgYXV0byogcmVnaXN0ZXJlZCA9IGJ1
aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgp
LmdldChuYW1lKTsKICAgICBhdXRvJiBzeW50YXggPSByZWdpc3RlcmVkID8gcmVnaXN0ZXJlZC0+
c3ludGF4IDogIioiOwotICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVXaXRoUmVmZXJlbmNl
cy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOworICAgIGF1dG8gcmVzb2x2ZWRE
YXRhID0gdmFsdWVXaXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGJ1aWxk
ZXJTdGF0ZSk7CiAKICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0yMzQsOSArMjM0LDkgQEAgUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNl
VmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQgcHJvcEkKICAgICBDU1NQ
cm9wZXJ0eVBhcnNlcjo6Y29sbGVjdFBhcnNlZEN1c3RvbVByb3BlcnR5VmFsdWVEZXBlbmRlbmNp
ZXMoc3ludGF4LCBmYWxzZSwgZGVwZW5kZW5jaWVzLCByZXNvbHZlZERhdGEtPnRva2VucygpLCBt
X2NvbnRleHQpOwogCiAgICAgZm9yIChhdXRvIGlkIDogZGVwZW5kZW5jaWVzKQotICAgICAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydGllcyhpZCwgaWQpOworICAgICAgICBidWlsZGVyU3RhdGUuY2Fz
Y2FkZSgpLmFwcGx5UHJvcGVydGllcyhpZCwgaWQpOwogCi0gICAgcmV0dXJuIENTU1Byb3BlcnR5
UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBzeW50YXgsIHJlc29s
dmVkRGF0YS0+dG9rZW5zKCksIGNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLCBtX2NvbnRleHQpOwor
ICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFs
dWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBidWlsZGVyU3RhdGUsIG1f
Y29udGV4dCk7CiB9CiAKIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8ZG91YmxlPj4gQ1NTUGFyc2Vy
OjpwYXJzZUtleWZyYW1lS2V5TGlzdChjb25zdCBTdHJpbmcmIHNlbGVjdG9yKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKaW5kZXggZDI2OTU1MTRlMWUuLjVjZjM2MGE0OTQxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyLmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xh
c3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgUmVuZGVyU3R5bGU7CiAKIG5hbWVzcGFjZSBT
dHlsZSB7Ci1jbGFzcyBQcm9wZXJ0eUNhc2NhZGU7CitjbGFzcyBCdWlsZGVyU3RhdGU7CiB9CiAK
IGNsYXNzIENTU1BhcnNlciB7CkBAIC04MSw3ICs4MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
cGFyc2VTZWxlY3Rvcihjb25zdCBTdHJpbmcmLCBDU1NTZWxlY3Rvckxpc3QmKTsKIAotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVy
dHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CisgICAgUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0
eUlELCBjb25zdCBDU1NWYWx1ZSYsIFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAogICAgIHN0YXRp
YyBDb2xvciBwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyYsIGJvb2wgc3RyaWN0ID0gZmFsc2UpOwog
ICAgIHN0YXRpYyBDb2xvciBwYXJzZVN5c3RlbUNvbG9yKGNvbnN0IFN0cmluZyYsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIv
Q1NTUHJvcGVydHlQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKaW5kZXggY2MwNWVmMGRiZmYuLmYxNTYyZjk5ODMxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcApAQCAtNjcsNiAr
NjcsNyBAQAogI2luY2x1ZGUgIkhhc2hUb29scy5oIgogLy8gRklYTUUtTkVXUEFSU0VSOiBSZXBs
YWNlIFBhaXIgYW5kIFJlY3Qgd2l0aCBhY3R1YWwgQ1NTVmFsdWUgc3ViY2xhc3NlcyAoQ1NTVmFs
dWVQYWlyIGFuZCBDU1NRdWFkVmFsdWUpLgogI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJQ
cm9wZXJ0eUNhc2NhZGUuaCIKICNpbmNsdWRlICJSZWN0LmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhl
bWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCkBAIC03NSw3ICs3Niw2
IEBACiAjaW5jbHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSAiU3R5bGVQ
cm9wZXJ0eVNob3J0aGFuZC5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmRGdW5j
dGlvbnMuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCiAjaW5jbHVkZSA8Yml0c2V0Pgog
I2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CkBA
IC0yOTcsMTAgKzI5NywxMCBAQCBib29sIENTU1Byb3BlcnR5UGFyc2VyOjpjYW5QYXJzZVR5cGVk
Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHN5bnRheCwgYwogICAgIHJldHVybiBw
YXJzZXIuY2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoc3ludGF4KTsKIH0KIAotUmVm
UHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVk
Q3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3lu
dGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tlbnMsIGNvbnN0IFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmIGNvbnRleHQpCitSZWZQ
dHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRD
dXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50
YXgsIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmIHRva2VucywgY29uc3QgU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIENTU1Byb3BlcnR5UGFyc2VyIHBhcnNlcih0b2tlbnMsIGNvbnRleHQsIG51bGxwdHIs
IGZhbHNlKTsKLSAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWUgPSBwYXJz
ZXIucGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCBzdHlsZVJlc29s
dmVyKTsKKyAgICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWUgPSBwYXJzZXIu
cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgc3ludGF4LCBidWlsZGVyU3RhdGUp
OwogICAgIGlmICghdmFsdWUgfHwgIXBhcnNlci5tX3JhbmdlLmF0RW5kKCkpCiAgICAgICAgIHJl
dHVybiBudWxscHRyOwogICAgIHJldHVybiB2YWx1ZTsKQEAgLTQyODksMTMgKzQyODksMTMgQEAg
dm9pZCBDU1NQcm9wZXJ0eVBhcnNlcjo6Y29sbGVjdFBhcnNlZEN1c3RvbVByb3BlcnR5VmFsdWVE
ZXBlbmRlbmNpZXMoY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLVJlZlB0cjxDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlPiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFs
dWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK1JlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBD
U1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3Ry
aW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGlmIChzeW50YXggIT0gIioiKSB7CiAgICAgICAgIG1f
cmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKICAgICAgICAgYXV0byBwcmltaXRpdmVWYWwgPSBj
b25zdW1lV2lkdGhPckhlaWdodChtX3JhbmdlLCBtX2NvbnRleHQpOwogICAgICAgICBpZiAocHJp
bWl0aXZlVmFsICYmIHByaW1pdGl2ZVZhbC0+aXNQcmltaXRpdmVWYWx1ZSgpICYmIGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqcHJpbWl0aXZlVmFsKS5pc0xlbmd0aCgpKSB7Ci0gICAgICAg
ICAgICBhdXRvIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChz
dHlsZVJlc29sdmVyLCAqcHJpbWl0aXZlVmFsKTsKKyAgICAgICAgICAgIGF1dG8gbGVuZ3RoID0g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoKGJ1aWxkZXJTdGF0ZSwgKnByaW1p
dGl2ZVZhbCk7CiAgICAgICAgICAgICBpZiAoIWxlbmd0aC5pc0NhbGN1bGF0ZWQoKSAmJiAhbGVu
Z3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU6OmNyZWF0ZVN5bnRheExlbmd0aChuYW1lLCBXVEZNb3ZlKGxlbmd0aCkpOwogICAg
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5
UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgK
aW5kZXggNjVlODYwNTdiMjYuLjk0YzRhNzNkYjlkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCkBAIC0zMiw3ICszMiwxMCBAQCBjbGFzcyBDU1NQ
cm9wZXJ0eTsKIGNsYXNzIENTU1ZhbHVlOwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZDsK
IGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CisKK25hbWVz
cGFjZSBTdHlsZSB7CitjbGFzcyBCdWlsZGVyU3RhdGU7Cit9CiAgICAgCiAvLyBJbnB1dHM6IFBy
b3BlcnR5SUQsIGlzSW1wb3J0YW50IGJvb2wsIENTU1BhcnNlclRva2VuUmFuZ2UuCiAvLyBPdXRw
dXRzOiBWZWN0b3Igb2YgQ1NTUHJvcGVydGllcwpAQCAtNDcsNyArNTAsNyBAQCBwdWJsaWM6CiAg
ICAgLy8gUGFyc2VzIGEgbm9uLXNob3J0aGFuZCBDU1MgcHJvcGVydHkKICAgICBzdGF0aWMgUmVm
UHRyPENTU1ZhbHVlPiBwYXJzZVNpbmdsZVZhbHVlKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1Bh
cnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAgICAgc3RhdGljIGJv
b2wgY2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgs
IGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7Ci0g
ICAgc3RhdGljIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9t
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBj
b25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1BhcnNlckNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFs
dWU+IHBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29u
c3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IENTU1BhcnNlclRva2VuUmFuZ2UmLCBjb25zdCBTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYpOwogICAgIHN0YXRpYyB2
b2lkIGNvbGxlY3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0
cmluZyYgc3ludGF4LCBib29sIGlzUm9vdCwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgZGVwZW5k
ZW5jaWVzLCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29udGV4
dCYpOwogCiBwcml2YXRlOgpAQCAtNTgsNyArNjEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgY29u
c3VtZUNTU1dpZGVLZXl3b3JkKENTU1Byb3BlcnR5SUQsIGJvb2wgaW1wb3J0YW50KTsKICAgICBS
ZWZQdHI8Q1NTVmFsdWU+IHBhcnNlU2luZ2xlVmFsdWUoQ1NTUHJvcGVydHlJRCwgQ1NTUHJvcGVy
dHlJRCA9IENTU1Byb3BlcnR5SW52YWxpZCk7CiAgICAgYm9vbCBjYW5QYXJzZVR5cGVkQ3VzdG9t
UHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIHN5bnRheCk7Ci0gICAgUmVmUHRyPENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+IHBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNvbnN0IFN0eWxlUmVzb2x2ZXImKTsKKyAg
ICBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gcGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5
VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYpOwogICAgIHZvaWQgY29sbGVjdFBhcnNlZEN1c3RvbVByb3BlcnR5
VmFsdWVEZXBlbmRlbmNpZXMoY29uc3QgU3RyaW5nJiBzeW50YXgsIGJvb2wgaXNSb290LCBIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+JiBkZXBlbmRlbmNpZXMpOwogCiAgICAgYm9vbCBpblF1aXJrc01v
ZGUoKSBjb25zdCB7IHJldHVybiBtX2NvbnRleHQubW9kZSA9PSBIVE1MUXVpcmtzTW9kZTsgfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJELmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0Nv
bnRleHQyRC5jcHAKaW5kZXggOTViN2IxYzU1ZjkuLmFkYzAzNjE5ZmNiIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5j
cHAKQEAgLTE3NiwxMyArMTc2LDcgQEAgdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNl
dEZvbnQoY29uc3QgU3RyaW5nJiBuZXdGb250KQogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9w
ZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFN0eWxlLCBwYXJzZWRTdHlsZS0+Z2V0
UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTdHlsZSkuZ2V0KCkpOwogICAgIHN0eWxl
UmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFZhcmlh
bnRDYXBzLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRW
YXJpYW50Q2FwcykuZ2V0KCkpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvQ3Vy
cmVudFN0eWxlKENTU1Byb3BlcnR5Rm9udFdlaWdodCwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5
Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KS5nZXQoKSk7Ci0KLSAgICAvLyBBcyBkZXNj
cmliZWQgaW4gQlVHNjYyOTEsIHNldHRpbmcgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodCBvbiBh
IGZvbnQgbWF5IGVudGFpbCBhIENTU1ByaW1pdGl2ZVZhbHVlOjpjb21wdXRlTGVuZ3RoRG91Ymxl
IGNhbGwsCi0gICAgLy8gd2hpY2ggYXNzdW1lcyB0aGUgZm9udE1ldHJpY3MgYXJlIGF2YWlsYWJs
ZSBmb3IgdGhlIGFmZmVjdGVkIGZvbnQsIG90aGVyd2lzZSBhIGNyYXNoIG9jY3VycyAoc2VlIGh0
dHA6Ly90cmFjLndlYmtpdC5vcmcvY2hhbmdlc2V0Lzk2MTIyKS4KLSAgICAvLyBUaGUgdXBkYXRl
Rm9udCgpIGNhbGxzIGJlbG93IHVwZGF0ZSB0aGUgZm9udE1ldHJpY3MgYW5kIGVuc3VyZSB0aGUg
cHJvcGVyIHNldHRpbmcgb2YgZm9udC1zaXplIGFuZCBsaW5lLWhlaWdodC4KLSAgICBzdHlsZVJl
c29sdmVyLnVwZGF0ZUZvbnQoKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1
cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRTaXplLCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlD
U1NWYWx1ZShDU1NQcm9wZXJ0eUZvbnRTaXplKS5nZXQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci51
cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5
bGUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCBwYXJzZWRTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1
ZShDU1NQcm9wZXJ0eUxpbmVIZWlnaHQpLmdldCgpKTsKIAogICAgIG1vZGlmaWFibGVTdGF0ZSgp
LmZvbnQuaW5pdGlhbGl6ZShkb2N1bWVudC5mb250U2VsZWN0b3IoKSwgKnN0eWxlUmVzb2x2ZXIu
c3R5bGUoKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NDb250ZXh0LmNwcAppbmRleCAzMzUxM2RmNGY4My4uNzM4OGQ5ZmM3YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNw
cApAQCAtMTEzMyw3ICsxMTMzLDcgQEAgRmxvYXRSZWN0IEdyYXBoaWNzQ29udGV4dDo6Y29tcHV0
ZUxpbmVCb3VuZHNBbmRBbnRpYWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG8KICAgICByZXR1
cm4gRmxvYXRSZWN0KG9yaWdpbiwgRmxvYXRTaXplKHJlY3Qud2lkdGgoKSwgdGhpY2tuZXNzKSk7
CiB9CiAKLXZvaWQgR3JhcGhpY3NDb250ZXh0OjphcHBseVN0YXRlKGNvbnN0IEdyYXBoaWNzQ29u
dGV4dFN0YXRlJiBzdGF0ZSkKK3ZvaWQgR3JhcGhpY3NDb250ZXh0OjpidWlsZGVyU3RhdGUoY29u
c3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmIHN0YXRlKQogewogICAgIHNldFBsYXRmb3JtU2hhZG93
KHN0YXRlLnNoYWRvd09mZnNldCwgc3RhdGUuc2hhZG93Qmx1ciwgc3RhdGUuc2hhZG93Q29sb3Ip
OwogICAgIHNldFBsYXRmb3JtU3Ryb2tlVGhpY2tuZXNzKHN0YXRlLnN0cm9rZVRoaWNrbmVzcyk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4
dC5oCmluZGV4IDEzZjVhMmY1NWRiLi4wODc5MTQ1YjEzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmgKQEAgLTQwMiw3ICs0MDIs
NyBAQCBwdWJsaWM6CiAgICAgdm9pZCBkcmF3RW1waGFzaXNNYXJrcyhjb25zdCBGb250Q2FzY2Fk
ZSYsIGNvbnN0IFRleHRSdW4mLCBjb25zdCBBdG9tU3RyaW5nJiBtYXJrLCBjb25zdCBGbG9hdFBv
aW50JiwgdW5zaWduZWQgZnJvbSA9IDAsIE9wdGlvbmFsPHVuc2lnbmVkPiB0byA9IFdURjo6bnVs
bG9wdCk7CiAgICAgdm9pZCBkcmF3QmlkaVRleHQoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgRmxvYXRQb2ludCYsIEZvbnRDYXNjYWRlOjpDdXN0b21Gb250Tm90UmVh
ZHlBY3Rpb24gPSBGb250Q2FzY2FkZTo6RG9Ob3RQYWludElmRm9udE5vdFJlYWR5KTsKIAotICAg
IHZvaWQgYXBwbHlTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYpOworICAgIHZvaWQg
YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJik7CiAKICAgICBlbnVtIFJv
dW5kaW5nTW9kZSB7CiAgICAgICAgIFJvdW5kQWxsU2lkZXMsCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3RzL0Rpc3BsYXlM
aXN0SXRlbXMuaAppbmRleCBjZjNjZjkyOTMwYy4uZmI3M2E2NzgzM2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0
ZW1zLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxpc3Rz
L0Rpc3BsYXlMaXN0SXRlbXMuaApAQCAtMzE2LDcgKzMxNiw3IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgYWNjdW11bGF0ZShHcmFwaGljc0NvbnRleHRTdGF0ZSYpIGNvbnN0OwogCi0gICAgc3RhdGlj
IHZvaWQgYXBwbHlTdGF0ZShHcmFwaGljc0NvbnRleHQmLCBjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYsIEdyYXBoaWNzQ29udGV4dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKKyAgICBzdGF0
aWMgdm9pZCBidWlsZGVyU3RhdGUoR3JhcGhpY3NDb250ZXh0JiwgY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVDaGFuZ2VGbGFncyk7CiAKICAg
ICBzdGF0aWMgdm9pZCBkdW1wU3RhdGVDaGFuZ2VzKFdURjo6VGV4dFN0cmVhbSYsIGNvbnN0IEdy
YXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0YXRlQ2hhbmdlRmxh
Z3MpOwogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2NhZGVM
ZXZlbC5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2FzY2FkZUxldmVsLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmEyZTMyYTg3MTVjCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvQ2FzY2FkZUxldmVsLmgKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSA8d3RmL09wdGlvblNldC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CituYW1lc3BhY2UgU3R5bGUgeworCitlbnVtIGNsYXNzIENh
c2NhZGVMZXZlbCA6IHVpbnQ4X3QgeworICAgIFVzZXJBZ2VudCAgID0gMSA8PCAwLAorICAgIFVz
ZXIgICAgICAgID0gMSA8PCAxLAorICAgIEF1dGhvciAgICAgID0gMSA8PCAyCit9OworCitzdGF0
aWMgY29uc3RleHByIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGFsbENhc2NhZGVMZXZlbHMoKSB7
IHJldHVybiB7IENhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBDYXNjYWRlTGV2ZWw6OlVzZXIsIENh
c2NhZGVMZXZlbDo6QXV0aG9yIH07IH0KKworfQorfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3Bl
cnR5Q2FzY2FkZS5jcHAKaW5kZXggYTQzOTgxMTIzNWEuLjNlOGJjOWNkOGQ4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAKQEAgLTE3NCw5ICsxNzQsOSBAQCBzdGF0
aWMgaW5saW5lIGJvb2wgaXNWYWxpZEN1ZVN0eWxlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkK
ICNlbmRpZgogCiBQcm9wZXJ0eUNhc2NhZGU6OlByb3BlcnR5Q2FzY2FkZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIE9wdGlvblNl
dDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZlbHMsIEluY2x1ZGVkUHJvcGVydGllcyBpbmNsdWRl
ZFByb3BlcnRpZXMpCi0gICAgOiBtX3N0eWxlUmVzb2x2ZXIoc3R5bGVSZXNvbHZlcikKLSAgICAs
IG1fbWF0Y2hSZXN1bHQobWF0Y2hSZXN1bHQpCisgICAgOiBtX21hdGNoUmVzdWx0KG1hdGNoUmVz
dWx0KQogICAgICwgbV9pbmNsdWRlZFByb3BlcnRpZXMoaW5jbHVkZWRQcm9wZXJ0aWVzKQorICAg
ICwgbV9idWlsZGVyU3RhdGUoc3RkOjppbl9wbGFjZSwgKnRoaXMsIHN0eWxlUmVzb2x2ZXIpCiB7
CiAgICAgLy8gRGlyZWN0aW9uYWwgcHJvcGVydGllcyAoKi1iZWZvcmUvYWZ0ZXIpIGFyZSBhbGlh
c2VzIHRoYXQgZGVwZW5kIG9uIHRoZSBUZXh0RGlyZWN0aW9uIGFuZCBXcml0aW5nTW9kZS4KICAg
ICAvLyBUaGVzZSBtdXN0IGJlIHJlc29sdmVkIGJlZm9yZSB3ZSBjYW4gYmVnaW4gYnVpbGRpbmcg
dGhlIHByb3BlcnR5IGNhc2NhZGUuCkBAIC0xODYsOCArMTg2LDcgQEAgUHJvcGVydHlDYXNjYWRl
OjpQcm9wZXJ0eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0
Y2hSZXN1bHQKIH0KIAogUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0eUNhc2NhZGUoY29uc3QgUHJv
cGVydHlDYXNjYWRlJiBwYXJlbnQsIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGNhc2NhZGVMZXZl
bHMpCi0gICAgOiBtX3N0eWxlUmVzb2x2ZXIocGFyZW50Lm1fc3R5bGVSZXNvbHZlcikKLSAgICAs
IG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQpCisgICAgOiAgbV9tYXRjaFJlc3Vs
dChwYXJlbnQubV9tYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVzKHBhcmVu
dC5tX2luY2x1ZGVkUHJvcGVydGllcykKICAgICAsIG1fZGlyZWN0aW9uKHBhcmVudC5tX2RpcmVj
dGlvbikKICAgICAsIG1fd3JpdGluZ01vZGUocGFyZW50Lm1fd3JpdGluZ01vZGUpCkBAIC00MDMs
MTkgKzQwMiwxOSBAQCBpbmxpbmUgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGll
c0ltcGwoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcAogICAgICAgICBhdXRvJiBwcm9w
ZXJ0eSA9IG1fcHJvcGVydGllc1twcm9wZXJ0eUlEXTsKIAogICAgICAgICBpZiAodHJhY2tDeWNs
ZXMgPT0gQ3VzdG9tUHJvcGVydHlDeWNsZVRyYWNraW5nOjpFbmFibGVkKSB7Ci0gICAgICAgICAg
ICBpZiAoVU5MSUtFTFkobV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9w
ZXJ0eUlEKSkpIHsKKyAgICAgICAgICAgIGlmIChVTkxJS0VMWShidWlsZGVyU3RhdGUoKS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkpIHsKICAgICAgICAgICAgICAgICAv
LyBXZSBhcmUgaW4gYSBjeWNsZSAoZWcuIHNldHRpbmcgZm9udCBzaXplIHVzaW5nIHJlZ2lzdGVy
ZWQgY3VzdG9tIHByb3BlcnR5IHZhbHVlIGNvbnRhaW5pbmcgZW0pLgogICAgICAgICAgICAgICAg
IC8vIFNvIHRoaXMgdmFsdWUgc2hvdWxkIGJlIHVuc2V0LgotICAgICAgICAgICAgICAgIG1fYXBw
bHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICAg
ICAgYnVpbGRlclN0YXRlKCkubV9hcHBsaWVkUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CiAg
ICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9wZXJ0eSBpcyBpbiBhIGN5Y2xlLCBhbmQgb25seSB0
aGUgcm9vdCBvZiB0aGUgY2FsbCBzdGFjayB3aWxsIGhhdmUgZmlyc3RQcm9wZXJ0eSAhPSBsYXN0
UHJvcGVydHkuCiAgICAgICAgICAgICAgICAgQVNTRVJUKGZpcnN0UHJvcGVydHkgPT0gbGFzdFBy
b3BlcnR5KTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlE
KTsKKyAgICAgICAgICAgIGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKKyAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0
eUlEKTsKICAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkpOwotICAgICAgICAgICAg
bV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKLSAgICAgICAg
ICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllcy5zZXQocHJvcGVydHlJRCwgZmFs
c2UpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLm1fYXBwbGllZFByb3BlcnRpZXMuc2V0KHBy
b3BlcnR5SUQpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAg
ICB9CiAKQEAgLTQzMiwzMSArNDMxLDMyIEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseUN1
c3RvbVByb3BlcnRpZXMoKQogCiB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9w
ZXJ0eShjb25zdCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKG1fYXBwbHlTdGF0ZS5hcHBsaWVk
Q3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSB8fCAhbV9jdXN0b21Qcm9wZXJ0aWVzLmNv
bnRhaW5zKG5hbWUpKQorICAgIGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsK
KyAgICBpZiAoYnVpbGRlclN0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMo
bmFtZSkgfHwgIW1fY3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXV0byBwcm9wZXJ0eSA9IGN1c3RvbVByb3BlcnR5KG5hbWUpOwotICAgIGJv
b2wgaW5DeWNsZSA9IG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250
YWlucyhuYW1lKTsKKyAgICBib29sIGluQ3ljbGUgPSBidWlsZGVyU3RhdGUubV9pblByb2dyZXNz
UHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKTsKIAogICAgIGZvciAoYXV0byBpbmRleCA6
IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hM
aW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9KSB7CiAgICAgICAgIGlmICghcHJv
cGVydHkuY3NzVmFsdWVbaW5kZXhdKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlm
IChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCAmJiBtX3N0eWxlUmVzb2x2
ZXIuc3RhdGUoKS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRl
KQorICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYg
YnVpbGRlclN0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lk
ZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIFJlZjxDU1NDdXN0b21Qcm9wZXJ0
eVZhbHVlPiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGUoZG93
bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkp
OwogCiAgICAgICAgIGlmIChpbkN5Y2xlKSB7Ci0gICAgICAgICAgICBtX2FwcGx5U3RhdGUuYXBw
bGllZEN1c3RvbVByb3BlcnRpZXMuYWRkKG5hbWUpOyAvLyBNYWtlIHN1cmUgd2UgZG8gbm90IHRy
eSB0byBhcHBseSB0aGlzIHByb3BlcnR5IGFnYWluIHdoaWxlIHJlc29sdmluZyBpdC4KKyAgICAg
ICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsg
Ly8gTWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2FpbiB3
aGlsZSByZXNvbHZpbmcgaXQuCiAgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlOjpjcmVhdGVXaXRoSUQobmFtZSwgQ1NTVmFsdWVJbnZhbGlkKTsKICAgICAg
ICAgfQogCi0gICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5h
ZGQobmFtZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3Vz
dG9tLmFkZChuYW1lKTsKIAogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxSZWY8
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZT4+KHZhbHVlVG9BcHBseS0+dmFsdWUoKSkpIHsKICAg
ICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VkVmFsdWUgPSByZXNvbHZlZFZhcmlhYmxl
VmFsdWUoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSk7CiAKLSAgICAgICAg
ICAgIGlmIChtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFt
ZSkpCisgICAgICAgICAgICBpZiAoYnVpbGRlclN0YXRlLm1fYXBwbGllZEN1c3RvbVByb3BlcnRp
ZXMuY29udGFpbnMobmFtZSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOyAvLyBUaGVyZSB3YXMg
YSBjeWNsZSBhbmQgdGhlIHZhbHVlIHdhcyByZXNldCwgc28gYmFpbC4KIAogICAgICAgICAgICAg
aWYgKCFwYXJzZWRWYWx1ZSkKQEAgLTQ2NSwzMiArNDY1LDIwIEBAIHZvaWQgUHJvcGVydHlDYXNj
YWRlOjphcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICAgICAgICAg
IHZhbHVlVG9BcHBseSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwYXJzZWRW
YWx1ZSk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQ
cm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7Ci0gICAgICAgICAgICBpZiAoaW5kZXgg
PT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpIHsKLSAgICAgICAgICAgICAgICBtX3N0
eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0
eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaykgewotICAgICAgICAgICAg
ICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKSB7Ci0g
ICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKGZhbHNlKTsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3Rh
dGUoKS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAgICAg
ICAgfQorICAgICAgICBpZiAoYnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0
b20uY29udGFpbnMobmFtZSkpIHsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRj
aCA9IGluZGV4OwogICAgICAgICAgICAgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUN1c3RvbSwg
dmFsdWVUb0FwcGx5LmdldCgpLCBpbmRleCk7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBtX2Fw
cGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwotICAgIG1f
YXBwbHlTdGF0ZS5hcHBsaWVkQ3VzdG9tUHJvcGVydGllcy5hZGQobmFtZSk7CisgICAgYnVpbGRl
clN0YXRlLm1fbGlua01hdGNoID0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQ7CisgICAg
YnVpbGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20ucmVtb3ZlKG5hbWUpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsKIAog
ICAgIGZvciAoYXV0byBpbmRleCA6IHsgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQsIFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCB9
KSB7CiAgICAgICAgIGlmICghcHJvcGVydHkuY3NzVmFsdWVbaW5kZXhdKQogICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIGlmIChpbmRleCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVm
YXVsdCAmJiBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0g
SW5zaWRlTGluazo6Tm90SW5zaWRlKQorICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaERlZmF1bHQgJiYgYnVpbGRlclN0YXRlLnN0eWxlKCkuaW5zaWRlTGluaygpID09
IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAg
IFJlZjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiB2YWx1ZVRvQXBwbHkgPSBDU1NDdXN0b21Qcm9w
ZXJ0eVZhbHVlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4oKnByb3Bl
cnR5LmNzc1ZhbHVlW2luZGV4XSkpOwpAQCAtNTI4LDMzICs1MTYsMjYgQEAgY29uc3QgUHJvcGVy
dHlDYXNjYWRlKiBQcm9wZXJ0eUNhc2NhZGU6OnByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKENh
c2NhZGVMZXZlbAogCiBpbmxpbmUgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHko
Y29uc3QgUHJvcGVydHkmIHByb3BlcnR5KQogewotICAgIFN0eWxlUmVzb2x2ZXI6OlN0YXRlJiBz
dGF0ZSA9IG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpOwotICAgIHN0YXRlLnNldENhc2NhZGVMZXZl
bChwcm9wZXJ0eS5sZXZlbCk7Ci0gICAgc3RhdGUuc2V0U3R5bGVTY29wZU9yZGluYWwocHJvcGVy
dHkuc3R5bGVTY29wZU9yZGluYWwpOwotCi0gICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVj
dG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0XSkgewotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3Bl
cnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICBhcHBseVByb3BlcnR5KHByb3BlcnR5
LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHRdLCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdCk7Ci0gICAgfQorICAgIGF1dG8mIGJ1aWxkZXJT
dGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKKyAgICBidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwg
PSBwcm9wZXJ0eS5sZXZlbDsKKyAgICBidWlsZGVyU3RhdGUubV9zdHlsZVNjb3BlT3JkaW5hbCA9
IHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsOworCisgICAgYXV0byBhcHBseVdpdGhMaW5rTWF0
Y2ggPSBbJl0oU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrIGxpbmtNYXRjaCkgeworICAg
ICAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbbGlua01hdGNoXSkgeworICAgICAgICAgICAgYnVp
bGRlclN0YXRlLm1fbGlua01hdGNoID0gbGlua01hdGNoOworICAgICAgICAgICAgYXBwbHlQcm9w
ZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRjaF0sIGxpbmtNYXRj
aCk7CisgICAgICAgIH0KKyAgICB9OwogCi0gICAgaWYgKHN0YXRlLnN0eWxlKCktPmluc2lkZUxp
bmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCi0gICAgICAgIHJldHVybjsKKyAgICBhcHBs
eVdpdGhMaW5rTWF0Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwogCi0gICAgaWYg
KHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSkgewotICAgICAg
ICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgIHN0
YXRlLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAgICBh
cHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JDaGVj
a2VyOjpNYXRjaExpbmtdLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7Ci0gICAgfQorICAg
IGlmIChidWlsZGVyU3RhdGUuc3R5bGUoKS5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90
SW5zaWRlKQorICAgICAgICByZXR1cm47CiAKLSAgICBpZiAocHJvcGVydHkuY3NzVmFsdWVbU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWRdKSB7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgIHN0YXRlLnNldEFwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUodHJ1ZSk7Ci0gICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVy
dHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZF0s
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsKLSAgICB9CisgICAgYXBwbHlXaXRoTGlu
a01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rKTsKKyAgICBhcHBseVdpdGhMaW5rTWF0
Y2goU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQpOwogCi0gICAgc3RhdGUuc2V0QXBwbHlQ
cm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOworICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9
IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0OwogfQogCiB2b2lkIFByb3BlcnR5Q2FzY2Fk
ZTo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVj
dG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBsaW5rTWF0Y2hNYXNrKQpAQCAtNTY5LDYgKzU1MCw4
IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgaWQs
IENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDCiAgICAgICAgIHJldHVybiBhcHBseVByb3BlcnR5
KG5ld0lkLCB2YWx1ZVRvQXBwbHkuZ2V0KCksIGxpbmtNYXRjaE1hc2spOwogICAgIH0KIAorICAg
IGF1dG8mIGJ1aWxkZXJTdGF0ZSA9ICptX2J1aWxkZXJTdGF0ZTsKKwogICAgIENTU0N1c3RvbVBy
b3BlcnR5VmFsdWUqIGN1c3RvbVByb3BlcnR5VmFsdWUgPSBudWxscHRyOwogICAgIENTU1ZhbHVl
SUQgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gQ1NTVmFsdWVJbnZhbGlkOwogICAgIENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eSogY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkID0gbnVsbHB0cjsK
QEAgLTU3OSwxOCArNTYyLDE3IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDCiAgICAgICAgIGlm
IChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUt
PnZhbHVlKCkpKQogICAgICAgICAgICAgY3VzdG9tUHJvcGVydHlWYWx1ZUlEID0gV1RGOjpnZXQ8
Q1NTVmFsdWVJRD4oY3VzdG9tUHJvcGVydHlWYWx1ZS0+dmFsdWUoKSk7CiAgICAgICAgIGF1dG8m
IG5hbWUgPSBjdXN0b21Qcm9wZXJ0eVZhbHVlLT5uYW1lKCk7Ci0gICAgICAgIGN1c3RvbVByb3Bl
cnR5UmVnaXN0ZXJlZCA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLmdldENTU1JlZ2lzdGVy
ZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKKyAgICAgICAgY3VzdG9tUHJvcGVydHlS
ZWdpc3RlcmVkID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3Rv
bVByb3BlcnR5U2V0KCkuZ2V0KG5hbWUpOwogICAgIH0KIAotICAgIGF1dG8mIHN0YXRlID0gbV9z
dHlsZVJlc29sdmVyLnN0YXRlKCk7Ci0gICAgYm9vbCBpc0luaGVyaXQgPSBzdGF0ZS5wYXJlbnRT
dHlsZSgpID8gdmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVy
dHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCA6IGZhbHNlOwotICAgIGJvb2wgaXNJbml0aWFs
ID0gdmFsdWVUb0FwcGx5LT5pc0luaXRpYWxWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJ
RCA9PSBDU1NWYWx1ZUluaXRpYWwgfHwgKCFzdGF0ZS5wYXJlbnRTdHlsZSgpICYmICh2YWx1ZVRv
QXBwbHktPmlzSW5oZXJpdGVkVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NT
VmFsdWVJbmhlcml0KSk7CisgICAgYm9vbCBpc0luaGVyaXQgPSB2YWx1ZVRvQXBwbHktPmlzSW5o
ZXJpdGVkVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbmhlcml0
OworICAgIGJvb2wgaXNJbml0aWFsID0gdmFsdWVUb0FwcGx5LT5pc0luaXRpYWxWYWx1ZSgpIHx8
IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaXRpYWw7CiAKICAgICBib29sIGlz
VW5zZXQgPSB2YWx1ZVRvQXBwbHktPmlzVW5zZXRWYWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFs
dWVJRCA9PSBDU1NWYWx1ZVVuc2V0OwogICAgIGJvb2wgaXNSZXZlcnQgPSB2YWx1ZVRvQXBwbHkt
PmlzUmV2ZXJ0VmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVSZXZl
cnQ7CiAKICAgICBpZiAoaXNSZXZlcnQpIHsKLSAgICAgICAgaWYgKGF1dG8qIHJvbGxiYWNrID0g
cHJvcGVydHlDYXNjYWRlRm9yUm9sbGJhY2soc3RhdGUuY2FzY2FkZUxldmVsKCkpKSB7CisgICAg
ICAgIGlmIChhdXRvKiByb2xsYmFjayA9IHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKGJ1aWxk
ZXJTdGF0ZS5tX2Nhc2NhZGVMZXZlbCkpIHsKICAgICAgICAgICAgIC8vIFdpdGggdGhlIHJvbGxi
YWNrIGNhc2NhZGUgYnVpbHQsIHdlIG5lZWQgdG8gb2J0YWluIHRoZSBwcm9wZXJ0eSBhbmQgYXBw
bHkgaXQuIElmIHRoZSBwcm9wZXJ0eSBpcwogICAgICAgICAgICAgLy8gbm90IHByZXNlbnQsIHRo
ZW4gd2UgYmVoYXZlIGxpa2UgInVuc2V0LiIgT3RoZXJ3aXNlIHdlIGFwcGx5IHRoZSBwcm9wZXJ0
eSBpbnN0ZWFkIG9mCiAgICAgICAgICAgICAvLyBvdXIgb3duLgpAQCAtNjIxLDI5ICs2MDMsMjkg
QEAgdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckMKIAogICAgIEFTU0VSVCghaXNJbmhlcml0IHx8ICFp
c0luaXRpYWwpOyAvLyBpc0luaGVyaXQgLT4gIWlzSW5pdGlhbCAmJiBpc0luaXRpYWwgLT4gIWlz
SW5oZXJpdAogCi0gICAgaWYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSAm
JiAoIXN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSB8fCAhaXNWYWxpZFZp
c2l0ZWRMaW5rUHJvcGVydHkoaWQpKSkgeworICAgIGlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpICYmICFpc1ZhbGlkVmlzaXRlZExpbmtQcm9wZXJ0eShp
ZCkpIHsKICAgICAgICAgLy8gTGltaXQgdGhlIHByb3BlcnRpZXMgdGhhdCBjYW4gYmUgYXBwbGll
ZCB0byBvbmx5IHRoZSBvbmVzIGhvbm9yZWQgYnkgOnZpc2l0ZWQuCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKICAgICBpZiAoaXNJbmhlcml0ICYmICFDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQ
cm9wZXJ0eShpZCkpCi0gICAgICAgIHN0YXRlLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlJbmhl
cml0ZWRQcm9wZXJ0aWVzKCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4
cGxpY2l0bHlJbmhlcml0ZWRQcm9wZXJ0aWVzKCk7CiAKICNpZiBFTkFCTEUoQ1NTX1BBSU5USU5H
X0FQSSkKICAgICBpZiAoaXM8Q1NTUGFpbnRJbWFnZVZhbHVlPih2YWx1ZVRvQXBwbHkpKSB7CiAg
ICAgICAgIGF1dG8mIG5hbWUgPSBkb3duY2FzdDxDU1NQYWludEltYWdlVmFsdWU+KHZhbHVlVG9B
cHBseS5nZXQoKSkubmFtZSgpOwotICAgICAgICBpZiAoYXV0byogcGFpbnRXb3JrbGV0ID0gbV9z
dHlsZVJlc29sdmVyLmRvY3VtZW50KCkucGFpbnRXb3JrbGV0R2xvYmFsU2NvcGVGb3JOYW1lKG5h
bWUpKSB7CisgICAgICAgIGlmIChhdXRvKiBwYWludFdvcmtsZXQgPSBjb25zdF9jYXN0PERvY3Vt
ZW50Jj4oYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpLnBhaW50V29ya2xldEdsb2JhbFNjb3BlRm9y
TmFtZShuYW1lKSkgewogICAgICAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhwYWludFdv
cmtsZXQtPnBhaW50RGVmaW5pdGlvbkxvY2soKSk7CiAgICAgICAgICAgICBpZiAoYXV0byogcmVn
aXN0cmF0aW9uID0gcGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25NYXAoKS5nZXQobmFtZSkp
IHsKICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIHByb3BlcnR5IDogcmVnaXN0cmF0aW9uLT5p
bnB1dFByb3BlcnRpZXMpCi0gICAgICAgICAgICAgICAgICAgIHN0YXRlLnN0eWxlKCktPmFkZEN1
c3RvbVBhaW50V2F0Y2hQcm9wZXJ0eShwcm9wZXJ0eSk7CisgICAgICAgICAgICAgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLmFkZEN1c3RvbVBhaW50V2F0Y2hQcm9wZXJ0eShwcm9wZXJ0eSk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKIAogICAgIC8vIFVzZSB0
aGUgZ2VuZXJhdGVkIFN0eWxlQnVpbGRlci4KLSAgICBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVy
dHkoaWQsIG1fc3R5bGVSZXNvbHZlciwgdmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRpYWwsIGlz
SW5oZXJpdCwgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkKTsKKyAgICBTdHlsZUJ1aWxkZXI6OmFw
cGx5UHJvcGVydHkoaWQsIGJ1aWxkZXJTdGF0ZSwgdmFsdWVUb0FwcGx5LmdldCgpLCBpc0luaXRp
YWwsIGlzSW5oZXJpdCwgY3VzdG9tUHJvcGVydHlSZWdpc3RlcmVkKTsKIH0KIAogUmVmPENTU1Zh
bHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQsIENTU1ZhbHVlJiB2YWx1ZSkKQEAgLTY1Myw3ICs2MzUsNyBAQCBSZWY8Q1NTVmFsdWU+IFBy
b3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgQ1NT
VmFsdWUmCiAgICAgCiAgICAgYXV0byB2YXJpYWJsZVZhbHVlID0gcmVzb2x2ZWRWYXJpYWJsZVZh
bHVlKHByb3BlcnR5SUQsIHZhbHVlKTsKICAgICAvLyBJZiB0aGUgY2FzY2FkZSBoYXMgYWxyZWFk
eSBhcHBsaWVkIHRoaXMgaWQsIHRoZW4gd2UgZGV0ZWN0ZWQgYSBjeWNsZSwgYW5kIHRoaXMgdmFs
dWUgc2hvdWxkIGJlIHVuc2V0LgotICAgIGlmICghdmFyaWFibGVWYWx1ZSB8fCBtX2FwcGx5U3Rh
dGUuYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5SUQpKSB7CisgICAgaWYgKCF2YXJpYWJs
ZVZhbHVlIHx8IGJ1aWxkZXJTdGF0ZSgpLm1fYXBwbGllZFByb3BlcnRpZXMuZ2V0KHByb3BlcnR5
SUQpKSB7CiAgICAgICAgIGlmIChDU1NQcm9wZXJ0eTo6aXNJbmhlcml0ZWRQcm9wZXJ0eShwcm9w
ZXJ0eUlEKSkKICAgICAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNy
ZWF0ZUluaGVyaXRlZFZhbHVlKCk7CiAgICAgICAgIHJldHVybiBDU1NWYWx1ZVBvb2w6OnNpbmds
ZXRvbigpLmNyZWF0ZUV4cGxpY2l0SW5pdGlhbFZhbHVlKCk7CkBAIC02NjQsMTMgKzY0NiwxMyBA
QCBSZWY8Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZVZhbHVlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHlJRCwgQ1NTVmFsdWUmCiAKIFJlZlB0cjxDU1NWYWx1ZT4gUHJvcGVydHlDYXNj
YWRlOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBDU1NQYXJzZXIgcGFyc2VyKG1fc3R5bGVSZXNvbHZlci5k
b2N1bWVudCgpKTsKLSAgICByZXR1cm4gcGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZl
cmVuY2VzKHByb3BJRCwgdmFsdWUsICp0aGlzKTsKKyAgICBDU1NQYXJzZXIgcGFyc2VyKGJ1aWxk
ZXJTdGF0ZSgpLmRvY3VtZW50KCkpOworICAgIHJldHVybiBwYXJzZXIucGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMocHJvcElELCB2YWx1ZSwgYnVpbGRlclN0YXRlKCkpOwogfQogCiB2
b2lkIFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlvbkFuZFdyaXRpbmdNb2RlKCkKIHsK
LSAgICBhdXRvJiBzdHlsZSA9ICptX3N0eWxlUmVzb2x2ZXIuc3R5bGUoKTsKKyAgICBhdXRvJiBz
dHlsZSA9IGJ1aWxkZXJTdGF0ZSgpLnN0eWxlKCk7CiAKICAgICBtX2RpcmVjdGlvbiA9IHN0eWxl
LmRpcmVjdGlvbigpOwogICAgIG1fd3JpdGluZ01vZGUgPSBzdHlsZS53cml0aW5nTW9kZSgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAppbmRleCA0MmM1MDg1YTM5Yi4uOWY1
NWNmZmJjNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2Fk
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5oCkBAIC0yNSw5
ICsyNSwxMCBAQAogCiAjcHJhZ21hIG9uY2UKIAorI2luY2x1ZGUgIkNhc2NhZGVMZXZlbC5oIgog
I2luY2x1ZGUgIkVsZW1lbnRSdWxlQ29sbGVjdG9yLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVy
U3RhdGUuaCIKICNpbmNsdWRlIDxiaXRzZXQ+Ci0jaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTM1LDE0ICszNiw2IEBAIGNsYXNzIFN0eWxlUmVzb2x2
ZXI7CiAKIG5hbWVzcGFjZSBTdHlsZSB7CiAKLWVudW0gY2xhc3MgQ2FzY2FkZUxldmVsIDogdWlu
dDhfdCB7Ci0gICAgVXNlckFnZW50ICAgPSAxIDw8IDAsCi0gICAgVXNlciAgICAgICAgPSAxIDw8
IDEsCi0gICAgQXV0aG9yICAgICAgPSAxIDw8IDIKLX07Ci0KLXN0YXRpYyBjb25zdGV4cHIgT3B0
aW9uU2V0PENhc2NhZGVMZXZlbD4gYWxsQ2FzY2FkZUxldmVscygpIHsgcmV0dXJuIHsgU3R5bGU6
OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50LCBTdHlsZTo6Q2FzY2FkZUxldmVsOjpVc2VyLCBTdHls
ZTo6Q2FzY2FkZUxldmVsOjpBdXRob3IgfTsgfQotCiBjbGFzcyBQcm9wZXJ0eUNhc2NhZGUgewog
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAtNTIsOCArNDUsNiBAQCBw
dWJsaWM6CiAKICAgICB+UHJvcGVydHlDYXNjYWRlKCk7CiAKLSAgICBTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKCkgeyByZXR1cm4gbV9zdHlsZVJlc29sdmVyOyB9Ci0KICAgICBzdHJ1Y3Qg
UHJvcGVydHkgewogICAgICAgICBDU1NQcm9wZXJ0eUlEIGlkOwogICAgICAgICBDYXNjYWRlTGV2
ZWwgbGV2ZWw7CkBAIC02OSwxMiArNjAsMTIgQEAgcHVibGljOgogCiAgICAgdm9pZCBhcHBseVBy
b3BlcnRpZXMoaW50IGZpcnN0UHJvcGVydHksIGludCBsYXN0UHJvcGVydHkpOwogICAgIHZvaWQg
YXBwbHlEZWZlcnJlZFByb3BlcnRpZXMoKTsKLQogICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0
aWVzKCk7CiAgICAgdm9pZCBhcHBseUN1c3RvbVByb3BlcnR5KGNvbnN0IFN0cmluZyYgbmFtZSk7
Ci0KICAgICB2b2lkIGFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgQ1NTVmFsdWUmLCBTZWxl
Y3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVs
dCk7CiAKKyAgICBCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSgpIHsgcmV0dXJuICptX2J1aWxk
ZXJTdGF0ZTsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgYnVpbGRDYXNjYWRlKE9wdGlvblNldDxD
YXNjYWRlTGV2ZWw+KTsKICAgICBib29sIGFkZE5vcm1hbE1hdGNoZXMoQ2FzY2FkZUxldmVsKTsK
QEAgLTk3LDExICs4OCw5IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIHJlc29sdmVEaXJlY3Rpb25B
bmRXcml0aW5nTW9kZSgpOwogCi0gICAgU3R5bGVSZXNvbHZlciYgbV9zdHlsZVJlc29sdmVyOwot
CiAgICAgY29uc3QgTWF0Y2hSZXN1bHQmIG1fbWF0Y2hSZXN1bHQ7CiAgICAgY29uc3QgSW5jbHVk
ZWRQcm9wZXJ0aWVzIG1faW5jbHVkZWRQcm9wZXJ0aWVzOwotICAgIAorCiAgICAgVGV4dERpcmVj
dGlvbiBtX2RpcmVjdGlvbjsKICAgICBXcml0aW5nTW9kZSBtX3dyaXRpbmdNb2RlOwogCkBAIC0x
MTEsMTkgKzEwMCwxMCBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxQcm9wZXJ0eSwgOD4gbV9kZWZl
cnJlZFByb3BlcnRpZXM7CiAgICAgSGFzaE1hcDxBdG9tU3RyaW5nLCBQcm9wZXJ0eT4gbV9jdXN0
b21Qcm9wZXJ0aWVzOwogCi0gICAgLy8gU3RhdGUgdG8gdXNlIHdoZW4gYXBwbHlpbmcgcHJvcGVy
dGllcywgdG8ga2VlcCB0cmFjayBvZiB3aGljaCBjdXN0b20gYW5kIGhpZ2gtcHJpb3JpdHkKLSAg
ICAvLyBwcm9wZXJ0aWVzIGhhdmUgYmVlbiByZXNvbHZlZC4KLSAgICBzdHJ1Y3QgQXBwbHlTdGF0
ZSB7Ci0gICAgICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBhcHBsaWVkUHJvcGVydGllcyA9
IHsgfTsKLSAgICAgICAgSGFzaFNldDxTdHJpbmc+IGFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzID0g
eyB9OwotICAgICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMgPSB7IH07Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBpblByb2dyZXNzUHJvcGVydGllc0N1
c3RvbSA9IHsgfTsKLSAgICB9OwotCi0gICAgQXBwbHlTdGF0ZSBtX2FwcGx5U3RhdGU7Ci0KICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlDYXNjYWRlPiBtX2F1dGhvclJvbGxiYWNr
Q2FzY2FkZTsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Y29uc3QgUHJvcGVydHlDYXNjYWRlPiBtX3Vz
ZXJSb2xsYmFja0Nhc2NhZGU7CisKKyAgICBPcHRpb25hbDxCdWlsZGVyU3RhdGU+IG1fYnVpbGRl
clN0YXRlOwogfTsKIAogaW5saW5lIGJvb2wgUHJvcGVydHlDYXNjYWRlOjpoYXNQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIGlkKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVCdWlsZGVyU3RhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVy
U3RhdGUuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44NGFkMGJh
MWQyNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRl
clN0YXRlLmNwcApAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
ICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisg
KiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCisKKyNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKK25hbWVzcGFjZSBTdHlsZSB7CisKK0J1
aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKFByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSwgU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKKyAgICA6IG1fY2FzY2FkZShjYXNjYWRlKQorICAgICwg
bV9zdHlsZU1hcCgqdGhpcykKKyAgICAsIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YShzdHls
ZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKQorICAgICwgbV9z
dHlsZVJlc29sdmVyKHN0eWxlUmVzb2x2ZXIpCisgICAgLCBtX3N0eWxlKCpzdHlsZVJlc29sdmVy
LnN0eWxlKCkpCisgICAgLCBtX3BhcmVudFN0eWxlKCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCkpCisgICAgLCBtX3Jvb3RFbGVtZW50U3R5bGUoKnN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRT
dHlsZSgpKQorICAgICwgbV9kb2N1bWVudChtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkKKyAg
ICAsIG1fZWxlbWVudCgqbV9zdHlsZVJlc29sdmVyLmVsZW1lbnQoKSkKK3sKK30KKworYm9vbCBC
dWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5
bGVSZXNvbHZlci51c2VTVkdab29tUnVsZXMoKTsKK30KKworYm9vbCBCdWlsZGVyU3RhdGU6OnVz
ZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fc3R5bGVSZXNv
bHZlci51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKTsKK30KKworUmVmUHRyPFN0eWxlSW1hZ2U+
IEJ1aWxkZXJTdGF0ZTo6Y3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYgdmFsdWUpCit7CisgICAg
cmV0dXJuIG1fc3R5bGVSZXNvbHZlci5zdHlsZUltYWdlKHZhbHVlKTsKK30KKworYm9vbCBCdWls
ZGVyU3RhdGU6OmNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBG
aWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKQoreworICAgIHJldHVybiBtX3N0eWxlUmVz
b2x2ZXIuY3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgb3V0T3BlcmF0aW9ucyk7Cit9CisK
K0NvbG9yIEJ1aWxkZXJTdGF0ZTo6Y29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJp
bWl0aXZlVmFsdWUmIHZhbHVlLCBib29sIGZvclZpc2l0ZWRMaW5rKSBjb25zdAoreworICAgIHJl
dHVybiBtX3N0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUodmFsdWUsIGZvclZp
c2l0ZWRMaW5rKTsKK30KKwordm9pZCBCdWlsZGVyU3RhdGU6OnNldEZvbnRTaXplKEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBmbG9hdCBzaXplKQoreworICAgIG1fc3R5bGVS
ZXNvbHZlci5zZXRGb250U2l6ZShkZXNjcmlwdGlvbiwgc2l6ZSk7Cit9CisKK30KK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwLi40ODcxNmZlZWIxMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKQEAgLTAsMCArMSwxMTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEuaCIKKyNpbmNsdWRlICJDU1NUb1N0eWxlTWFwLmgiCisjaW5jbHVkZSAiQ2FzY2FkZUxldmVs
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXIu
aCIKKyNpbmNsdWRlIDx3dGYvQml0bWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgU3R5bGVJbWFnZTsKK2NsYXNzIFN0eWxlUmVzb2x2ZXI7CisKK25hbWVzcGFjZSBTdHlsZSB7
CisKK2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKKworY2xhc3MgQnVpbGRlclN0YXRlIHsKK3B1Ymxp
YzoKKyAgICBCdWlsZGVyU3RhdGUoUHJvcGVydHlDYXNjYWRlJiwgU3R5bGVSZXNvbHZlciYpOwor
CisgICAgUHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKCkgeyByZXR1cm4gbV9jYXNjYWRlOyB9Cisg
ICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNvbHZl
cjsgfQorCisgICAgUmVuZGVyU3R5bGUmIHN0eWxlKCkgeyByZXR1cm4gbV9zdHlsZTsgfQorICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBwYXJlbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGFyZW50
U3R5bGU7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcm9vdEVsZW1lbnRTdHlsZTsgfQorCisgICAgY29uc3QgRG9jdW1lbnQmIGRv
Y3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudC5nZXQoKTsgfQorICAgIGNvbnN0IEVs
ZW1lbnQmIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnQuZ2V0KCk7IH0KKworICAg
IHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mJiBmb250RGVz
Y3JpcHRpb24pIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsgfQorICAgIHZvaWQgc2V0Rm9udFNpemUoRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYsIGZsb2F0IHNpemUpOworICAgIHZvaWQgc2V0Wm9vbShmbG9hdCBmKSB7
IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0Wm9vbShmKTsgfQorICAgIHZvaWQgc2V0RWZmZWN0
aXZlWm9vbShmbG9hdCBmKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0RWZmZWN0aXZlWm9v
bShmKTsgfQorICAgIHZvaWQgc2V0V3JpdGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUp
IHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0K
KyAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50YXRpb24gdGV4dE9yaWVudGF0
aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRPcmll
bnRhdGlvbik7IH0KKworICAgIGJvb2wgZm9udERpcnR5KCkgY29uc3QgeyByZXR1cm4gbV9mb250
RGlydHk7IH0KKyAgICB2b2lkIHNldEZvbnREaXJ0eSgpIHsgbV9mb250RGlydHkgPSB0cnVlOyB9
CisgICAgdm9pZCBjbGVhckZvbnREaXJ0eSgpIHsgbV9mb250RGlydHkgPSBmYWxzZTsgfQorCisg
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gbV9zdHlsZS5mb250RGVzY3JpcHRpb24oKTsgfQorICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVz
Y3JpcHRpb24mIHBhcmVudEZvbnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fcGFyZW50U3R5bGUu
Zm9udERlc2NyaXB0aW9uKCk7IH0KKworICAgIC8vIEZJWE1FOiBUaGVzZSBhcmUgbXV0dWFsbHkg
ZXhjbHVzaXZlLCBjbGVhbiB1cCB0aGUgY29kZSB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50Lgor
ICAgIGJvb2wgYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9s
aW5rTWF0Y2ggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7IH0KKyAgICBib29sIGFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRj
aCA9PSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsgfQorCisgICAgYm9vbCB1c2VTVkda
b29tUnVsZXMoKSBjb25zdDsKKyAgICBib29sIHVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpIGNv
bnN0OworICAgIFNjb3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3R5bGVTY29wZU9yZGluYWw7IH0KKworICAgIFJlZlB0cjxTdHlsZUltYWdlPiBjcmVhdGVT
dHlsZUltYWdlKENTU1ZhbHVlJik7CisgICAgYm9vbCBjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNv
bnN0IENTU1ZhbHVlJiwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucyk7CisgICAgQ29s
b3IgY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBib29s
IGZvclZpc2l0ZWRMaW5rID0gZmFsc2UpIGNvbnN0OworCisgICAgY29uc3QgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSYgY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsgfQorICAgIENTU1RvU3R5bGVNYXAmIHN0eWxl
TWFwKCkgeyByZXR1cm4gbV9zdHlsZU1hcDsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9wZXJ0eUNhc2NhZGU7CisKKyAgICBQcm9wZXJ0eUNhc2NhZGUmIG1fY2FzY2FkZTsKKwor
ICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25E
YXRhIG1fY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YTsKKworICAgIC8vIEZJWE1FOiBSZW1vdmUu
CisgICAgU3R5bGVSZXNvbHZlciYgbV9zdHlsZVJlc29sdmVyOworCisgICAgUmVuZGVyU3R5bGUm
IG1fc3R5bGU7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIG1fcGFyZW50U3R5bGU7CisgICAgY29u
c3QgUmVuZGVyU3R5bGUmIG1fcm9vdEVsZW1lbnRTdHlsZTsKKworICAgIFJlZjxjb25zdCBEb2N1
bWVudD4gbV9kb2N1bWVudDsKKyAgICBSZWY8Y29uc3QgRWxlbWVudD4gbV9lbGVtZW50OworCisg
ICAgQml0bWFwPG51bUNTU1Byb3BlcnRpZXM+IG1fYXBwbGllZFByb3BlcnRpZXM7CisgICAgSGFz
aFNldDxTdHJpbmc+IG1fYXBwbGllZEN1c3RvbVByb3BlcnRpZXM7CisgICAgQml0bWFwPG51bUNT
U1Byb3BlcnRpZXM+IG1faW5Qcm9ncmVzc1Byb3BlcnRpZXM7CisgICAgSGFzaFNldDxTdHJpbmc+
IG1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b207CisKKyAgICBDYXNjYWRlTGV2ZWwgbV9jYXNj
YWRlTGV2ZWwgeyB9OworICAgIFNjb3BlT3JkaW5hbCBtX3N0eWxlU2NvcGVPcmRpbmFsIHsgfTsK
KyAgICBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbV9saW5rTWF0Y2ggeyB9OworCisg
ICAgYm9vbCBtX2ZvbnREaXJ0eSB7IGZhbHNlIH07Cit9OworCit9Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382288</attachid>
            <date>2019-10-29 23:47:28 -0700</date>
            <delta_ts>2019-10-30 01:03:57 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylebuilder-state-3.patch</filename>
            <type>text/plain</type>
            <size>296807</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzUyYjZlOTNlNi4uZGRiODk2YTJjMDcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNTUgQEAKKzIwMTktMTAtMjkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYnVpbGRpbmcgc3RhdGUgdG8gYSBjbGFzcyBvZiBpdHMg
b3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IG1vc3Qgb2YgdGhlIHN0YXRlIG5lZWRlZCBmb3IgYXBwbHlpbmcgcHJvcGVydGllcyBmcm9tIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlIGFuZCBQcm9wZXJ0eUNhc2NhZGU6OkFwcGx5U3RhdGUgdG8KKyAg
ICAgICAgbmV3IFN0eWxlOjpCdWlsZGVyU3RhdGUuIFBhc3MgQnVpbGRlclN0YXRlIGFyb3VuZCBp
biBhbGwgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0eWxlIGJ1aWxkaW5nCisgICAgICAgIGlu
c3RlYWQgb2YgU3R5bGVSZXNvbHZlci4KKworICAgICAgICBVbmxpa2UgU3R5bGVSZXNvbHZlciwg
QnVpbGRlclN0YXRlIGlzIGEgc3RhY2stYWxsb2NhdGVkIG9iamVjdCB0aGF0IGV4aXN0cyBkdXJp
bmcgc3R5bGUgYnVpbGRpbmcgb25seS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0
eWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpyb290RWxlbWVudFN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5oOgorICAgICAgICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlVG9rZW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZVJlZmVyZW5j
ZVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzIGNvbnN0KToKKyAgICAgICAgKiBjc3Mv
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3Vz
dG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxk
ZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoT3JBdXRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aFNpemlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGhNYXhTaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGFiU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRDb21wdXRlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRPYmplY3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Qm9yZGVyTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxp
Z24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb25UaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29udGFpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
blNraXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2hhcGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTY3JvbGxTbmFwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNr
U2l6ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRX
b3JkU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRWYXJpYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZH
TGVuZ3RoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFN0cm9rZURhc2hBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1
bHRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0
byk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRTeW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U3BlYWtBcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3RoKToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmVh
dHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGln
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
QWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVZlcnRpY2FsQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZp
ZXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0TGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtp
dExvY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29sb3JTY2hl
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRX
ZWJraXRCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0Qm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVT
aGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0V2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFz
aXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlcklu
Y3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdENvdW50ZXJJbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJSZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVTdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
VmFyaWFudExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVy
aWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1
YnlUZXh0U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQXJlYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVt
cGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1w
bGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9r
ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUp
OgorCisgICAgICAgIEVuc3VyZSB3ZSBhbHdheXMgaGF2ZSBub24tbnVsbCByb290IGVsZW1lbnQg
c3R5bGUgc28gdGhlIGNhc2UgZG9lc24ndCBuZWVkIHNwZWNpYWwgYnJhbmNoZXMuCisKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OnVwZGF0ZUZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJl
c29sdmVyOjphcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSk6CisgICAgICAgICogY3NzL1N0eWxl
UmVzb2x2ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6Omluc3BlY3RvckNT
U09NV3JhcHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNl
dEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHls
ZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6YXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRGb250RGlydHkpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OmZvbnREaXJ0eSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6Zm9udERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpwYXJlbnRGb250RGVzY3JpcHRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldEZvbnRE
ZXNjcmlwdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0Wm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpTdGF0ZTo6c2V0RWZmZWN0aXZlWm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0V3JpdGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFRleHRPcmllbnRhdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6Y2FzY2FkZUxldmVs
IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRl
OjpzZXRDYXNjYWRlTGV2ZWwpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6U3RhdGU6OnN0eWxlU2NvcGVPcmRpbmFsIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRTdHlsZVNjb3BlT3JkaW5hbCk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNv
bHZlcjo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZU1hcCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpmb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6cGFyZW50Rm9udERlc2NyaXB0aW9uKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEZvbnREZXNjcmlw
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzZXRab29t
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnNldEVmZmVjdGl2
ZVpvb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0V3Jp
dGluZ01vZGUpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
VGV4dE9yaWVudGF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvbWFrZXByb3AucGw6Cisg
ICAgICAgIChnZXRBdXRvR2V0dGVyKToKKyAgICAgICAgKGdldEF1dG9TZXR0ZXIpOgorICAgICAg
ICAoZ2V0VmlzaXRlZExpbmtTZXR0ZXIpOgorICAgICAgICAoY29sb3JGcm9tUHJpbWl0aXZlVmFs
dWUpOgorICAgICAgICAoZ2VuZXJhdGVDb2xvclZhbHVlU2V0dGVyKToKKyAgICAgICAgKGhhbmRs
ZUN1cnJlbnRDb2xvclZhbHVlKToKKyAgICAgICAgKGdlbmVyYXRlQW5pbWF0aW9uUHJvcGVydHlJ
bml0aWFsVmFsdWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUlu
aGVyaXRWYWx1ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUFuaW1hdGlvblByb3BlcnR5VmFs
dWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1
ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5oZXJpdFZhbHVl
U2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlcik6
CisgICAgICAgIChnZW5lcmF0ZVNldFZhbHVlU3RhdGVtZW50KToKKyAgICAgICAgKGdlbmVyYXRl
SW5pdGlhbFZhbHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlSW5oZXJpdFZhbHVlU2V0dGVy
KToKKyAgICAgICAgKGdlbmVyYXRlVmFsdWVTZXR0ZXIpOgorICAgICAgICAqIGNzcy9wYXJzZXIv
Q1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VWYWx1ZVdp
dGhWYXJpYWJsZVJlZmVyZW5jZXMpOgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUGFyc2VyLmg6
CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaDoKKyAgICAgICAgKiBo
dG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q2FudmFzUmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpidWlsZGVyU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjphcHBseVN0YXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0NvbnRleHQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9kaXNwbGF5bGlz
dHMvRGlzcGxheUxpc3RJdGVtcy5oOgorICAgICAgICAqIHN0eWxlL0Nhc2NhZGVMZXZlbC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmguCisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6YWxsQ2FzY2FkZUxldmVscyk6CisgICAgICAgICogc3R5bGUvUHJvcGVy
dHlDYXNjYWRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6
OlByb3BlcnR5Q2FzY2FkZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNj
YWRlOjphcHBseVByb3BlcnRpZXNJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rpb25BbmRXcml0
aW5nTW9kZSk6CisgICAgICAgICogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpidWlsZGVyU3RhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGU6OmFsbENhc2NhZGVMZXZlbHMpOiBEZWxldGVkLgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6c3R5bGVSZXNvbHZlcik6IERlbGV0ZWQuCisg
ICAgICAgICogc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3Ro
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0
eWxlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y3JlYXRl
RmlsdGVyT3BlcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
Ojpjb2xvckZyb21QcmltaXRpdmVWYWx1ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZTo6QnVpbGRlclN0YXRlOjpzZXRGb250U2l6ZSk6CisgICAgICAgICogc3R5bGUvU3R5bGVCdWls
ZGVyU3RhdGUuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpjYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnN0eWxl
UmVzb2x2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cGFyZW50U3R5bGUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6cm9vdEVsZW1lbnRT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpkb2N1
bWVudCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjplbGVt
ZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEZv
bnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0V3Jp
dGluZ01vZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c2V0VGV4
dE9yaWVudGF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OmZv
bnREaXJ0eSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpz
ZXRGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Y2xl
YXJGb250RGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6Zm9u
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnBh
cmVudEZvbnREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpzdHlsZVNjb3Bl
T3JkaW5hbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpj
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpCdWlsZGVyU3RhdGU6OnN0eWxlTWFwKToKKwogMjAxOS0xMC0yOSAgUnlvc3VrZSBOaXdhICA8
cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZW1vdmUgSFRNTE1lZGlhRWxlbWVudERlc3Ry
dWN0b3JTY29wZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA0ZTIwOWZlZWFjYy4uZjQ0ODQ3NWU0YTMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3Jl
L1NvdXJjZXMudHh0CkBAIC0yMzQ1LDYgKzIzNDUsNyBAQCBzdHlsZS9DbGFzc0NoYW5nZUludmFs
aWRhdGlvbi5jcHAKIHN0eWxlL0lkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcAogc3R5bGUvSW5saW5l
VGV4dEJveFN0eWxlLmNwcAogc3R5bGUvUHJvcGVydHlDYXNjYWRlLmNwcAorc3R5bGUvU3R5bGVC
dWlsZGVyU3RhdGUuY3BwCiBzdHlsZS9TdHlsZUNoYW5nZS5jcHAKIHN0eWxlL1N0eWxlRm9udFNp
emVGdW5jdGlvbnMuY3BwCiBzdHlsZS9TdHlsZUludmFsaWRhdG9yLmNwcApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDM5OTRjNWY3
NTVhLi41YmUxYjAzN2JlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDg0MCw2ICs0ODQwLDggQEAKIAkJRTRBODE0RTAxQzcz
MzhFQjAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEE4MTRERjFDNzMzOEVCMDBCRjg1QUMgLyog
SWRDaGFuZ2VJbnZhbGlkYXRpb24uaCAqLzsgfTsKIAkJRTRBOEQyMTYyMjU3OERCNzAwQTg0NjND
IC8qIEV2ZW50UmVnaW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFNEE4RDIxNDIyNTc4REEwMDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEFCQUJFNDIzNjFB
MzI5MDBGQTQzNDUgLyogUHJvcGVydHlDYXNjYWRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyogUHJvcGVy
dHlDYXNjYWRlLmggKi87IH07CisJCUU0QUJBQkYzMjM2OEI5NTkwMEZBNDM0NSAvKiBTdHlsZUJ1
aWxkZXJTdGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmggKi87IH07
CisJCUU0QUJBQkY1MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJBQkY0MjM2OEM2RUYwMEZB
NDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCAqLzsgfTsKIAkJRTRBRTdDMTYxN0QxQkI5NTAwMDlGQjMx
IC8qIEVsZW1lbnRJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRBRTdDMTUxN0QxQkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QUU3
QzFBMTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBRTdDMTkxN0QyMzIzNTAw
MDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTRBRkNGQTUwREFGMjlBMzAwRjVGNTVDIC8q
IFVuaXRCZXppZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEU0QUZDRkE0MERBRjI5QTMwMEY1RjU1QyAvKiBVbml0QmV6aWVyLmggKi87IH07CkBAIC0x
NTE3Myw2ICsxNTE3NSw5IEBACiAJCUU0QThEMjE1MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJl
Z2lvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBFdmVudFJlZ2lv
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUJBQkUyMjM2MUEzMjkwMEZB
NDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gUHJvcGVydHlDYXNjYWRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUJB
QkU1MjM2MUEzNDIwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gUHJvcGVydHlDYXNjYWRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
RTRBQkFCRjAyMzY4QjkxODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFN0eWxlQnVpbGRlclN0YXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVpbGRlclN0YXRlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN0eWxlQnVpbGRlclN0YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUU0QUJBQkY0MjM2OEM2RUYwMEZBNDM0NSAvKiBD
YXNjYWRlTGV2ZWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ2FzY2FkZUxl
dmVsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3QzE1MTdEMUJCOTUwMDA5
RkIzMSAvKiBFbGVtZW50SXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gRWxlbWVudEl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUU3
QzE5MTdEMjMyMzUwMDA5RkIzMSAvKiBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFbGVtZW50QW5jZXN0b3JJdGVyYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFNEFGQ0ZBNDBEQUYyOUEzMDBGNUY1NUMgLyogVW5p
dEJlemllci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbml0QmV6aWVyLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yNjkzOSw2ICsyNjk0NCw3IEBACiAJCQlj
aGlsZHJlbiA9ICgKIAkJCQlFNEE4MTRENzFDNzBFMTA1MDBCRjg1QUMgLyogQXR0cmlidXRlQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcCAqLywKIAkJCQlFNEE4MTREOTFDNzBFMTBEMDBCRjg1QUMgLyog
QXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8sCisJCQkJRTRBQkFCRjQyMzY4QzZFRjAw
RkE0MzQ1IC8qIENhc2NhZGVMZXZlbC5oICovLAogCQkJCUU0QTgxNEQ1MUM2REVFOEQwMEJGODVB
QyAvKiBDbGFzc0NoYW5nZUludmFsaWRhdGlvbi5jcHAgKi8sCiAJCQkJRTRBODE0RDMxQzZERUM0
MDAwQkY4NUFDIC8qIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmggKi8sCiAJCQkJRTRBODE0REQx
QzczMzhEMTAwQkY4NUFDIC8qIElkQ2hhbmdlSW52YWxpZGF0aW9uLmNwcCAqLywKQEAgLTI2OTQ3
LDYgKzI2OTUzLDggQEAKIAkJCQkxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4
dEJveFN0eWxlLmggKi8sCiAJCQkJRTRBQkFCRTUyMzYxQTM0MjAwRkE0MzQ1IC8qIFByb3BlcnR5
Q2FzY2FkZS5jcHAgKi8sCiAJCQkJRTRBQkFCRTIyMzYxQTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5
Q2FzY2FkZS5oICovLAorCQkJCUU0QUJBQkYwMjM2OEI5MTgwMEZBNDM0NSAvKiBTdHlsZUJ1aWxk
ZXJTdGF0ZS5jcHAgKi8sCisJCQkJRTRBQkFCRjIyMzY4Qjk1ODAwRkE0MzQ1IC8qIFN0eWxlQnVp
bGRlclN0YXRlLmggKi8sCiAJCQkJRTQwMUUwQTUxQzNDMENGNzAwRjM0RDEwIC8qIFN0eWxlQ2hh
bmdlLmNwcCAqLywKIAkJCQlFNDAxRTBBMzFDM0MwQjgzMDBGMzREMTAgLyogU3R5bGVDaGFuZ2Uu
aCAqLywKIAkJCQlFNEQ1OEVCNjE3QjRFRDg5MDBDQkRDQTggLyogU3R5bGVGb250U2l6ZUZ1bmN0
aW9ucy5jcHAgKi8sCkBAIC0zMDIxMiw2ICszMDIyMCw3IEBACiAJCQkJQkU4RUYwNDUxNzFDOEZG
OTAwOUI0OEMzIC8qIEpTQXVkaW9UcmFja0xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RDEz
NTJBMjI5NEFBMzkwMDgyNzQwMSAvKiBKU0F1dGhlbnRpY2F0aW9uRXh0ZW5zaW9uc0NsaWVudElu
cHV0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTczMDNDMkYyMDA5QjdFMTAwMzU1OTY1IC8qIEpT
QXV0aGVudGljYXRvckFzc2VydGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKKwkJCQlFNEFC
QUJGMzIzNjhCOTU5MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyU3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTU3MzAzQzIyMjAwOUFGMDMwMDM1NTk2NSAvKiBKU0F1dGhlbnRpY2F0b3JBdHRlc3Rh
dGlvblJlc3BvbnNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0JFMTIwMDk1RDYxMDAzNTU5
NjUgLyogSlNBdXRoZW50aWNhdG9yUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3RENF
RDk4MjE0ODgyMTYwMDE2Qjg0NyAvKiBKU0F1dGhlbnRpY2F0b3JUcmFuc3BvcnQuaCBpbiBIZWFk
ZXJzICovLApAQCAtMzE1NDAsNiArMzE1NDksNyBAQAogCQkJCUJDM0JFMTJCMEU5ODA5MkYwMDgz
NTU4OCAvKiBQb3B1cE1lbnVTdHlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzdGNTY3Q0UxNjUz
NThGNDAwRERFOTJCIC8qIFBvcHVwT3BlbmluZ09ic2VydmVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5M0YxOTlERTA4MjQ1RTU5MDAxRTlBQkMgLyogUG9zaXRpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0QUJBQkY1MjM2OEM2RUYwMEZBNDM0NSAvKiBDYXNjYWRlTGV2ZWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTk3NDZBRjJDMTRGNERERTYwMDNFN0E3MCAvKiBQb3NpdGlvbkNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NzQ2QUYzMDE0RjREREU2MDAzRTdBNzAgLyogUG9zaXRpb25F
cnJvckNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkzNzkxOUMyNDBCN0QxODg2MDBBNTY5
OTggLyogUG9zaXRpb25JdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NT
VG9TdHlsZU1hcC5jcHAKaW5kZXggYzg1OTIwYjAxNzMuLjYzM2YyYjU4ZjcwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1RvU3R5bGVNYXAuY3BwCkBAIC00NSwyOSArNDUsMjQgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1DU1NUb1N0eWxlTWFwOjpDU1NUb1N0eWxlTWFwKFN0eWxlUmVzb2x2ZXIq
IHJlc29sdmVyKQotICAgIDogbV9yZXNvbHZlcihyZXNvbHZlcikKK0NTU1RvU3R5bGVNYXA6OkNT
U1RvU3R5bGVNYXAoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQorICAgIDogbV9i
dWlsZGVyU3RhdGUoYnVpbGRlclN0YXRlKQogewogfQogCiBSZW5kZXJTdHlsZSogQ1NTVG9TdHls
ZU1hcDo6c3R5bGUoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jlc29sdmVyLT5zdHlsZSgpOwot
fQotCi1jb25zdCBSZW5kZXJTdHlsZSogQ1NTVG9TdHlsZU1hcDo6cm9vdEVsZW1lbnRTdHlsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnJvb3RFbGVtZW50U3R5bGUoKTsKKyAg
ICByZXR1cm4gJm1fYnVpbGRlclN0YXRlLnN0eWxlKCk7CiB9CiAKIGJvb2wgQ1NTVG9TdHlsZU1h
cDo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+dXNl
U1ZHWm9vbVJ1bGVzKCk7CisgICAgcmV0dXJuIG1fYnVpbGRlclN0YXRlLnVzZVNWR1pvb21SdWxl
cygpOwogfQogCiBSZWZQdHI8U3R5bGVJbWFnZT4gQ1NTVG9TdHlsZU1hcDo6c3R5bGVJbWFnZShD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0eWxlSW1hZ2UodmFs
dWUpOworICAgIHJldHVybiBtX2J1aWxkZXJTdGF0ZS5jcmVhdGVTdHlsZUltYWdlKHZhbHVlKTsK
IH0KIAogdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIEZpbGxMYXllciYgbGF5ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKQEAg
LTIxNCw3ICsyMDksNyBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyJiBsYXllciwgY29ucwogICAgICAgICBicmVhazsK
ICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQoZmlsbFNpemUudHlwZSA9PSBGaWxsU2l6ZVR5
cGU6OlNpemUpOwotICAgICAgICBpZiAoIWNvbnZlcnRUb0xlbmd0aFNpemUocHJpbWl0aXZlVmFs
dWUsIG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBmaWxs
U2l6ZS5zaXplKSkKKyAgICAgICAgaWYgKCFjb252ZXJ0VG9MZW5ndGhTaXplKHByaW1pdGl2ZVZh
bHVlLCBtX2J1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIGZpbGxTaXpl
LnNpemUpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0y
MzYsOSArMjMxLDkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWFBvc2l0aW9uKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyJiBsYXllciwKICAgICBMZW5ndGggbGVuZ3Ro
OwogICAgIGlmIChwYWlyKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblggfHwgcHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgpOwotICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgoKm1fcmVzb2x2ZXIsICpwYWlyLT5zZWNv
bmQoKSk7CisgICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExl
bmd0aChtX2J1aWxkZXJTdGF0ZSwgKnBhaXItPnNlY29uZCgpKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25l
bnRYKCptX3Jlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WChtX2J1aWxkZXJTdGF0ZSwgdmFsdWUp
OwogCiAgICAgbGF5ZXIuc2V0WFBvc2l0aW9uKGxlbmd0aCk7CiAgICAgaWYgKHBhaXIpCkBAIC0y
NjAsOSArMjU1LDkgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBGaWxsWVBvc2l0aW9uKENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyJiBsYXllciwKICAgICBMZW5ndGggbGVuZ3Ro
OwogICAgIGlmIChwYWlyKSB7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQocHJvcGVydHlJRCwgcHJv
cGVydHlJRCA9PSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblkgfHwgcHJvcGVydHlJRCA9
PSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblkpOwotICAgICAgICBsZW5ndGggPSBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgoKm1fcmVzb2x2ZXIsICpwYWlyLT5zZWNv
bmQoKSk7CisgICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExl
bmd0aChtX2J1aWxkZXJTdGF0ZSwgKnBhaXItPnNlY29uZCgpKTsKICAgICB9IGVsc2UKLSAgICAg
ICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25l
bnRZKCptX3Jlc29sdmVyLCB2YWx1ZSk7CisgICAgICAgIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WShtX2J1aWxkZXJTdGF0ZSwgdmFsdWUp
OwogICAgIAogICAgIGxheWVyLnNldFlQb3NpdGlvbihsZW5ndGgpOwogICAgIGlmIChwYWlyKQpA
QCAtNDA5LDcgKzQwNCw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwQW5pbWF0aW9uTmFtZShB
bmltYXRpb24mIGxheWVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIGxheWVyLnNldElzTm9u
ZUFuaW1hdGlvbih0cnVlKTsKICAgICBlbHNlCi0gICAgICAgIGxheWVyLnNldE5hbWUocHJpbWl0
aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSwgbV9yZXNvbHZlci0+c3RhdGUoKS5zdHlsZVNjb3BlT3Jk
aW5hbCgpKTsKKyAgICAgICAgbGF5ZXIuc2V0TmFtZShwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1
ZSgpLCBtX2J1aWxkZXJTdGF0ZS5zdHlsZVNjb3BlT3JkaW5hbCgpKTsKIH0KIAogdm9pZCBDU1NU
b1N0eWxlTWFwOjptYXBBbmltYXRpb25QbGF5U3RhdGUoQW5pbWF0aW9uJiBsYXllciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQpAQCAtNTkzLDcgKzU4OCw3IEBAIExlbmd0aEJveCBDU1NUb1N0eWxl
TWFwOjptYXBOaW5lUGllY2VJbWFnZVF1YWQoQ1NTVmFsdWUmIHZhbHVlKQogICAgICAgICByZXR1
cm4gTGVuZ3RoQm94KCk7CiAKICAgICAvLyBHZXQgb3VyIHpvb20gdmFsdWUuCi0gICAgQ1NTVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHVzZVNWR1pvb21SdWxlcygpID8g
bV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhB
ZGp1c3RlZFpvb20oMS4wZikgOiBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKTsKKyAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRh
ID0gdXNlU1ZHWm9vbVJ1bGVzKCkgPyBtX2J1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikgOiBtX2J1aWxkZXJTdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICAvLyBSZXRyaWV2ZSB0aGUgcHJpbWl0aXZl
IHZhbHVlLgogICAgIGF1dG8mIGJvcmRlcldpZHRocyA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1h
cC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaAppbmRleCA0ZmIyOWE5ZDNh
Ni4uYTFjNDQyMWJhYjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxl
TWFwLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1RvU3R5bGVNYXAuaApAQCAtMzQsMTQg
KzM0LDE3IEBAIGNsYXNzIExlbmd0aEJveDsKIGNsYXNzIE5pbmVQaWVjZUltYWdlOwogY2xhc3Mg
UmVuZGVyU3R5bGU7CiBjbGFzcyBTdHlsZUltYWdlOwotY2xhc3MgU3R5bGVSZXNvbHZlcjsKKwor
bmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KIAogY2xhc3MgQ1NTVG9T
dHlsZU1hcCB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ1NTVG9TdHlsZU1hcCk7CiAgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1YmxpYzoKLSAgICBDU1NUb1N0eWxlTWFwKFN0
eWxlUmVzb2x2ZXIqKTsKKyAgICBDU1NUb1N0eWxlTWFwKFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsK
IAogICAgIHZvaWQgbWFwRmlsbEF0dGFjaG1lbnQoQ1NTUHJvcGVydHlJRCwgRmlsbExheWVyJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKICAgICB2b2lkIG1hcEZpbGxDbGlwKENTU1Byb3BlcnR5SUQsIEZp
bGxMYXllciYsIGNvbnN0IENTU1ZhbHVlJik7CkBAIC03MiwxOSArNzUsMTIgQEAgcHVibGljOgog
ICAgIHZvaWQgbWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQoQ1NTVmFsdWUmLCBOaW5lUGllY2VJbWFn
ZSYpOwogCiBwcml2YXRlOgotICAgIC8vIEZJWE1FOiBUaGVzZSBhY2Nlc3NvcnMgc2hvdWxkIGJl
IHJlcGxhY2VkIGJ5IGEgUmVzb2x2ZVN0YXRlIG9iamVjdAotICAgIC8vIHNpbWlsYXIgdG8gaG93
IFBhaW50SW5mby9MYXlvdXRTdGF0ZSBjYWNoZSB2YWx1ZXMgbmVlZGVkIGZvcgotICAgIC8vIHRo
ZSBjdXJyZW50IHBhaW50L2xheW91dC4KICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdDsK
LSAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0OwogICAgIGJv
b2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7Ci0KLSAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQg
YmUgcGFydCBvZiBzb21lIHNvcnQgb2YgU3R5bGVJbWFnZUNhY2hlIG9iamVjdCB3aGljaAotICAg
IC8vIGlzIGhlbGQgYnkgdGhlIFN0eWxlUmVzb2x2ZXIsIGFuZCBsaWtlbHkgcHJvdmlkZWQgdG8g
dGhpcyBvYmplY3QKLSAgICAvLyBkdXJpbmcgdGhlIHJlc29sdmUuCiAgICAgUmVmUHRyPFN0eWxl
SW1hZ2U+IHN0eWxlSW1hZ2UoQ1NTVmFsdWUmKTsKIAotICAgIFN0eWxlUmVzb2x2ZXIqIG1fcmVz
b2x2ZXI7CisgICAgLy8gRklYTUU6IFRoaXMgdHlwZSBjYW4gbWVyZ2UgaW50byBCdWlsZGVyU3Rh
dGUuCisgICAgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgbV9idWlsZGVyU3RhdGU7CiB9OwogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFy
aWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVS
ZWZlcmVuY2VWYWx1ZS5jcHAKaW5kZXggZjg0YjhiNmU5YjkuLmZlNjBkY2ZiZmI0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuY3BwCkBAIC00
NSwyMSArNDUsMjEgQEAgU3RyaW5nIENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU6OmN1c3RvbUNT
U1RleHQoKSBjb25zdAogICAgIHJldHVybiBtX3N0cmluZ1ZhbHVlOwogfQogCi1zdGF0aWMgYm9v
bCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2Vy
VG9rZW4+JiwgU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOworc3RhdGljIGJvb2wgcmVzb2x2ZVRv
a2VuUmFuZ2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYsIFN0
eWxlOjpCdWlsZGVyU3RhdGUmKTsKIAotc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlRmFsbGJh
Y2soQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVz
dWx0LCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQorc3RhdGljIGJvb2wgcmVzb2x2
ZVZhcmlhYmxlRmFsbGJhY2soQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1Bh
cnNlclRva2VuPiYgcmVzdWx0LCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
CiAgICAgaWYgKHJhbmdlLmF0RW5kKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBBU1NF
UlQocmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21tYVRva2VuKTsKICAgICByYW5nZS5jb25zdW1l
KCk7Ci0gICAgcmV0dXJuIHJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXN1bHQsIGNhc2NhZGUp
OworICAgIHJldHVybiByZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzdWx0LCBidWlsZGVyU3Rh
dGUpOwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NTUGFyc2Vy
VG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlclRva2VuPiYgcmVzdWx0LCBTdHlsZTo6
UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQorc3RhdGljIGJvb2wgcmVzb2x2ZVZhcmlhYmxlUmVm
ZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4m
IHJlc3VsdCwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8m
IHJlZ2lzdGVyZWRQcm9wZXJ0aWVzID0gY2FzY2FkZS5zdHlsZVJlc29sdmVyKCkuZG9jdW1lbnQo
KS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKTsKLSAgICBhdXRvJiBzdHlsZSA9
ICpjYXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5zdHlsZSgpOworICAgIGF1dG8mIHJlZ2lzdGVyZWRQ
cm9wZXJ0aWVzID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3Rv
bVByb3BlcnR5U2V0KCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKTsK
IAogICAgIHJhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgQVNTRVJUKHJhbmdlLnBlZWso
KS50eXBlKCkgPT0gSWRlbnRUb2tlbik7CkBAIC02NywxMSArNjcsMTEgQEAgc3RhdGljIGJvb2wg
cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3Rv
cjxDU1NQYXJzZXIKICAgICBBU1NFUlQocmFuZ2UuYXRFbmQoKSB8fCAocmFuZ2UucGVlaygpLnR5
cGUoKSA9PSBDb21tYVRva2VuKSk7CiAKICAgICAvLyBBcHBseSB0aGlzIHZhcmlhYmxlIGZpcnN0
LCBpbiBjYXNlIGl0IGlzIHN0aWxsIHVucmVzb2x2ZWQKLSAgICBjYXNjYWRlLmFwcGx5Q3VzdG9t
UHJvcGVydHkodmFyaWFibGVOYW1lKTsKKyAgICBidWlsZGVyU3RhdGUuY2FzY2FkZSgpLmFwcGx5
Q3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1lKTsKIAogICAgIC8vIEFwcGx5IGZhbGxiYWNrIHRv
IGRldGVjdCBjeWNsZXMKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IGZhbGxiYWNrUmVzdWx0
OwotICAgIGJvb2wgZmFsbGJhY2tSZXR1cm4gPSByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQ
YXJzZXJUb2tlblJhbmdlKHJhbmdlKSwgZmFsbGJhY2tSZXN1bHQsIGNhc2NhZGUpOworICAgIGJv
b2wgZmFsbGJhY2tSZXR1cm4gPSByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tl
blJhbmdlKHJhbmdlKSwgZmFsbGJhY2tSZXN1bHQsIGJ1aWxkZXJTdGF0ZSk7CiAKICAgICBhdXRv
KiBwcm9wZXJ0eSA9IHN0eWxlLmdldEN1c3RvbVByb3BlcnR5KHZhcmlhYmxlTmFtZSk7CiAKQEAg
LTkzLDI0ICs5MywyNCBAQCBzdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NT
UGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdl
IHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIFN0eWxlOjpQcm9wZXJ0eUNh
c2NhZGUmIGNhc2NhZGUpCitzdGF0aWMgYm9vbCByZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJU
b2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBib29sIHN1Y2Nlc3MgPSB0cnVlOwog
ICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSkgewogICAgICAgICBpZiAocmFuZ2UucGVlaygpLmZ1
bmN0aW9uSWQoKSA9PSBDU1NWYWx1ZVZhciB8fCByYW5nZS5wZWVrKCkuZnVuY3Rpb25JZCgpID09
IENTU1ZhbHVlRW52KQotICAgICAgICAgICAgc3VjY2VzcyAmPSByZXNvbHZlVmFyaWFibGVSZWZl
cmVuY2UocmFuZ2UuY29uc3VtZUJsb2NrKCksIHJlc3VsdCwgY2FzY2FkZSk7CisgICAgICAgICAg
ICBzdWNjZXNzICY9IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShyYW5nZS5jb25zdW1lQmxvY2so
KSwgcmVzdWx0LCBidWlsZGVyU3RhdGUpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKHJhbmdlLmNvbnN1bWUoKSk7CiAgICAgfQogICAgIHJldHVybiBzdWNjZXNzOwog
fQogCi1SZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlOjpy
ZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUp
IGNvbnN0CitSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
OjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSkgY29uc3QKIHsKICAgICBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+IHJlc29sdmVkVG9rZW5z
OwogICAgIENTU1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UgPSBtX2RhdGEtPnRva2VuUmFuZ2UoKTsK
IAotICAgIGlmICghcmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc29sdmVkVG9rZW5zLCBjYXNj
YWRlKSkKKyAgICBpZiAoIXJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXNvbHZlZFRva2Vucywg
YnVpbGRlclN0YXRlKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICByZXR1cm4gQ1NT
VmFyaWFibGVEYXRhOjpjcmVhdGUocmVzb2x2ZWRUb2tlbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmgKaW5kZXggOWExMjBjMzY3NzQuLmM1NmYz
YmUzMjViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVu
Y2VWYWx1ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZh
bHVlLmgKQEAgLTQyLDcgKzQyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ1NTUGFy
c2VyVG9rZW5SYW5nZTsKIAogbmFtZXNwYWNlIFN0eWxlIHsKLWNsYXNzIFByb3BlcnR5Q2FzY2Fk
ZTsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKIH0KIAogY2xhc3MgQ1NTVmFyaWFibGVSZWZlcmVuY2VW
YWx1ZSA6IHB1YmxpYyBDU1NWYWx1ZSB7CkBAIC01NSw3ICs1NSw3IEBAIHB1YmxpYzoKICAgICBi
b29sIGVxdWFscyhjb25zdCBDU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlJiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV9kYXRhLmdldCgpID09IG90aGVyLm1fZGF0YS5nZXQoKTsgfQogICAgIFN0cmlu
ZyBjdXN0b21DU1NUZXh0KCkgY29uc3Q7CiAKLSAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiBy
ZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmKSBjb25zdDsK
KyAgICBSZWZQdHI8Q1NTVmFyaWFibGVEYXRhPiByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKFN0
eWxlOjpCdWlsZGVyU3RhdGUmKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBDU1NWYXJpYWJsZVJl
ZmVyZW5jZVZhbHVlKFJlZjxDU1NWYXJpYWJsZURhdGE+JiYgZGF0YSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcAppbmRleCAwZGY2
YWFlOTZmMC4uMWU3YTUzYjE5OTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9ET01D
U1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvRE9N
Q1NTUmVnaXN0ZXJDdXN0b21Qcm9wZXJ0eS5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRl
ICJDU1NUb2tlbml6ZXIuaCIKICNpbmNsdWRlICJET01DU1NOYW1lc3BhY2UuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlByb3BlcnR5Q2FzY2FkZS5oIgogI2luY2x1ZGUgIlN0
eWxlQnVpbGRlckNvbnZlcnRlci5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgog
CkBAIC01MSw3ICs1Miw2IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1JlZ2lzdGVyQ3VzdG9t
UHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAgICAgICAgIC8vIFdl
IG5lZWQgdG8gaW5pdGlhbGl6ZSB0aGlzIHNvIHRoYXQgd2UgY2FuIHN1Y2Nlc3NmdWxseSBwYXJz
ZSBjb21wdXRhdGlvbmFsbHkgZGVwZW5kZW50IHZhbHVlcyAobGlrZSBlbSB1bml0cykuCiAgICAg
ICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IG5lZWQgdGhlIHZhbHVlcyB0byBiZSBhY2N1cmF0ZSwg
c2luY2UgdGhleSB3aWxsIGJlIHJlamVjdGVkIGxhdGVyIGFueXdheQogICAgICAgICBzdHlsZVJl
c29sdmVyLmFwcGx5UHJvcGVydHlUb1N0eWxlKENTU1Byb3BlcnR5SW52YWxpZCwgbnVsbHB0ciwg
c3R5bGVSZXNvbHZlci5kZWZhdWx0U3R5bGVGb3JFbGVtZW50KCkpOwotICAgICAgICBzdHlsZVJl
c29sdmVyLnVwZGF0ZUZvbnQoKTsKIAogICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGRl
cGVuZGVuY2llczsKICAgICAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0
b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGRlc2NyaXB0b3Iuc3ludGF4LCBmYWxzZSwgZGVw
ZW5kZW5jaWVzLCB0b2tlbml6ZXIudG9rZW5SYW5nZSgpLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0
KCkpOwpAQCAtNTksNyArNTksOSBAQCBFeGNlcHRpb25Pcjx2b2lkPiBET01DU1NSZWdpc3RlckN1
c3RvbVByb3BlcnR5OjpyZWdpc3RlclByb3BlcnR5KERvY3VtZW50JiBkb2N1bQogICAgICAgICBp
ZiAoIWRlcGVuZGVuY2llcy5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgU3ludGF4RXJyb3IsICJUaGUgZ2l2ZW4gaW5pdGlhbCB2YWx1ZSBtdXN0IGJlIGNvbXB1dGF0
aW9uYWxseSBpbmRlcGVuZGVudC4iIH07CiAKLSAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NTUHJv
cGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3IubmFt
ZSwgZGVzY3JpcHRvci5zeW50YXgsIHRva2VuaXplci50b2tlblJhbmdlKCksIHN0eWxlUmVzb2x2
ZXIsIHN0cmljdENTU1BhcnNlckNvbnRleHQoKSk7CisgICAgICAgIE1hdGNoUmVzdWx0IG1hdGNo
UmVzdWx0OworICAgICAgICBTdHlsZTo6UHJvcGVydHlDYXNjYWRlIGR1bW15Q2FzY2FkZShzdHls
ZVJlc29sdmVyLCBtYXRjaFJlc3VsdCwgeyB9KTsKKyAgICAgICAgaW5pdGlhbFZhbHVlID0gQ1NT
UHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGRlc2NyaXB0b3Iu
bmFtZSwgZGVzY3JpcHRvci5zeW50YXgsIHRva2VuaXplci50b2tlblJhbmdlKCksIGR1bW15Q2Fz
Y2FkZS5idWlsZGVyU3RhdGUoKSwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKIAogICAgICAg
ICBpZiAoIWluaXRpYWxWYWx1ZSB8fCAhaW5pdGlhbFZhbHVlLT5pc1Jlc29sdmVkKCkpCiAgICAg
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU3ludGF4RXJyb3IsICJUaGUgZ2l2ZW4gaW5pdGlh
bCB2YWx1ZSBkb2VzIG5vdCBwYXJzZSBmb3IgdGhlIGdpdmVuIHN5bnRheC4iIH07CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVCdWlsZGVyLmgKaW5kZXggOGVlNTgzZWQxN2UuLjY0OTE4YWM3OWUxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvY3NzL1N0eWxlQnVpbGRlci5oCkBAIC0zMCwxNCArMzAsMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi1zdHJ1Y3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5OwogY2xhc3MgQ1NT
VmFsdWU7Ci1jbGFzcyBTdHlsZVJlc29sdmVyOwogc3RydWN0IENTU1JlZ2lzdGVyZWRDdXN0b21Q
cm9wZXJ0eTsKIAorbmFtZXNwYWNlIFN0eWxlIHsKK2NsYXNzIEJ1aWxkZXJTdGF0ZTsKK30KKwog
Y2xhc3MgU3R5bGVCdWlsZGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYsIGJvb2wgaXNJbml0
aWFsLCBib29sIGlzSW5oZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Kik7
CisgICAgc3RhdGljIHZvaWQgYXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBTdHlsZTo6QnVp
bGRlclN0YXRlJiwgQ1NTVmFsdWUmLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNv
bnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSopOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZl
cnRlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCmluZGV4
IDA4OTk1N2QyMzZjLi5iYjVjYTY0MDM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1
aWxkZXJDb252ZXJ0ZXIuaApAQCAtNTEsNyArNTEsNyBAQAogI2luY2x1ZGUgIlJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaCIKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJT
ZXR0aW5ncy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlICJTdHlsZUJ1
aWxkZXJTdGF0ZS5oIgogI2luY2x1ZGUgIlN0eWxlU2Nyb2xsU25hcFBvaW50cy5oIgogI2luY2x1
ZGUgIlRhYlNpemUuaCIKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgpAQCAtNjMsMTA3ICs2Mywx
MDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gTm90ZSB0aGF0IHdlIGFzc3VtZSB0aGUgQ1NT
IHBhcnNlciBvbmx5IGFsbG93cyB2YWxpZCBDU1NWYWx1ZSB0eXBlcy4KIGNsYXNzIFN0eWxlQnVp
bGRlckNvbnZlcnRlciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3Ro
KGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5n
dGggY29udmVydExlbmd0aE9yQXV0byhjb25zdCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3QgU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVu
Z3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAg
IHN0YXRpYyBUYWJTaXplIGNvbnZlcnRUYWJTaXplKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRD
b21wdXRlZExlbmd0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBmbG9hdCBjb252ZXJ0U3BhY2luZyhTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoU2l6ZSBjb252
ZXJ0UmFkaXVzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBM
ZW5ndGhQb2ludCBjb252ZXJ0T2JqZWN0UG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gY29udmVydFRl
eHREZWNvcmF0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXIoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVy
dE51bWJlck9yQXV0byhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgc2hvcnQgY29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIE5p
bmVQaWVjZUltYWdlIGNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUm
KTsKLSAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgTmluZVBpZWNlSW1hZ2UgY29u
dmVydEJvcmRlck1hc2soU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8
Q1NTUHJvcGVydHlJRD4gc3RhdGljIFJlZlB0cjxTdHlsZUltYWdlPiBjb252ZXJ0U3R5bGVJbWFn
ZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0
aW9ucyBjb252ZXJ0VHJhbnNmb3JtKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aChjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRl
JiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhPckF1
dG8oY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoU2l6aW5nKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aE1heFNp
emluZyhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgVGFiU2l6ZSBjb252ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252
ZXJ0Q29tcHV0ZWRMZW5ndGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydExpbmVXaWR0aChTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgZmxvYXQgY29u
dmVydFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIExlbmd0aFNpemUgY29udmVydFJhZGl1cyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoUG9pbnQgY29udmVydE9iamVjdFBvc2l0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBP
cHRpb25TZXQ8VGV4dERlY29yYXRpb24+IGNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dGF0aWMgVCBjb252ZXJ0TnVtYmVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXJPckF1
dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIHNo
b3J0IGNvbnZlcnRXZWJraXRIeXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBO
aW5lUGllY2VJbWFnZSBjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENT
U1ZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIE5pbmVQaWVjZUlt
YWdlIGNvbnZlcnRCb3JkZXJNYXNrKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwor
ICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBSZWZQdHI8U3R5bGVJbWFnZT4gY29u
dmVydFN0eWxlSW1hZ2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIFRyYW5zZm9ybU9wZXJhdGlvbnMgY29udmVydFRyYW5zZm9ybShTdHlsZTo6QnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKLSAgICBz
dGF0aWMgU3R5bGVDb2xvclNjaGVtZSBjb252ZXJ0Q29sb3JTY2hlbWUoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0eWxlQ29sb3JTY2hlbWUgY29udmVydENv
bG9yU2NoZW1lKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlm
Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yQXV0byhTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJp
bmdPck5vbmUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9w
dGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gY29udmVydFRleHRFbXBoYXNpc1Bvc2l0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0QWxpZ25N
b2RlIGNvbnZlcnRUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0g
ICAgc3RhdGljIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gY29udmVydENsaXBQYXRoKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZXNpemUgY29udmVydFJl
c2l6ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgaW50IGNv
bnZlcnRNYXJxdWVlUmVwZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgaW50IGNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZjxRdW90ZXNEYXRhPiBjb252ZXJ0UXVvdGVzKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5l
UG9zaXRpb24gY29udmVydFRleHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29u
c3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVGV4dFVuZGVybGluZU9mZnNldCBjb252ZXJ0VGV4
dFVuZGVybGluZU9mZnNldChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgVGV4dERlY29yYXRpb25UaGlja25lc3MgY29udmVydFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8
U3R5bGVSZWZsZWN0aW9uPiBjb252ZXJ0UmVmbGVjdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgSW50U2l6ZSBjb252ZXJ0SW5pdGlhbExldHRlcihTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgZmxvYXQgY29udmVydFRl
eHRTdHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgT3B0aW9uU2V0PExpbmVCb3hDb250YWluPiBjb252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVj
b3JhdGlvblNraXA+IGNvbnZlcnRUZXh0RGVjb3JhdGlvblNraXAoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlZlB0cjxTaGFwZVZhbHVlPiBjb252ZXJ0U2hh
cGVWYWx1ZShTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNv
bnZlcnRTdHJpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5nT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFN0cmluZ09yTm9uZShT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9u
U2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBjb252ZXJ0VGV4dEVtcGhhc2lzUG9zaXRpb24oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRBbGln
bk1vZGUgY29udmVydFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmKTsKKyAgICBzdGF0aWMgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBjb252ZXJ0Q2xpcFBh
dGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJl
c2l6ZSBjb252ZXJ0UmVzaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVT
cGVlZChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
UmVmPFF1b3Rlc0RhdGE+IGNvbnZlcnRRdW90ZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBjb252ZXJ0VGV4
dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lT2Zmc2V0IGNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zm
c2V0KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBU
ZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBjb252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFJlZlB0cjxT
dHlsZVJlZmxlY3Rpb24+IGNvbnZlcnRSZWZsZWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBJbnRTaXplIGNvbnZlcnRJbml0aWFsTGV0dGVy
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBmbG9h
dCBjb252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8TGluZUJveENvbnRhaW4+IGNvbnZlcnRMaW5l
Qm94Q29udGFpbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uU2tpcD4gY29udmVydFRleHREZWNvcmF0aW9u
U2tpcChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFNoYXBlVmFsdWU+IGNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCi0gICAgc3RhdGljIFNj
cm9sbFNuYXBUeXBlIGNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU2Nyb2xsU25hcEFsaWduIGNvbnZlcnRTY3JvbGxTbmFw
QWxpZ24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFNjcm9s
bFNuYXBUeXBlIGNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU2Nyb2xsU25hcEFsaWduIGNvbnZlcnRTY3JvbGxT
bmFwQWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYK
LSAgICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBjb252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVmVjdG9yPEdyaWRUcmFja1NpemU+
IGNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
KTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8R3JpZFBvc2l0aW9uPiBjb252ZXJ0R3JpZFBvc2l0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBHcmlkQXV0b0Zs
b3cgY29udmVydEdyaWRBdXRvRmxvdyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPGZsb2F0PiBjb252
ZXJ0UGVyc3BlY3RpdmUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlv
bnM+IGNvbnZlcnRGaWx0ZXJPcGVyYXRpb25zKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBWZWN0b3I8R3Jp
ZFRyYWNrU2l6ZT4gY29udmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxHcmlkUG9zaXRpb24+IGNv
bnZlcnRHcmlkUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIEdyaWRBdXRvRmxvdyBjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+
IGNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8ZmxvYXQ+IGNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZTo6
QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8TGVu
Z3RoPiBjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gY29udmVy
dEZpbHRlck9wZXJhdGlvbnMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0VG91Y2hD
YWxsb3V0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBib29s
IGNvbnZlcnRUb3VjaENhbGxvdXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CiAjZW5kaWYKICNpZiBFTkFCTEUoVE9VQ0hfRVZFTlRTKQotICAgIHN0YXRpYyBDb2xvciBj
b252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIENvbG9yIGNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShQT0lOVEVSX0VW
RU5UUykKLSAgICBzdGF0aWMgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBjb252ZXJ0VG91Y2hBY3Rp
b24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNl
dDxUb3VjaEFjdGlvbj4gY29udmVydFRvdWNoQWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19U
T1VDSCkKLSAgICBzdGF0aWMgYm9vbCBjb252ZXJ0T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGJvb2wgY29udmVydE92ZXJmbG93
U2Nyb2xsaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlm
Ci0gICAgc3RhdGljIEZvbnRGZWF0dXJlU2V0dGluZ3MgY29udmVydEZvbnRGZWF0dXJlU2V0dGlu
Z3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRGZWF0
dXJlU2V0dGluZ3MgY29udmVydEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252
ZXJ0Rm9udFdlaWdodEZyb21WYWx1ZShjb25zdCBDU1NWYWx1ZSYpOwogICAgIHN0YXRpYyBGb250
U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRTdHJldGNoRnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVl
Jik7CiAgICAgc3RhdGljIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gY29udmVydEZvbnRT
dHlsZUZyb21WYWx1ZShjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBGb250U2VsZWN0aW9u
VmFsdWUgY29udmVydEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7
Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0cmV0Y2goU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1
ZSBjb252ZXJ0Rm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBGb250U2VsZWN0aW9uVmFsdWUgY29udmVydEZvbnRXZWlnaHQoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1
ZSBjb252ZXJ0Rm9udFN0cmV0Y2goU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0eWxlKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi0gICAgc3RhdGljIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBjb252ZXJ0Rm9udFZhcmlh
dGlvblNldHRpbmdzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBGb250VmFyaWF0aW9uU2V0dGluZ3MgY29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0YXRpYyBT
VkdMZW5ndGhWYWx1ZSBjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFNW
R0xlbmd0aFZlY3RvcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0
aWMgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U3Ryb2tlRGFzaEFycmF5KFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBQYWludE9yZGVyIGNvbnZlcnRQ
YWludE9yZGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBm
bG9hdCBjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTVkdVUklSZWZlcmVuY2UoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIENvbG9yIGNvbnZlcnRTVkdDb2xvcihTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3R5bGVTZWxmQWxpZ25tZW50
RGF0YSBjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29u
dmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYp
OwotICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0
aW9uIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRMaW5lSGVpZ2h0
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYsIGZsb2F0IG11bHRpcGxpZXIgPSAxLmYp
OwotICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTVkdMZW5ndGhWYWx1ZSBjb252
ZXJ0U1ZHTGVuZ3RoVmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gY29udmVydFNWR0xlbmd0aFZlY3Rv
cihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVmVj
dG9yPFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U3Ryb2tlRGFzaEFycmF5KFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBQYWludE9yZGVyIGNvbnZlcnRQ
YWludE9yZGVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBmbG9hdCBjb252ZXJ0T3BhY2l0eShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTVkdVUklSZWZlcmVuY2UoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIENvbG9yIGNvbnZl
cnRTVkdDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVu
dERhdGEoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgY29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHbHlwaE9y
aWVudGF0aW9uIGNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHbHlwaE9yaWVudGF0aW9uIGNvbnZlcnRHbHlw
aE9yaWVudGF0aW9uT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYsIGZsb2F0IG11bHRpcGxpZXIgPSAxLmYpOwor
ICAgIHN0YXRpYyBGb250U3ludGhlc2lzIGNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIAotICAgIHN0YXRpYyBCcmVha0JldHdl
ZW4gY29udmVydFBhZ2VCcmVha0JldHdlZW4oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
Jik7Ci0gICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRQYWdlQnJlYWtJbnNpZGUoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEJyZWFrQmV0d2VlbiBjb252
ZXJ0Q29sdW1uQnJlYWtCZXR3ZWVuKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0Q29sdW1uQnJlYWtJbnNpZGUoU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEJyZWFrQmV0d2VlbiBjb252ZXJ0
UGFnZUJyZWFrQmV0d2VlbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydFBhZ2VCcmVha0luc2lkZShTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtCZXR3ZWVuIGNv
bnZlcnRDb2x1bW5CcmVha0JldHdlZW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJik7CisgICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRDb2x1bW5CcmVha0luc2lkZShT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyBPcHRp
b25TZXQ8SGFuZ2luZ1B1bmN0dWF0aW9uPiBjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxl
UmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25TZXQ8SGFuZ2lu
Z1B1bmN0dWF0aW9uPiBjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogCi0gICAgc3RhdGljIE9wdGlvblNldDxTcGVha0FzPiBj
b252ZXJ0U3BlYWtBcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgT3B0aW9uU2V0PFNwZWFrQXM+IGNvbnZlcnRTcGVha0FzKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOwogCi0gICAgc3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25D
b21wb25lbnRYKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBM
ZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFgoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBj
b252ZXJ0UG9zaXRpb25Db21wb25lbnRZKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYpOwogCi0gICAgc3RhdGljIEdhcExlbmd0aCBjb252ZXJ0R2FwTGVuZ3RoKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBHYXBMZW5ndGggY29udmVydEdh
cExlbmd0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFN0eWxlQnVpbGRlckN1c3RvbTsKQEAgLTE3Miw3ICsx
NzIsNyBAQCBwcml2YXRlOgogICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRp
b24+IHZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAg
ICAgc3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IHZhbHVlVG9EZWNvcmF0aW9u
U2tpcChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NO
QVApCi0gICAgc3RhdGljIExlbmd0aCBwYXJzZVNuYXBDb29yZGluYXRlKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggcGFyc2VTbmFwQ29vcmRpbmF0
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICNlbmRpZgogCiAjaWYg
RU5BQkxFKERBUktfTU9ERV9DU1MpCkBAIC0xODAsMjMgKzE4MCwyMyBAQCBwcml2YXRlOgogI2Vu
ZGlmCiAKICAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChj
b25zdCBMZW5ndGgmKTsKLSAgICB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlEPiBzdGF0
aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudChTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTUHJpbWl0aXZlVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NWYWx1ZUlELCBDU1NWYWx1ZUlE
PiBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudChTdHlsZTo6QnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmKTsKIAotICAgIHN0YXRpYyBHcmlkTGVuZ3Ro
IGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBTdHlsZVJl
c29sdmVyJik7Ci0gICAgc3RhdGljIEdyaWRUcmFja1NpemUgY3JlYXRlR3JpZFRyYWNrU2l6ZShj
b25zdCBDU1NWYWx1ZSYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgR3JpZExlbmd0aCBj
cmVhdGVHcmlkVHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiwgU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYpOworICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNyZWF0ZUdyaWRUcmFja1Np
emUoY29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6QnVpbGRlclN0YXRlJik7CiAgICAgc3RydWN0IFRy
YWNrc0RhdGE7Ci0gICAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NW
YWx1ZSYsIFRyYWNrc0RhdGEmLCBTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIGJvb2wgY3Jl
YXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1ZSYsIFRyYWNrc0RhdGEmLCBTdHlsZTo6QnVp
bGRlclN0YXRlJik7CiAgICAgc3RhdGljIGJvb2wgY3JlYXRlR3JpZFBvc2l0aW9uKGNvbnN0IENT
U1ZhbHVlJiwgR3JpZFBvc2l0aW9uJik7CiAgICAgc3RhdGljIHZvaWQgY3JlYXRlSW1wbGljaXRO
YW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiwgTmFtZWRH
cmlkTGluZXNNYXAmLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24pOwotICAgIHN0YXRpYyBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpv
b21GYWN0b3IoU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhIGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOwogfTsKIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRMZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMZW5ndGgoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxl
bmd0aCgpID8KLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQotICAgICAgICA6IHN0eWxlUmVz
b2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS51c2VTVkdab29t
UnVsZXNGb3JMZW5ndGgoKSA/CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikKKyAgICAgICAgOiBidWlsZGVy
U3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzTGVuZ3RoKCkpIHsKICAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9uRGF0YSk7CkBAIC0yMTQsMTkgKzIxNCwx
OSBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChj
b25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlcwogICAgIHJldHVybiBMZW5ndGgoMCwgRml4ZWQp
OwogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aE9yQXV0byhjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExl
bmd0aE9yQXV0byhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gTGVuZ3Ro
KEF1dG8pOwotICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsK
KyAgICByZXR1cm4gY29udmVydExlbmd0aChidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmcoY29u
c3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhTaXppbmco
Y29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpKSB7
CiAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6Ci0gICAgICAgIHJldHVybiBjb252ZXJ0TGVuZ3Ro
KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoYnVp
bGRlclN0YXRlLCB2YWx1ZSk7CiAgICAgY2FzZSBDU1NWYWx1ZUludHJpbnNpYzoKICAgICAgICAg
cmV0dXJuIExlbmd0aChJbnRyaW5zaWMpOwogICAgIGNhc2UgQ1NTVmFsdWVNaW5JbnRyaW5zaWM6
CkBAIC0yNTAsMjkgKzI1MCwyOSBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydExlbmd0aFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBzdAogICAgIH0KIH0K
IAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGhNYXhT
aXppbmcoY29uc3QgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGhNYXhTaXppbmcoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcmV0dXJuIExlbmd0
aChVbmRlZmluZWQpOwotICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoU2l6aW5nKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydExlbmd0aFNpemluZyhidWlsZGVyU3RhdGUs
IHZhbHVlKTsKIH0KIAotaW5saW5lIFRhYlNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0VGFiU2l6ZShjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgVGFiU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRUYWJTaXplKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1i
ZXIoKSkKICAgICAgICAgcmV0dXJuIFRhYlNpemUocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgp
LCBTcGFjZVZhbHVlVHlwZSk7Ci0gICAgcmV0dXJuIFRhYlNpemUocHJpbWl0aXZlVmFsdWUuY29t
cHV0ZUxlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSksIExlbmd0aFZhbHVlVHlwZSk7CisgICAgcmV0dXJuIFRhYlNpemUocHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSksIExlbmd0aFZhbHVlVHlwZSk7CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1l
IFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb21wdXRlZExlbmd0
aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb21wdXRlZExlbmd0aChTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5jb21wdXRlTGVu
Z3RoPFQ+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkp
OworICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmNvbXB1dGVM
ZW5ndGg8VD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiB9CiAK
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZVdp
ZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKICAgICBzd2l0Y2ggKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkgewpA
QCAtMjg1LDE2ICsyODUsMTYgQEAgaW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0TGluZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGMKICAgICBjYXNlIENT
U1ZhbHVlSW52YWxpZDogewogICAgICAgICAvLyBBbnkgb3JpZ2luYWwgcmVzdWx0IHRoYXQgd2Fz
ID49IDEgc2hvdWxkIG5vdCBiZSBhbGxvd2VkIHRvIGZhbGwgYmVsb3cgMS4KICAgICAgICAgLy8g
VGhpcyBrZWVwcyBib3JkZXIgbGluZXMgZnJvbSB2YW5pc2hpbmcuCi0gICAgICAgIFQgcmVzdWx0
ID0gY29udmVydENvbXB1dGVkTGVuZ3RoPFQ+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKLSAgICAg
ICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgPCAx
LjBmICYmIHJlc3VsdCA8IDEuMCkgewotICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjApKTsKKyAgICAg
ICAgVCByZXN1bHQgPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8VD4oYnVpbGRlclN0YXRlLCB2YWx1
ZSk7CisgICAgICAgIGlmIChidWlsZGVyU3RhdGUuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkgPCAx
LjBmICYmIHJlc3VsdCA8IDEuMCkgeworICAgICAgICAgICAgVCBvcmlnaW5hbExlbmd0aCA9IHBy
aW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8VD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjApKTsKICAgICAgICAgICAgIGlm
IChvcmlnaW5hbExlbmd0aCA+PSAxLjApCiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAg
ICAgIH0KLSAgICAgICAgZmxvYXQgbWluaW11bUxpbmVXaWR0aCA9IDEgLyBzdHlsZVJlc29sdmVy
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKTsKKyAgICAgICAgZmxvYXQgbWluaW11bUxp
bmVXaWR0aCA9IDEgLyBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rvcigp
OwogICAgICAgICBpZiAocmVzdWx0ID4gMCAmJiByZXN1bHQgPCBtaW5pbXVtTGluZVdpZHRoKQog
ICAgICAgICAgICAgcmV0dXJuIG1pbmltdW1MaW5lV2lkdGg7Ci0gICAgICAgIHJldHVybiBmbG9v
clRvRGV2aWNlUGl4ZWwocmVzdWx0LCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CisgICAgICAgIHJldHVybiBmbG9vclRvRGV2aWNlUGl4ZWwocmVzdWx0LCBi
dWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICB9CiAgICAg
ZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0zMDIsMTUgKzMwMiwx
NSBAQCBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgYwogICAgIH0KIH0KIAotaW5saW5lIGZsb2F0IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNwYWNpbmcoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUg
PSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVW
YWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCiAgICAgICAgIHJldHVybiAwLmY7CiAK
LSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNv
bHZlci51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSA/Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20o
MS4wZikKLSAgICAgICAgOiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEg
PSBidWlsZGVyU3RhdGUudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgPworICAgICAgICBidWls
ZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29t
KDEuMGYpCisgICAgICAgIDogYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KTsKICAgICByZXR1cm4gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oY29udmVy
c2lvbkRhdGEpOwogfQogCkBAIC0zMjMsMTMgKzMyMywxMyBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvUmFkaXVzTGVuZ3RoKENTU1RvTGVuZ3RoQ29udmVy
c2lvbgogICAgIHJldHVybiB2YWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRh
dGEpOwogfQogCi1pbmxpbmUgTGVuZ3RoU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRSYWRpdXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQoraW5saW5lIExlbmd0aFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmFk
aXVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8qIHBhaXIgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpLnBhaXJWYWx1ZSgpOwogICAgIGlmICghcGFpciB8fCAhcGFpci0+Zmlyc3QoKSB8fCAhcGFp
ci0+c2Vjb25kKCkpCiAgICAgICAgIHJldHVybiB7IHsgMCwgRml4ZWQgfSwgeyAwLCBGaXhlZCB9
IH07CiAKLSAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gc3R5
bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBDU1NU
b0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICBMZW5ndGhTaXplIHJhZGl1cyB7IGNvbnZlcnRU
b1JhZGl1c0xlbmd0aChjb252ZXJzaW9uRGF0YSwgKnBhaXItPmZpcnN0KCkpLCBjb252ZXJ0VG9S
YWRpdXNMZW5ndGgoY29udmVyc2lvbkRhdGEsICpwYWlyLT5zZWNvbmQoKSkgfTsKIAogICAgIEFT
U0VSVCghcmFkaXVzLndpZHRoLmlzTmVnYXRpdmUoKSk7CkBAIC0zNTQsMTggKzM1NCwxOCBAQCBp
bmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRvMTAwUGVyY2VudE1p
bnVzTGVuZ3RoKGNvbnN0IExlbmd0aAogICAgIHJldHVybiBMZW5ndGgoQ2FsY3VsYXRpb25WYWx1
ZTo6Y3JlYXRlKFdURk1vdmUob3ApLCBWYWx1ZVJhbmdlQWxsKSk7CiB9CiAKLWlubGluZSBMZW5n
dGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBM
ZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewotICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVMZWZ0LCBDU1NW
YWx1ZVJpZ2h0PihzdHlsZVJlc29sdmVyLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpKTsKKyAgICByZXR1cm4gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVmdCwg
Q1NTVmFsdWVSaWdodD4oYnVpbGRlclN0YXRlLCBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
dmFsdWUpKTsKIH0KIAotaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQb3NpdGlvbkNv
bXBvbmVudDxDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KHN0eWxlUmVzb2x2ZXIsIGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAgIHJldHVybiBjb252ZXJ0UG9zaXRp
b25Db21wb25lbnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVlQm90dG9tPihidWlsZGVyU3RhdGUsIGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQogCiB0ZW1wbGF0ZTxDU1NWYWx1
ZUlEIGNzc1ZhbHVlRm9yMCwgQ1NTVmFsdWVJRCBjc3NWYWx1ZUZvcjEwMD4KLWlubGluZSBMZW5n
dGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnQoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHZhbHVlKQor
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBv
bmVudChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ByaW1pdGl2
ZVZhbHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGggbGVuZ3RoOwogCkBAIC0zOTIsNyArMzkyLDcg
QEAgaW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNv
bXBvbmVudChTdHlsZVJlc29sdmVyJiBzdHkKICAgICAgICAgfQogICAgIH0KICAgICAgICAgCi0g
ICAgbGVuZ3RoID0gY29udmVydExlbmd0aChzdHlsZVJlc29sdmVyLCAqbGVuZ3RoVmFsdWUpOwor
ICAgIGxlbmd0aCA9IGNvbnZlcnRMZW5ndGgoYnVpbGRlclN0YXRlLCAqbGVuZ3RoVmFsdWUpOwog
CiAgICAgaWYgKHJlbGF0aXZlVG9UcmFpbGluZ0VkZ2UpCiAgICAgICAgIGxlbmd0aCA9IGNvbnZl
cnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChsZW5ndGgpOwpAQCAtNDAwLDIwICs0MDAsMjAgQEAg
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBv
bmVudChTdHlsZVJlc29sdmVyJiBzdHkKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi1pbmxpbmUg
TGVuZ3RoUG9pbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T2JqZWN0UG9zaXRpb24o
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIExlbmd0aFBvaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9iamVjdFBvc2l0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKICAgICBQYWlyKiBwYWlyID0gcHJpbWl0aXZlVmFsdWUucGFpclZhbHVl
KCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgpIHx8ICFwYWlyLT5zZWNvbmQoKSkK
ICAgICAgICAgcmV0dXJuIFJlbmRlclN0eWxlOjppbml0aWFsT2JqZWN0UG9zaXRpb24oKTsKIAot
ICAgIExlbmd0aCBsZW5ndGhYID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVm
dCwgQ1NTVmFsdWVSaWdodD4oc3R5bGVSZXNvbHZlciwgKnBhaXItPmZpcnN0KCkpOwotICAgIExl
bmd0aCBsZW5ndGhZID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NW
YWx1ZUJvdHRvbT4oc3R5bGVSZXNvbHZlciwgKnBhaXItPnNlY29uZCgpKTsKKyAgICBMZW5ndGgg
bGVuZ3RoWCA9IGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZUxlZnQsIENTU1ZhbHVl
UmlnaHQ+KGJ1aWxkZXJTdGF0ZSwgKnBhaXItPmZpcnN0KCkpOworICAgIExlbmd0aCBsZW5ndGhZ
ID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4o
YnVpbGRlclN0YXRlLCAqcGFpci0+c2Vjb25kKCkpOwogCiAgICAgcmV0dXJuIExlbmd0aFBvaW50
KGxlbmd0aFgsIGxlbmd0aFkpOwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9u
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbihTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3Jh
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb24oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvIHJlc3Vs
dCA9IFJlbmRlclN0eWxlOjppbml0aWFsVGV4dERlY29yYXRpb24oKTsKICAgICBpZiAoaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpIHsKQEAgLTQyNCwyMCArNDI0LDIwIEBAIGlubGluZSBPcHRpb25T
ZXQ8VGV4dERlY29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNv
cmF0aW9uKFN0CiB9CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1pbmxpbmUgVCBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlcihT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIHJldHVy
biBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlPFQ+KENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfTlVNQkVSKTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBU
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlck9yQXV0byhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXJPckF1dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAg
ICAgICAgcmV0dXJuIC0xOwotICAgIHJldHVybiBjb252ZXJ0TnVtYmVyPFQ+KHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydE51bWJlcjxUPihidWlsZGVyU3RhdGUsIHZh
bHVlKTsKIH0KIAotaW5saW5lIHNob3J0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdl
YmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBzaG9ydCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRXZWJraXRI
eXBoZW5hdGVMaW1pdExpbmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NT
VmFsdWVOb0xpbWl0KQpAQCAtNDQ2LDMxICs0NDYsMzEgQEAgaW5saW5lIHNob3J0IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGVSZXNv
bHYKIH0KIAogdGVtcGxhdGU8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KLWlubGluZSBOaW5lUGll
Y2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTmluZVBpZWNl
SW1hZ2UgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVySW1hZ2UoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTmluZVBp
ZWNlSW1hZ2UgaW1hZ2U7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGll
Y2VJbWFnZShwcm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
TWFwKCkubWFwTmluZVBpZWNlSW1hZ2UocHJvcGVydHksICZ2YWx1ZSwgaW1hZ2UpOwogICAgIHJl
dHVybiBpbWFnZTsKIH0KIAogdGVtcGxhdGU8Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eT4KLWlubGlu
ZSBOaW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNr
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBO
aW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJNYXNrKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IE5pbmVQaWVjZUltYWdlIGltYWdlKE5pbmVQaWVjZUltYWdlOjpUeXBlOjpNYXNrKTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCAmdmFs
dWUsIGltYWdlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFn
ZShwcm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7CiAgICAgcmV0dXJuIGltYWdlOwogfQogCiB0ZW1w
bGF0ZTxDU1NQcm9wZXJ0eUlEPgotaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3R5bGVJbWFnZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5z
dHlsZUltYWdlKHZhbHVlKTsKKyAgICByZXR1cm4gYnVpbGRlclN0YXRlLmNyZWF0ZVN0eWxlSW1h
Z2UodmFsdWUpOwogfQogCi1pbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VHJhbnNmb3JtKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFRyYW5zZm9ybU9wZXJh
dGlvbnMgb3BlcmF0aW9uczsKLSAgICB0cmFuc2Zvcm1zRm9yVmFsdWUodmFsdWUsIHN0eWxlUmVz
b2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksIG9wZXJhdGlvbnMpOwor
ICAgIHRyYW5zZm9ybXNGb3JWYWx1ZSh2YWx1ZSwgYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKSwgb3BlcmF0aW9ucyk7CiAgICAgcmV0dXJuIG9wZXJhdGlvbnM7CiB9CiAK
QEAgLTQ5OCw3ICs0OTgsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnVw
ZGF0ZUNvbG9yU2NoZW1lKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcgogICAgIH0KIH0KIAot
aW5saW5lIFN0eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29s
b3JTY2hlbWUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBT
dHlsZUNvbG9yU2NoZW1lIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbG9yU2NoZW1l
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5
bGVDb2xvclNjaGVtZSBjb2xvclNjaGVtZTsKIApAQCAtNTE2LDIzICs1MTYsMjMgQEAgaW5saW5l
IFN0eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hl
bWUoU3R5bGVSZXNvbHZlciYKIH0KICNlbmRpZgogCi1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFN0cmluZyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFN0cmluZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJp
bmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBy
ZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS5zdHJpbmdWYWx1ZSgpOwog
fQogCi1pbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09y
QXV0byhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yQXV0
byhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICByZXR1cm4gbnVsbEF0b20oKTsKLSAgICByZXR1
cm4gY29udmVydFN0cmluZyhzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0dXJuIGNvbnZl
cnRTdHJpbmcoYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JOb25lKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAg
ICAgIHJldHVybiBudWxsQXRvbSgpOwotICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHN0eWxlUmVz
b2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydFN0cmluZyhidWlsZGVyU3RhdGUsIHZh
bHVlKTsKIH0KIAogaW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjp2YWx1ZVRvRW1waGFzaXNQb3NpdGlvbihjb25zdCBDU1NQcmltaXRp
dmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUpCkBAIC01NTYsNyArNTU2LDcgQEAgaW5saW5lIE9wdGlv
blNldDxUZXh0RW1waGFzaXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjp2YWx1ZVRv
RW1waGFzaXNQb3MKICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNQ
b3NpdGlvbigpOwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbihTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxUZXh0RW1w
aGFzaXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEVtcGhhc2lz
UG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAgICAgICAgcmV0dXJuIHZh
bHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
OwpAQCAtNTY3LDcgKzU2Nyw3IEBAIGlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRFbXBoYXNpCiAgICAgcmV0dXJu
IHBvc2l0aW9uOwogfQogCi1pbmxpbmUgVGV4dEFsaWduTW9kZSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHRBbGlnbk1vZGUgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VGV4dEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBBU1NFUlQocHJpbWl0aXZlVmFs
dWUuaXNWYWx1ZUlEKCkpOwpAQCAtNTc1LDIxICs1NzUsMjEgQEAgaW5saW5lIFRleHRBbGlnbk1v
ZGUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEFsaWduKFN0eWxlUmVzb2x2ZXIm
IHN0eWwKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpICE9IENTU1ZhbHVlV2Via2l0
TWF0Y2hQYXJlbnQpCiAgICAgICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZTsKIAotICAgIGF1dG8q
IHBhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpOwotICAgIGlmIChwYXJl
bnRTdHlsZS0+dGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6U3RhcnQpCi0gICAgICAgIHJl
dHVybiBwYXJlbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9k
ZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OwotICAgIGlmIChwYXJlbnRTdHlsZS0+dGV4
dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6RW5kKQotICAgICAgICByZXR1cm4gcGFyZW50U3R5
bGUtPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1vZGU6OlJpZ2h0IDogVGV4
dEFsaWduTW9kZTo6TGVmdDsKLSAgICByZXR1cm4gcGFyZW50U3R5bGUtPnRleHRBbGlnbigpOwor
ICAgIGF1dG8mIHBhcmVudFN0eWxlID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCk7CisgICAg
aWYgKHBhcmVudFN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OlN0YXJ0KQorICAg
ICAgICByZXR1cm4gcGFyZW50U3R5bGUuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFs
aWduTW9kZTo6TGVmdCA6IFRleHRBbGlnbk1vZGU6OlJpZ2h0OworICAgIGlmIChwYXJlbnRTdHls
ZS50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQpCisgICAgICAgIHJldHVybiBwYXJl
bnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0QWxpZ25Nb2RlOjpSaWdodCA6
IFRleHRBbGlnbk1vZGU6OkxlZnQ7CisgICAgcmV0dXJuIHBhcmVudFN0eWxlLnRleHRBbGlnbigp
OwogfQogCi1pbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVW
YWx1ZS5wcmltaXRpdmVUeXBlKCkgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VUkkpIHsKICAg
ICAgICAgICAgIFN0cmluZyBjc3NVUkxWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVl
KCk7Ci0gICAgICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSBTVkdVUklSZWZlcmVuY2U6OmZyYWdt
ZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY3NzVVJMVmFsdWUsIHN0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKSk7CisgICAgICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSBTVkdVUklSZWZlcmVuY2U6
OmZyYWdtZW50SWRlbnRpZmllckZyb21JUklTdHJpbmcoY3NzVVJMVmFsdWUsIGJ1aWxkZXJTdGF0
ZS5kb2N1bWVudCgpKTsKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCBkb2Vzbid0IHdvcmsgd2l0
aCBleHRlcm5hbCBTVkcgcmVmZXJlbmNlcyAoc2VlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xMjYxMzMpCiAgICAgICAgICAgICByZXR1cm4gUmVmZXJlbmNlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZShjc3NVUkxWYWx1ZSwgZnJhZ21lbnQpOwogICAgICAgICB9CkBA
IC02MDQsNyArNjA0LDcgQEAgaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xpcFBhdGgoU3R5bGVSZXMKICAgICAgICAgYXV0byYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oY3VycmVudFZhbHVl
LmdldCgpKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzU2hhcGUoKSkgewogICAgICAg
ICAgICAgQVNTRVJUKCFvcGVyYXRpb24pOwotICAgICAgICAgICAgb3BlcmF0aW9uID0gU2hhcGVD
bGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJlc29sdmVy
LnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hh
cGVWYWx1ZSgpKSk7CisgICAgICAgICAgICBvcGVyYXRpb24gPSBTaGFwZUNsaXBQYXRoT3BlcmF0
aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVWYWx1ZS5zaGFwZVZhbHVlKCkpKTsKICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgIEFTU0VSVChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0g
Q1NTVmFsdWVDb250ZW50Qm94CiAgICAgICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUudmFs
dWVJRCgpID09IENTU1ZhbHVlQm9yZGVyQm94CkBAIC02MjcsMjAgKzYyNywyMCBAQCBpbmxpbmUg
UmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRD
bGlwUGF0aChTdHlsZVJlcwogICAgIHJldHVybiBvcGVyYXRpb247CiB9CiAKLWlubGluZSBSZXNp
emUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZXNpemUgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVzaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIFJlc2l6ZSBy
ZXNpemUgPSBSZXNpemU6Ok5vbmU7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9
PSBDU1NWYWx1ZUF1dG8pCi0gICAgICAgIHJlc2l6ZSA9IHN0eWxlUmVzb2x2ZXIuc2V0dGluZ3Mo
KS50ZXh0QXJlYXNBcmVSZXNpemFibGUoKSA/IFJlc2l6ZTo6Qm90aCA6IFJlc2l6ZTo6Tm9uZTsK
KyAgICAgICAgcmVzaXplID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3MoKS50ZXh0
QXJlYXNBcmVSZXNpemFibGUoKSA/IFJlc2l6ZTo6Qm90aCA6IFJlc2l6ZTo6Tm9uZTsKICAgICBl
bHNlCiAgICAgICAgIHJlc2l6ZSA9IHByaW1pdGl2ZVZhbHVlOwogCiAgICAgcmV0dXJuIHJlc2l6
ZTsKIH0KIAotaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVl
UmVwZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlUmVwZXRpdGlvbihTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHBy
aW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBp
ZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlSW5maW5pdGUpCkBAIC02NTAs
NyArNjUwLDcgQEAgaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJx
dWVlUmVwZXRpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICByZXR1cm4gcHJpbWl0aXZl
VmFsdWUuaW50VmFsdWUoKTsKIH0KIAotaW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSBpbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVk
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwog
ICAgIGludCBzcGVlZCA9IDg1OwpAQCAtNjc5LDcgKzY3OSw3IEBAIGlubGluZSBpbnQgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZVNwZWVkKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWCiAgICAgcmV0dXJuIHNwZWVkOwogfQogCi1pbmxpbmUgUmVmPFF1b3Rlc0RhdGE+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFF1b3RlcyhTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZjxRdW90ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAg
ICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVOb25lKTsKQEAgLTcwMiwxMyArNzAyLDEzIEBAIGlubGluZSBSZWY8UXVvdGVz
RGF0YT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UXVvdGVzKFN0eWxlUmVzb2x2ZXIm
LCBjb25zCiAgICAgcmV0dXJuIFF1b3Rlc0RhdGE6OmNyZWF0ZShxdW90ZXMpOwogfQogCi1pbmxp
bmUgVGV4dFVuZGVybGluZVBvc2l0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRl
eHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQoraW5saW5lIFRleHRVbmRlcmxpbmVQb3NpdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSk7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiB9CiAK
LWlubGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFRleHRVbmRlcmxpbmVPZmZzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZU9mZnNldChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQoaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtNzE3LDEyICs3MTcsMTIgQEAg
aW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGV4dFVuZGVybGluZU9mZnNldChTdHkKICAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZz
ZXQ6OmNyZWF0ZVdpdGhBdXRvKCk7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUKHByaW1p
dGl2ZVZhbHVlLmlzTGVuZ3RoKCkpOwotICAgICAgICBhdXRvIGNvbXB1dGVkTGVuZ3RoID0gY29u
dmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLCBwcmltaXRpdmVWYWx1ZSk7
CisgICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8Zmxv
YXQ+KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICByZXR1cm4gVGV4dFVu
ZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChjb21wdXRlZExlbmd0aCk7CiAgICAgfQog
fQogCi1pbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0VGV4dERlY29yYXRpb25UaGlja25lc3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICBhdXRv
JiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBA
IC03MzMsMTIgKzczMywxMiBAQCBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25UaGljawogICAgICAgICByZXR1
cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZUZyb21Gb250KCk7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpOwotICAgICAgICBh
dXRvIGNvbXB1dGVkTGVuZ3RoID0gY29udmVydENvbXB1dGVkTGVuZ3RoPGZsb2F0PihzdHlsZVJl
c29sdmVyLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBj
b252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUp
OwogICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5n
dGgoY29tcHV0ZWRMZW5ndGgpOwogICAgIH0KIH0KIAotaW5saW5lIFJlZlB0cjxTdHlsZVJlZmxl
Y3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rpb24oU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0
cjxTdHlsZVJlZmxlY3Rpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFJlZmxlY3Rp
b24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAg
QVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSk7CkBAIC03NDksMTYgKzc0OSwxNiBAQCBpbmxpbmUgUmVmUHRyPFN0eWxlUmVm
bGVjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVmbGVjdGlvbihTdHlsZVJl
cwogCiAgICAgYXV0byByZWZsZWN0aW9uID0gU3R5bGVSZWZsZWN0aW9uOjpjcmVhdGUoKTsKICAg
ICByZWZsZWN0aW9uLT5zZXREaXJlY3Rpb24ocmVmbGVjdFZhbHVlLmRpcmVjdGlvbigpKTsKLSAg
ICByZWZsZWN0aW9uLT5zZXRPZmZzZXQocmVmbGVjdFZhbHVlLm9mZnNldCgpLmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxh
dGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSkpOworICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUub2Zmc2V0
KCkuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVy
c2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpKSk7CiAKICAgICBOaW5lUGllY2VJbWFnZSBtYXNrKE5pbmVQaWVjZUltYWdl
OjpUeXBlOjpNYXNrKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVj
ZUltYWdlKENTU1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdCwgcmVmbGVjdFZhbHVlLm1hc2soKSwg
bWFzayk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2UoQ1NT
UHJvcGVydHlXZWJraXRCb3hSZWZsZWN0LCByZWZsZWN0VmFsdWUubWFzaygpLCBtYXNrKTsKICAg
ICByZWZsZWN0aW9uLT5zZXRNYXNrKG1hc2spOwogCiAgICAgcmV0dXJuIHJlZmxlY3Rpb247CiB9
CiAKLWlubGluZSBJbnRTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEluaXRpYWxM
ZXR0ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBJbnRT
aXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEluaXRpYWxMZXR0ZXIoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAKQEAgLTc3Myw3
ICs3NzMsNyBAQCBpbmxpbmUgSW50U2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRJ
bml0aWFsTGV0dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdAogICAgIHJldHVybiBJbnRTaXplKHBh
aXItPmZpcnN0KCktPmludFZhbHVlKCksIHBhaXItPnNlY29uZCgpLT5pbnRWYWx1ZSgpKTsKIH0K
IAotaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VX
aWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdp
ZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKIApAQCAtNzg4LDExICs3ODgsMTEgQEAgaW5saW5lIGZsb2F0IFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiBz
dHlsZVIKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1Zh
bHVlVGhpY2spCiAgICAgICAgICAgICByZXN1bHQgKj0gNTsKICAgICAgICAgUmVmPENTU1ByaW1p
dGl2ZVZhbHVlPiBlbXNWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlc3VsdCwgQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19FTVMpKTsKLSAgICAgICAgd2lkdGggPSBjb252ZXJ0Q29tcHV0
ZWRMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIGVtc1ZhbHVlKTsKKyAgICAgICAgd2lkdGgg
PSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZSwgZW1zVmFsdWUpOwog
ICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBDU1NWYWx1ZUludmFsaWQ6IHsKLSAgICAg
ICAgd2lkdGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIHBy
aW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgd2lkdGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8Zmxv
YXQ+KGJ1aWxkZXJTdGF0ZSwgcHJpbWl0aXZlVmFsdWUpOwogICAgICAgICBicmVhazsKICAgICB9
CiAgICAgZGVmYXVsdDoKQEAgLTgwMyw3ICs4MDMsNyBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UgogICAgIHJldHVybiB3aWR0aDsKIH0KIAotaW5saW5lIE9wdGlvblNldDxMaW5lQm94Q29udGFp
bj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUJveENvbnRhaW4oU3R5bGVSZXNv
bHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8TGluZUJveENv
bnRhaW4+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVCb3hDb250YWluKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC04MzQs
NyArODM0LDcgQEAgaW5saW5lIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvblNraXA+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6dmFsdWVUb0RlY29yYXRpb25Ta2kKICAgICByZXR1cm4gT3B0aW9uU2V0
PFRleHREZWNvcmF0aW9uU2tpcD4geyB9OwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PFRleHREZWNv
cmF0aW9uU2tpcD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25T
a2lwKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9u
U2V0PFRleHREZWNvcmF0aW9uU2tpcD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4
dERlY29yYXRpb25Ta2lwKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCiAgICAgICAgIHJl
dHVybiB2YWx1ZVRvRGVjb3JhdGlvblNraXAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSk7CkBAIC04NTAsNyArODUwLDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzSW1hZ2VTaGFw
ZShjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgcmV0dXJuIGlzPENTU0ltYWdlVmFsdWU+KHZh
bHVlKSB8fCBpczxDU1NJbWFnZVNldFZhbHVlPih2YWx1ZSkgfHwgaXM8Q1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZT4odmFsdWUpOwogfQogCi1pbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtODU4LDE0ICs4NTgsMTQg
QEAgaW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRTaGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXIKICAgICB9CiAKICAgICBpZiAoaXNJbWFnZVNoYXBl
KHZhbHVlKSkKLSAgICAgICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZShzdHlsZVJlc29sdmVy
LnN0eWxlSW1hZ2UodmFsdWUpLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICByZXR1cm4gU2hh
cGVWYWx1ZTo6Y3JlYXRlKGJ1aWxkZXJTdGF0ZS5jcmVhdGVTdHlsZUltYWdlKHZhbHVlKS5yZWxl
YXNlTm9uTnVsbCgpKTsKIAogICAgIFJlZlB0cjxCYXNpY1NoYXBlPiBzaGFwZTsKICAgICBDU1NC
b3hUeXBlIHJlZmVyZW5jZUJveCA9IENTU0JveFR5cGU6OkJveE1pc3Npbmc7CiAgICAgZm9yIChh
dXRvJiBjdXJyZW50VmFsdWUgOiBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAg
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihj
dXJyZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgp
KQotICAgICAgICAgICAgc2hhcGUgPSBiYXNpY1NoYXBlRm9yVmFsdWUoc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVlLnNoYXBl
VmFsdWUoKSk7CisgICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShidWlsZGVy
U3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFsdWUuc2hhcGVW
YWx1ZSgpKTsKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENT
U1ZhbHVlQ29udGVudEJveAogICAgICAgICAgICAgfHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgp
ID09IENTU1ZhbHVlQm9yZGVyQm94CiAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVQYWRkaW5nQm94CkBAIC04ODksNyArODg5LDcgQEAgaW5saW5lIFJl
ZlB0cjxTaGFwZVZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTaGFwZVZhbHVl
KFN0eWxlUmVzb2x2ZXIKIAogI2lmIEVOQUJMRShDU1NfU0NST0xMX1NOQVApCiAKLWlubGluZSBT
Y3JvbGxTbmFwVHlwZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwVHlw
ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFNjcm9sbFNu
YXBUeXBlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU2Nyb2xsU25h
cFR5cGUgdHlwZTsKICAgICBhdXRvJiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKTsKQEAgLTkxNCw3ICs5MTQsNyBAQCBpbmxpbmUgU2Nyb2xsU25hcFR5cGUgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcFR5cGUoU3R5bGVSZXNvbHZlcgogICAgIHJl
dHVybiB0eXBlOwogfQogCi1pbmxpbmUgU2Nyb2xsU25hcEFsaWduIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiB2YWx1ZXMgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+
KHZhbHVlKTsKICAgICBTY3JvbGxTbmFwQWxpZ24gYWxpZ25tZW50OwpAQCAtOTI4LDcgKzkyOCw3
IEBAIGlubGluZSBTY3JvbGxTbmFwQWxpZ24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2CiAKICNlbmRpZgogCi1pbmxpbmUgR3JpZExlbmd0
aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZhbHVlLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIEdyaWRMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlk
VHJhY2tCcmVhZHRoKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSwgU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVNaW5Db250ZW50IHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZVdlYmtpdE1pbkNvbnRlbnQpCiAgICAgICAgIHJldHVybiBMZW5ndGgo
TWluQ29udGVudCk7CkBAIC05NDAsMjMgKzk0MCwyMyBAQCBpbmxpbmUgR3JpZExlbmd0aCBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0
aQogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0ZsZXgoKSkKICAgICAgICAgcmV0dXJuIEdyaWRM
ZW5ndGgocHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUoKSk7CiAKLSAgICByZXR1cm4gcHJpbWl0
aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50
Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KHN0eWxl
UmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgIHJldHVy
biBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lv
bj4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiB9CiAKLWlubGlu
ZSBHcmlkVHJhY2tTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6
ZShjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFj
a1NpemUoY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCi0gICAgICAg
IHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSwgc3R5bGVSZXNvbHZlcikpOworICAgICAgICByZXR1cm4g
R3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSksIGJ1aWxkZXJTdGF0ZSkpOwogCiAgICAgQVNTRVJUKGlzPENTU0Z1bmN0
aW9uVmFsdWU+KHZhbHVlKSk7CiAgICAgY29uc3QgYXV0byYgZnVuY3Rpb24gPSBkb3duY2FzdDxD
U1NGdW5jdGlvblZhbHVlPih2YWx1ZSk7CiAKICAgICBpZiAoZnVuY3Rpb24ubGVuZ3RoKCkgPT0g
MSkKLSAgICAgICAgcmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hl
Y2soMCkpLCBzdHlsZVJlc29sdmVyKSwgRml0Q29udGVudFRyYWNrU2l6aW5nKTsKKyAgICAgICAg
cmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBidWls
ZGVyU3RhdGUpLCBGaXRDb250ZW50VHJhY2tTaXppbmcpOwogCiAgICAgQVNTRVJUX1dJVEhfU0VD
VVJJVFlfSU1QTElDQVRJT04oZnVuY3Rpb24ubGVuZ3RoKCkgPT0gMik7Ci0gICAgR3JpZExlbmd0
aCBtaW5UcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBzdHlsZVJl
c29sdmVyKSk7Ci0gICAgR3JpZExlbmd0aCBtYXhUcmFja0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNr
QnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0
Qm91bmRzQ2hlY2soMSkpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgR3JpZExlbmd0aCBtaW5UcmFj
a0JyZWFkdGgoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oKmZ1bmN0aW9uLml0ZW1XaXRob3V0Qm91bmRzQ2hlY2soMCkpLCBidWlsZGVyU3RhdGUpKTsK
KyAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVj
aygxKSksIGJ1aWxkZXJTdGF0ZSkpOwogICAgIHJldHVybiBHcmlkVHJhY2tTaXplKG1pblRyYWNr
QnJlYWR0aCwgbWF4VHJhY2tCcmVhZHRoKTsKIH0KIApAQCAtOTg4LDcgKzk4OCw3IEBAIHB1Ymxp
YzoKICAgICBBdXRvUmVwZWF0VHlwZSBtX2F1dG9SZXBlYXRUeXBlIHsgUmVuZGVyU3R5bGU6Omlu
aXRpYWxHcmlkQXV0b1JlcGVhdFR5cGUoKSB9OwogfTsKIAotaW5saW5lIGJvb2wgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwg
VHJhY2tzRGF0YSYgdHJhY2tzRGF0YSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lu
bGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25z
dCBDU1NWYWx1ZSYgdmFsdWUsIFRyYWNrc0RhdGEmIHRyYWNrc0RhdGEsIFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICAvLyBIYW5kbGUgJ25vbmUnLgogICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQpAQCAtMTAwMyw3ICsxMDAzLDcgQEAgaW5saW5l
IGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSwgVHIKICAgICAgICAgICAgIGNyZWF0ZUdyaWRMaW5lTmFtZXNMaXN0KGN1
cnJlbnRWYWx1ZSwgY3VycmVudE5hbWVkR3JpZExpbmUsIHRyYWNrc0RhdGEubV9uYW1lZEdyaWRM
aW5lcywgdHJhY2tzRGF0YS5tX29yZGVyZWROYW1lZEdyaWRMaW5lcyk7CiAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgKytjdXJyZW50TmFtZWRHcmlkTGluZTsKLSAgICAgICAgICAgIHRyYWNr
c0RhdGEubV90cmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJhY2tTaXplKGN1cnJlbnRWYWx1
ZSwgc3R5bGVSZXNvbHZlcikpOworICAgICAgICAgICAgdHJhY2tzRGF0YS5tX3RyYWNrU2l6ZXMu
YXBwZW5kKGNyZWF0ZUdyaWRUcmFja1NpemUoY3VycmVudFZhbHVlLCBidWlsZGVyU3RhdGUpKTsK
ICAgICAgICAgfQogICAgIH07CiAKQEAgLTEwMjAsNyArMTAyMCw3IEBAIGlubGluZSBib29sIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdChjb25zdCBDU1NWYWx1ZSYg
dmFsdWUsIFRyCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICArK2F1dG9SZXBlYXRJbmRleDsKLSAgICAgICAgICAgICAgICB0
cmFja3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMuYXBwZW5kKGNyZWF0ZUdyaWRUcmFja1Np
emUoYXV0b1JlcGVhdFZhbHVlLmdldCgpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAgICAgICAg
ICAgdHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzLmFwcGVuZChjcmVhdGVHcmlkVHJh
Y2tTaXplKGF1dG9SZXBlYXRWYWx1ZS5nZXQoKSwgYnVpbGRlclN0YXRlKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50ID0g
Y3VycmVudE5hbWVkR3JpZExpbmUrKzsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMTExMSw3
ICsxMTExLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBs
aWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKGNvbnMKICAgICB9CiB9CiAKLWlubGluZSBW
ZWN0b3I8R3JpZFRyYWNrU2l6ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRy
YWNrU2l6ZUxpc3QoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUuaXNWYWx1
ZUxpc3QoKSk7CiAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2
YWx1ZSk7CkBAIC0xMTIxLDE3ICsxMTIxLDE3IEBAIGlubGluZSBWZWN0b3I8R3JpZFRyYWNrU2l6
ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5CiAg
ICAgICAgIEFTU0VSVCghY3VyclZhbHVlLT5pc0dyaWRMaW5lTmFtZXNWYWx1ZSgpKTsKICAgICAg
ICAgQVNTRVJUKCFjdXJyVmFsdWUtPmlzR3JpZEF1dG9SZXBlYXRWYWx1ZSgpKTsKICAgICAgICAg
QVNTRVJUKCFjdXJyVmFsdWUtPmlzR3JpZEludGVnZXJSZXBlYXRWYWx1ZSgpKTsKLSAgICAgICAg
dHJhY2tTaXplcy51bmNoZWNrZWRBcHBlbmQoY29udmVydEdyaWRUcmFja1NpemUoc3R5bGVSZXNv
bHZlciwgY3VyclZhbHVlKSk7CisgICAgICAgIHRyYWNrU2l6ZXMudW5jaGVja2VkQXBwZW5kKGNv
bnZlcnRHcmlkVHJhY2tTaXplKGJ1aWxkZXJTdGF0ZSwgY3VyclZhbHVlKSk7CiAgICAgfQogICAg
IHJldHVybiB0cmFja1NpemVzOwogfQogCi1pbmxpbmUgR3JpZFRyYWNrU2l6ZSBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHcmlkVHJhY2tTaXplIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemUoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNy
ZWF0ZUdyaWRUcmFja1NpemUodmFsdWUsIHN0eWxlUmVzb2x2ZXIpOworICAgIHJldHVybiBjcmVh
dGVHcmlkVHJhY2tTaXplKHZhbHVlLCBidWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgT3B0aW9u
YWw8R3JpZFBvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkUG9zaXRp
b24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25h
bDxHcmlkUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRQb3NpdGlv
bihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEdy
aWRQb3NpdGlvbiBncmlkUG9zaXRpb247CiAgICAgaWYgKGNyZWF0ZUdyaWRQb3NpdGlvbih2YWx1
ZSwgZ3JpZFBvc2l0aW9uKSkKQEAgLTExMzksNyArMTEzOSw3IEBAIGlubGluZSBPcHRpb25hbDxH
cmlkUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRQb3NpdGlvbihT
dHlsZVJlCiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotaW5saW5lIEdyaWRBdXRvRmxv
dyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBHcmlkQXV0b0Zsb3cgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgbGlzdCA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpOwogICAgIGlmICghbGlzdC5sZW5ndGgoKSkKQEAgLTExNzcsMjMgKzEx
NzcsMjMgQEAgaW5saW5lIEdyaWRBdXRvRmxvdyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRHcmlkQXV0b0Zsb3coU3R5bGVSZXNvbHZlciYsIGMKICAgICByZXR1cm4gYXV0b0Zsb3c7CiB9
CiAKLWlubGluZSBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29t
RmFjdG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBpZiAoYXV0
byogZnJhbWUgPSBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkuZnJhbWUoKSkgewotICAgICAgICBm
bG9hdCB0ZXh0Wm9vbUZhY3RvciA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+dGV4dFpvb20oKSAh
PSBUZXh0Wm9vbTo6UmVzZXQgPyBmcmFtZS0+dGV4dFpvb21GYWN0b3IoKSA6IDEuMGY7Ci0gICAg
ICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+ZWZmZWN0aXZl
Wm9vbSgpICogdGV4dFpvb21GYWN0b3IpOworICAgIGlmIChhdXRvKiBmcmFtZSA9IGJ1aWxkZXJT
dGF0ZS5kb2N1bWVudCgpLmZyYW1lKCkpIHsKKyAgICAgICAgZmxvYXQgdGV4dFpvb21GYWN0b3Ig
PSBidWlsZGVyU3RhdGUuc3R5bGUoKS50ZXh0Wm9vbSgpICE9IFRleHRab29tOjpSZXNldCA/IGZy
YW1lLT50ZXh0Wm9vbUZhY3RvcigpIDogMS4wZjsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0
ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oYnVpbGRl
clN0YXRlLnN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpICogdGV4dFpvb21GYWN0b3IpOwogICAgIH0K
LSAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEoKTsKKyAgICByZXR1cm4gYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEo
KTsKIH0KIAotaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0V29yZFNwYWNpbmcoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0V29yZFNwYWNpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgT3B0aW9uYWw8TGVuZ3RoPiB3b3JkU3Bh
Y2luZzsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZU5vcm1hbCkKICAgICAgICAgd29yZFNwYWNpbmcgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbFdvcmRT
cGFjaW5nKCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAg
ICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY3Nz
dG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihzdHlsZVJlc29sdmVyKSk7
CisgICAgICAgIHdvcmRTcGFjaW5nID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5n
dGg+KGNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3IoYnVpbGRlclN0
YXRlKSk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpCiAgICAg
ICAgIHdvcmRTcGFjaW5nID0gTGVuZ3RoKGNsYW1wVG88ZmxvYXQ+KHByaW1pdGl2ZVZhbHVlLmRv
dWJsZVZhbHVlKCksIG1pblZhbHVlRm9yQ3NzTGVuZ3RoLCBtYXhWYWx1ZUZvckNzc0xlbmd0aCks
IFBlcmNlbnQpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCkBAIC0x
MjAyLDcgKzEyMDIsNyBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJgogICAgIHJldHVybiB3b3Jk
U3BhY2luZzsKIH0KIAotaW5saW5lIE9wdGlvbmFsPGZsb2F0PiBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8ZmxvYXQ+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFBlcnNwZWN0aXZlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZl
VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKQEAgLTEyMTAsMTYgKzEyMTAsMTYgQEAg
aW5saW5lIE9wdGlvbmFsPGZsb2F0PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQZXJz
cGVjdGl2ZShTdHlsZVJlc29sdmVyJgogCiAgICAgZmxvYXQgcGVyc3BlY3RpdmUgPSAtMTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkKLSAgICAgICAgcGVyc3BlY3RpdmUgPSBw
cmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLnN0YXRlKCku
Y3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmlt
aXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc051bWJlcigp
KQotICAgICAgICBwZXJzcGVjdGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVlKCkgKiBz
dHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLnpvb20oKTsK
KyAgICAgICAgcGVyc3BlY3RpdmUgPSBwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpICogYnVp
bGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS56b29tKCk7CiAgICAgZWxzZQog
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIAogICAgIHJldHVybiBwZXJzcGVjdGl2ZSA8
IDAgPyBPcHRpb25hbDxmbG9hdD4oV1RGOjpudWxsb3B0KSA6IE9wdGlvbmFsPGZsb2F0PihwZXJz
cGVjdGl2ZSk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE1hcnF1ZWVJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBPcHRpb25h
bDxMZW5ndGg+IG1hcnF1ZWVMZW5ndGg7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwpAQCAtMTIzNCw3ICsxMjM0LDcgQEAgaW5s
aW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVl
ZUluY3JlbWVudChTdHlsZVJlc28KICAgICAgICAgbWFycXVlZUxlbmd0aCA9IExlbmd0aCgzNiwg
Rml4ZWQpOyAvLyAzNnB4LgogICAgICAgICBicmVhazsKICAgICBjYXNlIENTU1ZhbHVlSW52YWxp
ZDogewotICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVu
Z3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0
ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAgICAgTGVuZ3RoIGxlbmd0
aCA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9u
IHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oYnVpbGRlclN0YXRl
LmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSk7
CiAgICAgICAgIGlmICghbGVuZ3RoLmlzVW5kZWZpbmVkKCkpCiAgICAgICAgICAgICBtYXJxdWVl
TGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICBicmVhazsKQEAgLTEyNDUsMTUgKzEyNDUsMTUgQEAg
aW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TWFy
cXVlZUluY3JlbWVudChTdHlsZVJlc28KICAgICByZXR1cm4gbWFycXVlZUxlbmd0aDsKIH0KIAot
aW5saW5lIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvbmFsPEZpbHRlck9wZXJhdGlvbnM+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgRmls
dGVyT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIGlmIChzdHlsZVJlc29sdmVyLmNyZWF0ZUZp
bHRlck9wZXJhdGlvbnModmFsdWUsIG9wZXJhdGlvbnMpKQorICAgIGlmIChidWlsZGVyU3RhdGUu
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgb3BlcmF0aW9ucykpCiAgICAgICAgIHJldHVy
biBvcGVyYXRpb25zOwogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBGb250
RmVhdHVyZVNldHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRGZWF0dXJl
U2V0dGluZ3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBG
b250RmVhdHVyZVNldHRpbmdzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRGZWF0
dXJlU2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NF
UlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb3JtYWwpOwpAQCAtMTMyMywyNyArMTMyMywyNyBAQCBpbmxpbmUgT3B0aW9uYWw8Rm9udFNl
bGVjdGlvblZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVGcm9t
VgogICAgIHJldHVybiBpdGFsaWNWYWx1ZSgpOwogfQogCi1pbmxpbmUgRm9udFNlbGVjdGlvblZh
bHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRXZWlnaHQoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZvbnRTZWxl
Y3Rpb25WYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0KFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICBhdXRvJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKSB7CiAgICAgICAgIGF1dG8gdmFsdWVJRCA9IHBy
aW1pdGl2ZVZhbHVlLnZhbHVlSUQoKTsKICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVC
b2xkZXIpCi0gICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6Ym9sZGVy
V2VpZ2h0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkud2Vp
Z2h0KCkpOworICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmJvbGRl
cldlaWdodChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS53ZWln
aHQoKSk7CiAgICAgICAgIGlmICh2YWx1ZUlEID09IENTU1ZhbHVlTGlnaHRlcikKLSAgICAgICAg
ICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9uOjpsaWdodGVyV2VpZ2h0KHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpOworICAgICAg
ICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQoYnVpbGRl
clN0YXRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCkud2VpZ2h0KCkpOwogICAgIH0K
ICAgICByZXR1cm4gY29udmVydEZvbnRXZWlnaHRGcm9tVmFsdWUodmFsdWUpOwogfQogCi1pbmxp
bmUgRm9udFNlbGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHJldGNoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgRm9u
dFNlbGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTdHJldGNo
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0
dXJuIGNvbnZlcnRGb250U3RyZXRjaEZyb21WYWx1ZSh2YWx1ZSk7CiB9CiAKICNpZiBFTkFCTEUo
VkFSSUFUSU9OX0ZPTlRTKQotaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKQEAgLTEzNjAs
MjEgKzEzNjAsMjEgQEAgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3MKICNlbmRpZgogCiAjaWYgUExB
VEZPUk0oSU9TX0ZBTUlMWSkKLWlubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFRvdWNoQ2FsbG91dChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hDYWxsb3V0KFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJu
ICFlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnN0cmluZ1ZhbHVlKCksICJub25lIik7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJM
RShUT1VDSF9FVkVOVFMpCi1pbmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIENvbG9yIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLmNvbG9y
RnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwor
ICAgIHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAjZW5kaWYKIAogI2lmIEVOQUJMRShQT0lO
VEVSX0VWRU5UUykKLWlubGluZSBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFRvdWNoQWN0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQog
ICAgICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKQEAgLTEz
OTYsNDAgKzEzOTYsNDAgQEAgaW5saW5lIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGVSZXMKICNlbmRpZgogCiAjaWYg
RU5BQkxFKE9WRVJGTE9XX1NDUk9MTElOR19UT1VDSCkKLWlubGluZSBib29sIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydE92ZXJmbG93U2Nyb2xsaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRPdmVyZmxvd1Njcm9sbGluZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFs
dWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVRvdWNoOwogfQogI2VuZGlmCiAKLWlubGluZSBTVkdM
ZW5ndGhWYWx1ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWYWx1ZShT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFNWR0xlbmd0aFZh
bHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZhbHVlKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIFNWR0xl
bmd0aFZhbHVlOjpmcm9tQ1NTUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKSk7CiB9CiAKLWlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZlY3RvcihTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9yPFNWR0xlbmd0
aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgYXV0byYgdmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAK
ICAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHN2Z0xlbmd0aHM7CiAgICAgc3ZnTGVuZ3Rocy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KHZhbHVlTGlzdC5sZW5ndGgoKSk7CiAgICAgZm9yIChhdXRv
JiBpdGVtIDogdmFsdWVMaXN0KQotICAgICAgICBzdmdMZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChj
b252ZXJ0U1ZHTGVuZ3RoVmFsdWUoc3R5bGVSZXNvbHZlciwgaXRlbSkpOworICAgICAgICBzdmdM
ZW5ndGhzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUoYnVpbGRlclN0YXRl
LCBpdGVtKSk7CiAKICAgICByZXR1cm4gc3ZnTGVuZ3RoczsKIH0KIAotaW5saW5lIFZlY3RvcjxT
VkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3Ryb2tlRGFzaEFy
cmF5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkK
K2lubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFN0cm9rZURhc2hBcnJheShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsKICAgICAgICAgcmV0dXJuIFNWR1JlbmRlclN0
eWxlOjppbml0aWFsU3Ryb2tlRGFzaEFycmF5KCk7CiAgICAgfQogCi0gICAgcmV0dXJuIGNvbnZl
cnRTVkdMZW5ndGhWZWN0b3Ioc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252
ZXJ0U1ZHTGVuZ3RoVmVjdG9yKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgUGFp
bnRPcmRlciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKFN0eWxlUmVz
b2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUGFpbnRPcmRlciBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKTsKQEAgLTE0NTAsNyArMTQ1MCw3IEBAIGlu
bGluZSBQYWludE9yZGVyIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIo
U3R5bGVSZXNvbHZlciYsIGNvbnN0CiAgICAgfQogfQogCi1pbmxpbmUgZmxvYXQgU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9w
YWNpdHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CiAgICAgZmxvYXQgb3BhY2l0eSA9IHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKTsKQEAg
LTE0NTksMjIgKzE0NTksMjIgQEAgaW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydE9wYWNpdHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHUKICAgICByZXR1cm4g
c3RkOjptYXgoMC4wZiwgc3RkOjptaW4oMS4wZiwgb3BhY2l0eSkpOwogfQogCi1pbmxpbmUgU3Ry
aW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3Ry
aW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBTdHJpbmcgczsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzVVJJKCkpCiAgICAg
ICAgIHMgPSBwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpOwogCi0gICAgcmV0dXJuIFNWR1VS
SVJlZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBzdHlsZVJlc29s
dmVyLmRvY3VtZW50KCkpOworICAgIHJldHVybiBTVkdVUklSZWZlcmVuY2U6OmZyYWdtZW50SWRl
bnRpZmllckZyb21JUklTdHJpbmcocywgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpOwogfQogCi1p
bmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIENv
bG9yIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVy
biBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkpOworICAgIHJldHVybiBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKLWlu
bGluZSBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgU3R5bGVTZWxmQWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25tZW50RGF0YShTdHlsZTo6QnVpbGRlclN0
YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0eWxlU2VsZkFsaWdubWVudERh
dGEgYWxpZ25tZW50RGF0YSA9IFJlbmRlclN0eWxlOjppbml0aWFsU2VsZkFsaWdubWVudCgpOwog
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKTsKQEAgLTE0OTUsNyArMTQ5NSw3IEBAIGlubGluZSBTdHlsZVNlbGZBbGlnbm1lbnREYXRh
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lCiAgICAg
cmV0dXJuIGFsaWdubWVudERhdGE7CiB9CiAKLWlubGluZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnRE
YXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3R5bGVDb250ZW50
QWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250ZW50QWxpZ25t
ZW50RGF0YShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIFN0eWxlQ29udGVudEFsaWdubWVudERhdGEgYWxpZ25tZW50RGF0YSA9IFJlbmRlclN0eWxl
Ojppbml0aWFsQ29udGVudEFsaWdubWVudCgpOwogICAgIGlmICghaXM8Q1NTQ29udGVudERpc3Ry
aWJ1dGlvblZhbHVlPih2YWx1ZSkpCkBAIC0xNTEwLDcgKzE1MTAsNyBAQCBpbmxpbmUgU3R5bGVD
b250ZW50QWxpZ25tZW50RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb250ZW50
QWxpZ25tZW50RAogICAgIHJldHVybiBhbGlnbm1lbnREYXRhOwogfQogCi1pbmxpbmUgR2x5cGhP
cmllbnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR2x5cGhPcmll
bnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgZmxvYXQg
YW5nbGUgPSBmYWJzZihmbW9kZihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmZs
b2F0VmFsdWUoKSwgMzYwLjBmKSk7CiAgICAgaWYgKGFuZ2xlIDw9IDQ1LjBmIHx8IGFuZ2xlID4g
MzE1LjBmKQpAQCAtMTUyMiwyMSArMTUyMiwyMSBAQCBpbmxpbmUgR2x5cGhPcmllbnRhdGlvbiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0aW9uKFN0eWxlUmVzbwog
ICAgIHJldHVybiBHbHlwaE9yaWVudGF0aW9uOjpEZWdyZWVzMjcwOwogfQogCi1pbmxpbmUgR2x5
cGhPcmllbnRhdGlvbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHbHlwaE9yaWVudGF0
aW9uT3JBdXRvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKICAgICAgICAgcmV0
dXJuIEdseXBoT3JpZW50YXRpb246OkF1dG87Ci0gICAgcmV0dXJuIGNvbnZlcnRHbHlwaE9yaWVu
dGF0aW9uKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1cm4gY29udmVydEdseXBoT3Jp
ZW50YXRpb24oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSBPcHRpb25hbDxMZW5n
dGg+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBmbG9hdCBtdWx0aXBsaWVy
KQoraW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGluZUhlaWdodChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSwgZmxvYXQgbXVsdGlwbGllcikKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgcmV0dXJuIFJlbmRl
clN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
TGVuZ3RoKCkpIHsKLSAgICAgICAgTGVuZ3RoIGxlbmd0aCA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1
dGVMZW5ndGg8TGVuZ3RoPihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNzc3RvTGVuZ3RoQ29udmVy
c2lvbkRhdGFXaXRoVGV4dFpvb21GYWN0b3Ioc3R5bGVSZXNvbHZlcikpOworICAgICAgICBMZW5n
dGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rv
cihidWlsZGVyU3RhdGUpKTsKICAgICAgICAgaWYgKG11bHRpcGxpZXIgIT0gMS5mKQogICAgICAg
ICAgICAgbGVuZ3RoID0gTGVuZ3RoKGxlbmd0aC52YWx1ZSgpICogbXVsdGlwbGllciwgRml4ZWQp
OwogICAgICAgICByZXR1cm4gbGVuZ3RoOwpAQCAtMTU1MCw3ICsxNTUwLDcgQEAgaW5saW5lIE9w
dGlvbmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChT
dHlsZVJlc29sdmVyJgogICAgIC8vIHZhbHVlcyBhbmQgcmF3IG51bWJlcnMgdG8gcGVyY2VudGFn
ZXMuCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKSB7CiAgICAgICAgIC8v
IEZJWE1FOiBwZXJjZW50YWdlIHNob3VsZCBub3QgYmUgcmVzdHJpY3RlZCB0byBhbiBpbnRlZ2Vy
IGhlcmUuCi0gICAgICAgIHJldHVybiBMZW5ndGgoKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y29t
cHV0ZWRGb250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuaW50VmFsdWUoKSkgLyAxMDAsIEZpeGVk
KTsKKyAgICAgICAgcmV0dXJuIExlbmd0aCgoYnVpbGRlclN0YXRlLnN0eWxlKCkuY29tcHV0ZWRG
b250U2l6ZSgpICogcHJpbWl0aXZlVmFsdWUuaW50VmFsdWUoKSkgLyAxMDAsIEZpeGVkKTsKICAg
ICB9CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTnVtYmVyKCkpCiAgICAgICAgIHJldHVybiBM
ZW5ndGgocHJpbWl0aXZlVmFsdWUuZG91YmxlVmFsdWUoKSAqIDEwMC4wLCBQZXJjZW50KTsKQEAg
LTE1NjAsNyArMTU2MCw3IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYKICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogfQogCi1pbmxpbmUgRm9udFN5bnRoZXNpcyBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgRm9udFN5bnRoZXNpcyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRGb250U3ludGhlc2lzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAg
QVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9uZSk7CkBAIC0xNTg5LDcgKzE1ODksNyBAQCBpbmxpbmUgRm9udFN5bnRoZXNpcyBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3ludGhlc2lzKFN0eWxlUmVzb2x2ZXIm
LAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAgICAgCi1pbmxpbmUgT3B0aW9uU2V0PFNwZWFrQXM+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNwZWFrQXMoU3R5bGVSZXNvbHZlciYsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRp
YWxTcGVha0FzKCk7CiAgICAgaWYgKGlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CkBAIC0xNTk5
LDcgKzE1OTksNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFNwZWFrQXM+IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFNwZWFrQXMoU3R5bGVSZXNvbHZlciYsCiAgICAgcmV0dXJuIHJlc3VsdDsK
IH0KIAotaW5saW5lIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydEhhbmdpbmdQdW5jdHVhdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEhhbmdpbmdQdW5jdHVhdGlvbihTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8gcmVzdWx0ID0g
UmVuZGVyU3R5bGU6OmluaXRpYWxIYW5naW5nUHVuY3R1YXRpb24oKTsKICAgICBpZiAoaXM8Q1NT
VmFsdWVMaXN0Pih2YWx1ZSkpIHsKQEAgLTE2MDksOSArMTYwOSw5IEBAIGlubGluZSBPcHRpb25T
ZXQ8SGFuZ2luZ1B1bmN0dWF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRIYW5n
aW5nUHVuY3R1CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotaW5saW5lIEdhcExlbmd0aCBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHYXBMZW5ndGgoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEdhcExlbmd0aCBTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHYXBMZW5ndGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIChkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkg
PyBHYXBMZW5ndGgoKSA6IEdhcExlbmd0aChjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsIHZh
bHVlKSk7CisgICAgcmV0dXJuIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkgPyBHYXBMZW5ndGgoKSA6IEdhcExlbmd0aChjb252
ZXJ0TGVuZ3RoKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5o
IGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRlckN1c3RvbS5oCmluZGV4IDI4ZGUxMTZj
OTI1Li5iNjAxYTk1NWNmMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVp
bGRlckN1c3RvbS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXJDdXN0b20u
aApAQCAtNTQsOSArNTQsOSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjZGVmaW5lIERFQ0xB
UkVfUFJPUEVSVFlfQ1VTVE9NX0hBTkRMRVJTKHByb3BlcnR5KSBcCi0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0IyNwcm9wZXJ0eShTdHlsZVJlc29sdmVyJik7IFwKLSAgICBzdGF0aWMgdm9p
ZCBhcHBseUluaXRpYWwjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImKTsgXAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWUjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpCisgICAg
c3RhdGljIHZvaWQgYXBwbHlJbmhlcml0IyNwcm9wZXJ0eShTdHlsZTo6QnVpbGRlclN0YXRlJik7
IFwKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWwjI3Byb3BlcnR5KFN0eWxlOjpCdWlsZGVy
U3RhdGUmKTsgXAorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUjI3Byb3BlcnR5KFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpCiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IGlubGluZSBU
IGZvcndhcmRJbmhlcml0ZWRWYWx1ZShUJiYgdmFsdWUpIHsgcmV0dXJuIHN0ZDo6Zm9yd2FyZDxU
Pih2YWx1ZSk7IH0KIGlubGluZSBMZW5ndGggZm9yd2FyZEluaGVyaXRlZFZhbHVlKGNvbnN0IExl
bmd0aCYgdmFsdWUpIHsgYXV0byBjb3B5ID0gdmFsdWU7IHJldHVybiBjb3B5OyB9CkBAIC0xMDks
MTI2ICsxMDksMTI2IEBAIHB1YmxpYzoKICAgICBERUNMQVJFX1BST1BFUlRZX0NVU1RPTV9IQU5E
TEVSUyhab29tKTsKIAogICAgIC8vIEN1c3RvbSBoYW5kbGluZyBvZiBpbml0aWFsICsgaW5oZXJp
dCB2YWx1ZSBzZXR0aW5nIG9ubHkuCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsV2Via2l0
TWFza0ltYWdlKFN0eWxlUmVzb2x2ZXImKSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVy
aXRXZWJraXRNYXNrSW1hZ2UoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYp
IHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZShTdHlsZTo6
QnVpbGRlclN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0V2Via2l0TWFz
a0ltYWdlKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAgICBz
dGF0aWMgdm9pZCBhcHBseUluaGVyaXRGb250RmVhdHVyZVNldHRpbmdzKFN0eWxlOjpCdWlsZGVy
U3RhdGUmKSB7IH0KICNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlUmVz
b2x2ZXImKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxGb250VmFyaWF0aW9uU2V0
dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5o
ZXJpdEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZTo6QnVpbGRlclN0YXRlJikgeyB9CiAjZW5k
aWYKIAogICAgIC8vIEN1c3RvbSBoYW5kbGluZyBvZiBpbmhlcml0ICsgdmFsdWUgc2V0dGluZyBv
bmx5LgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGVSZXNvbHZlciYp
OwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlUmVzb2x2ZXImLCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdERpc3BsYXkoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwogCiAgICAgLy8gQ3VzdG9tIGhhbmRsaW5nIG9mIHZhbHVl
IHNldHRpbmcgb25seS4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQmFzZWxpbmVTaGlmdChT
dHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlRGly
ZWN0aW9uKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRp
YyB2b2lkIGFwcGx5SW5pdGlhbFRleHRBbGlnbihTdHlsZVJlc29sdmVyJik7Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZVRleHRBbGlnbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0eWxlUmVzb2x2ZXImLCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24o
U3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUJh
c2VsaW5lU2hpZnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZURpcmVjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVmVydGljYWxBbGlnbihTdHlsZTo6QnVpbGRl
clN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxUZXh0QWxp
Z24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVUZXh0
QWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQg
YXBwbHlWYWx1ZVdlYmtpdExvY2FsZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlUmVzb2x2
ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0U2l6
ZUFkanVzdChTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKICNlbmRpZgotICAgIHN0
YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0Wm9vbShTdHlsZVJlc29sdmVyJiwgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGVSZXNvbHZl
ciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUFsdChTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2lsbENoYW5nZShT
dHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Vi
a2l0VGV4dFpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVBbHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdpbGxDaGFuZ2UoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykK
LSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ29sb3JTY2hlbWUoU3R5bGVSZXNvbHZlciYsIENT
U1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAKLSAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlU3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlWYWx1ZVN0cm9rZUNvbG9yKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZTo6QnVpbGRlclN0YXRl
JiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUlu
aXRpYWxDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1
c3RvbVByb3BlcnR5KiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSk7Ci0gICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0Q3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUpOwotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
UmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiwgQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZSYpOworICAg
IHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBBdG9tU3RyaW5n
JiBuYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiwgY29u
c3QgQXRvbVN0cmluZyYgbmFtZSk7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUN1c3RvbVBy
b3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJv
cGVydHkqLCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlJik7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGlj
IHZvaWQgcmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9p
ZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogCiAgICAgc3RhdGlj
IExlbmd0aCBtbUxlbmd0aChkb3VibGUgbW0pOwogICAgIHN0YXRpYyBMZW5ndGggaW5jaExlbmd0
aChkb3VibGUgaW5jaCk7CiAgICAgc3RhdGljIGJvb2wgZ2V0UGFnZVNpemVGcm9tTmFtZShDU1NQ
cmltaXRpdmVWYWx1ZSogcGFnZVNpemVOYW1lLCBDU1NQcmltaXRpdmVWYWx1ZSogcGFnZU9yaWVu
dGF0aW9uLCBMZW5ndGgmIHdpZHRoLCBMZW5ndGgmIGhlaWdodCk7CiAKICAgICB0ZW1wbGF0ZSA8
Q1NTUHJvcGVydHlJRCBpZD4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVRleHRPckJveFNoYWRvd1Zh
bHVlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBib29sIGlzVmFsaWRE
aXNwbGF5VmFsdWUoU3R5bGVSZXNvbHZlciYsIERpc3BsYXlUeXBlKTsKKyAgICBzdGF0aWMgdm9p
ZCBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1
ZSYpOworICAgIHN0YXRpYyBib29sIGlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIERpc3BsYXlUeXBlKTsKIAogICAgIGVudW0gQ291bnRlckJlaGF2aW9yIHtJbmNyZW1l
bnQgPSAwLCBSZXNldH07CiAgICAgdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVo
YXZpb3I+Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVy
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Q291bnRlcihTdHlsZTo6QnVpbGRlclN0
YXRlJik7CiAgICAgdGVtcGxhdGUgPENvdW50ZXJCZWhhdmlvciBjb3VudGVyQmVoYXZpb3I+Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYsIENTU1ZhbHVlJik7CiAKICAgICBzdGF0aWMgZmxvYXQgbGFyZ2VyRm9udFNpemUoZmxvYXQg
c2l6ZSk7CiAgICAgc3RhdGljIGZsb2F0IHNtYWxsZXJGb250U2l6ZShmbG9hdCBzaXplKTsKLSAg
ICBzdGF0aWMgZmxvYXQgZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZVJlc29s
dmVyJik7CisgICAgc3RhdGljIGZsb2F0IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogfTsKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZURpcmVjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldERpcmVjdGlvbihkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24odHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0RGlyZWN0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXREaXJlY3Rpb24odHJ1
ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4
dEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0QWxpZ24o
UmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0QWxpZ24oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldFRleHRBbGlnbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRy
dWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
QWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEFsaWduKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEFsaWduKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFRleHRBbGlnbihzdHlsZVJlc29sdmVyLCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldFRleHRBbGlnbih0cnVlKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRUZXh0QWxpZ24oU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGV4dEFsaWduKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OnJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVjdGl2
ZVpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIC8vIFJlc2V0
IHRoZSB6b29tIGluIGVmZmVjdC4gVGhpcyBhbGxvd3MgdGhlIHNldFpvb20gbWV0aG9kIHRvIGFj
Y3VyYXRlbHkgY29tcHV0ZSBhIG5ldyB6b29tIGluIGVmZmVjdC4KLSAgICBzdHlsZVJlc29sdmVy
LnNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpID8gc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5lZmZlY3RpdmVab29tKCkgOiBSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpvb20oYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkuZWZmZWN0aXZlWm9vbSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFpvb20oU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHJlc2V0RWZmZWN0aXZlWm9v
bShzdHlsZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldFpvb20oUmVuZGVyU3R5bGU6
OmluaXRpYWxab29tKCkpOworICAgIHJlc2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRab29tKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdFpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewot
ICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldFpvb20oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT56b29tKCkpOworICAgIHJlc2V0
RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRab29tKGJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnpvb20oKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlWm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSk7CiAKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENT
U1ZhbHVlTm9ybWFsKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVy
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9v
bSgpKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CisgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zZXRab29tKFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpKTsKICAgICB9
IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KSB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShSZW5kZXJTdHlsZTo6aW5pdGlh
bFpvb20oKSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5kZXJTdHlsZTo6aW5p
dGlhbFpvb20oKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zZXRFZmZlY3RpdmVab29tKFJlbmRl
clN0eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20oUmVu
ZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
dmFsdWVJRCgpID09IENTU1ZhbHVlRG9jdW1lbnQpIHsKLSAgICAgICAgZmxvYXQgZG9jWm9vbSA9
IHN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gc3R5bGVSZXNvbHZlci5yb290RWxl
bWVudFN0eWxlKCktPnpvb20oKSA6IFJlbmRlclN0eWxlOjppbml0aWFsWm9vbSgpOwotICAgICAg
ICBzdHlsZVJlc29sdmVyLnNldEVmZmVjdGl2ZVpvb20oZG9jWm9vbSk7Ci0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Wm9vbShkb2Nab29tKTsKKyAgICAgICAgZmxvYXQgZG9jWm9vbSA9IGJ1aWxk
ZXJTdGF0ZS5yb290RWxlbWVudFN0eWxlKCkuem9vbSgpOworICAgICAgICBidWlsZGVyU3RhdGUu
c2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20o
ZG9jWm9vbSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2UoKSkg
ewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7CisgICAgICAgIHJl
c2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoZmxvYXQgcGVyY2Vu
dCA9IHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Wm9vbShwZXJjZW50IC8gMTAwLjBmKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
ZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUu
aXNOdW1iZXIoKSkgewotICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oc3R5bGVSZXNvbHZlcik7
CisgICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAo
ZmxvYXQgbnVtYmVyID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zZXRab29tKG51bWJlcik7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUu
c2V0Wm9vbShudW1iZXIpOwogICAgIH0KIH0KIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ3Vz
dG9tOjptbUxlbmd0aChkb3VibGUgbW0pCkBAIC0zMTUsMzIgKzMxNSwzMiBAQCBib29sIFN0eWxl
QnVpbGRlckN1c3RvbTo6Z2V0UGFnZVNpemVGcm9tTmFtZShDU1NQcmltaXRpdmVWYWx1ZSogcGFn
ZVNpemVOYW1lLCBDUwogICAgIHJldHVybiB0cnVlOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmVydGljYWxBbGln
bihwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFZlcnRp
Y2FsQWxpZ24ocHJpbWl0aXZlVmFsdWUpOwogICAgIGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRWZXJ0aWNhbEFsaWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRU
b0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxj
dWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRWZXJ0aWNhbEFs
aWduTGVuZ3RoKHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oYnVpbGRl
clN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSkpOwogfQogCiAjaWYgRU5BQkxFKENT
U19JTUFHRV9SRVNPTFVUSU9OKQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRp
b24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkt
PmltYWdlUmVzb2x1dGlvblNuYXAoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJ
bWFnZVJlc29sdXRpb24oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRp
b24oKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNl
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmltYWdlUmVzb2x1dGlvblNvdXJjZSgpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25TbmFwKGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpLmltYWdlUmVzb2x1dGlvblNuYXAoKSk7CisgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmlt
YWdlUmVzb2x1dGlvbigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsSW1hZ2VSZXNvbHV0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShSZW5kZXJTdHlsZTo6aW5pdGlh
bEltYWdlUmVzb2x1dGlvblNvdXJjZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dEltYWdlUmVzb2x1dGlvblNuYXAoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25T
bmFwKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uKFJl
bmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdl
UmVzb2x1dGlvblNvdXJjZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJl
c29sdXRpb25TbmFwKFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb24oUmVuZGVyU3R5bGU6
OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVJbWFnZVJlc29sdXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgSW1hZ2VSZXNvbHV0aW9uU291cmNlIHNvdXJj
ZSA9IFJlbmRlclN0eWxlOjppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCk7CiAgICAgSW1h
Z2VSZXNvbHV0aW9uU25hcCBzbmFwID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRp
b25TbmFwKCk7CkBAIC0zNTQsMjAgKzM1NCwyMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVJbWFnZVJlc29sdXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZQog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXNvbHV0aW9uID0gcHJpbWl0aXZlVmFsdWUuZG91
YmxlVmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19EUFBYKTsKICAgICB9Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc291cmNlKTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNuYXAoc25hcCk7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKHNvdXJjZSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFwKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb24ocmVzb2x1dGlvbik7
CiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZShTdHlsZVJlc29sdmVyJikg
eyB9CitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFNpemUoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbFNpemUoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
cmVzZXRQYWdlU2l6ZVR5cGUoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5yZXNldFBhZ2VT
aXplVHlwZSgpOwogCiAgICAgaWYgKCFpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMzkwLDcgKzM5MCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAg
ICAgICAgICAvLyA8bGVuZ3RoPnsyfQogICAgICAgICAgICAgaWYgKCFzZWNvbmRQcmltaXRpdmVW
YWx1ZS5pc0xlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIENT
U1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0
YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEu
MGYpOworICAgICAgICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0
YSA9IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1
c3RlZFpvb20oMS4wZik7CiAgICAgICAgICAgICB3aWR0aCA9IGZpcnN0UHJpbWl0aXZlVmFsdWUu
Y29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgICAgIGhlaWdo
dCA9IHNlY29uZFByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252ZXJzaW9u
RGF0YSk7CiAgICAgICAgIH0gZWxzZSB7CkBAIC00MTEsNyArNDExLDcgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBDU1MKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpIHsKICAg
ICAgICAgICAgIC8vIDxsZW5ndGg+CiAgICAgICAgICAgICBwYWdlU2l6ZVR5cGUgPSBQQUdFX1NJ
WkVfUkVTT0xWRUQ7Ci0gICAgICAgICAgICB3aWR0aCA9IGhlaWdodCA9IHByaW1pdGl2ZVZhbHVl
LmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpKTsKKyAgICAgICAgICAg
IHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGJ1
aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpv
b20oMS4wZikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChwcmltaXRp
dmVWYWx1ZS52YWx1ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgMDoKQEAgLTQzNywyOSArNDM3
LDI5IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVNpemUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTCiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFBhZ2VTaXplVHlwZShw
YWdlU2l6ZVR5cGUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNpemUoeyBX
VEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQpIH0pOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFBhZ2VTaXplVHlwZShwYWdlU2l6ZVR5cGUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFBhZ2VTaXplKHsgV1RGTW92ZSh3aWR0aCksIFdURk1vdmUoaGVpZ2h0KSB9KTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0SW5kZW50
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChMZW5n
dGggeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRJbmRlbnQoKSB9KTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KExlbmd0aCB7IGJ1aWxkZXJTdGF0ZS5w
YXJlbnRTdHlsZSgpLnRleHRJbmRlbnQoKSB9KTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLT50ZXh0SW5kZW50TGluZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFRleHRJbmRlbnRUeXBlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dElu
ZGVudFR5cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudExpbmUo
YnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEluZGVudExpbmUoKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudFR5cGUoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCkudGV4dEluZGVudFR5cGUoKSk7CiAjZW5kaWYKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxUZXh0SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRJ
bmRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRl
bnQoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudChSZW5kZXJTdHls
ZTo6aW5pdGlhbFRleHRJbmRlbnQoKSk7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRMaW5lKFJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEluZGVudExpbmUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5k
ZW50VHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRUeXBlKCkpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKFJlbmRlclN0eWxlOjppbml0aWFsVGV4
dEluZGVudExpbmUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudFR5
cGUoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0SW5kZW50VHlwZSgpKTsKICNlbmRpZgogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5kZW50KFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgTGVuZ3RoIGxlbmd0aE9y
UGVyY2VudGFnZVZhbHVlOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCkBAIC00NjksNyArNDY5LDcg
QEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEluZGVudChT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2Fz
dDxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAgICAgaWYgKCFw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkpCi0gICAgICAgICAgICBsZW5ndGhPclBlcmNlbnRhZ2VW
YWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJz
aW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbj4oc3R5bGVSZXNv
bHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CisgICAgICAgICAgICBs
ZW5ndGhPclBlcmNlbnRhZ2VWYWx1ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxG
aXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29u
dmVyc2lvbj4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7CiAjaWYg
RU5BQkxFKENTUzNfVEVYVCkKICAgICAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpID09IENTU1ZhbHVlV2Via2l0RWFjaExpbmUpCiAgICAgICAgICAgICB0ZXh0SW5kZW50TGlu
ZVZhbHVlID0gVGV4dEluZGVudExpbmU6OkVhY2hMaW5lOwpAQCAtNDgxLDEwICs0ODEsMTAgQEAg
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEluZGVudChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmUKICAgICBpZiAobGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUu
aXNVbmRlZmluZWQoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRUZXh0SW5kZW50KFdURk1vdmUobGVuZ3RoT3JQZXJjZW50YWdlVmFsdWUpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KFdURk1vdmUobGVuZ3RoT3JQZXJj
ZW50YWdlVmFsdWUpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUodGV4dEluZGVudExpbmVWYWx1ZSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50VHlwZSh0ZXh0SW5kZW50VHlwZVZhbHVl
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50TGluZSh0ZXh0SW5kZW50
TGluZVZhbHVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZSh0
ZXh0SW5kZW50VHlwZVZhbHVlKTsKICNlbmRpZgogfQogCkBAIC00OTMsMjkgKzQ5MywyOSBAQCBl
bnVtIEJvcmRlckltYWdlTW9kaWZpZXJUeXBlIHsgT3V0c2V0LCBSZXBlYXQsIFNsaWNlLCBXaWR0
aCB9OwogdGVtcGxhdGUgPEJvcmRlckltYWdlVHlwZSB0eXBlLCBCb3JkZXJJbWFnZU1vZGlmaWVy
VHlwZSBtb2RpZmllcj4KIGNsYXNzIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRWYWx1ZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUlt
YWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5l
UGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkpOwogICAgICAg
ICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAgICAgICAgICAg
aW1hZ2UuY29weU91dHNldEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
KSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShidWlsZGVyU3Rh
dGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgUmVw
ZWF0OgotICAgICAgICAgICAgaW1hZ2UuY29weVJlcGVhdEZyb20oZ2V0VmFsdWUoc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShn
ZXRWYWx1ZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgU2xpY2U6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNG
cm9tKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAg
aW1hZ2UuY29weUltYWdlU2xpY2VzRnJvbShnZXRWYWx1ZShidWlsZGVyU3RhdGUucGFyZW50U3R5
bGUoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgV2lkdGg6Ci0gICAgICAg
ICAgICBpbWFnZS5jb3B5Qm9yZGVyU2xpY2VzRnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdl
dFZhbHVlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCksIGltYWdl
KTsKKyAgICAgICAgc2V0VmFsdWUoYnVpbGRlclN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9
CiAKLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRpYWxWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKICAgICB7Ci0gICAgICAgIE5pbmVQaWVjZUltYWdlIGlt
YWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAgICAgICBOaW5lUGllY2VJ
bWFnZSBpbWFnZShnZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkpOwogICAgICAgICBzd2l0
Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgogICAgICAgICAgICAgaW1hZ2Uu
c2V0T3V0c2V0KExlbmd0aEJveCgwKSk7CkBAIC01MzgsNTMgKzUzOCw1MyBAQCBwdWJsaWM6CiAg
ICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXModHlwZSA9PSBCb3JkZXJJbWFnZSA/IGxl
bmd0aEJveCA6IExlbmd0aEJveCgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgaW1hZ2UpOworICAgICAgICBz
ZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSwgaW1hZ2UpOwogICAgIH0KIAotICAgIHN0YXRp
YyB2b2lkIGFwcGx5VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUm
IHZhbHVlKQorICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiAgICAgewotICAgICAgICBOaW5lUGllY2VJ
bWFnZSBpbWFnZShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCkpKTsKKyAgICAgICAgTmlu
ZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoYnVpbGRlclN0YXRlLnN0eWxlKCkpKTsKICAgICAg
ICAgc3dpdGNoIChtb2RpZmllcikgewogICAgICAgICBjYXNlIE91dHNldDoKLSAgICAgICAgICAg
IGltYWdlLnNldE91dHNldChzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlUXVhZCh2YWx1ZSkpOworICAgICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KGJ1aWxkZXJTdGF0
ZS5zdHlsZU1hcCgpLm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIGNhc2UgUmVwZWF0OgotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVJlcGVhdCh2YWx1ZSwgaW1hZ2UpOworICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2VSZXBlYXQodmFs
dWUsIGltYWdlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNsaWNlOgotICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT5tYXBOaW5lUGllY2VJbWFnZVNsaWNl
KHZhbHVlLCBpbWFnZSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBO
aW5lUGllY2VJbWFnZVNsaWNlKHZhbHVlLCBpbWFnZSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBXaWR0aDoKLSAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyhzdHls
ZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOworICAg
ICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xpY2VzKGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLm1h
cE5pbmVQaWVjZUltYWdlUXVhZCh2YWx1ZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7CisgICAg
ICAgIHNldFZhbHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFsdWUoY29uc3QgUmVu
ZGVyU3R5bGUqIHN0eWxlKQorICAgIHN0YXRpYyBjb25zdCBOaW5lUGllY2VJbWFnZSYgZ2V0VmFs
dWUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIHR5cGUg
PT0gQm9yZGVySW1hZ2UgPyBzdHlsZS0+Ym9yZGVySW1hZ2UoKSA6IHN0eWxlLT5tYXNrQm94SW1h
Z2UoKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS5ib3JkZXJJ
bWFnZSgpIDogc3R5bGUubWFza0JveEltYWdlKCk7CiAgICAgfQogCi0gICAgc3RhdGljIHZvaWQg
c2V0VmFsdWUoUmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdmFsdWUp
CisgICAgc3RhdGljIHZvaWQgc2V0VmFsdWUoUmVuZGVyU3R5bGUmIHN0eWxlLCBjb25zdCBOaW5l
UGllY2VJbWFnZSYgdmFsdWUpCiAgICAgewotICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJ
bWFnZSA/IHN0eWxlLT5zZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS0+c2V0TWFza0JveElt
YWdlKHZhbHVlKTsKKyAgICAgICAgcmV0dXJuIHR5cGUgPT0gQm9yZGVySW1hZ2UgPyBzdHlsZS5z
ZXRCb3JkZXJJbWFnZSh2YWx1ZSkgOiBzdHlsZS5zZXRNYXNrQm94SW1hZ2UodmFsdWUpOwogICAg
IH0KIH07CiAKICNkZWZpbmUgREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJRklFUl9IQU5ETEVSKHR5
cGUsIG1vZGlmaWVyKSBcCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdCMjdHlwZSMjbW9kaWZpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikgXAoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXQjI3R5cGUjI21vZGlmaWVy
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9w
ZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaGVyaXRWYWx1
ZShzdHlsZVJlc29sdmVyKTsgXAorICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVy
PHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlJbmhlcml0VmFsdWUoYnVpbGRlclN0YXRlKTsgXAogfSBc
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbCMjdHlwZSMjbW9k
aWZpZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikgXAoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWwjI3R5cGUjI21vZGlmaWVyKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdl
TW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaXRpYWxWYWx1ZShzdHlsZVJlc29sdmVy
KTsgXAorICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyPHR5cGUsIG1vZGlmaWVy
Pjo6YXBwbHlJbml0aWFsVmFsdWUoYnVpbGRlclN0YXRlKTsgXAogfSBcCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWUjI3R5cGUjI21vZGlmaWVyKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkgXAoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlIyN0eXBlIyNtb2RpZmllcihTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkgXAogeyBcCi0gICAgQXBwbHlQcm9w
ZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseVZhbHVlKHN0eWxl
UmVzb2x2ZXIsIHZhbHVlKTsgXAorICAgIEFwcGx5UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVy
PHR5cGUsIG1vZGlmaWVyPjo6YXBwbHlWYWx1ZShidWlsZGVyU3RhdGUsIHZhbHVlKTsgXAogfQog
CiBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hBTkRMRVIoQm9yZGVySW1hZ2UsIE91dHNl
dCkKQEAgLTU5OCwxNiArNTk4LDE2IEBAIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFO
RExFUihXZWJraXRNYXNrQm94SW1hZ2UsIFdpZHRoKQogCiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJ
WklORykKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRMaW5l
SGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdExpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdo
dChMZW5ndGggeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmxpbmVIZWlnaHQoKSB9KTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoTGVuZ3Ro
IHsgc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkgfSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChMZW5ndGggeyBidWlsZGVy
U3RhdGUucGFyZW50U3R5bGUoKS5saW5lSGVpZ2h0KCkgfSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0U3BlY2lmaWVkTGluZUhlaWdodChMZW5ndGggeyBidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKS5zcGVjaWZpZWRMaW5lSGVpZ2h0KCkgfSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxM
aW5lSGVpZ2h0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldExpbmVIZWlnaHQoUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5l
SGVpZ2h0KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhl
aWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWNpZmllZExpbmVIZWlnaHQoKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVI
ZWlnaHQoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0U3BlY2lmaWVkTGluZUhlaWdo
dChSZW5kZXJTdHlsZTo6aW5pdGlhbFNwZWNpZmllZExpbmVIZWlnaHQoKSk7CiB9CiAKIHN0YXRp
YyBpbmxpbmUgZmxvYXQgY29tcHV0ZUJhc2VTcGVjaWZpZWRGb250U2l6ZShjb25zdCBEb2N1bWVu
dCYgZG9jdW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgYm9vbCBwZXJjZW50YWdlQXV0
b3NpemluZ0VuYWJsZWQpCkBAIC02NTQsOSArNjU0LDkgQEAgc3RhdGljIGlubGluZSBmbG9hdCBj
b21wdXRlTGluZUhlaWdodE11bHRpcGxpZXJEdWVUb0ZvbnRTaXplKGNvbnN0IERvY3VtZW50JiBk
b2MKICAgICByZXR1cm4gMTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVMaW5l
SGVpZ2h0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVl
KQogewotICAgIE9wdGlvbmFsPExlbmd0aD4gbGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIDEpOworICAgIE9w
dGlvbmFsPExlbmd0aD4gbGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dExpbmVIZWlnaHQoYnVpbGRlclN0YXRlLCB2YWx1ZSwgMSk7CiAgICAgaWYgKCFsaW5lSGVpZ2h0
KQogICAgICAgICByZXR1cm47CiAKQEAgLTY2NSwxNDQgKzY2NSwxNDQgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmUKICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gbGluZUhlaWdodC52YWx1
ZSgpOwogICAgIGVsc2UgewogICAgICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGF1dG8gbXVsdGlwbGllciA9IGNv
bXB1dGVMaW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNpemUoc3R5bGVSZXNvbHZlci5kb2N1
bWVudCgpLCAqc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBwcmltaXRpdmVWYWx1ZSk7CisgICAgICAg
IGF1dG8gbXVsdGlwbGllciA9IGNvbXB1dGVMaW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNp
emUoYnVpbGRlclN0YXRlLmRvY3VtZW50KCksIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBwcmltaXRp
dmVWYWx1ZSk7CiAgICAgICAgIGlmIChtdWx0aXBsaWVyID09IDEpCiAgICAgICAgICAgICBjb21w
dXRlZExpbmVIZWlnaHQgPSBsaW5lSGVpZ2h0LnZhbHVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dExpbmVIZWlnaHQoc3R5bGVSZXNvbHZlciwgdmFsdWUsIG11bHRpcGxpZXIpLnZhbHVlKCk7Cisg
ICAgICAgICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRMaW5lSGVpZ2h0KGJ1aWxkZXJTdGF0ZSwgdmFsdWUsIG11bHRpcGxpZXIpLnZhbHVlKCk7
CiAgICAgfQogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRMaW5lSGVpZ2h0KFdURk1v
dmUoY29tcHV0ZWRMaW5lSGVpZ2h0KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRT
cGVjaWZpZWRMaW5lSGVpZ2h0KFdURk1vdmUobGluZUhlaWdodC52YWx1ZSgpKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0TGluZUhlaWdodChXVEZNb3ZlKGNvbXB1dGVkTGluZUhlaWdo
dCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFNwZWNpZmllZExpbmVIZWlnaHQoV1RG
TW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsKIH0KIAogI2VuZGlmCiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0T3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdE91dGxpbmVTdHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5vdXRsaW5lU3R5bGVJc0F1dG8oKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT5vdXRsaW5lU3R5bGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0
eWxlSXNBdXRvKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm91dGxpbmVTdHlsZUlzQXV0bygp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGUoYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkub3V0bGluZVN0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxP
dXRsaW5lU3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlSXNBdXRvKFJlbmRlclN0eWxlOjpp
bml0aWFsT3V0bGluZVN0eWxlSXNBdXRvKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0T3V0bGluZVN0eWxlKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlSXNBdXRvKFJlbmRlclN0eWxlOjpp
bml0aWFsT3V0bGluZVN0eWxlSXNBdXRvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dE91dGxpbmVTdHlsZShSZW5kZXJTdHlsZTo6aW5pdGlhbEJvcmRlclN0eWxlKCkpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlT3V0bGluZVN0eWxlKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlSXNBdXRvKHByaW1pdGl2ZVZhbHVl
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShwcmltaXRpdmVW
YWx1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3V0bGluZVN0eWxlSXNBdXRvKHBy
aW1pdGl2ZVZhbHVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGUo
cHJpbWl0aXZlVmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ2xpcChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKExl
bmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldEhhc0NsaXAoZmFsc2UpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0NsaXAoZmFsc2UpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENsaXAoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xpcChT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byogcGFyZW50U3R5
bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7Ci0gICAgaWYgKCFwYXJlbnRTdHlsZS0+
aGFzQ2xpcCgpKQotICAgICAgICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChzdHlsZVJlc29sdmVy
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAoTGVuZ3RoIHsgcGFyZW50U3R5
bGUtPmNsaXBUb3AoKSB9LCBMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcFJpZ2h0KCkgfSwKLSAg
ICAgICAgTGVuZ3RoIHsgcGFyZW50U3R5bGUtPmNsaXBCb3R0b20oKSB9LCBMZW5ndGggeyBwYXJl
bnRTdHlsZS0+Y2xpcExlZnQoKSB9KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhh
c0NsaXAodHJ1ZSk7CisgICAgYXV0byYgcGFyZW50U3R5bGUgPSBidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKTsKKyAgICBpZiAoIXBhcmVudFN0eWxlLmhhc0NsaXAoKSkKKyAgICAgICAgcmV0dXJu
IGFwcGx5SW5pdGlhbENsaXAoYnVpbGRlclN0YXRlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRDbGlwKExlbmd0aCB7IHBhcmVudFN0eWxlLmNsaXBUb3AoKSB9LCBMZW5ndGggeyBwYXJl
bnRTdHlsZS5jbGlwUmlnaHQoKSB9LAorICAgICAgICBMZW5ndGggeyBwYXJlbnRTdHlsZS5jbGlw
Qm90dG9tKCkgfSwgTGVuZ3RoIHsgcGFyZW50U3R5bGUuY2xpcExlZnQoKSB9KTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNDbGlwKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlwKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUNsaXAoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChhdXRvKiByZWN0ID0gcHJpbWl0aXZlVmFsdWUucmVj
dFZhbHVlKCkpIHsKLSAgICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAgIGF1dG8gY29udmVy
c2lvbkRhdGEgPSBidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogICAg
ICAgICBhdXRvIHRvcCA9IHJlY3QtPnRvcCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2Vy
Q29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNp
b25EYXRhKTsKICAgICAgICAgYXV0byByaWdodCA9IHJlY3QtPnJpZ2h0KCktPmNvbnZlcnRUb0xl
bmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29u
dmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRvIGJvdHRvbSA9IHJlY3QtPmJv
dHRvbSgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRD
b252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgYXV0
byBsZWZ0ID0gcmVjdC0+bGVmdCgpLT5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVy
c2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwgQXV0b0NvbnZlcnNpb24+KGNvbnZlcnNpb25EYXRh
KTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDbGlwKFdURk1vdmUodG9wKSwg
V1RGTW92ZShyaWdodCksIFdURk1vdmUoYm90dG9tKSwgV1RGTW92ZShsZWZ0KSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICAgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0Q2xpcChXVEZNb3ZlKHRvcCksIFdURk1vdmUocmlnaHQpLCBXVEZN
b3ZlKGJvdHRvbSksIFdURk1vdmUobGVmdCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRIYXNDbGlwKHRydWUpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIEFTU0VSVChwcmltaXRp
dmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAgYXBwbHlJbml0aWFs
Q2xpcChzdHlsZVJlc29sdmVyKTsKKyAgICAgICAgYXBwbHlJbml0aWFsQ2xpcChidWlsZGVyU3Rh
dGUpOwogICAgIH0KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlV2Via2l0TG9jYWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdExv
Y2FsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVl
Pih2YWx1ZSk7CiAKLSAgICBGb250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250
RGVzY3JpcHRpb24oKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1Zh
bHVlQXV0bykKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldExvY2FsZShudWxsQXRvbSgpKTsK
ICAgICBlbHNlCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRMb2NhbGUocHJpbWl0aXZlVmFs
dWUuc3RyaW5nVmFsdWUoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVdyaXRpbmdNb2RlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc2V0V3JpdGluZ01vZGUo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0V3JpdGluZ01vZGUodHJ1ZSk7CisgICAgYnVpbGRl
clN0YXRlLnNldFdyaXRpbmdNb2RlKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
OworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRXcml0aW5nTW9k
ZSh0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
V2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1Zh
bHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdl
YmtpdFRleHRPcmllbnRhdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnNldFRleHRPcmllbnRhdGlvbihk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0
VGV4dE9yaWVudGF0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogfQog
CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJWklORykKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRTaXplQWRqdXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVl
ID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZl
VmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQoQXV0b1RleHRTaXpl
QWRqdXN0bWVudCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0U2l6ZUFk
anVzdChUZXh0U2l6ZUFkanVzdG1lbnQoQXV0b1RleHRTaXplQWRqdXN0bWVudCkpOwogICAgIGVs
c2UgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCi0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3Rt
ZW50KE5vVGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChOb1RleHRTaXplQWRqdXN0bWVu
dCkpOwogICAgIGVsc2UKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2l6
ZUFkanVzdChUZXh0U2l6ZUFkanVzdG1lbnQocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKSk7
CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaXplQWRqdXN0KFRleHRTaXpl
QWRqdXN0bWVudChwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpKTsKIAotICAgIHN0eWxlUmVz
b2x2ZXIuc3RhdGUoKS5zZXRGb250RGlydHkodHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZv
bnREaXJ0eSgpOwogfQogI2VuZGlmCiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVdlYmtpdFRleHRab29tKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1
ZVdlYmtpdFRleHRab29tKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlTm9ybWFsKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRa
b29tKFRleHRab29tOjpOb3JtYWwpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRU
ZXh0Wm9vbShUZXh0Wm9vbTo6Tm9ybWFsKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVSZXNldCkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRUZXh0Wm9vbShUZXh0Wm9vbTo6UmVzZXQpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3RhdGUo
KS5zZXRGb250RGlydHkodHJ1ZSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRl
eHRab29tKFRleHRab29tOjpSZXNldCk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREaXJ0eSgp
OwogfQogCiAjaWYgRU5BQkxFKERBUktfTU9ERV9DU1MpCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb2xvclNjaGVtZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbG9yU2No
ZW1lKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbG9yU2NoZW1lKHN0eWxlUmVzb2x2
ZXIsIHZhbHVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5
U2V0Q29sb3JTY2hlbWUodHJ1ZSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29sb3JT
Y2hlbWUoU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoYnVpbGRlclN0
YXRlLCB2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlT
ZXRDb2xvclNjaGVtZSh0cnVlKTsKIH0KICNlbmRpZgogCiB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5PgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dW
YWx1ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkK
IHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NF
UlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFs
dWVOb25lKTsKICAgICAgICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VGV4dFNoYWRvdykK
LSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhudWxscHRy
KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRTaGFkb3cobnVsbHB0
cik7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Qm94U2hhZG93KG51bGxwdHIpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
Qm94U2hhZG93KG51bGxwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgYm9vbCBp
c0ZpcnN0RW50cnkgPSB0cnVlOwogICAgIGZvciAoYXV0byYgaXRlbSA6IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHNoYWRvd1ZhbHVlID0gZG93bmNhc3Q8
Q1NTU2hhZG93VmFsdWU+KGl0ZW0uZ2V0KCkpOwotICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRh
ID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAg
ICAgICAgYXV0byBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCk7CiAgICAgICAgIGludCB4ID0gc2hhZG93VmFsdWUueC0+Y29tcHV0ZUxlbmd0
aDxpbnQ+KGNvbnZlcnNpb25EYXRhKTsKICAgICAgICAgaW50IHkgPSBzaGFkb3dWYWx1ZS55LT5j
b21wdXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBpbnQgYmx1ciA9IHNo
YWRvd1ZhbHVlLmJsdXIgPyBzaGFkb3dWYWx1ZS5ibHVyLT5jb21wdXRlTGVuZ3RoPGludD4oY29u
dmVyc2lvbkRhdGEpIDogMDsKQEAgLTgxMCw5NCArODEwLDk0IEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlCiAgICAgICAgIFNoYWRvd1N0eWxlIHNoYWRvd1N0eWxlID0gc2hhZG93VmFsdWUuc3R5
bGUgJiYgc2hhZG93VmFsdWUuc3R5bGUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUluc2V0ID8gSW5z
ZXQgOiBOb3JtYWw7CiAgICAgICAgIENvbG9yIGNvbG9yOwogICAgICAgICBpZiAoc2hhZG93VmFs
dWUuY29sb3IpCi0gICAgICAgICAgICBjb2xvciA9IHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJp
bWl0aXZlVmFsdWUoKnNoYWRvd1ZhbHVlLmNvbG9yKTsKKyAgICAgICAgICAgIGNvbG9yID0gYnVp
bGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpzaGFkb3dWYWx1ZS5jb2xvcik7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5j
b2xvcigpOworICAgICAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5jb2xvcigp
OwogICAgICAgICBhdXRvIHNoYWRvd0RhdGEgPSBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KEludFBv
aW50KHgsIHkpLCBibHVyLCBzcHJlYWQsIHNoYWRvd1N0eWxlLCBwcm9wZXJ0eSA9PSBDU1NQcm9w
ZXJ0eVdlYmtpdEJveFNoYWRvdywgY29sb3IuaXNWYWxpZCgpID8gY29sb3IgOiBDb2xvcjo6dHJh
bnNwYXJlbnQpOwogICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0U2hhZG93
KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KFdURk1v
dmUoc2hhZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRUZXh0U2hhZG93KFdURk1vdmUoc2hhZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBh
ZGQgdG8gdGhlIGxpc3QgaWYgdGhpcyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CiAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hhZG93KFdURk1v
dmUoc2hhZG93RGF0YSksICFpc0ZpcnN0RW50cnkpOyAvLyBhZGQgdG8gdGhlIGxpc3QgaWYgdGhp
cyBpcyBub3QgdGhlIGZpcnN0IGVudHJ5CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRCb3hTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFk
ZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAgICAgICAgaXNG
aXJzdEVudHJ5ID0gZmFsc2U7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbFRleHRTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dFNoYWRv
dyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93KG51bGxwdHIpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFRleHRTaGFkb3cobnVsbHB0cik7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0VGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0U2hh
ZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3coc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50
ZXh0U2hhZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCktPnRleHRTaGFkb3coKSkgOiBudWxscHRyKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRUZXh0U2hhZG93KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRleHRTaGFkb3co
KSA/IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRl
eHRTaGFkb3coKSkgOiBudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlVGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVUZXh0U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlUZXh0
U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dW
YWx1ZTxDU1NQcm9wZXJ0eVRleHRTaGFkb3c+KGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyhTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaXRpYWxCb3hTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hhZG93KG51bGxwdHIpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEJveFNoYWRvdyhudWxscHRyKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3coU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0Qm94U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
IHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEJveFNoYWRvdyhzdHlsZVJlc29sdmVy
LnBhcmVudFN0eWxlKCktPmJveFNoYWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ib3hTaGFkb3coKSkgOiBudWxscHRyKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRCb3hTaGFkb3coYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCkuYm94U2hhZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCpidWlsZGVyU3RhdGUucGFy
ZW50U3R5bGUoKS5ib3hTaGFkb3coKSkgOiBudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUs
IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1By
b3BlcnR5Qm94U2hhZG93PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JC
b3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eUJveFNoYWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0
Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXBwbHlJbml0aWFsQm94U2hhZG93KHN0eWxl
UmVzb2x2ZXIpOworICAgIGFwcGx5SW5pdGlhbEJveFNoYWRvdyhidWlsZGVyU3RhdGUpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEJveFNo
YWRvdyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRCb3hTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGFwcGx5SW5oZXJpdEJveFNoYWRvdyhzdHlsZVJlc29s
dmVyKTsKKyAgICBhcHBseUluaGVyaXRCb3hTaGFkb3coYnVpbGRlclN0YXRlKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhcHBseVRl
eHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93PihzdHlsZVJlc29s
dmVyLCB2YWx1ZSk7CisgICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9wZXJ0eVdl
YmtpdEJveFNoYWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRp
YWxGb250RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0
aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5m
b250RGVzY3JpcHRpb24oKTsKICAgICBhdXRvIGluaXRpYWxEZXNjID0gRm9udENhc2NhZGVEZXNj
cmlwdGlvbigpOwogCiAgICAgLy8gV2UgbmVlZCB0byBhZGp1c3QgdGhlIHNpemUgdG8gYWNjb3Vu
dCBmb3IgdGhlIGdlbmVyaWMgZmFtaWx5IGNoYW5nZSBmcm9tIG1vbm9zcGFjZSB0byBub24tbW9u
b3NwYWNlLgogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpKSB7
CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNpemVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9u
LmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNl
dEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXpl
SWRlbnRpZmllciwgZmFsc2UsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkpOworICAgICAgICAg
ICAgYnVpbGRlclN0YXRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRT
aXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgZmFsc2UsIGJ1aWxkZXJTdGF0ZS5kb2N1bWVu
dCgpKSk7CiAgICAgfQogICAgIGlmICghaW5pdGlhbERlc2MuZmlyc3RGYW1pbHkoKS5pc0VtcHR5
KCkpCiAgICAgICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhpbml0aWFsRGVzYy5mYW1p
bGllcygpKTsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udEZhbWls
eShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVz
Y3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAg
IGF1dG8gcGFyZW50Rm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gcGFyZW50Rm9udERlc2Ny
aXB0aW9uID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0RmFtaWxpZXMocGFyZW50Rm9udERlc2NyaXB0aW9uLmZh
bWlsaWVzKCkpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJc1NwZWNpZmllZEZvbnQocGFyZW50
Rm9udERlc2NyaXB0aW9uLmlzU3BlY2lmaWVkRm9udCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJT
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHZhbHVlTGlz
dCA9IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpOwogCi0gICAgYXV0byBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9u
KCk7CiAgICAgLy8gQmVmb3JlIG1hcHBpbmcgaW4gYSBuZXcgZm9udC1mYW1pbHkgcHJvcGVydHks
IHdlIHNob3VsZCByZXNldCB0aGUgZ2VuZXJpYyBmYW1pbHkuCiAgICAgYm9vbCBvbGRGYW1pbHlV
c2VkRml4ZWREZWZhdWx0U2l6ZSA9IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXpl
KCk7CiAKQEAgLTkxNiw3ICs5MTYsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVGb250RmFtaWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgICAg
ICB9IGVsc2UgewogICAgICAgICAgICAgc3dpdGNoIChjb250ZW50VmFsdWUudmFsdWVJRCgpKSB7
CiAgICAgICAgICAgICBjYXNlIENTU1ZhbHVlV2Via2l0Qm9keToKLSAgICAgICAgICAgICAgICBm
YW1pbHkgPSBzdHlsZVJlc29sdmVyLnNldHRpbmdzKCkuc3RhbmRhcmRGb250RmFtaWx5KCk7Cisg
ICAgICAgICAgICAgICAgZmFtaWx5ID0gYnVpbGRlclN0YXRlLmRvY3VtZW50KCkuc2V0dGluZ3Mo
KS5zdGFuZGFyZEZvbnRGYW1pbHkoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgQ1NTVmFsdWVTZXJpZjoKICAgICAgICAgICAgICAgICBmYW1pbHkgPSBzZXJpZkZh
bWlseTsKQEAgLTk2NCwzNiArOTY0LDM2IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlCiAKICAg
ICBpZiAoZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSAhPSBvbGRGYW1pbHlV
c2VkRml4ZWREZWZhdWx0U2l6ZSkgewogICAgICAgICBpZiAoQ1NTVmFsdWVJRCBzaXplSWRlbnRp
ZmllciA9IGZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZUFzSWRlbnRpZmllcigpKQotICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpm
b250U2l6ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZh
dWx0U2l6ZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKSk7CisgICAgICAgICAgICBidWlsZGVy
U3RhdGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3
b3JkKHNpemVJZGVudGlmaWVyLCAhb2xkRmFtaWx5VXNlZEZpeGVkRGVmYXVsdFNpemUsIGJ1aWxk
ZXJTdGF0ZS5kb2N1bWVudCgpKSk7CiAgICAgfQogCi0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGlu
ZSBib29sIFN0eWxlQnVpbGRlckN1c3RvbTo6aXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBEaXNwbGF5VHlwZSBkaXNwbGF5KQoraW5saW5lIGJvb2wgU3R5
bGVCdWlsZGVyQ3VzdG9tOjppc1ZhbGlkRGlzcGxheVZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgRGlzcGxheVR5cGUgZGlzcGxheSkKIHsKLSAgICBpZiAoaXM8U1ZHRWxl
bWVudD4oc3R5bGVSZXNvbHZlci5lbGVtZW50KCkpICYmIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgaWYgKGlzPFNWR0VsZW1lbnQ+KGJ1
aWxkZXJTdGF0ZS5lbGVtZW50KCkpICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgp
ID09IFBzZXVkb0lkOjpOb25lKQogICAgICAgICByZXR1cm4gZGlzcGxheSA9PSBEaXNwbGF5VHlw
ZTo6SW5saW5lIHx8IGRpc3BsYXkgPT0gRGlzcGxheVR5cGU6OkJsb2NrIHx8IGRpc3BsYXkgPT0g
RGlzcGxheVR5cGU6Ok5vbmU7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0RGlzcGxheShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRE
aXNwbGF5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBEaXNwbGF5
VHlwZSBkaXNwbGF5ID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5kaXNwbGF5KCk7Ci0g
ICAgaWYgKGlzVmFsaWREaXNwbGF5VmFsdWUoc3R5bGVSZXNvbHZlciwgZGlzcGxheSkpCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0RGlzcGxheShkaXNwbGF5KTsKKyAgICBEaXNw
bGF5VHlwZSBkaXNwbGF5ID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZGlzcGxheSgpOwor
ICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVlKGJ1aWxkZXJTdGF0ZSwgZGlzcGxheSkpCisgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldERpc3BsYXkoZGlzcGxheSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlRGlzcGxheShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBEaXNwbGF5VHlwZSBkaXNwbGF5ID0gZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICBpZiAoaXNWYWxpZERpc3BsYXlW
YWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5KSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOworICAgIGlmIChpc1ZhbGlkRGlzcGxheVZhbHVlKGJ1
aWxkZXJTdGF0ZSwgZGlzcGxheSkpCisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldERp
c3BsYXkoZGlzcGxheSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUJhc2VsaW5lU2hpZnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFz
ZWxpbmVTaGlmdChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKLSAgICBTVkdSZW5kZXJTdHlsZSYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0eWxlID0g
YnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLmlzVmFsdWVJRCgpKSB7CiAgICAgICAgIHN3aXRjaCAocHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpKSB7CkBAIC0xMDE1LDU3ICsxMDE1LDU3IEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUJhc2VsaW5lU2hpZnQoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbFdlYmtpdEFzcGVjdFJhdGlvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdEFzcGVjdFJh
dGlvKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvVHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVj
dFJhdGlvVHlwZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
RGVub21pbmF0b3IoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVu
ZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoUmVuZGVyU3R5bGU6OmluaXRpYWxBc3BlY3RS
YXRpb1R5cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5v
bWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9OdW1lcmF0b3IoUmVuZGVyU3R5
bGU6OmluaXRpYWxBc3BlY3RSYXRpb051bWVyYXRvcigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRBc3BlY3RSYXRpbyhTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRXZWJraXRBc3BlY3RSYXRpbyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUpCiB7Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9U
eXBlKCkgPT0gQXNwZWN0UmF0aW9UeXBlOjpBdXRvKQorICAgIGlmIChidWlsZGVyU3RhdGUucGFy
ZW50U3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG8pCiAg
ICAgICAgIHJldHVybjsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
VHlwZShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvVHlwZSgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvRGVub21pbmF0b3Ioc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb0Rlbm9taW5hdG9yKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9OdW1lcmF0b3Ioc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCku
YXNwZWN0UmF0aW9UeXBlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJh
dGlvRGVub21pbmF0b3IoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuYXNwZWN0UmF0aW9EZW5v
bWluYXRvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5hc3BlY3RSYXRpb051bWVyYXRvcigpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNw
ZWN0UmF0aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0
aW8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYg
cHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tRGltZW5z
aW9ucykKLSAgICAgICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVj
dFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkZyb21EaW1lbnNpb25zKTsKKyAgICAgICAgICAg
IHJldHVybiBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0
aW9UeXBlOjpGcm9tRGltZW5zaW9ucyk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVGcm9tSW50cmluc2ljKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJv
bUludHJpbnNpYyk7CisgICAgICAgICAgICByZXR1cm4gYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJvbUludHJpbnNpYyk7CiAKICAgICAg
ICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAg
ICAgICByZXR1cm4gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNw
ZWN0UmF0aW9UeXBlOjpBdXRvKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OkF1dG8pOwogICAgIH0KIAogICAg
IGF1dG8mIGFzcGVjdFJhdGlvVmFsdWUgPSBkb3duY2FzdDxDU1NBc3BlY3RSYXRpb1ZhbHVlPih2
YWx1ZSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNw
ZWN0UmF0aW9UeXBlOjpTcGVjaWZpZWQpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRpb1ZhbHVlLmRlbm9taW5hdG9yVmFsdWUo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihh
c3BlY3RSYXRpb1ZhbHVlLm51bWVyYXRvclZhbHVlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldEFzcGVjdFJhdGlvVHlwZShBc3BlY3RSYXRpb1R5cGU6OlNwZWNpZmllZCk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9EZW5vbWluYXRvcihhc3BlY3RSYXRp
b1ZhbHVlLmRlbm9taW5hdG9yVmFsdWUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
QXNwZWN0UmF0aW9OdW1lcmF0b3IoYXNwZWN0UmF0aW9WYWx1ZS5udW1lcmF0b3JWYWx1ZSgpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRU
ZXh0RW1waGFzaXNTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFzaXNTdHls
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVt
cGhhc2lzRmlsbCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNp
c01hcmsoUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RW1waGFzaXNNYXJrKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6
aW5pdGlhbFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0VGV4dEVtcGhhc2lzRmlsbChSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc0Zp
bGwoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayhSZW5k
ZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRF
bXBoYXNpc0N1c3RvbU1hcmsoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
V2Via2l0VGV4dEVtcGhhc2lzU3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRFbXBoYXNpc0ZpbGwoKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJrKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+dGV4dEVtcGhhc2lzTWFyaygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT50
ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRl
eHRFbXBoYXNpc0ZpbGwoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEVtcGhhc2lzRmls
bCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLnRleHRFbXBoYXNpc01hcmsoKSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKS50ZXh0RW1waGFzaXNDdXN0b21NYXJrKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
aXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgbGlzdCA9IGRvd25jYXN0
PENTU1ZhbHVlTGlzdD4odmFsdWUpOwpAQCAtMTA3NCwzOCArMTA3NCwzOCBAQCBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRUZXh0RW1waGFzaXNTdHlsZShT
dHlsZVJlc29sdmVyJgogICAgICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAgICAg
ICAgICBDU1NQcmltaXRpdmVWYWx1ZSYgdmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4oaXRlbS5nZXQoKSk7CiAgICAgICAgICAgICBpZiAodmFsdWUudmFsdWVJRCgpID09IENTU1Zh
bHVlRmlsbGVkIHx8IHZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU9wZW4pCi0gICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNGaWxsKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxs
KHZhbHVlKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsodmFsdWUpOworICAgICAgICAgICAgICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsodmFsdWUpOwogICAgICAgICB9
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFy
ayhudWxsQXRvbSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhh
c2lzQ3VzdG9tTWFyayhudWxsQXRvbSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAg
IGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkgewotICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmlsbDo6Rmls
bGVkKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNNYXJr
KFRleHRFbXBoYXNpc01hcms6OkN1c3RvbSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgp
KTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0
RW1waGFzaXNGaWxsOjpGaWxsZWQpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRU
ZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcms6OkN1c3RvbSk7CisgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsocHJpbWl0aXZlVmFsdWUu
c3RyaW5nVmFsdWUoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0N1c3RvbU1hcmsobnVsbEF0b20oKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSgp
KTsKIAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVGaWxsZWQg
fHwgcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikgewotICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFsdWUp
OwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoVGV4
dEVtcGhhc2lzTWFyazo6QXV0byk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRl
eHRFbXBoYXNpc0ZpbGwocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRUZXh0RW1waGFzaXNNYXJrKFRleHRFbXBoYXNpc01hcms6OkF1dG8pOwogICAgIH0g
ZWxzZSB7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmls
bChUZXh0RW1waGFzaXNGaWxsOjpGaWxsZWQpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFRleHRFbXBoYXNpc01hcmsocHJpbWl0aXZlVmFsdWUpOworICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxl
ZCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsocHJp
bWl0aXZlVmFsdWUpOwogICAgIH0KIH0KIAogdGVtcGxhdGUgPFN0eWxlQnVpbGRlckN1c3RvbTo6
Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhhdmlvcj4KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvJiBtYXAgPSBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7Ci0gICAgZm9yIChh
dXRvJiBrZXlWYWx1ZSA6IGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUqPihzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCkpLT5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CisgICAgYXV0byYgbWFw
ID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBm
b3IgKGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpKS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygpKSB7CiAgICAgICAgIGF1
dG8mIGRpcmVjdGl2ZXMgPSBtYXAuYWRkKGtleVZhbHVlLmtleSwgQ291bnRlckRpcmVjdGl2ZXMg
eyB9KS5pdGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmIChjb3VudGVyQmVoYXZpb3IgPT0gUmVz
ZXQpCiAgICAgICAgICAgICBkaXJlY3RpdmVzLnJlc2V0VmFsdWUgPSBrZXlWYWx1ZS52YWx1ZS5y
ZXNldFZhbHVlOwpAQCAtMTExNSwxNCArMTExNSwxNCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
cgogfQogCiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVyQ3VzdG9tOjpDb3VudGVyQmVoYXZpb3IgY291
bnRlckJlaGF2aW9yPgotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGJvb2wg
c2V0Q291bnRlckluY3JlbWVudFRvTm9uZSA9IGNvdW50ZXJCZWhhdmlvciA9PSBJbmNyZW1lbnQg
JiYgaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmU7CiAKICAgICBpZiAoIWlzPENT
U1ZhbHVlTGlzdD4odmFsdWUpICYmICFzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBDb3VudGVyRGlyZWN0aXZlTWFwJiBtYXAgPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCk7CisgICAgQ291bnRlckRpcmVjdGl2
ZU1hcCYgbWFwID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzQ291bnRlckRpcmVjdGl2ZXMo
KTsKICAgICBmb3IgKGF1dG8mIGtleVZhbHVlIDogbWFwKSB7CiAgICAgICAgIGlmIChjb3VudGVy
QmVoYXZpb3IgPT0gUmVzZXQpCiAgICAgICAgICAgICBrZXlWYWx1ZS52YWx1ZS5yZXNldFZhbHVl
ID0gV1RGOjpudWxsb3B0OwpAQCAtMTE0NSw4NCArMTE0NSw4NCBAQCBpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsCiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbENvdW50ZXJJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYpIHsgfQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVySW5jcmVtZW50KFN0eWxlOjpC
dWlsZGVyU3RhdGUmKSB7IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRDb3VudGVySW5jcmVtZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJJbmNyZW1l
bnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGFwcGx5SW5oZXJp
dENvdW50ZXI8SW5jcmVtZW50PihzdHlsZVJlc29sdmVyKTsKKyAgICBhcHBseUluaGVyaXRDb3Vu
dGVyPEluY3JlbWVudD4oYnVpbGRlclN0YXRlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDb3VudGVySW5jcmVtZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGFwcGx5VmFsdWVDb3VudGVyPEluY3Jl
bWVudD4oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIGFwcGx5VmFsdWVDb3VudGVyPEluY3Jl
bWVudD4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlclJlc2V0KFN0eWxlUmVzb2x2ZXImKSB7IH0KK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlclJlc2V0KFN0
eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDb3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlclJlc2V0
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhcHBseUluaGVyaXRD
b3VudGVyPFJlc2V0PihzdHlsZVJlc29sdmVyKTsKKyAgICBhcHBseUluaGVyaXRDb3VudGVyPFJl
c2V0PihidWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q291bnRlclJlc2V0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewotICAgIGFwcGx5VmFsdWVDb3VudGVyPFJlc2V0PihzdHlsZVJlc29sdmVyLCB2
YWx1ZSk7CisgICAgYXBwbHlWYWx1ZUNvdW50ZXI8UmVzZXQ+KGJ1aWxkZXJTdGF0ZSwgdmFsdWUp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1cnNv
cihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDdXJzb3JMaXN0KCk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6OmluaXRpYWxD
dXJzb3IoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuY2xlYXJDdXJzb3JMaXN0KCk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKFJlbmRlclN0eWxlOjppbml0aWFsQ3Vy
c29yKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEN1cnNvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKHN0eWxl
UmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Y3Vyc29yKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0Q3Vyc29yTGlzdChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmN1cnNvcnMo
KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKGJ1aWxkZXJTdGF0ZS5wYXJl
bnRTdHlsZSgpLmN1cnNvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3JM
aXN0KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmN1cnNvcnMoKSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1cnNvcihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDdXJzb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckN1
cnNvckxpc3QoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckN1cnNvckxpc3QoKTsK
ICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBDdXJzb3JU
eXBlIGN1cnNvciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAg
IGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPmN1cnNvcigpICE9IGN1cnNvcikKLSAgICAgICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKGN1cnNvcik7CisgICAgICAgIGlm
IChidWlsZGVyU3RhdGUuc3R5bGUoKS5jdXJzb3IoKSAhPSBjdXJzb3IpCisgICAgICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoY3Vyc29yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q3Vyc29yKEN1cnNvclR5cGU6
OkF1dG8pOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEN1cnNvcihDdXJzb3JUeXBlOjpB
dXRvKTsKICAgICBhdXRvJiBsaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAg
ICAgZm9yIChhdXRvJiBpdGVtIDogbGlzdCkgewogICAgICAgICBpZiAoaXM8Q1NTQ3Vyc29ySW1h
Z2VWYWx1ZT4oaXRlbSkpIHsKICAgICAgICAgICAgIGF1dG8mIGltYWdlID0gZG93bmNhc3Q8Q1NT
Q3Vyc29ySW1hZ2VWYWx1ZT4oaXRlbS5nZXQoKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmFkZEN1cnNvcihzdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UoaW1hZ2UpLCBpbWFn
ZS5ob3RTcG90KCkpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuYWRkQ3Vyc29y
KGJ1aWxkZXJTdGF0ZS5jcmVhdGVTdHlsZUltYWdlKGltYWdlKSwgaW1hZ2UuaG90U3BvdCgpKTsK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRDdXJzb3IoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0
KCkpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPihpdGVtLmdldCgpKSk7CiAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UoaXRlbS5wdHIoKSA9PSBsaXN0Lml0ZW0obGlzdC5sZW5ndGgoKSAtIDEpLCAiQ3Vyc29yIElE
IGZhbGxiYWNrIHNob3VsZCBhbHdheXMgYmUgbGFzdCBpbiB0aGUgbGlzdCIpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbEZpbGwoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRmlsbChTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmFjY2Vzc1NWR1N0eWxlKCk7Ci0gICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KFNWR1JlbmRl
clN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbEZp
bGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VXJpKCksIHN0
eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIu
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0
RmlsbFBhaW50KFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50VHlwZSgpLCBTVkdSZW5k
ZXJTdHlsZTo6aW5pdGlhbEZpbGxQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0aWFs
RmlsbFBhaW50VXJpKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUo
KSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0RmlsbChTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRGaWxsKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAg
ICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUo
KTsKLSAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KS0+c3ZnU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3ZnUGFyZW50U3R5bGUu
ZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRDb2xvcigpLCBzdmdQYXJl
bnRTdHlsZS5maWxsUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZH
U3R5bGUoKTsKKyAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRT
dHlsZSgpLnN2Z1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHN2Z1BhcmVudFN0
eWxlLmZpbGxQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuZmlsbFBhaW50Q29sb3IoKSwgc3Zn
UGFyZW50U3R5bGUuZmlsbFBhaW50VXJpKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9S
ZWd1bGFyU3R5bGUoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CiAKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
RmlsbChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8mIHN2Z1N0
eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8m
IHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKICAgICBj
b25zdCBhdXRvKiBsb2NhbFZhbHVlID0gdmFsdWUuaXNQcmltaXRpdmVWYWx1ZSgpID8gJmRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkgOiBudWxscHRyOwogICAgIFN0cmluZyB1cmw7
CiAgICAgaWYgKHZhbHVlLmlzVmFsdWVMaXN0KCkpIHsKQEAgLTEyNDIsMzEgKzEyNDIsMzEgQEAg
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRmlsbChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyLCBDU1MKICAgICB9IGVsc2UgaWYgKGxvY2FsVmFsdWUtPmlzVmFs
dWVJRCgpICYmIGxvY2FsVmFsdWUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAg
IHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWludFR5cGU6Ok5vbmUgOiBTVkdQYWlu
dFR5cGU6OlVSSU5vbmU7CiAgICAgZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYg
bG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAg
IGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jb2xvcigpOworICAgICAgICBjb2xvciA9
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7CiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5p
c0VtcHR5KCkgPyBTVkdQYWludFR5cGU6OkN1cnJlbnRDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJ
Q3VycmVudENvbG9yOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZl
ci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqbG9jYWxWYWx1ZSk7CisgICAgICAgIGNvbG9yID0g
YnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpsb2NhbFZhbHVlKTsKICAgICAg
ICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IgOiBT
VkdQYWludFR5cGU6OlVSSVJHQkNvbG9yOwogICAgIH0KLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFp
bnQocGFpbnRUeXBlLCBjb2xvciwgdXJsLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Jl
Z3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5
bGUoKSk7CisgICAgc3ZnU3R5bGUuc2V0RmlsbFBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwg
YnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVyU3RhdGUu
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxTdHJva2UoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsU3Ry
b2tlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBTVkdSZW5kZXJT
dHlsZSYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7
Ci0gICAgc3ZnU3R5bGUuc2V0U3Ryb2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJv
a2VQYWludFR5cGUoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsU3Ryb2tlUGFpbnRVcmkoKSwgc3R5bGVSZXNvbHZlci5h
cHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5
VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgc3ZnU3R5bGUuc2V0U3Ry
b2tlUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFR5cGUoKSwgU1ZHUmVu
ZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludENvbG9yKCksIFNWR1JlbmRlclN0eWxlOjppbml0
aWFsU3Ryb2tlUGFpbnRVcmkoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJT
dHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsK
IH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRTdHJva2Uo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0U3Ryb2tlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSkKIHsKLSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNz
U1ZHU3R5bGUoKTsKLSAgICBhdXRvJiBzdmdQYXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFy
ZW50U3R5bGUoKS0+c3ZnU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChzdmdQ
YXJlbnRTdHlsZS5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUuc3Ryb2tlUGFpbnRD
b2xvcigpLCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlU
b1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUu
c3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJv
a2VQYWludChzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFR5cGUoKSwgc3ZnUGFyZW50U3R5bGUu
c3Ryb2tlUGFpbnRDb2xvcigpLCBzdmdQYXJlbnRTdHlsZS5zdHJva2VQYWludFVyaSgpLCBidWls
ZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5hcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlU3Ryb2tlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5h
Y2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxl
KCkuYWNjZXNzU1ZHU3R5bGUoKTsKICAgICBjb25zdCBhdXRvKiBsb2NhbFZhbHVlID0gdmFsdWUu
aXNQcmltaXRpdmVWYWx1ZSgpID8gJmRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkg
OiBudWxscHRyOwogICAgIFN0cmluZyB1cmw7CiAgICAgaWYgKHZhbHVlLmlzVmFsdWVMaXN0KCkp
IHsKQEAgLTEyODYsMzIgKzEyODYsMzIgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlU3Ryb2tlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIEMKICAgICB9
IGVsc2UgaWYgKGxvY2FsVmFsdWUtPmlzVmFsdWVJRCgpICYmIGxvY2FsVmFsdWUtPnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU5vbmUpCiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBT
VkdQYWludFR5cGU6Ok5vbmUgOiBTVkdQYWludFR5cGU6OlVSSU5vbmU7CiAgICAgZWxzZSBpZiAo
bG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1Zh
bHVlQ3VycmVudGNvbG9yKSB7Ci0gICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5jb2xvcigpOworICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNvbG9yKCk7
CiAgICAgICAgIHBhaW50VHlwZSA9IHVybC5pc0VtcHR5KCkgPyBTVkdQYWludFR5cGU6OkN1cnJl
bnRDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJQ3VycmVudENvbG9yOwogICAgIH0gZWxzZSB7Ci0g
ICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSgqbG9j
YWxWYWx1ZSk7CisgICAgICAgIGNvbG9yID0gYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2
ZVZhbHVlKCpsb2NhbFZhbHVlKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/
IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IgOiBTVkdQYWludFR5cGU6OlVSSVJHQkNvbG9yOwogICAg
IH0KLSAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChwYWludFR5cGUsIGNvbG9yLCB1cmwsIHN0
eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIu
YXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBzdmdTdHlsZS5zZXRTdHJv
a2VQYWludChwYWludFR5cGUsIGNvbG9yLCB1cmwsIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5
VG9SZWd1bGFyU3R5bGUoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5r
U3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb250ZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29udGVu
dCgpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvbnRlbnQoU3R5bGVSZXNv
bHZlciYpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvbnRl
bnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpCiB7CiAgICAgLy8gRklYTUU6IEluIENTUzMsIGl0IHdp
bGwgYmUgcG9zc2libGUgdG8gaW5oZXJpdCBjb250ZW50LiBJbiBDU1MyIGl0IGlzIG5vdC4gVGhp
cwogICAgIC8vIG5vdGUgaXMgYSByZW1pbmRlciB0aGF0IGV2ZW50dWFsbHkgImluaGVyaXQiIG5l
ZWRzIHRvIGJlIHN1cHBvcnRlZC4KIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlQ29udGVudChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250
ZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGNvbnN0
IGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChwcmltaXRpdmVWYWx1ZSwgcHJpbWl0aXZlVmFsdWUu
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsIHx8IHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmUpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29u
dGVudCgpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckNvbnRlbnQoKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTMxOSwxNyArMTMxOSwxNyBAQCBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsCiAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNhc3Q8Q1NTVmFsdWVMaXN0
Pih2YWx1ZSkpIHsKICAgICAgICAgaWYgKGlzPENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0p
KSB7CiAgICAgICAgICAgICBpZiAoaXM8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbSkpCi0gICAgICAg
ICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgpKS5ncmFk
aWVudFdpdGhTdHlsZXNSZXNvbHZlZChzdHlsZVJlc29sdmVyKSksIGRpZFNldCk7CisgICAgICAg
ICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTR3JhZGllbnRWYWx1ZT4oaXRlbS5nZXQoKSkuZ3JhZGll
bnRXaXRoU3R5bGVzUmVzb2x2ZWQoYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKSkpLCBkaWRT
ZXQpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0Q29udGVudChTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NT
SW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQoKSkpLCBkaWRTZXQpOworICAgICAgICAgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKGRvd25jYXN0PENTU0ltYWdlR2VuZXJhdG9yVmFsdWU+KGl0ZW0uZ2V0KCkpKSwgZGlk
U2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoaXM8
Q1NTSW1hZ2VTZXRWYWx1ZT4oaXRlbSkpIHsKLSAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZEltYWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7
CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVk
SW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VWYWx1ZT4oaXRlbSkpIHsKLSAg
ICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChTdHlsZUNhY2hlZElt
YWdlOjpjcmVhdGUoaXRlbSksIGRpZFNldCk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsK
ICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgfQpAQCAtMTMzOSwyMCArMTMzOSwyMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAKICAg
ICAgICAgYXV0byYgY29udGVudFZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0
ZW0uZ2V0KCkpOwogICAgICAgICBpZiAoY29udGVudFZhbHVlLmlzU3RyaW5nKCkpIHsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChjb250ZW50VmFsdWUuc3Ry
aW5nVmFsdWUoKS5pbXBsKCksIGRpZFNldCk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRDb250ZW50KGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0
KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVu
dFZhbHVlLmlzQXR0cigpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogQ2FuIGEgbmFtZXNwYWNl
IGJlIHNwZWNpZmllZCBmb3IgYW4gYXR0cihmb28pPwotICAgICAgICAgICAgaWYgKHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCi0gICAgICAgICAg
ICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNBdHRyQ29udGVudCgpOworICAgICAg
ICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgpID09IFBzZXVkb0lkOjpO
b25lKQorICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0F0dHJDb250
ZW50KCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5k
ZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSktPnNldEhhc0F0dHJDb250ZW50
KCk7CisgICAgICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpKS5zZXRIYXNBdHRyQ29udGVudCgpOwogICAgICAgICAgICAgUXVhbGlm
aWVkTmFtZSBhdHRyKG51bGxBdG9tKCksIGNvbnRlbnRWYWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwo
KSwgbnVsbEF0b20oKSk7Ci0gICAgICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IHN0
eWxlUmVzb2x2ZXIuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cik7Ci0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0
b20oKSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGNvbnN0IEF0b21TdHJp
bmcmIHZhbHVlID0gYnVpbGRlclN0YXRlLmVsZW1lbnQoKS5nZXRBdHRyaWJ1dGUoYXR0cik7Cisg
ICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KHZhbHVlLmlzTnVsbCgp
ID8gZW1wdHlBdG9tKCkgOiB2YWx1ZS5pbXBsKCksIGRpZFNldCk7CiAgICAgICAgICAgICBkaWRT
ZXQgPSB0cnVlOwogICAgICAgICAgICAgLy8gUmVnaXN0ZXIgdGhlIGZhY3QgdGhhdCB0aGUgYXR0
cmlidXRlIHZhbHVlIGFmZmVjdHMgdGhlIHN0eWxlLgotICAgICAgICAgICAgc3R5bGVSZXNvbHZl
ci5ydWxlU2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShh
dHRyLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZVJlc29sdmVy
KCkucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRlbnRBdHRyaWJ1dGUo
YXR0ci5sb2NhbE5hbWUoKSk7CiAgICAgICAgIH0gZWxzZSBpZiAoY29udGVudFZhbHVlLmlzQ291
bnRlcigpKSB7CiAgICAgICAgICAgICBhdXRvKiBjb3VudGVyVmFsdWUgPSBjb250ZW50VmFsdWUu
Y291bnRlclZhbHVlKCk7CiAgICAgICAgICAgICBMaXN0U3R5bGVUeXBlIGxpc3RTdHlsZVR5cGUg
PSBMaXN0U3R5bGVUeXBlOjpOb25lOwpAQCAtMTM2MCwyNCArMTM2MCwyNCBAQCBpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsCiAgICAgICAgICAgICBpZiAobGlzdFN0eWxlSWRlbnQgIT0gQ1NTVmFsdWVO
b25lKQogICAgICAgICAgICAgICAgIGxpc3RTdHlsZVR5cGUgPSBzdGF0aWNfY2FzdDxMaXN0U3R5
bGVUeXBlPihsaXN0U3R5bGVJZGVudCAtIENTU1ZhbHVlRGlzYyk7CiAgICAgICAgICAgICBhdXRv
IGNvdW50ZXIgPSBtYWtlVW5pcXVlPENvdW50ZXJDb250ZW50Pihjb3VudGVyVmFsdWUtPmlkZW50
aWZpZXIoKSwgbGlzdFN0eWxlVHlwZSwgY291bnRlclZhbHVlLT5zZXBhcmF0b3IoKSk7Ci0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoV1RGTW92ZShjb3VudGVy
KSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQo
V1RGTW92ZShjb3VudGVyKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7CiAg
ICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1ZUlE
KCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVPcGVuUXVvdGU6Ci0gICAgICAgICAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1b3RlVHlwZTo6T3BlblF1b3Rl
LCBkaWRTZXQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRl
bnQoUXVvdGVUeXBlOjpPcGVuUXVvdGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFs
dWVDbG9zZVF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29udGVudChRdW90ZVR5cGU6OkNsb3NlUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6OkNsb3NlUXVvdGUsIGRp
ZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVOb09wZW5RdW90ZToKLSAgICAgICAgICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb09wZW5R
dW90ZSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRD
b250ZW50KFF1b3RlVHlwZTo6Tm9PcGVuUXVvdGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAg
ZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
Q1NTVmFsdWVOb0Nsb3NlUXVvdGU6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDb250ZW50KFF1b3RlVHlwZTo6Tm9DbG9zZVF1b3RlLCBkaWRTZXQpOworICAgICAg
ICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoUXVvdGVUeXBlOjpOb0Ns
b3NlUXVvdGUsIGRpZFNldCk7CiAgICAgICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMzg3LDEyNyArMTM4
NywxMjcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29udGVu
dChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLAogICAgICAgICB9CiAgICAgfQogICAgIGlm
ICghZGlkU2V0KQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNsZWFyQ29udGVudCgp
OworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckNvbnRlbnQoKTsKIH0KIAotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudExpZ2F0
dXJlcyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFudExpZ2F0dXJlcyhTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50Q29tbW9uTGlnYXR1cmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCku
dmFyaWFudENvbW1vbkxpZ2F0dXJlcygpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dERpc2NyZXRpb25hcnlMaWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRp
b24oKS52YXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcygpKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250
RGVzY3JpcHRpb24oKS52YXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcygpKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKHN0eWxlUmVzb2x2ZXIucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENvbnRleHR1YWxBbHRlcm5hdGVzKCkpOwotICAg
IHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25MaWdhdHVyZXMoYnVp
bGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRDb21tb25MaWdhdHVyZXMo
KSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RGlzY3JldGlvbmFy
eUxpZ2F0dXJlcygpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxM
aWdhdHVyZXMoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRIaXN0
b3JpY2FsTGlnYXR1cmVzKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4
dHVhbEFsdGVybmF0ZXMoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlh
bnRDb250ZXh0dWFsQWx0ZXJuYXRlcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsRm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5m
b250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbW1vbkxp
Z2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6
Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1
cmVzKEZvbnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoRm9udFZhcmlhbnRMaWdhdHVyZXM6Ok5vcm1h
bCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUo
Zm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5
bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9
IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBhdXRvIHZhcmlhbnRMaWdhdHVy
ZXMgPSBleHRyYWN0Rm9udFZhcmlhbnRMaWdhdHVyZXModmFsdWUpOwogICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKHZhcmlhbnRMaWdhdHVyZXMuY29tbW9uTGln
YXR1cmVzKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdh
dHVyZXModmFyaWFudExpZ2F0dXJlcy5kaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXModmFyaWFudExpZ2F0dXJl
cy5oaXN0b3JpY2FsTGlnYXR1cmVzKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENv
bnRleHR1YWxBbHRlcm5hdGVzKHZhcmlhbnRMaWdhdHVyZXMuY29udGV4dHVhbEFsdGVybmF0ZXMp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2Ny
aXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250VmFyaWFu
dE51bWVyaWMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKLSAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNGaWd1cmUoc3R5bGVSZXNvbHZlci5wYXJl
bnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50TnVtZXJpY0ZpZ3VyZSgpKTsKLSAgICBmb250RGVz
Y3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTcGFjaW5nKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNTcGFjaW5nKCkpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGcmFjdGlvbigpKTsKLSAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudE51bWVyaWNPcmRpbmFsKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkudmFyaWFudE51bWVyaWNPcmRpbmFsKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2Ny
aXB0aW9uKCkudmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShidWlsZGVyU3RhdGUucGFyZW50
Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNGaWd1cmUoKSk7CisgICAgZm9udERlc2Ny
aXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERl
c2NyaXB0aW9uKCkudmFyaWFudE51bWVyaWNTcGFjaW5nKCkpOworICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50TnVtZXJpY09yZGluYWwoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlv
bigpLnZhcmlhbnROdW1lcmljT3JkaW5hbCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFy
aWFudE51bWVyaWNTbGFzaGVkWmVybyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9u
KCkudmFyaWFudE51bWVyaWNTbGFzaGVkWmVybygpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnROdW1lcmljKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZv
bnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRl
LmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJp
Y0ZpZ3VyZShGb250VmFyaWFudE51bWVyaWNGaWd1cmU6Ok5vcm1hbCk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2luZyhGb250VmFyaWFudE51bWVyaWNTcGFjaW5n
OjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZyYWN0aW9u
KEZvbnRWYXJpYW50TnVtZXJpY0ZyYWN0aW9uOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwoRm9udFZhcmlhbnROdW1lcmljT3JkaW5hbDo6Tm9y
bWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyhG
b250VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybzo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRO
dW1lcmljKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50TnVtZXJp
YyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsK
LSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgYXV0byB2YXJpYW50TnVtZXJpYyA9IGV4dHJhY3RGb250VmFyaWFudE51bWVy
aWModmFsdWUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZSh2
YXJpYW50TnVtZXJpYy5maWd1cmUpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVt
ZXJpY1NwYWNpbmcodmFyaWFudE51bWVyaWMuc3BhY2luZyk7CiAgICAgZm9udERlc2NyaXB0aW9u
LnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24odmFyaWFudE51bWVyaWMuZnJhY3Rpb24pOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY09yZGluYWwodmFyaWFudE51bWVyaWMu
b3JkaW5hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU2xhc2hlZFpl
cm8odmFyaWFudE51bWVyaWMuc2xhc2hlZFplcm8pOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9u
dERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRl
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50RWFzdEFz
aWFuKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50RWFzdEFzaWFuKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxl
UmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRFYXN0QXNpYW5WYXJpYW50KHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCku
dmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRFYXN0QXNpYW5XaWR0aChzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnRFYXN0QXNpYW5XaWR0aCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVh
c3RBc2lhblJ1Ynkoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50
RWFzdEFzaWFuUnVieSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVp
bGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50RWFzdEFzaWFuVmFyaWFudChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCku
dmFyaWFudEVhc3RBc2lhblZhcmlhbnQoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnRFYXN0QXNpYW5XaWR0aChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFy
aWFudEVhc3RBc2lhbldpZHRoKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFz
dEFzaWFuUnVieShidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVh
c3RBc2lhblJ1YnkoKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZN
b3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZv
bnRWYXJpYW50RWFzdEFzaWFuKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsK
LSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0
aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KEZv
bnRWYXJpYW50RWFzdEFzaWFuVmFyaWFudDo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24u
c2V0VmFyaWFudEVhc3RBc2lhbldpZHRoKEZvbnRWYXJpYW50RWFzdEFzaWFuV2lkdGg6Ok5vcm1h
bCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5KEZvbnRWYXJp
YW50RWFzdEFzaWFuUnVieTo6Tm9ybWFsKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0
byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAg
IGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwog
ICAgIGF1dG8gdmFyaWFudEVhc3RBc2lhbiA9IGV4dHJhY3RGb250VmFyaWFudEVhc3RBc2lhbih2
YWx1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5WYXJpYW50KHZh
cmlhbnRFYXN0QXNpYW4udmFyaWFudCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRF
YXN0QXNpYW5XaWR0aCh2YXJpYW50RWFzdEFzaWFuLndpZHRoKTsKICAgICBmb250RGVzY3JpcHRp
b24uc2V0VmFyaWFudEVhc3RBc2lhblJ1YnkodmFyaWFudEVhc3RBc2lhbi5ydWJ5KTsKLSAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRp
YWxGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZsb2F0IHNpemUgPSBTdHlsZTo6
Zm9udFNpemVGb3JLZXl3b3JkKENTU1ZhbHVlTWVkaXVtLCBmb250RGVzY3JpcHRpb24udXNlRml4
ZWREZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAgIGF1dG8gZm9u
dERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7Cisg
ICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoQ1NTVmFsdWVNZWRpdW0s
IGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRTaXplKCksIGJ1aWxkZXJTdGF0ZS5kb2N1
bWVudCgpKTsKIAogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgZm9u
dERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVNZWRpdW0p
OwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsK
LSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlw
dGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNp
emUpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aGVyaXRGb250U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U2l6ZShTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgY29uc3QgYXV0byYgcGFyZW50Rm9udERlc2NyaXB0
aW9uID0gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmbG9hdCBzaXplID0gcGFyZW50Rm9udERl
c2NyaXB0aW9uLnNwZWNpZmllZFNpemUoKTsKIAogICAgIGlmIChzaXplIDwgMCkKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRl
clN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEtleXdvcmRTaXplKHBhcmVudEZvbnREZXNjcmlwdGlvbi5rZXl3b3JkU2l6ZSgpKTsKLSAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
KyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKKyAg
ICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9u
KSk7CiB9CiAKIC8vIFdoZW4gdGhlIENTUyBrZXl3b3JkICJsYXJnZXIiIGlzIHVzZWQsIHRoaXMg
ZnVuY3Rpb24gd2lsbCBhdHRlbXB0IHRvIG1hdGNoIHdpdGhpbiB0aGUga2V5d29yZApAQCAtMTUy
Nyw1OSArMTUyNyw1MyBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ3VzdG9tOjpzbWFsbGVy
Rm9udFNpemUoZmxvYXQgc2l6ZSkKICAgICByZXR1cm4gc2l6ZSAvIDEuMmY7CiB9CiAKLWlubGlu
ZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxp
ZXIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnJ1
YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlvbjo6SW50ZXJDaGFyYWN0ZXIpCisgICAgaWYgKGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnJ1YnlQb3NpdGlvbigpICE9IFJ1YnlQb3NpdGlvbjo6SW50ZXJD
aGFyYWN0ZXIpCiAgICAgICAgIHJldHVybiAwLjVmOwogCiAgICAgLy8gRklYTUU6IFRoaXMgaGFj
ayBpcyB0byBlbnN1cmUgdG9uZSBtYXJrcyBhcmUgdGhlIHNhbWUgc2l6ZSBhcwogICAgIC8vIHRo
ZSBib3BvbW9mby4gVGhpcyBjb2RlIHdpbGwgZ28gYXdheSBpZiB3ZSBtYWtlIGEgc3BlY2lhbCBy
ZW5kZXJlcgogICAgIC8vIGZvciB0aGUgdG9uZSBtYXJrcyBldmVudHVhbGx5LgotICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmVsZW1lbnQoKSkgewotICAgICAg
ICBmb3IgKGF1dG8mIGFuY2VzdG9yIDogYW5jZXN0b3JzT2ZUeXBlPEhUTUxFbGVtZW50PigqZWxl
bWVudCkpIHsKLSAgICAgICAgICAgIGlmIChhbmNlc3Rvci5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
cnRUYWcpKQotICAgICAgICAgICAgICAgIHJldHVybiAxLjBmOwotICAgICAgICB9CisgICAgZm9y
IChhdXRvJiBhbmNlc3RvciA6IGFuY2VzdG9yc09mVHlwZTxIVE1MRWxlbWVudD4oYnVpbGRlclN0
YXRlLmVsZW1lbnQoKSkpIHsKKyAgICAgICAgaWYgKGFuY2VzdG9yLmhhc1RhZ05hbWUoSFRNTE5h
bWVzOjpydFRhZykpCisgICAgICAgICAgICByZXR1cm4gMS4wZjsKICAgICB9CiAgICAgcmV0dXJu
IDAuMjVmOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bEZvbnRTdHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250U3R5bGUoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNv
bHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxk
ZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGlj
KEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmluaXRpYWxJdGFsaWMoKSk7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEZv
bnRTdHlsZUF4aXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRT
dHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnRE
ZXNjcmlwdGlvbi5zZXRJdGFsaWMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS5pdGFsaWMoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoc3R5bGVS
ZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9u
KCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhidWlsZGVyU3RhdGUucGFyZW50Rm9u
dERlc2NyaXB0aW9uKCkuaXRhbGljKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGb250U3R5
bGVBeGlzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlz
KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTdHlsZShT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBhdXRvJiBmb250U3R5bGVWYWx1ZSA9IGRvd25jYXN0PENTU0ZvbnRTdHlsZVZhbHVlPih2YWx1
ZSk7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlw
dGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNj
cmlwdGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlKGZvbnRTdHlsZVZhbHVlKSk7CiAgICAg
Zm9udERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoZm9udFN0eWxlVmFsdWUuZm9udFN0eWxl
VmFsdWUtPnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUl0YWxpYyA/IEZvbnRTdHlsZUF4aXM6Oml0YWwg
OiBGb250U3R5bGVBeGlzOjpzbG50KTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250
RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0
aW9uID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERl
c2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsK
IAotICAgIGZsb2F0IHBhcmVudFNpemUgPSAwOwotICAgIGJvb2wgcGFyZW50SXNBYnNvbHV0ZVNp
emUgPSBmYWxzZTsKLSAgICBpZiAoYXV0byogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBh
cmVudFN0eWxlKCkpIHsKLSAgICAgICAgcGFyZW50U2l6ZSA9IHBhcmVudFN0eWxlLT5mb250RGVz
Y3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7Ci0gICAgICAgIHBhcmVudElzQWJzb2x1dGVTaXpl
ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLmlzQWJzb2x1dGVTaXplKCk7Ci0gICAg
fQorICAgIGZsb2F0IHBhcmVudFNpemUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250
RGVzY3JpcHRpb24oKS5zcGVjaWZpZWRTaXplKCk7CisgICAgYm9vbCBwYXJlbnRJc0Fic29sdXRl
U2l6ZSA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLmlzQWJz
b2x1dGVTaXplKCk7CiAKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgZmxvYXQgc2l6ZTsKQEAgLTE1OTYsNyArMTU5MCw3
IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYTGFyZ2U6
CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVYeExhcmdlOgogICAgICAgICBjYXNlIENTU1ZhbHVlV2Vi
a2l0WHh4TGFyZ2U6Ci0gICAgICAgICAgICBzaXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29y
ZChpZGVudCwgZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIHNpemUgPSBTdHlsZTo6Zm9udFNpemVGb3JL
ZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpLCBidWls
ZGVyU3RhdGUuZG9jdW1lbnQoKSk7CiAgICAgICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5
d29yZFNpemVGcm9tSWRlbnRpZmllcihpZGVudCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZUxhcmdlcjoKQEAgLTE2MDYsNyArMTYwMCw3IEBAIGlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsCiAgICAgICAgICAgICBzaXplID0gc21hbGxlckZvbnRTaXplKHBhcmVudFNp
emUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRSdWJ5
VGV4dDoKLSAgICAgICAgICAgIHNpemUgPSBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVy
KHN0eWxlUmVzb2x2ZXIpICogcGFyZW50U2l6ZTsKKyAgICAgICAgICAgIHNpemUgPSBkZXRlcm1p
bmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKGJ1aWxkZXJTdGF0ZSkgKiBwYXJlbnRTaXplOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm47CkBA
IC0xNjE0LDEzICsxNjA4LDEzIEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlWYWx1ZUZvbnRTaXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgfSBlbHNl
IHsKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldElzQWJzb2x1dGVTaXplKHBhcmVudElzQWJz
b2x1dGVTaXplIHx8ICEocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkgfHwgcHJpbWl0aXZl
VmFsdWUuaXNGb250UmVsYXRpdmVMZW5ndGgoKSkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFs
dWUuaXNMZW5ndGgoKSkgewotICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1
dGVMZW5ndGg8ZmxvYXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5w
YXJlbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwgdHJ1ZSkpOwotICAgICAgICAgICAg
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRp
dmVWYWx1ZS5pc1ZpZXdwb3J0UGVyY2VudGFnZUxlbmd0aCgpKTsKKyAgICAgICAgICAgIHNpemUg
PSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhKCZidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSwgJmJ1aWxkZXJTdGF0ZS5yb290RWxl
bWVudFN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLnJlbmRlclZpZXcoKSwgMS4wZiwg
dHJ1ZSkpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5zdGF0ZSgp
LnNldEZvbnRTaXplSGFzVmlld3BvcnRVbml0cyhwcmltaXRpdmVWYWx1ZS5pc1ZpZXdwb3J0UGVy
Y2VudGFnZUxlbmd0aCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1Bl
cmNlbnRhZ2UoKSkKICAgICAgICAgICAgIHNpemUgPSAocHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1
ZSgpICogcGFyZW50U2l6ZSkgLyAxMDAuMGY7CiAgICAgICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZh
bHVlLmlzQ2FsY3VsYXRlZFBlcmNlbnRhZ2VXaXRoTGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGNv
bnN0IGF1dG8mIGNvbnZlcnNpb25EYXRhID0gc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKTsKLSAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRh
dGEgcGFyZW50Q29udmVyc2lvbkRhdGEgeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCksIGNv
bnZlcnNpb25EYXRhLnJvb3RTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucmVuZGVy
VmlldygpLCAxLjBmLCB0cnVlIH07CisgICAgICAgICAgICBjb25zdCBhdXRvJiBjb252ZXJzaW9u
RGF0YSA9IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CisgICAgICAg
ICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIHBhcmVudENvbnZlcnNpb25EYXRhIHsgJmJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLCBjb252ZXJzaW9uRGF0YS5yb290U3R5bGUoKSwgYnVp
bGRlclN0YXRlLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlIH07CiAgICAgICAg
ICAgICBzaXplID0gcHJpbWl0aXZlVmFsdWUuY3NzQ2FsY1ZhbHVlKCktPmNyZWF0ZUNhbGN1bGF0
aW9uVmFsdWUocGFyZW50Q29udmVyc2lvbkRhdGEpLT5ldmFsdWF0ZShwYXJlbnRTaXplKTsKICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICByZXR1cm47CkBAIC0xNjI5LDI1ICsxNjIzLDI1IEBA
IGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1
cm47CiAKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc3Rk
OjptaW4obWF4aW11bUFsbG93ZWRGb250U2l6ZSwgc2l6ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRl
clN0YXRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc3RkOjptaW4obWF4aW11bUFsbG93
ZWRGb250U2l6ZSwgc2l6ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaXRpYWxHcmlkVGVtcGxhdGVBcmVhcyhTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxH
cmlkVGVtcGxhdGVBcmVhcyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKFJlbmRlclN0eWxlOjpp
bml0aWFsTmFtZWRHcmlkQXJlYSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5h
bWVkR3JpZEFyZWFSb3dDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3Vu
dCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5D
b3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZEFyZWFDb3VudCgpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhKFJlbmRlclN0eWxlOjppbml0aWFsTmFt
ZWRHcmlkQXJlYSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVh
Um93Q291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQoKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KFJlbmRlclN0
eWxlOjppbml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWEoc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+bmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+bmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldE5hbWVkR3JpZEFyZWEoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlk
QXJlYSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhUm93Q291
bnQoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQXJlYVJvd0NvdW50KCkpOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChidWls
ZGVyU3RhdGUucGFyZW50U3R5bGUoKS5uYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSk7CiB9CiAK
LWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUFy
ZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUFyZWFzKFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUp
OwpAQCAtMTY1NywxMDggKzE2NTEsMTA4IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxlCiAgICAg
YXV0byYgZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZSA9IGRvd25jYXN0PENTU0dyaWRUZW1wbGF0ZUFy
ZWFzVmFsdWU+KHZhbHVlKTsKICAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuZXdOYW1lZEdy
aWRBcmVhcyA9IGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKTsKIAotICAgIE5h
bWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5uYW1lZEdyaWRDb2x1bW5MaW5lcygpOwotICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVk
R3JpZFJvd0xpbmVzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygp
OworICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZENvbHVtbkxpbmVzID0gYnVpbGRlclN0
YXRlLnN0eWxlKCkubmFtZWRHcmlkQ29sdW1uTGluZXMoKTsKKyAgICBOYW1lZEdyaWRMaW5lc01h
cCBuYW1lZEdyaWRSb3dMaW5lcyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLm5hbWVkR3JpZFJvd0xp
bmVzKCk7CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNpdE5hbWVkR3Jp
ZExpbmVzRnJvbUdyaWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdyaWRDb2x1bW5MaW5l
cywgRm9yQ29sdW1ucyk7CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVJbXBsaWNp
dE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKG5ld05hbWVkR3JpZEFyZWFzLCBuYW1lZEdyaWRS
b3dMaW5lcywgRm9yUm93cyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdy
aWRDb2x1bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXROYW1lZEdyaWRSb3dMaW5lcyhuYW1lZEdyaWRSb3dMaW5lcyk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQ29sdW1uTGluZXMobmFtZWRHcmlkQ29sdW1u
TGluZXMpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZFJvd0xpbmVzKG5h
bWVkR3JpZFJvd0xpbmVzKTsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRH
cmlkQXJlYShncmlkVGVtcGxhdGVBcmVhc1ZhbHVlLmdyaWRBcmVhTWFwKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZUFy
ZWFzVmFsdWUucm93Q291bnQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1l
ZEdyaWRBcmVhQ29sdW1uQ291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jb2x1bW5Db3VudCgp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0
ZUFyZWFzVmFsdWUuZ3JpZEFyZWFNYXAoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
TmFtZWRHcmlkQXJlYVJvd0NvdW50KGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUucm93Q291bnQoKSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KGdy
aWRUZW1wbGF0ZUFyZWFzVmFsdWUuY29sdW1uQ291bnQoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEdyaWRDb2x1bW5zKFJl
bmRlclN0eWxlOjppbml0aWFsR3JpZENvbHVtbnMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3Jp
ZENvbHVtbkxpbmVzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3JkZXJlZE5h
bWVkR3JpZENvbHVtbkxpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZENv
bHVtbkxpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEdyaWRDb2x1bW5zKFJl
bmRlclN0eWxlOjppbml0aWFsR3JpZENvbHVtbnMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0TmFtZWRHcmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRD
b2x1bW5MaW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPcmRlcmVkTmFtZWRH
cmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkQ29sdW1u
TGluZXMoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0R3JpZFRlbXBsYXRlQ29sdW1ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1
bW5zKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEdyaWRDb2x1bW5zKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
Z3JpZENvbHVtbnMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRD
b2x1bW5MaW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxp
bmVzKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3JkZXJlZE5hbWVkR3JpZENv
bHVtbkxpbmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+b3JkZXJlZE5hbWVkR3JpZENv
bHVtbkxpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEdyaWRDb2x1bW5zKGJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmdyaWRDb2x1bW5zKCkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHls
ZSgpLm5hbWVkR3JpZENvbHVtbkxpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5v
cmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CiB9CiAKICNkZWZpbmUgU0VUX1RSQUNLU19E
QVRBKHRyYWNrc0RhdGEsIHN0eWxlLCBUcmFja1R5cGUpIFwKLSAgICBzdHlsZS0+c2V0R3JpZCMj
VHJhY2tUeXBlIyNzKHRyYWNrc0RhdGEubV90cmFja1NpemVzKTsgXAotICAgIHN0eWxlLT5zZXRO
YW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzKTsg
XAotICAgIHN0eWxlLT5zZXRPcmRlcmVkTmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNr
c0RhdGEubV9vcmRlcmVkTmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRv
UmVwZWF0IyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFja1NpemVzKTsg
XAotICAgIHN0eWxlLT5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9p
bnQodHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRJbnNlcnRpb25Qb2ludCk7IFwKLSAgICBzdHlsZS0+
c2V0QXV0b1JlcGVhdE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0
b1JlcGVhdE5hbWVkR3JpZExpbmVzKTsgXAotICAgIHN0eWxlLT5zZXRBdXRvUmVwZWF0T3JkZXJl
ZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdE9yZGVy
ZWROYW1lZEdyaWRMaW5lcyk7IFwKLSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNr
VHlwZSMjc1R5cGUodHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUeXBlKTsgXAotICAgIHN0eWxlLT5z
ZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9pbnQodHJhY2tzRGF0YS5t
X2F1dG9SZXBlYXRJbnNlcnRpb25Qb2ludCk7Ci0KLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQorICAgIHN0eWxlLnNldEdyaWQjI1RyYWNrVHlwZSMj
cyh0cmFja3NEYXRhLm1fdHJhY2tTaXplcyk7IFwKKyAgICBzdHlsZS5zZXROYW1lZEdyaWQjI1Ry
YWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzKTsgXAorICAgIHN0eWxl
LnNldE9yZGVyZWROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX29yZGVy
ZWROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tU
eXBlIyNzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcyk7IFwKKyAgICBzdHlsZS5z
ZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzSW5zZXJ0aW9uUG9pbnQodHJhY2tzRGF0YS5t
X2F1dG9SZXBlYXRJbnNlcnRpb25Qb2ludCk7IFwKKyAgICBzdHlsZS5zZXRBdXRvUmVwZWF0TmFt
ZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0TmFtZWRHcmlk
TGluZXMpOyBcCisgICAgc3R5bGUuc2V0QXV0b1JlcGVhdE9yZGVyZWROYW1lZEdyaWQjI1RyYWNr
VHlwZSMjTGluZXModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkTGluZXMp
OyBcCisgICAgc3R5bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjc1R5cGUodHJhY2tz
RGF0YS5tX2F1dG9SZXBlYXRUeXBlKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNU
cmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlv
blBvaW50KTsKKworaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3Jp
ZFRlbXBsYXRlQ29sdW1ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OlRyYWNrc0RhdGEgdHJh
Y2tzRGF0YTsKLSAgICBpZiAoIVN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNr
TGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgc3R5bGVSZXNvbHZlcikpCisgICAgaWYgKCFTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIGJ1
aWxkZXJTdGF0ZSkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFw
JiBuYW1lZEdyaWRBcmVhcyA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+bmFtZWRHcmlkQXJlYSgp
OworICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gYnVpbGRlclN0
YXRlLnN0eWxlKCkubmFtZWRHcmlkQXJlYSgpOwogICAgIGlmICghbmFtZWRHcmlkQXJlYXMuaXNF
bXB0eSgpKQogICAgICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFt
ZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEobmFtZWRHcmlkQXJlYXMsIHRyYWNrc0RhdGEubV9uYW1l
ZEdyaWRMaW5lcywgRm9yQ29sdW1ucyk7CiAKLSAgICBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0
YSwgc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBDb2x1bW4pOworICAgIFNFVF9UUkFDS1NfREFUQSh0
cmFja3NEYXRhLCBidWlsZGVyU3RhdGUuc3R5bGUoKSwgQ29sdW1uKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZFJvd3MoUmVuZGVy
U3R5bGU6OmluaXRpYWxHcmlkUm93cygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dE5hbWVkR3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkUm93TGluZXMo
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGlu
ZXMoUmVuZGVyU3R5bGU6OmluaXRpYWxPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0R3JpZFJvd3MoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlk
Um93cygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhS
ZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVkR3JpZFJvd0xpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlh
bE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVSb3dzKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZFJvd3Moc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5ncmlkUm93cygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5h
bWVkR3JpZFJvd0xpbmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+bmFtZWRHcmlkUm93
TGluZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlk
Um93TGluZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5vcmRlcmVkTmFtZWRHcmlkUm93
TGluZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0R3JpZFJvd3MoYnVpbGRlclN0
YXRlLnBhcmVudFN0eWxlKCkuZ3JpZFJvd3MoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0TmFtZWRHcmlkUm93TGluZXMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlk
Um93TGluZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3Jp
ZFJvd0xpbmVzKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm9yZGVyZWROYW1lZEdyaWRSb3dM
aW5lcygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
R3JpZFRlbXBsYXRlUm93cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVt
cGxhdGVSb3dzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6VHJhY2tzRGF0YSB0cmFja3NEYXRh
OwotICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZh
bHVlLCB0cmFja3NEYXRhLCBzdHlsZVJlc29sdmVyKSkKKyAgICBpZiAoIVN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlzdCh2YWx1ZSwgdHJhY2tzRGF0YSwgYnVpbGRlclN0
YXRlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVk
R3JpZEFyZWFzID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7CisgICAg
Y29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBidWlsZGVyU3RhdGUuc3R5
bGUoKS5uYW1lZEdyaWRBcmVhKCk7CiAgICAgaWYgKCFuYW1lZEdyaWRBcmVhcy5pc0VtcHR5KCkp
CiAgICAgICAgIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRM
aW5lc0Zyb21HcmlkQXJlYShuYW1lZEdyaWRBcmVhcywgdHJhY2tzRGF0YS5tX25hbWVkR3JpZExp
bmVzLCBGb3JSb3dzKTsKIAotICAgIFNFVF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBzdHlsZVJl
c29sdmVyLnN0eWxlKCksIFJvdyk7CisgICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLCBSb3cpOwogfQogCi12b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUFsdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCit2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdChTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmlt
aXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYg
KHByaW1pdGl2ZVZhbHVlLmlzU3RyaW5nKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0Q29udGVudEFsdFRleHQocHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSk7CisgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnRBbHRUZXh0KHByaW1pdGl2ZVZhbHVl
LnN0cmluZ1ZhbHVlKCkpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzQXR0cigpKSB7
CiAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBuYW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBh
dHRyKGZvbyk/Ci0gICAgICAgIGlmIChzdHlsZVJlc29sdmVyLnN0eWxlKCktPnN0eWxlVHlwZSgp
ID09IFBzZXVkb0lkOjpOb25lKQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5z
ZXRVbmlxdWUoKTsKKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnN0eWxlVHlwZSgp
ID09IFBzZXVkb0lkOjpOb25lKQorICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
VW5pcXVlKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5
bGUqPihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpLT5zZXRVbmlxdWUoKTsKKyAgICAgICAg
ICAgIGNvbnN0X2Nhc3Q8UmVuZGVyU3R5bGUmPihidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKSku
c2V0VW5pcXVlKCk7CiAKICAgICAgICAgUXVhbGlmaWVkTmFtZSBhdHRyKG51bGxBdG9tKCksIHBy
aW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCksIG51bGxBdG9tKCkpOwotICAgICAgICBjb25zdCBB
dG9tU3RyaW5nJiB2YWx1ZSA9IHN0eWxlUmVzb2x2ZXIuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUo
YXR0cik7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudEFsdFRleHQo
dmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6IHZhbHVlKTsKKyAgICAgICAgY29uc3QgQXRv
bVN0cmluZyYgdmFsdWUgPSBidWlsZGVyU3RhdGUuZWxlbWVudCgpLmdldEF0dHJpYnV0ZShhdHRy
KTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudEFsdFRleHQodmFsdWUu
aXNOdWxsKCkgPyBlbXB0eUF0b20oKSA6IHZhbHVlKTsKIAogICAgICAgICAvLyBSZWdpc3RlciB0
aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFsdWUgYWZmZWN0cyB0aGUgc3R5bGUuCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNv
bnRlbnRBdHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZVJlc29sdmVyKCkucnVsZVNldHMoKS5tdXRhYmxlRmVhdHVyZXMoKS5yZWdpc3RlckNvbnRl
bnRBdHRyaWJ1dGUoYXR0ci5sb2NhbE5hbWUoKSk7CiAgICAgfSBlbHNlCi0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudEFsdFRleHQoZW1wdHlBdG9tKCkpOworICAgICAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dChlbXB0eUF0b20oKSk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdpbGxDaGFuZ2Uo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKTsKLSAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRXaWxsQ2hhbmdlKG51bGxwdHIpOworICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRXaWxsQ2hhbmdlKG51bGxwdHIpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0xNzgwLDU1ICsxNzc0LDU1IEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdpbGxDaGFuZ2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgIH0KLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFdpbGxDaGFuZ2UoV1RGTW92ZSh3aWxsQ2hhbmdlKSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0V2lsbENoYW5nZShXVEZNb3ZlKHdpbGxDaGFuZ2UpKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlV2lkdGgo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlV2lkdGgoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRTdHJva2VXaWR0aChTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldEhhc0V4cGxpY2l0bHlTZXRTdHJva2VXaWR0aCh0cnVlKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRTdHJva2VXaWR0aChTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRM
ZW5ndGgoYnVpbGRlclN0YXRlLCB2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEhhc0V4cGxpY2l0bHlTZXRTdHJva2VXaWR0aCh0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmIChzdHlsZVJlc29sdmVyLmFw
cGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFN0cm9rZUNvbG9yKHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUo
cHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIGZhbHNlKSk7Ci0gICAgaWYgKHN0
eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQotICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFZpc2l0ZWRMaW5rU3Ryb2tlQ29sb3Ioc3R5bGVSZXNv
bHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRl
ZExpbmsgKi8gdHJ1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzRXhwbGlj
aXRseVNldFN0cm9rZUNvbG9yKHRydWUpOworICAgIGlmIChidWlsZGVyU3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkpCisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFN0
cm9rZUNvbG9yKGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVW
YWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gZmFsc2UpKTsKKyAgICBpZiAoYnVpbGRlclN0YXRl
LmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSkKKyAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0VmlzaXRlZExpbmtTdHJva2VDb2xvcihidWlsZGVyU3RhdGUuY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUocHJpbWl0aXZlVmFsdWUsIC8qIGZvclZpc2l0ZWRMaW5rICovIHRydWUp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5U2V0U3Ryb2tlQ29s
b3IodHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
UmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXN0b21Q
cm9wZXJ0eShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1JlZ2lz
dGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSkK
IHsKICAgICBpZiAocmVnaXN0ZXJlZCAmJiByZWdpc3RlcmVkLT5pbml0aWFsVmFsdWUoKSkgewog
ICAgICAgICBhdXRvIGluaXRpYWxWYWx1ZSA9IHJlZ2lzdGVyZWQtPmluaXRpYWxWYWx1ZUNvcHko
KTsKLSAgICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lz
dGVyZWQsICppbml0aWFsVmFsdWUpOworICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHko
YnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCAqaW5pdGlhbFZhbHVlKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIGF1dG8gaW52YWxpZCA9IENTU0N1c3RvbVByb3BlcnR5VmFsdWU6OmNy
ZWF0ZVVucmVzb2x2ZWQobmFtZSwgQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICBhcHBseVZhbHVlQ3Vz
dG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgaW52YWxpZC5nZXQoKSk7Cisg
ICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgaW52
YWxpZC5nZXQoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Q3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3Qg
Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5n
JiBuYW1lKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDdXN0
b21Qcm9wZXJ0eShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1Jl
Z2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCwgY29uc3QgQXRvbVN0cmluZyYgbmFt
ZSkKIHsKLSAgICBhdXRvKiBwYXJlbnRWYWx1ZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUo
KSA/IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+aW5oZXJpdGVkQ3VzdG9tUHJvcGVydGll
cygpLmdldChuYW1lKSA6IG51bGxwdHI7CisgICAgYXV0byogcGFyZW50VmFsdWUgPSBidWlsZGVy
U3RhdGUucGFyZW50U3R5bGUoKS5pbmhlcml0ZWRDdXN0b21Qcm9wZXJ0aWVzKCkuZ2V0KG5hbWUp
OwogICAgIGlmIChwYXJlbnRWYWx1ZSAmJiAhKHJlZ2lzdGVyZWQgJiYgIXJlZ2lzdGVyZWQtPmlu
aGVyaXRzKSkKLSAgICAgICAgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIs
IHJlZ2lzdGVyZWQsICpwYXJlbnRWYWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9w
ZXJ0eShidWlsZGVyU3RhdGUsIHJlZ2lzdGVyZWQsICpwYXJlbnRWYWx1ZSk7CiAgICAgZWxzZQot
ICAgICAgICBhcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3Rl
cmVkLCBuYW1lKTsKKyAgICAgICAgYXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoYnVpbGRlclN0
YXRlLCByZWdpc3RlcmVkLCBuYW1lKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBDU1NDdXN0
b21Qcm9wZXJ0eVZhbHVlJiB2YWx1ZSkKIHsKICAgICBBU1NFUlQodmFsdWUuaXNSZXNvbHZlZCgp
KTsKICAgICBjb25zdCBhdXRvJiBuYW1lID0gdmFsdWUubmFtZSgpOwogCiAgICAgaWYgKCFyZWdp
c3RlcmVkIHx8IHJlZ2lzdGVyZWQtPmluaGVyaXRzKQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPnNldEluaGVyaXRlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1
ZSkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbmhlcml0ZWRDdXN0b21Qcm9w
ZXJ0eVZhbHVlKG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKICAgICBlbHNlCi0gICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0Tm9uSW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1l
LCBtYWtlUmVmKHZhbHVlKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5vbklu
aGVyaXRlZEN1c3RvbVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1ZSkpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5k
ZXggZjZjN2ZmYTBiODAuLjU1ZTBiNzI5MDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwCkBAIC05OCw2ICs5OCw3IEBACiAjaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlT
aG9ydGhhbmQuaCIKKyNpbmNsdWRlICJTdHlsZVJlc29sdmVGb3JEb2N1bWVudC5oIgogI2luY2x1
ZGUgIlN0eWxlUnVsZS5oIgogI2luY2x1ZGUgIlN0eWxlU2hlZXRDb250ZW50cy5oIgogI2luY2x1
ZGUgIlRyYW5zZm9ybUZ1bmN0aW9ucy5oIgpAQCAtMTQzLDcgKzE0NCw2IEBAIFN0eWxlUmVzb2x2
ZXI6OlN0eWxlUmVzb2x2ZXIoRG9jdW1lbnQmIGRvY3VtZW50KQogI2lmIEVOQUJMRShDU1NfREVW
SUNFX0FEQVBUQVRJT04pCiAgICAgLCBtX3ZpZXdwb3J0U3R5bGVSZXNvbHZlcihWaWV3cG9ydFN0
eWxlUmVzb2x2ZXI6OmNyZWF0ZSgmZG9jdW1lbnQpKQogI2VuZGlmCi0gICAgLCBtX3N0eWxlTWFw
KHRoaXMpCiAgICAgLCBtX21hdGNoQXV0aG9yQW5kVXNlclN0eWxlcyhtX2RvY3VtZW50LnNldHRp
bmdzKCkuYXV0aG9yQW5kVXNlclN0eWxlc0VuYWJsZWQoKSkKIHsKICAgICBFbGVtZW50KiByb290
ID0gbV9kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQoKTsKQEAgLTI0NCw3ICsyNDQsNiBAQCBTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUqIHBhcmVudFN0eQogICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQogICAgICwgbV9w
YXJlbnRTdHlsZShwYXJlbnRTdHlsZSkKICAgICAsIG1fc2VsZWN0b3JGaWx0ZXIoc2VsZWN0b3JG
aWx0ZXIpCi0gICAgLCBtX2VsZW1lbnRMaW5rU3RhdGUoZWxlbWVudC5kb2N1bWVudCgpLnZpc2l0
ZWRMaW5rU3RhdGUoKS5kZXRlcm1pbmVMaW5rU3RhdGUoZWxlbWVudCkpCiB7CiAgICAgYm9vbCBy
ZXNldFN0eWxlSW5oZXJpdGFuY2UgPSBoYXNTaGFkb3dSb290UGFyZW50KGVsZW1lbnQpICYmIGRv
d25jYXN0PFNoYWRvd1Jvb3Q+KGVsZW1lbnQucGFyZW50Tm9kZSgpKS0+cmVzZXRTdHlsZUluaGVy
aXRhbmNlKCk7CiAgICAgaWYgKHJlc2V0U3R5bGVJbmhlcml0YW5jZSkKQEAgLTI1Nyw2ICsyNTYs
OSBAQCBTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUoY29uc3QgRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgUmVuZGVyU3R5bGUqIHBhcmVudFN0eQogICAgIGVsc2UKICAgICAgICAgbV9yb290RWxl
bWVudFN0eWxlID0gZG9jdW1lbnRFbGVtZW50U3R5bGUgPyBkb2N1bWVudEVsZW1lbnRTdHlsZSA6
IGRvY3VtZW50RWxlbWVudC0+cmVuZGVyU3R5bGUoKTsKIAorICAgIGlmICghbV9yb290RWxlbWVu
dFN0eWxlKQorICAgICAgICBtX3Jvb3RFbGVtZW50U3R5bGUgPSAmUmVuZGVyU3R5bGU6OmRlZmF1
bHRTdHlsZSgpOworCiAgICAgdXBkYXRlQ29udmVyc2lvbkRhdGEoKTsKIH0KIApAQCAtMzA4LDcg
KzMxMCw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29u
c3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBpZiAoZWxlbWVudC5pc0xp
bmsoKSkgewogICAgICAgICBzdHlsZS5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAgIEluc2lkZUxp
bmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAgICAgICBJbnNpZGVM
aW5rIGxpbmtTdGF0ZSA9IGRvY3VtZW50KCkudmlzaXRlZExpbmtTdGF0ZSgpLmRldGVybWluZUxp
bmtTdGF0ZShlbGVtZW50KTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBJbnNpZGVMaW5rOjpO
b3RJbnNpZGUpIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKQEAgLTM2OSw3
ICszNzEsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3Bl
cnRpZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZv
bnQoKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gTm93IHJlc29sdmUgcmVt
YWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAg
Y2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTM3Nyw3ICszNzksNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUo
Y29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQ
cmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQg
Z290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0
ZSBpdCBhIHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KGNh
c2NhZGUpOwogCiAgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCkBAIC01
NjksNyArNTcxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGll
cyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8g
SWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgp
OworICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5p
bmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICBjYXNj
YWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwpAQCAtMTE1NiwxMiArMTE1OCwxMiBAQCBzdGF0
aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKICAg
ICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6dXBkYXRlRm9udChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQogewotICAgIGlm
ICghbV9zdGF0ZS5mb250RGlydHkoKSkKKyAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRlLnN0eWxl
KCk7CisgICAgaWYgKCFjYXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLmZvbnREaXJ0eSgpICYmIHN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3R5
bGUgPSAqbV9zdGF0ZS5zdHlsZSgpOwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAg
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdHlsZSk7CiAjZW5kaWYKQEAgLTExNzEsNyArMTE3Myw4
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiAgICAgc3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIGlmIChtX3N0YXRl
LmZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBzdHlsZS5zZXRIYXNWaWV3cG9y
dFVuaXRzKHRydWUpOwotICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKKworICAgIGNh
c2NhZGUuYnVpbGRlclN0YXRlKCkuY2xlYXJGb250RGlydHkoKTsKIH0KIAogVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBF
bGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTEzMzgsNyArMTM0
MSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIGNhc2NhZGUuYXBwbHlQcm9w
ZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAg
ICAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgICAg
IHVwZGF0ZUZvbnQoKTsKKyAgICAgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIAogICAgICAgICAv
LyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBp
biBhbnkgb3JkZXIKICAgICAgICAgY2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAg
LTEzNjUsNyArMTM2OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIHJldHVy
biBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBEb05vdFVzZU1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQs
IHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoY2FzY2Fk
ZSk7CiAKICAgICAvLyBJZiB0aGUgZm9udCBjaGFuZ2VkLCB3ZSBjYW4ndCB1c2UgdGhlIG1hdGNo
ZWQgcHJvcGVydGllcyBjYWNoZS4gU3RhcnQgb3Zlci4KICAgICBpZiAoY2FjaGVJdGVtICYmIGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpKQpAQCAtMTM4MSw3ICsxMzg0LDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QKICAgICAvLyBzbyB0byBwcmVzZXJ2ZSBiZWhhdmlvciwgd2UgcXVldWUgdGhlbSB1
cCBkdXJpbmcgY2FzY2FkZSBhbmQgZmx1c2ggaGVyZS4KICAgICBjYXNjYWRlLmFwcGx5RGVmZXJy
ZWRQcm9wZXJ0aWVzKCk7CiAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKKyAgICBB
U1NFUlQoIWNhc2NhZGUuYnVpbGRlclN0YXRlKCkuZm9udERpcnR5KCkpOwogCiAgICAgaWYgKGNh
Y2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CkBAIC0xNDAyLDEwICsxNDA1
LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOworCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBpZiAo
dmFsdWUpCi0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShpZCwgKnZhbHVlKTsKKyAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydHkoaWQsICp2YWx1ZSk7CisgICAgdXBkYXRlRm9udChjYXNjYWRl
KTsKIH0KIAogLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFy
ZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKQEAgLTE1MTYs
NyArMTUyMCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVN
ZWRpdW0pOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5z
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7Ci0gICAgc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgc3R5bGUoKS0+c2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNTdjOThhMTUyYTUu
LjgyMmZhOTRkMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0j
aW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCkBAIC04NSw2
ICs4NCwxMCBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgVmlld3BvcnRTdHlsZVJlc29s
dmVyOwogc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKIAorbmFtZXNwYWNlIFN0eWxlIHsK
K2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK30KKwogLy8gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMg
aXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1bml0cwogLy8gYXJlIGlu
dGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBh
bmQgc3R5bGVkIG9ubHkKIC8vIGZyb20gdGhlIFVzZXIgQWdlbnQgU3R5bGVzaGVldCBydWxlcy4K
QEAgLTE2MCw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4p
OwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnQo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgp
OwogCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQg
c2l6ZSk7CkBAIC0yNDMsMTUgKzI0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQogICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCi0gICAgICAgIEluc2lkZUxpbmsgZWxlbWVudExpbmtT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQotCi0gICAgICAgIHZv
aWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGlzQXBwbHk7IH0KLSAgICAgICAgdm9pZCBzZXRBcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBpc0FwcGx5OyB9Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGU7IH0KLSAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9Ci0K
LSAgICAgICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBpc0RpcnR5KSB7IG1fZm9udERpcnR5ID0g
aXNEaXJ0eTsgfQotICAgICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERpcnR5OyB9CiAgICAgICAgIHZvaWQgc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKGJvb2wg
aGFzVmlld3BvcnRVbml0cykgeyBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0cyA9IGhhc1ZpZXdw
b3J0VW5pdHM7IH0KICAgICAgICAgYm9vbCBmb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0czsgfQogCkBAIC0yNjEsMjMgKzI1
NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICAg
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0
eSB8PSBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsgfQotICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0
eWxlLT5zZXRab29tKGYpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICAg
ICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnRE
aXJ0eSB8PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICAgICAg
dm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikg
eyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0
aW9uKTsgfQotCiAgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KIAogICAgICAgICBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CiAKLSAgICAgICAg
U3R5bGU6OkNhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2Nhc2Nh
ZGVMZXZlbDsgfQotICAgICAgICB2b2lkIHNldENhc2NhZGVMZXZlbChTdHlsZTo6Q2FzY2FkZUxl
dmVsIGxldmVsKSB7IG1fY2FzY2FkZUxldmVsID0gbGV2ZWw7IH0KLSAgICAgICAgU3R5bGU6OlNj
b3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29w
ZU9yZGluYWw7IH0KLSAgICAgICAgdm9pZCBzZXRTdHlsZVNjb3BlT3JkaW5hbChTdHlsZTo6U2Nv
cGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKSB7IG1fc3R5bGVTY29wZU9yZGluYWwgPSBzdHls
ZVNjb3BlT3JkaW5hbDsgfQotCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3Rv
ckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0KICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKQEAgLTI5NywxNCArMjc4LDYgQEAgcHVibGljOgogCiAgICAgICAgIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogCi0gICAg
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgbV9zdHlsZVNjb3BlT3JkaW5hbCB7IFN0eWxlOjpTY29w
ZU9yZGluYWw6OkVsZW1lbnQgfTsKLQotICAgICAgICBJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtT
dGF0ZSB7IEluc2lkZUxpbms6Ok5vdEluc2lkZSB9OwotICAgICAgICBTdHlsZTo6Q2FzY2FkZUxl
dmVsIG1fY2FzY2FkZUxldmVsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50IH07Ci0K
LSAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKLSAg
ICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9Owot
ICAgICAgICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2ZvbnRT
aXplSGFzVmlld3BvcnRVbml0cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogICAgIH07CkBAIC0zMTQsMTggKzI4Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBib29s
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKTsgfQotCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJl
dHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3Rv
ckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KLSAg
ICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVy
biBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRG
b250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9h
dCBmKSB7IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShm
bG9hdCBmKSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0V3Jp
dGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50
YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRP
cmllbnRhdGlvbik7IH0KIAogICAgIGJvb2wgYWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3Np
emluZyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKIApAQCAtMzgwLDcgKzM0Miw2IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0
eWxlUmVzb2x2ZXI7CiAjZW5kaWYKIAotICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAg
ICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAogICAg
IFN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3Au
cGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKaW5kZXggYmVkYjgyNGVhMGMuLmIx
ZjIyN2QxNzA3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC01NzksMjEgKzU3OSwyMSBAQCBz
dWIgZ2V0QXV0b0dldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHls
ZSA9IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5oYXNBdXRvIiAuIGdldE5h
bWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLmhh
c0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKIH0KIAogc3ViIGdldEF1
dG9TZXR0ZXIgewogICBteSAkbmFtZSA9IHNoaWZ0OwogICBteSAkcmVuZGVyU3R5bGUgPSBzaGlm
dDsKIAotICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi0+c2V0SGFzQXV0byIgLiBnZXROYW1lRm9y
TWV0aG9kcygkbmFtZSkgLiAiKCkiOworICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi5zZXRIYXNB
dXRvIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CiB9CiAKIHN1YiBnZXRWaXNp
dGVkTGlua1NldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHlsZSA9
IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5zZXRWaXNpdGVkTGluayIgLiBn
ZXROYW1lRm9yTWV0aG9kcygkbmFtZSk7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLnNldFZp
c2l0ZWRMaW5rIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKTsKIH0KIAogc3ViIGdldENsZWFy
RnVuY3Rpb24gewpAQCAtNjk5LDcgKzY5OSw3IEBAIHN1YiBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZSB7CiAgIG15ICRwcmltaXRpdmVWYWx1ZSA9IHNoaWZ0OwogICBteSAkZm9yVmlzaXRlZExpbmsg
PSBAXyA/IHNoaWZ0IDogTk9UX0ZPUl9WSVNJVEVEX0xJTks7CiAKLSAgcmV0dXJuICJzdHlsZVJl
c29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCIgLiAkcHJpbWl0aXZlVmFsdWUgLiAiLCAv
KiBmb3JWaXNpdGVkTGluayAqLyAiIC4gKCRmb3JWaXNpdGVkTGluayA/ICJ0cnVlIiA6ICJmYWxz
ZSIpIC4gIikiOworICByZXR1cm4gImJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1
ZSgiIC4gJHByaW1pdGl2ZVZhbHVlIC4gIiwgLyogZm9yVmlzaXRlZExpbmsgKi8gIiAuICgkZm9y
VmlzaXRlZExpbmsgPyAidHJ1ZSIgOiAiZmFsc2UiKSAuICIpIjsKIH0KIAogdXNlIGNvbnN0YW50
IHsKQEAgLTcxMywxMiArNzEzLDEyIEBAIHN1YiBnZW5lcmF0ZUNvbG9yVmFsdWVTZXR0ZXIgewog
ICBteSAkaW5kZW50ID0gc2hpZnQ7CiAgIG15ICR2YWx1ZUlzUHJpbWl0aXZlID0gQF8gPyBzaGlm
dCA6IFZBTFVFX0lTX0NPTE9SOwogCi0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxl
KCkiOwotICBteSAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChzdHlsZVJlc29sdmVy
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKVxuIjsKLSAgbXkgJHNldFZhbHVlID0gJHN0
eWxlIC4gIi0+IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJz
ZXR0ZXIifTsKKyAgbXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKKyAgbXkgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpKVxuIjsKKyAgbXkgJHNldFZhbHVlID0gJHN0eWxlIC4gIi4iIC4gJHBy
b3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAk
Y29sb3IgPSAkdmFsdWVJc1ByaW1pdGl2ZSA/IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCR2YWx1
ZSkgOiAkdmFsdWU7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICIgLiAkc2V0
VmFsdWUgLiAiKCIgLiAkY29sb3IgLiAiKTtcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiaWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KVxuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSlcbiI7CiAgICRjb2xvciA9ICR2YWx1ZUlz
UHJpbWl0aXZlID8gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoJHZhbHVlLCBGT1JfVklTSVRFRF9M
SU5LKSA6ICR2YWx1ZTsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdl
dFZpc2l0ZWRMaW5rU2V0dGVyKCRuYW1lLCAkc3R5bGUpIC4gIigiIC4gJGNvbG9yIC4gIik7XG4i
OwogCkBAIC03MzEsNyArNzMxLDcgQEAgc3ViIGhhbmRsZUN1cnJlbnRDb2xvclZhbHVlIHsKICAg
bXkgJGluZGVudCA9IHNoaWZ0OwogCiAgIG15ICRjb2RlID0gJGluZGVudCAuICJpZiAoIiAuICRw
cmltaXRpdmVWYWx1ZSAuICIudmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7XG4i
OwotICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRu
YW1lfSAuICIoc3R5bGVSZXNvbHZlcik7XG4iOworICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICBh
cHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAg
ICRjb2RlIC49ICRpbmRlbnQgLiAiICAgIHJldHVybjtcbiI7CiAgICRjb2RlIC49ICRpbmRlbnQg
LiAifVxuIjsKICAgcmV0dXJuICRjb2RlOwpAQCAtNzQyLDcgKzc0Miw3IEBAIHN1YiBnZW5lcmF0
ZUFuaW1hdGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNo
aWZ0OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAu
IGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7
CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01l
dGhvZCgkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlm
IChsaXN0LmlzRW1wdHkoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpO1xuIjsKICAgbXkgJHNldHRlciA9ICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIifTsKQEAgLTc2
Miw4ICs3NjIsOCBAQCBzdWIgZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNl
dHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIi
OwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8mIGxpc3QgPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01ldGhvZCgk
bmFtZSkgLiAiKCk7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIHBh
cmVudExpc3QgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPiIgLiBnZXRBbmltYXRpb25z
T3JUcmFuc2l0aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImF1dG8mIGxpc3QgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gZ2V0RW5z
dXJlQW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBwYXJlbnRMaXN0ID0gYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkuIiAuIGdldEFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1l
KSAuICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGkgPSAw
LCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7XG4iOwog
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYg
cGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpLiIgLiBnZXRUZXN0RnVuY3Rpb24oJG5hbWUpIC4gIigp
OyArK2kpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmIChsaXN0
LnNpemUoKSA8PSBpKVxuIjsKQEAgLTc4NiwyMCArNzg2LDIwIEBAIHN1YiBnZW5lcmF0ZUFuaW1h
dGlvblByb3BlcnR5VmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkg
JHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJBbmlt
YXRpb25MaXN0JiBsaXN0ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5p
bWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJBbmltYXRpb25MaXN0JiBsaXN0ID0gYnVpbGRlclN0YXRlLnN0
eWxlKCkuIiAuIGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAu
ICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGNoaWxkSW5k
ZXggPSAwO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoaXM8Q1NTVmFs
dWVMaXN0Pih2YWx1ZSkpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVhdGlu
ZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAg
ICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC5zaXplKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkp
O1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGVNYXAoKS0+IiAuIGdldEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlz
dC5hbmltYXRpb24oY2hpbGRJbmRleCksIGN1cnJlbnRWYWx1ZSk7XG4iOworICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdl
dEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRl
eCksIGN1cnJlbnRWYWx1ZSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgKytjaGlsZEluZGV4O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgfVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKGxpc3QuaXNFbXB0eSgpKVxuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1h
dGlvbjo6Y3JlYXRlKCkpO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
c3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24oJG5h
bWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpO1xuIjsKKyAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdl
dEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRl
eCksIHZhbHVlKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGNoaWxk
SW5kZXggPSAxO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3Quc2l6
ZSgpOyArK2NoaWxkSW5kZXgpIHtcbiI7CkBAIC04MjIsMTEgKzgyMiwxMSBAQCBzdWIgZ2VuZXJh
dGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlciB7CiAKICAgbXkgJHNldHRlckNv
bnRlbnQgPSAiIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIvLyBDaGVjayBmb3Ig
KHNpbmdsZS1sYXllcikgbm8tb3AgYmVmb3JlIGNsZWFyaW5nIGFueXRoaW5nLlxuIjsKLSAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvJiBsYXllcnMgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gImF1dG8mIGxheWVycyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImlmICghbGF5ZXJzLm5leHQoKSAmJiAoIWxheWVycy4iIC4gJHRlc3RG
dW5jdGlvbiAuICIoKSB8fCBsYXllcnMuIiAuICRnZXR0ZXIgLiAiKCkgPT0gJGluaXRpYWwpKVxu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gIlxuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRv
KiBjaGlsZCA9ICZzdHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1
bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
YXV0byogY2hpbGQgPSAmYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29y
RnVuY3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICJjaGlsZC0+IiAuICRzZXR0ZXIgLiAiKCIgLiAkaW5pdGlhbCAuICIpO1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJmb3IgKGNoaWxkID0gY2hpbGQtPm5leHQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHQoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgIGNoaWxkLT4iIC4gJGNsZWFyRnVuY3Rpb24gLiAiKCk7XG4iOwpAQCAtODQ1LDEyICs4
NDUsMTIgQEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIg
ewogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiLy8gQ2hlY2sgZm9yIG5vLW9wIGJlZm9yZSBjb3B5aW5nIGFueXRoaW5nLlxuIjsKLSAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4iKCkgPT0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigpKVxuIjsKKyAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuIiAu
IGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuIigpID09IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIg
LiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICByZXR1cm47XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAiXG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xu
IjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZidWlsZGVy
U3RhdGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXND
aGlsZCA9IG51bGxwdHI7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAo
YXV0byogcGFyZW50ID0gJnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+IiAuIGdldExheWVy
c0Z1bmN0aW9uKCRuYW1lKSAuICIoKTsgcGFyZW50ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rp
b24gLiAiKCk7IHBhcmVudCA9IHBhcmVudC0+bmV4dCgpKSB7XG4iOworICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImZvciAoYXV0byogcGFyZW50ID0gJmJ1aWxkZXJTdGF0ZS5wYXJlbnRT
dHlsZSgpLiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7IHBhcmVudCAmJiBwYXJl
bnQtPiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigpOyBwYXJlbnQgPSBwYXJlbnQtPm5leHQoKSkge1xu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKCFjaGlsZCkge1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNl
dE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAu
ICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjaGlsZCA9
IHByZXZpb3VzQ2hpbGQtPm5leHQoKTtcbiI7CkBAIC04NzIsNyArODcyLDcgQEAgc3ViIGdlbmVy
YXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlciB7CiAgIG15ICRDU1NQcm9wZXJ0eUlkID0g
IkNTU1Byb3BlcnR5IiAuICRuYW1lVG9JZHskbmFtZX07CiAKICAgbXkgJHNldHRlckNvbnRlbnQg
PSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZzdHls
ZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAu
ICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAm
YnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUp
IC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJGaWxsTGF5ZXIqIHBy
ZXZpb3VzQ2hpbGQgPSBudWxscHRyO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICJpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYgIWlzPENTU0ltYWdlU2V0VmFsdWU+KHZh
bHVlKSkge1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgLy8gV2FsayBl
YWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFz
IG5lZWRlZC5cbiI7CkBAIC04ODEsMTIgKzg4MSwxMiBAQCBzdWIgZ2VuZXJhdGVGaWxsTGF5ZXJQ
cm9wZXJ0eVZhbHVlU2V0dGVyIHsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
ICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KG1ha2VVbmlxdWU8RmlsbExheWVyPigiIC4g
Z2V0RmlsbExheWVyVHlwZSgkbmFtZSkgLiAiKSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICAgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIH1cbiI7Ci0gICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPiIg
LiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAu
ICIsICpjaGlsZCwgaXRlbSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdldEZpbGxMYXllck1hcGZ1bmN0aW9u
KCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCBpdGVtKTtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBwcmV2aW91c0NoaWxkID0gY2hp
bGQ7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dCgpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKLSAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4g
Z2V0RmlsbExheWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAi
LCAqY2hpbGQsIHZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFt
ZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgdmFsdWUpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGQgPSBjaGlsZC0+bmV4dCgpO1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCgpKVxuIjsKQEAg
LTkwMiw3ICs5MDIsNyBAQCBzdWIgZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudAogCiAgIG15ICRp
c1NWRyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsi
c3ZnIn07CiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25z
eyRuYW1lfXsic2V0dGVyIn07Ci0gIHJldHVybiAic3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4g
ICgkaXNTVkcgPyAiYWNjZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2
YWx1ZSAuICIpIjsKKyAgcmV0dXJuICJidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gICgkaXNTVkcg
PyAiYWNjZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2YWx1ZSAuICIp
IjsKIH0KIAogc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKQEAgLTkxMyw5ICs5MTMs
OSBAQCBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICBteSAkaW5pdGlhbCA9ICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJpbml0aWFsIn07CiAgIG15
ICRpc1NWRyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic3ZnIn07CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0g
LiAiKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpXG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9
IC4gIihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpXG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIntcbiI7Ci0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0
eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0eWxlKCkiOwogICBpZiAoZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJhdXRvLWZ1bmN0
aW9ucyJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdldEF1
dG9TZXR0ZXIoJG5hbWUsICRzdHlsZSkgLiAiO1xuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxpbmstY29sb3It
c3VwcG9ydCJ9KSB7CkBAIC05MjQsOSArOTI0LDkgQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVl
U2V0dGVyIHsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJhbmltYXRhYmxlIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5l
cmF0ZUFuaW1hdGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4g
IiAgICAiKTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpO1xuIjsK
ICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAu
ICRzZXR0ZXIgLiAiKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OiIgLiAkaW5pdGlhbCAuICIoKSk7
XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZmlsbC1sYXllci1wcm9w
ZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0
eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgIH0gZWxzZSB7
CkBAIC05NDMsMTEgKzk0MywxMSBAQCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewog
ICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQiIC4gJG5h
bWVUb0lkeyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcilcbiI7CisgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbmhlcml0IiAuICRu
YW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSlcbiI7
CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKICAgbXkgJGlzU1ZHID0gZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKLSAg
bXkgJHBhcmVudFN0eWxlID0gInN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSI7Ci0gIG15ICRz
dHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxlKCkiOworICBteSAkcGFyZW50U3R5bGUgPSAiYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0
eWxlKCkiOwogICBteSAkZ2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17ImdldHRlciJ9OwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVC
dWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAkZGlkQ2FsbFNldFZhbHVlID0g
MDsKQEAgLTk1NywxMCArOTU3LDEwIEBAIHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7
CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHJldHVybjtcbiI7CiAg
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxuIjsKICAgfSBlbHNpZiAoZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxp
bmstY29sb3Itc3VwcG9ydCJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgQ29sb3IgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+IiAuICRnZXR0ZXIgLiAiKCk7
XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIENvbG9yIGNvbG9yID0g
IiAuICRwYXJlbnRTdHlsZSAuICIuIiAuICRnZXR0ZXIgLiAiKCk7XG4iOwogICAgIGlmICghZXhp
c3RzKCRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJuby1kZWZhdWx0
LWNvbG9yIn0pKSB7CiAgICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSlcbiI7Ci0gICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IiAgICAgICAgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+Y29sb3IoKTtcbiI7CisgICAg
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY29sb3IgPSAiIC4gJHBhcmVu
dFN0eWxlIC4gIi5jb2xvcigpO1xuIjsKICAgICB9CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2Vu
ZXJhdGVDb2xvclZhbHVlU2V0dGVyKCRuYW1lLCAiY29sb3IiLCAkaW5kZW50IC4gIiAgICAiKTsK
ICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKQEAgLTk2OCwxNiArOTY4LDE2IEBAIHN1YiBnZW5l
cmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVB
bmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAg
Iik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVy
dGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0g
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKLSAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKHN0eWxl
UmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpO1xuIjsKKyAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJT
dGF0ZS5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICIgICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihidWlsZGVyU3RhdGUucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsKKyAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAx
OwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImZpbGwtbGF5ZXItcHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdl
bmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQg
LiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAxOwogICB9CiAgIGlmICghJGRpZENh
bGxTZXRWYWx1ZSkgewotICAgIG15ICRpbmhlcml0ZWRWYWx1ZSA9ICRwYXJlbnRTdHlsZSAuICIt
PiIgLiAoJGlzU1ZHID8gInN2Z1N0eWxlKCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKKyAg
ICBteSAkaW5oZXJpdGVkVmFsdWUgPSAkcGFyZW50U3R5bGUgLiAiLiIgLiAoJGlzU1ZHID8gInN2
Z1N0eWxlKCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKICAgICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAiIC4gZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudCgkbmFtZSwgImZv
cndhcmRJbmhlcml0ZWRWYWx1ZSgiIC4gJGluaGVyaXRlZFZhbHVlIC4gIikiKSAuICI7XG4iOwog
ICB9CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifVxuIjsKQEAgLTk5MCwyMCArOTkw
LDIwIEBAIHN1YiBnZW5lcmF0ZVZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNoaWZ0Owog
CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAic3RhdGljIHZvaWQgYXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpXG4iOworICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRu
YW1lfSAuICIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFs
dWUpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIntcbiI7CiAgIG15ICRjb252
ZXJ0ZWRWYWx1ZTsKICAgaWYgKGV4aXN0cygkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRp
b25zeyRuYW1lfXsiY29udmVydGVyIn0pKSB7Ci0gICAgJGNvbnZlcnRlZFZhbHVlID0gIlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJP
cHRpb25zeyRuYW1lfXsiY29udmVydGVyIn0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKSI7Cisg
ICAgJGNvbnZlcnRlZFZhbHVlID0gIlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiY29udmVydGVyIn0gLiAi
KGJ1aWxkZXJTdGF0ZSwgdmFsdWUpIjsKICAgfSBlbHNpZiAoZXhpc3RzKCRwcm9wZXJ0aWVzV2l0
aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSkpIHsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxl
QnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSAuICIoc3R5bGVS
ZXNvbHZlciwgdmFsdWUpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAu
ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1j
b252ZXJ0ZXIifSAuICIoYnVpbGRlclN0YXRlLCB2YWx1ZSk7XG4iOwogICAgICRjb252ZXJ0ZWRW
YWx1ZSA9ICJXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlLnZhbHVlKCkpIjsKICAgfSBlbHNlIHsKICAg
ICAkY29udmVydGVkVmFsdWUgPSAiZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSI7
CiAgIH0KIAogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17InNldHRlciJ9OwotICBteSAkc3R5bGUgPSAic3R5bGVSZXNvbHZlci5zdHlsZSgp
IjsKKyAgbXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKICAgbXkgJGRpZENhbGxT
ZXRWYWx1ZSA9IDA7CiAgIGlmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0
aW9uc3skbmFtZX17ImF1dG8tZnVuY3Rpb25zIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSB7XG4iOwpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgc3ViIGdl
bmVyYXRlVmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0
aW9uUHJvcGVydHlWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRp
ZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHls
ZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRp
b24oKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2Ny
aXB0aW9uLiIgLiAkc2V0dGVyIC4gIigiIC4gJGNvbnZlcnRlZFZhbHVlIC4gIik7XG4iOwotICAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAg
IH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsiZmlsbC1sYXllci1wcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJh
dGVGaWxsTGF5ZXJQcm9wZXJ0eVZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsK
QEAgLTEwNTIsMTAgKzEwNTIsMTAgQEAgcHJpbnQgU1RZTEVCVUlMREVSIDw8ICJFT0YiOwogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyU3Rh
dGUuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHls
ZUJ1aWxkZXJDdXN0b20uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0j
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEw
ODMsNyArMTA4Myw3IEBAIGZvcmVhY2ggbXkgJG5hbWUgKEBuYW1lcykgewogcHJpbnQgU1RZTEVC
VUlMREVSIDw8ICJFT0YiOwogfTsKIAotdm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1Jl
Z2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKK3ZvaWQgU3R5bGVCdWlsZGVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0lu
aGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKIHsK
ICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CkBA
IC0xMDkxLDExICsxMDkxLDExIEBAIHZvaWQgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eUN1c3RvbTogewogICAgICAgICBhdXRvJiBjdXN0b21Qcm9wZXJ0eSA9IGRvd25j
YXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJv
cGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkubmFtZSgpKTsK
KyAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVy
dHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOwogICAg
ICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIGN1
c3RvbVByb3BlcnR5Lm5hbWUoKSk7CisgICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgY3VzdG9t
UHJvcGVydHkubmFtZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJl
ZCwgY3VzdG9tUHJvcGVydHkpOworICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQ3VzdG9tUHJvcGVydHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9w
ZXJ0eSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIEVPRgpAQCAtMTEwNywxMSArMTEwNywxMSBA
QCBmb3JlYWNoIG15ICRuYW1lIChAbmFtZXMpIHsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4iOwogICB9IGVsc2lmICghZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJza2lwLWJ1aWxkZXIifSkgewog
ICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBpZiAoaXNJbml0aWFsKVxuIjsKLSAgICBw
cmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRu
YW1lLCAiSW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAi
KHN0eWxlUmVzb2x2ZXIpO1xuIjsKKyAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAg
ICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiSW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0
aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKGJ1aWxkZXJTdGF0ZSk7XG4iOwogICAgIHByaW50
IFNUWUxFQlVJTERFUiAiICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpXG4iOwotICAgIHByaW50
IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUs
ICJJbmhlcml0IikgLiAiOjphcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoc3R5
bGVSZXNvbHZlcik7XG4iOworICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAu
IGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbmhlcml0IikgLiAiOjphcHBseUluaGVyaXQi
IC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAgICAgcHJpbnQgU1RZ
TEVCVUlMREVSICIgICAgICAgIGVsc2VcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAg
ICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIlZhbHVlIikgLiAiOjphcHBs
eVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTtcbiI7
CisgICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5j
dGlvbigkbmFtZSwgIlZhbHVlIikgLiAiOjphcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0g
LiAiKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpO1xuIjsKICAgfQogICBwcmludCBTVFlMRUJVSUxERVIg
IiAgICAgICAgYnJlYWs7XG4iOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
Y3BwCmluZGV4IDFmOTMxYmIwMDY4Li4zOWI5ZjY1MzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTc3LDEwICsxNzcsMTAgQEAgdm9pZCBDU1NQYXJzZXI6
OnBhcnNlRGVjbGFyYXRpb25Gb3JJbnNwZWN0b3IoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29u
dGV4dCwgY28KICAgICBDU1NQYXJzZXJJbXBsOjpwYXJzZURlY2xhcmF0aW9uTGlzdEZvckluc3Bl
Y3RvcihzdHJpbmcsIGNvbnRleHQsIG9ic2VydmVyKTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQg
cHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUpCitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJs
ZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIEFTU0VSVCgocHJvcElE
ID09IENTU1Byb3BlcnR5Q3VzdG9tICYmIHZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSB8
fCAocHJvcElEICE9IENTU1Byb3BlcnR5Q3VzdG9tICYmICF2YWx1ZS5pc0N1c3RvbVByb3BlcnR5
VmFsdWUoKSkpOwotICAgIGF1dG8mIHN0eWxlID0gKmNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnN0
eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKTsKICAgICBhdXRv
IGRpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSBz
dHlsZS53cml0aW5nTW9kZSgpOwogCkBAIC0xOTMsNyArMTkzLDcgQEAgUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5
SUQgcHJvcEkKICAgICAgICAgICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKICAgICAgICAgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBw
ZW5kaW5nU3Vic3RpdHV0aW9uLnNob3J0aGFuZFZhbHVlKCk7CiAKLSAgICAgICAgYXV0byByZXNv
bHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNj
YWRlKTsKKyAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVk
RGF0YSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBWZWN0b3I8Q1NTUGFy
c2VyVG9rZW4+IHJlc29sdmVkVG9rZW5zID0gcmVzb2x2ZWREYXRhLT50b2tlbnMoKTsKQEAgLTIx
Miw3ICsyMTIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogCiAgICAgaWYgKHZhbHVlLmlz
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZSgpKSB7CiAgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUmIHZhbHVlV2l0aFJlZmVyZW5jZXMgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVJl
ZmVyZW5jZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVX
aXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOworICAgICAg
ICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJz
ZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCByZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2Nv
bnRleHQpOwpAQCAtMjIyLDkgKzIyMiw5IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAg
Y29uc3QgYXV0byYgdmFsdWVXaXRoUmVmZXJlbmNlcyA9IFdURjo6Z2V0PFJlZjxDU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlPj4oY3VzdG9tUHJvcFZhbHVlLnZhbHVlKCkpLmdldCgpOwogCiAgICAg
YXV0byYgbmFtZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKS5uYW1l
KCk7Ci0gICAgYXV0byogcmVnaXN0ZXJlZCA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLmRvY3Vt
ZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCkuZ2V0KG5hbWUpOworICAg
IGF1dG8qIHJlZ2lzdGVyZWQgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3Rl
cmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7CiAgICAgYXV0byYgc3ludGF4ID0gcmVn
aXN0ZXJlZCA/IHJlZ2lzdGVyZWQtPnN5bnRheCA6ICIqIjsKLSAgICBhdXRvIHJlc29sdmVkRGF0
YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRl
KTsKKyAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogCiAgICAgaWYgKCFyZXNvbHZlZERhdGEp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM0LDkgKzIzNCw5IEBAIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9w
ZXJ0eUlEIHByb3BJCiAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Q
cm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKHN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgcmVz
b2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKIAogICAgIGZvciAoYXV0byBpZCA6IGRl
cGVuZGVuY2llcykKLSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLmNhc2NhZGUoKS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKIAot
ICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFs
dWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxlUmVz
b2x2ZXIoKSwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tl
bnMoKSwgYnVpbGRlclN0YXRlLCBtX2NvbnRleHQpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPGRvdWJsZT4+IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZUtleUxpc3QoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGQyNjk1
NTE0ZTFlLi41Y2YzNjBhNDk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5o
CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRl
clN0eWxlOwogCiBuYW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVydHlDYXNjYWRlOworY2xh
c3MgQnVpbGRlclN0YXRlOwogfQogCiBjbGFzcyBDU1NQYXJzZXIgewpAQCAtODEsNyArODEsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgQ1NTU2Vs
ZWN0b3JMaXN0Jik7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVXaXRoVmFyaWFi
bGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJpYWJs
ZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6QnVpbGRl
clN0YXRlJik7CiAKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmLCBi
b29sIHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihj
b25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IGY1MDk4ZTMwOWQ4Li4y
Mjk1NzgzNTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJIYXNoVG9vbHMuaCIKIC8v
IEZJWE1FLU5FV1BBUlNFUjogUmVwbGFjZSBQYWlyIGFuZCBSZWN0IHdpdGggYWN0dWFsIENTU1Zh
bHVlIHN1YmNsYXNzZXMgKENTU1ZhbHVlUGFpciBhbmQgQ1NTUXVhZFZhbHVlKS4KICNpbmNsdWRl
ICJQYWlyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgpAQCAtNzUsNyArNzYsNiBAQAogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckNvbnZlcnRl
ci5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2luY2x1ZGUgPGJpdHNldD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMjk3LDEwICsyOTcsMTAgQEAgYm9vbCBDU1NQcm9wZXJ0
eVBhcnNlcjo6Y2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBz
eW50YXgsIGMKICAgICByZXR1cm4gcGFyc2VyLmNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKHN5bnRheCk7CiB9CiAKLVJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBDU1NQcm9w
ZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9r
ZW5zLCBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQorUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQcm9wZXJ0eVBhcnNlciBwYXJzZXIodG9r
ZW5zLCBjb250ZXh0LCBudWxscHRyLCBmYWxzZSk7Ci0gICAgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5h
bWUsIHN5bnRheCwgc3R5bGVSZXNvbHZlcik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5
VmFsdWU+IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUs
IHN5bnRheCwgYnVpbGRlclN0YXRlKTsKICAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZXIubV9yYW5n
ZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdmFsdWU7CkBA
IC00Mjk1LDEzICs0Mjk1LDEzIEBAIHZvaWQgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJz
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluCiAgICAgfQogfQog
Ci1SZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBzeW50YXgsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitSZWZQdHI8Q1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Q
cm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNv
bnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBpZiAoc3ludGF4
ICE9ICIqIikgewogICAgICAgICBtX3JhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgICAg
IGF1dG8gcHJpbWl0aXZlVmFsID0gY29uc3VtZVdpZHRoT3JIZWlnaHQobV9yYW5nZSwgbV9jb250
ZXh0KTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbCAmJiBwcmltaXRpdmVWYWwtPmlzUHJpbWl0
aXZlVmFsdWUoKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByaW1pdGl2ZVZhbCku
aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgYXV0byBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgKnByaW1pdGl2ZVZhbCk7CisgICAg
ICAgICAgICBhdXRvIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aChidWlsZGVyU3RhdGUsICpwcmltaXRpdmVWYWwpOwogICAgICAgICAgICAgaWYgKCFsZW5ndGgu
aXNDYWxjdWxhdGVkKCkgJiYgIWxlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVTeW50YXhMZW5ndGgobmFtZSwg
V1RGTW92ZShsZW5ndGgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IDU2NTIwZDk1YjZlLi5jNjdjMjAyMDUwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMzIs
NyArMzIsMTAgQEAgY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0
eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBT
dHlsZVJlc29sdmVyOworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOwor
fQogICAgIAogLy8gSW5wdXRzOiBQcm9wZXJ0eUlELCBpc0ltcG9ydGFudCBib29sLCBDU1NQYXJz
ZXJUb2tlblJhbmdlLgogLy8gT3V0cHV0czogVmVjdG9yIG9mIENTU1Byb3BlcnRpZXMKQEAgLTQ3
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIC8vIFBhcnNlcyBhIG5vbi1zaG9ydGhhbmQgQ1NTIHBy
b3BlcnR5CiAgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW5nbGVWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYpOwogICAgIHN0YXRpYyBib29sIGNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4gcGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0
cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJU
b2tlblJhbmdlJiwgY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmKTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1
ZURlcGVuZGVuY2llcyhjb25zdCBTdHJpbmcmIHN5bnRheCwgYm9vbCBpc1Jvb3QsIEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mIGRlcGVuZGVuY2llcywgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogcHJpdmF0ZToKQEAgLTU4LDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIGNvbnN1bWVDU1NXaWRlS2V5d29yZChDU1NQcm9wZXJ0eUlELCBi
b29sIGltcG9ydGFudCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNpbmdsZVZhbHVlKENT
U1Byb3BlcnR5SUQsIENTU1Byb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUludmFsaWQpOwogICAgIGJv
b2wgY2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgp
OwotICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJv
cGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25z
dCBTdHlsZVJlc29sdmVyJik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHBh
cnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBzeW50YXgsIGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICB2b2lkIGNvbGxl
Y3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYgc3lu
dGF4LCBib29sIGlzUm9vdCwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgZGVwZW5kZW5jaWVzKTsK
IAogICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUg
PT0gSFRNTFF1aXJrc01vZGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDk1YjdiMWM1NWY5Li5hZGMw
MzYxOWZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsMTMgKzE3Niw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5
bGUpLmdldCgpKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBzdHlsZVJlc29s
dmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBh
cnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0
KCkpOwotCi0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6
ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZv
bnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2Ug
YSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEy
MikuCi0gICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRN
ZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGlu
ZS1oZWlnaHQuCi0gICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNv
bHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAK
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVj
dG9yKCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMzM1MTNkZjRmODMu
LjczODhkOWZjN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTExMzMsNyArMTEzMyw3IEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQoY29uc3QgRmxvCiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0
LndpZHRoKCksIHRoaWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsK
ICAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Js
dXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxM2Y1YTJmNTVkYi4uMDg3OTE0NWIxM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC00MDIsNyArNDAyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1
bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOwogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSk7CiAKLSAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKTsKKyAgICB2b2lkIGJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwogCiAgICAgZW51bSBSb3VuZGluZ01vZGUgewogICAgICAgICBSb3VuZEFsbFNpZGVz
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggY2YzY2Y5MjkzMGMuLmZiNzNh
Njc4MzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTMxNiw3ICszMTYs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUm
KSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyk7CisgICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9DYXNjYWRlTGV2ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2Nh
ZGVMZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmUzMmE4
NzE1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2NhZGVMZXZl
bC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0
eWxlIHsKKworZW51bSBjbGFzcyBDYXNjYWRlTGV2ZWwgOiB1aW50OF90IHsKKyAgICBVc2VyQWdl
bnQgICA9IDEgPDwgMCwKKyAgICBVc2VyICAgICAgICA9IDEgPDwgMSwKKyAgICBBdXRob3IgICAg
ICA9IDEgPDwgMgorfTsKKworc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8Q2FzY2FkZUxldmVs
PiBhbGxDYXNjYWRlTGV2ZWxzKCkgeyByZXR1cm4geyBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
Q2FzY2FkZUxldmVsOjpVc2VyLCBDYXNjYWRlTGV2ZWw6OkF1dGhvciB9OyB9CisKK30KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGE0Mzk4MTEyMzVhLi4z
ZThiYzljZDhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNj
YWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBA
IC0xNzQsOSArMTc0LDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQpCiAjZW5kaWYKIAogUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0
eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNs
dWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQotICAgIDogbV9zdHlsZVJlc29sdmVy
KHN0eWxlUmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KG1hdGNoUmVzdWx0KQorICAgIDog
bV9tYXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVzKGlu
Y2x1ZGVkUHJvcGVydGllcykKKyAgICAsIG1fYnVpbGRlclN0YXRlKHN0ZDo6aW5fcGxhY2UsICp0
aGlzLCBzdHlsZVJlc29sdmVyKQogewogICAgIC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgKCot
YmVmb3JlL2FmdGVyKSBhcmUgYWxpYXNlcyB0aGF0IGRlcGVuZCBvbiB0aGUgVGV4dERpcmVjdGlv
biBhbmQgV3JpdGluZ01vZGUuCiAgICAgLy8gVGhlc2UgbXVzdCBiZSByZXNvbHZlZCBiZWZvcmUg
d2UgY2FuIGJlZ2luIGJ1aWxkaW5nIHRoZSBwcm9wZXJ0eSBjYXNjYWRlLgpAQCAtMTg2LDggKzE4
Niw3IEBAIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKGNvbnN0IFByb3BlcnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2Fz
Y2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzKQotICAgIDogbV9zdHlsZVJlc29sdmVyKHBhcmVudC5t
X3N0eWxlUmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0
KQorICAgIDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQpCiAgICAgLCBtX2lu
Y2x1ZGVkUHJvcGVydGllcyhwYXJlbnQubV9pbmNsdWRlZFByb3BlcnRpZXMpCiAgICAgLCBtX2Rp
cmVjdGlvbihwYXJlbnQubV9kaXJlY3Rpb24pCiAgICAgLCBtX3dyaXRpbmdNb2RlKHBhcmVudC5t
X3dyaXRpbmdNb2RlKQpAQCAtNDAzLDE5ICs0MDIsMTkgQEAgaW5saW5lIHZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFBy
b3AKICAgICAgICAgYXV0byYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbcHJvcGVydHlJRF07CiAK
ICAgICAgICAgaWYgKHRyYWNrQ3ljbGVzID09IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZzo6
RW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fYXBwbHlTdGF0ZS5pblByb2dy
ZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoYnVpbGRlclN0YXRlKCkubV9pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZv
bnQgc2l6ZSB1c2luZyByZWdpc3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5n
IGVtKS4KICAgICAgICAgICAgICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4K
LSAgICAgICAgICAgICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3Bl
cnR5SUQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZSgpLm1fYXBwbGllZFByb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQpOwogICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMg
aW4gYSBjeWNsZSwgYW5kIG9ubHkgdGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZl
IGZpcnN0UHJvcGVydHkgIT0gbGFzdFByb3BlcnR5LgogICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdFByb3BlcnR5ID09IGxhc3RQcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJv
cGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICBhdXRvJiBidWlsZGVyU3RhdGUg
PSAqbV9idWlsZGVyU3RhdGU7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9pblByb2dyZXNz
UHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQo
cHJvcGVydHlJRCk7Ci0gICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2Fw
cGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MzIsMzEgKzQzMSwzMiBAQCB2b2lkIFBy
b3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCkKIAogdm9pZCBQcm9wZXJ0eUNh
c2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlm
IChtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkgfHwg
IW1fY3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICBhdXRvJiBidWlsZGVyU3Rh
dGUgPSAqbV9idWlsZGVyU3RhdGU7CisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFp
bnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Q
cm9wZXJ0eShuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVz
c1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CisgICAgYm9vbCBpbkN5Y2xlID0gYnVp
bGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CiAK
ICAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQg
fSkgewogICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+aW5zaWRlTGluaygpID09
IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYgKGluZGV4ICE9IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmluc2lkZUxpbmsoKSA9
PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9w
ZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKIAogICAgICAgICBpZiAoaW5DeWNsZSkgewotICAgICAg
ICAgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsgLy8g
TWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2FpbiB3aGls
ZSByZXNvbHZpbmcgaXQuCisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9t
UHJvcGVydGllcy5hZGQobmFtZSk7IC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdHJ5IHRvIGFwcGx5
IHRoaXMgcHJvcGVydHkgYWdhaW4gd2hpbGUgcmVzb2x2aW5nIGl0LgogICAgICAgICAgICAgdmFs
dWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENT
U1ZhbHVlSW52YWxpZCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20uYWRkKG5hbWUpOworICAgICAgICBidWlsZGVyU3RhdGUubV9p
blByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5hZGQobmFtZSk7CiAKICAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRv
QXBwbHktPnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZh
bHVlID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBw
bHkuZ2V0KCkpOwogCi0gICAgICAgICAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Q
cm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5t
X2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQogICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gVGhlcmUgd2FzIGEgY3ljbGUgYW5kIHRoZSB2YWx1ZSB3YXMgcmVzZXQsIHNv
IGJhaWwuCiAKICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCkBAIC00NjUsMzIgKzQ2NSwy
MCBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJp
bmcmIG5hbWUpCiAgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPigqcGFyc2VkVmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1f
YXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKSkgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmspIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJl
c29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSh0cnVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgICAgICBi
dWlsZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKICAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9t
LnJlbW92ZShuYW1lKTsKLSAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMu
YWRkKG5hbWUpOworICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hEZWZhdWx0OworICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVz
Q3VzdG9tLnJlbW92ZShuYW1lKTsKKyAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJv
cGVydGllcy5hZGQobmFtZSk7CiAKICAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewogICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVl
W2luZGV4XSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5
bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYg
KGluZGV4ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVU
b0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKQEAgLTUyOCwzMyAr
NTE2LDI2IEBAIGNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0
eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwKIAogaW5saW5lIHZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseVByb3BlcnR5KGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkKIHsKLSAgICBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKTsKLSAg
ICBzdGF0ZS5zZXRDYXNjYWRlTGV2ZWwocHJvcGVydHkubGV2ZWwpOwotICAgIHN0YXRlLnNldFN0
eWxlU2NvcGVPcmRpbmFsKHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsKTsKLQotICAgIGlmIChw
cm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0pIHsKLSAgICAg
ICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAg
YXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0XSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwotICAg
IH0KKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7CisgICAgYnVpbGRl
clN0YXRlLm1fY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7CisgICAgYnVpbGRlclN0YXRl
Lm1fc3R5bGVTY29wZU9yZGluYWwgPSBwcm9wZXJ0eS5zdHlsZVNjb3BlT3JkaW5hbDsKKworICAg
IGF1dG8gYXBwbHlXaXRoTGlua01hdGNoID0gWyZdKFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNo
TWFzayBsaW5rTWF0Y2gpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRj
aF0pIHsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IGxpbmtNYXRjaDsK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1
ZVtsaW5rTWF0Y2hdLCBsaW5rTWF0Y2gpOworICAgICAgICB9CisgICAgfTsKIAotICAgIGlmIChz
dGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAg
ICAgICByZXR1cm47CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hEZWZhdWx0KTsKIAotICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoTGlua10pIHsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKHRydWUpOwotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKGZhbHNlKTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5
LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaExpbmspOwotICAgIH0KKyAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuaW5zaWRlTGlu
aygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSkgewotICAg
ICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAg
ICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAg
ICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0g
ICAgfQorICAgIGFwcGx5V2l0aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7
CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsK
IAotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAgICBidWls
ZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdDsKIH0K
IAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNo
TWFzaykKQEAgLTU2OSw2ICs1NTAsOCBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwogICAgICAg
ICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3Rh
dGU7CisKICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eVZhbHVlID0g
bnVsbHB0cjsKICAgICBDU1NWYWx1ZUlEIGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9IENTU1ZhbHVl
SW52YWxpZDsKICAgICBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIGN1c3RvbVByb3BlcnR5
UmVnaXN0ZXJlZCA9IG51bGxwdHI7CkBAIC01NzksMTggKzU2MiwxNyBAQCB2b2lkIFByb3BlcnR5
Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUs
IFNlbGVjdG9yQwogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDU1NWYWx1ZUlE
PihjdXN0b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKSkKICAgICAgICAgICAgIGN1c3RvbVByb3Bl
cnR5VmFsdWVJRCA9IFdURjo6Z2V0PENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUtPnZh
bHVlKCkpOwogICAgICAgICBhdXRvJiBuYW1lID0gY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgp
OwotICAgICAgICBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBtX3N0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7Cisg
ICAgICAgIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgp
LmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKICAgICB9CiAK
LSAgICBhdXRvJiBzdGF0ZSA9IG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpOwotICAgIGJvb2wgaXNJ
bmhlcml0ID0gc3RhdGUucGFyZW50U3R5bGUoKSA/IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRW
YWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQgOiBmYWxz
ZTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBseS0+aXNJbml0aWFsVmFsdWUoKSB8
fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8ICghc3RhdGUucGFy
ZW50U3R5bGUoKSAmJiAodmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9t
UHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCkpOworICAgIGJvb2wgaXNJbmhlcml0
ID0gdmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID09IENTU1ZhbHVlSW5oZXJpdDsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBs
eS0+aXNJbml0aWFsVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJ
bml0aWFsOwogCiAgICAgYm9vbCBpc1Vuc2V0ID0gdmFsdWVUb0FwcGx5LT5pc1Vuc2V0VmFsdWUo
KSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVVbnNldDsKICAgICBib29sIGlz
UmV2ZXJ0ID0gdmFsdWVUb0FwcGx5LT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlW
YWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAg
IGlmIChhdXRvKiByb2xsYmFjayA9IHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKHN0YXRlLmNh
c2NhZGVMZXZlbCgpKSkgeworICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNh
c2NhZGVGb3JSb2xsYmFjayhidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7CiAgICAgICAg
ICAgICAvLyBXaXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9idGFp
biB0aGUgcHJvcGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKICAgICAgICAg
ICAgIC8vIG5vdCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVyd2lz
ZSB3ZSBhcHBseSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgogICAgICAgICAgICAgLy8gb3VyIG93
bi4KQEAgLTYyMSwyOSArNjAzLDI5IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDCiAKICAgICBB
U1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRp
YWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKIAotICAgIGlmICghc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAo
YnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0
aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNp
dGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NT
UHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAj
aWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgaWYgKGlzPENTU1BhaW50SW1hZ2VWYWx1
ZT4odmFsdWVUb0FwcGx5KSkgewogICAgICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8Q1NTUGFp
bnRJbWFnZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUoKTsKLSAgICAgICAgaWYgKGF1
dG8qIHBhaW50V29ya2xldCA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnBhaW50V29ya2xl
dEdsb2JhbFNjb3BlRm9yTmFtZShuYW1lKSkgeworICAgICAgICBpZiAoYXV0byogcGFpbnRXb3Jr
bGV0ID0gY29uc3RfY2FzdDxEb2N1bWVudCY+KGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKS5wYWlu
dFdvcmtsZXRHbG9iYWxTY29wZUZvck5hbWUobmFtZSkpIHsKICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2socGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAg
ICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlvbiA9IHBhaW50V29ya2xldC0+cGFpbnREZWZp
bml0aW9uTWFwKCkuZ2V0KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eSA6IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5hZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkocHJvcGVydHkpOwor
ICAgICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5hZGRDdXN0b21QYWludFdh
dGNoUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCiAKICAgICAvLyBVc2UgdGhlIGdlbmVyYXRlZCBTdHlsZUJ1aWxkZXIuCi0gICAgU3R5
bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBtX3N0eWxlUmVzb2x2ZXIsIHZhbHVlVG9BcHBs
eS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7
CisgICAgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBidWlsZGVyU3RhdGUsIHZhbHVl
VG9BcHBseS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0
ZXJlZCk7CiB9CiAKIFJlZjxDU1NWYWx1ZT4gUHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC02NTMsNyArNjM1
LDcgQEAgUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJgogICAgIAogICAgIGF1dG8gdmFyaWFibGVWYWx1
ZSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgLy8gSWYg
dGhlIGNhc2NhZGUgaGFzIGFscmVhZHkgYXBwbGllZCB0aGlzIGlkLCB0aGVuIHdlIGRldGVjdGVk
IGEgY3ljbGUsIGFuZCB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICBpZiAoIXZhcmlh
YmxlVmFsdWUgfHwgbV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlE
KSkgeworICAgIGlmICghdmFyaWFibGVWYWx1ZSB8fCBidWlsZGVyU3RhdGUoKS5tX2FwcGxpZWRQ
cm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkgewogICAgICAgICBpZiAoQ1NTUHJvcGVydHk6Omlz
SW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwogICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgp
OwpAQCAtNjY0LDEzICs2NDYsMTMgQEAgUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJl
c29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJgogCiBSZWZQdHI8
Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgQ1NTUGFyc2VyIHBh
cnNlcihtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJz
ZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVlLCAqdGhpcyk7CisgICAg
Q1NTUGFyc2VyIHBhcnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4g
cGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGJ1
aWxkZXJTdGF0ZSgpKTsKIH0KIAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rp
b25BbmRXcml0aW5nTW9kZSgpCiB7Ci0gICAgYXV0byYgc3R5bGUgPSAqbV9zdHlsZVJlc29sdmVy
LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUoKS5zdHlsZSgpOwogCiAg
ICAgbV9kaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKICAgICBtX3dyaXRpbmdNb2RlID0g
c3R5bGUud3JpdGluZ01vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgK
aW5kZXggNDJjNTA4NWEzOWIuLjlmNTVjZmZiYzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9w
ZXJ0eUNhc2NhZGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJDYXNjYWRlTGV2ZWwuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgor
I2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8Yml0c2V0PgotI2luY2x1
ZGUgPHd0Zi9CaXRtYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwxNCArMzYs
NiBAQCBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1lbnVtIGNs
YXNzIENhc2NhZGVMZXZlbCA6IHVpbnQ4X3QgewotICAgIFVzZXJBZ2VudCAgID0gMSA8PCAwLAot
ICAgIFVzZXIgICAgICAgID0gMSA8PCAxLAotICAgIEF1dGhvciAgICAgID0gMSA8PCAyCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGFsbENhc2NhZGVMZXZl
bHMoKSB7IHJldHVybiB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlciwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH07IH0KLQogY2xh
c3MgUHJvcGVydHlDYXNjYWRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKQEAgLTUyLDggKzQ1LDYgQEAgcHVibGljOgogCiAgICAgflByb3BlcnR5Q2FzY2FkZSgpOwog
Ci0gICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNv
bHZlcjsgfQotCiAgICAgc3RydWN0IFByb3BlcnR5IHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBp
ZDsKICAgICAgICAgQ2FzY2FkZUxldmVsIGxldmVsOwpAQCAtNjksMTIgKzYwLDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFz
dFByb3BlcnR5KTsKICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7Ci0KICAgICB2
b2lkIGFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwogICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0
eShjb25zdCBTdHJpbmcmIG5hbWUpOwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlJiwgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwogCisgICAgQnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUoKSB7IHJldHVybiAqbV9idWlsZGVyU3RhdGU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGJ1
aWxkQ2FzY2FkZShPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPik7CiAgICAgYm9vbCBhZGROb3JtYWxN
YXRjaGVzKENhc2NhZGVMZXZlbCk7CkBAIC05NywxMSArODgsOSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCByZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKTsKIAotICAgIFN0eWxlUmVzb2x2
ZXImIG1fc3R5bGVSZXNvbHZlcjsKLQogICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtX21hdGNoUmVz
dWx0OwogICAgIGNvbnN0IEluY2x1ZGVkUHJvcGVydGllcyBtX2luY2x1ZGVkUHJvcGVydGllczsK
LSAgICAKKwogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUg
bV93cml0aW5nTW9kZTsKIApAQCAtMTExLDE5ICsxMDAsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0
cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsKIAotICAgIC8vIFN0YXRlIHRvIHVz
ZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMsIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9t
IGFuZCBoaWdoLXByaW9yaXR5Ci0gICAgLy8gcHJvcGVydGllcyBoYXZlIGJlZW4gcmVzb2x2ZWQu
Ci0gICAgc3RydWN0IEFwcGx5U3RhdGUgewotICAgICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGll
cz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBs
aWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKLSAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRp
ZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OwotICAgICAgICBIYXNoU2V0PFN0cmluZz4g
aW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20gPSB7IH07Ci0gICAgfTsKLQotICAgIEFwcGx5U3Rh
dGUgbV9hcHBseVN0YXRlOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFByb3BlcnR5Q2Fz
Y2FkZT4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0
IFByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2tDYXNjYWRlOworCisgICAgT3B0aW9uYWw8
QnVpbGRlclN0YXRlPiBtX2J1aWxkZXJTdGF0ZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5
Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uODRhZDBiYTFkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5o
IgorCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgU3R5bGUgeworCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNh
c2NhZGUmIGNhc2NhZGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgOiBtX2Nh
c2NhZGUoY2FzY2FkZSkKKyAgICAsIG1fc3R5bGVNYXAoKnRoaXMpCisgICAgLCBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkKKyAgICAsIG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVyKQorICAgICwg
bV9zdHlsZSgqc3R5bGVSZXNvbHZlci5zdHlsZSgpKQorICAgICwgbV9wYXJlbnRTdHlsZSgqc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKQorICAgICwgbV9yb290RWxlbWVudFN0eWxlKCpzdHls
ZVJlc29sdmVyLnJvb3RFbGVtZW50U3R5bGUoKSkKKyAgICAsIG1fZG9jdW1lbnQobV9zdHlsZVJl
c29sdmVyLmRvY3VtZW50KCkpCisgICAgLCBtX2VsZW1lbnQoKm1fc3R5bGVSZXNvbHZlci5lbGVt
ZW50KCkpCit7Cit9CisKK2Jvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXMoKSBjb25z
dAoreworICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzKCk7Cit9CisK
K2Jvb2wgQnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCk7Cit9
CisKK1JlZlB0cjxTdHlsZUltYWdlPiBCdWlsZGVyU3RhdGU6OmNyZWF0ZVN0eWxlSW1hZ2UoQ1NT
VmFsdWUmIHZhbHVlKQoreworICAgIHJldHVybiBtX3N0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZSh2
YWx1ZSk7Cit9CisKK2Jvb2wgQnVpbGRlclN0YXRlOjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSwgRmlsdGVyT3BlcmF0aW9ucyYgb3V0T3BlcmF0aW9ucykKK3sK
KyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNyZWF0ZUZpbHRlck9wZXJhdGlvbnModmFsdWUs
IG91dE9wZXJhdGlvbnMpOworfQorCitDb2xvciBCdWlsZGVyU3RhdGU6OmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSwgYm9vbCBmb3JWaXNpdGVk
TGluaykgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1p
dGl2ZVZhbHVlKHZhbHVlLCBmb3JWaXNpdGVkTGluayk7Cit9CisKK3ZvaWQgQnVpbGRlclN0YXRl
OjpzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgZmxvYXQg
c2l6ZSkKK3sKKyAgICBtX3N0eWxlUmVzb2x2ZXIuc2V0Rm9udFNpemUoZGVzY3JpcHRpb24sIHNp
emUpOworfQorCit9Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1
aWxkZXJTdGF0ZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDg3MTZmZWViMTMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5oCkBA
IC0wLDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhLmgiCisjaW5jbHVkZSAiQ1NTVG9TdHlsZU1hcC5oIgor
I2luY2x1ZGUgIkNhc2NhZGVMZXZlbC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5j
bHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCisjaW5jbHVkZSA8d3RmL0JpdG1hcC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFN0eWxlSW1hZ2U7CitjbGFzcyBTdHlsZVJlc29sdmVy
OworCituYW1lc3BhY2UgU3R5bGUgeworCitjbGFzcyBQcm9wZXJ0eUNhc2NhZGU7CisKK2NsYXNz
IEJ1aWxkZXJTdGF0ZSB7CitwdWJsaWM6CisgICAgQnVpbGRlclN0YXRlKFByb3BlcnR5Q2FzY2Fk
ZSYsIFN0eWxlUmVzb2x2ZXImKTsKKworICAgIFByb3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSgpIHsg
cmV0dXJuIG1fY2FzY2FkZTsgfQorICAgIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIoKSB7
IHJldHVybiBtX3N0eWxlUmVzb2x2ZXI7IH0KKworICAgIFJlbmRlclN0eWxlJiBzdHlsZSgpIHsg
cmV0dXJuIG1fc3R5bGU7IH0KKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgcGFyZW50U3R5bGUoKSBj
b25zdCB7IHJldHVybiBtX3BhcmVudFN0eWxlOyB9CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIHJv
b3RFbGVtZW50U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3Jvb3RFbGVtZW50U3R5bGU7IH0KKwor
ICAgIGNvbnN0IERvY3VtZW50JiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnQu
Z2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50LmdldCgpOyB9CisKKyAgICB2b2lkIHNldEZvbnREZXNjcmlwdGlvbihGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uJiYgZm9udERlc2NyaXB0aW9uKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7IH0KKyAgICB2b2lk
IHNldEZvbnRTaXplKEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mLCBmbG9hdCBzaXplKTsKKyAgICB2
b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFpvb20oZik7
IH0KKyAgICB2b2lkIHNldEVmZmVjdGl2ZVpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBt
X3N0eWxlLnNldEVmZmVjdGl2ZVpvb20oZik7IH0KKyAgICB2b2lkIHNldFdyaXRpbmdNb2RlKFdy
aXRpbmdNb2RlIHdyaXRpbmdNb2RlKSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUuc2V0V3JpdGlu
Z01vZGUod3JpdGluZ01vZGUpOyB9CisgICAgdm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9y
aWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldFRl
eHRPcmllbnRhdGlvbih0ZXh0T3JpZW50YXRpb24pOyB9CisKKyAgICBib29sIGZvbnREaXJ0eSgp
IGNvbnN0IHsgcmV0dXJuIG1fZm9udERpcnR5OyB9CisgICAgdm9pZCBzZXRGb250RGlydHkoKSB7
IG1fZm9udERpcnR5ID0gdHJ1ZTsgfQorICAgIHZvaWQgY2xlYXJGb250RGlydHkoKSB7IG1fZm9u
dERpcnR5ID0gZmFsc2U7IH0KKworICAgIGNvbnN0IEZvbnRDYXNjYWRlRGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbigpIHsgcmV0dXJuIG1fc3R5bGUuZm9udERlc2NyaXB0aW9uKCk7IH0KKyAg
ICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBwYXJlbnRGb250RGVzY3JpcHRpb24oKSB7
IHJldHVybiBtX3BhcmVudFN0eWxlLmZvbnREZXNjcmlwdGlvbigpOyB9CisKKyAgICAvLyBGSVhN
RTogVGhlc2UgYXJlIG11dHVhbGx5IGV4Y2x1c2l2ZSwgY2xlYW4gdXAgdGhlIGNvZGUgdG8gdGFr
ZSB0aGF0IGludG8gYWNjb3VudC4KKyAgICBib29sIGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hW
aXNpdGVkOyB9CisgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkgY29u
c3QgeyByZXR1cm4gbV9saW5rTWF0Y2ggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQ7
IH0KKworICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3Q7CisgICAgYm9vbCB1c2VTVkda
b29tUnVsZXNGb3JMZW5ndGgoKSBjb25zdDsKKyAgICBTY29wZU9yZGluYWwgc3R5bGVTY29wZU9y
ZGluYWwoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2NvcGVPcmRpbmFsOyB9CisKKyAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3JlYXRlU3R5bGVJbWFnZShDU1NWYWx1ZSYpOworICAgIGJvb2wgY3Jl
YXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYsIEZpbHRlck9wZXJhdGlvbnMmIG91
dE9wZXJhdGlvbnMpOworICAgIENvbG9yIGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKGNvbnN0IENT
U1ByaW1pdGl2ZVZhbHVlJiwgYm9vbCBmb3JWaXNpdGVkTGluayA9IGZhbHNlKSBjb25zdDsKKwor
ICAgIGNvbnN0IENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEmIGNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7IH0KKyAg
ICBDU1NUb1N0eWxlTWFwJiBzdHlsZU1hcCgpIHsgcmV0dXJuIG1fc3R5bGVNYXA7IH0KKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvcGVydHlDYXNjYWRlOworCisgICAgUHJvcGVydHlD
YXNjYWRlJiBtX2Nhc2NhZGU7CisKKyAgICBDU1NUb1N0eWxlTWFwIG1fc3R5bGVNYXA7CisgICAg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBtX2Nzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGE7CisK
KyAgICAvLyBGSVhNRTogUmVtb3ZlLgorICAgIFN0eWxlUmVzb2x2ZXImIG1fc3R5bGVSZXNvbHZl
cjsKKworICAgIFJlbmRlclN0eWxlJiBtX3N0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBt
X3BhcmVudFN0eWxlOworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBtX3Jvb3RFbGVtZW50U3R5bGU7
CisKKyAgICBSZWY8Y29uc3QgRG9jdW1lbnQ+IG1fZG9jdW1lbnQ7CisgICAgUmVmPGNvbnN0IEVs
ZW1lbnQ+IG1fZWxlbWVudDsKKworICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2FwcGxp
ZWRQcm9wZXJ0aWVzOworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2FwcGxpZWRDdXN0b21Qcm9wZXJ0
aWVzOworICAgIEJpdG1hcDxudW1DU1NQcm9wZXJ0aWVzPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVz
OworICAgIEhhc2hTZXQ8U3RyaW5nPiBtX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tOworCisg
ICAgQ2FzY2FkZUxldmVsIG1fY2FzY2FkZUxldmVsIHsgfTsKKyAgICBTY29wZU9yZGluYWwgbV9z
dHlsZVNjb3BlT3JkaW5hbCB7IH07CisgICAgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNr
IG1fbGlua01hdGNoIHsgfTsKKworICAgIGJvb2wgbV9mb250RGlydHkgeyBmYWxzZSB9OworfTsK
KworfQorfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>382290</attachid>
            <date>2019-10-30 01:03:57 -0700</date>
            <delta_ts>2019-10-30 13:13:39 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylebuilder-state-4.patch</filename>
            <type>text/plain</type>
            <size>296553</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0NzUyYjZlOTNlNi4uYmEwZDU1NWM0MmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNTIgQEAKKzIwMTktMTAtMjkgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgorCisgICAgICAgIE1vdmUgc3R5bGUgYnVpbGRpbmcgc3RhdGUgdG8gYSBjbGFzcyBvZiBpdHMg
b3duCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMDM1
NjIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNb3Zl
IG1vc3Qgb2YgdGhlIHN0YXRlIG5lZWRlZCBmb3IgYXBwbHlpbmcgcHJvcGVydGllcyBmcm9tIFN0
eWxlUmVzb2x2ZXI6OlN0YXRlIGFuZCBQcm9wZXJ0eUNhc2NhZGU6OkFwcGx5U3RhdGUgdG8KKyAg
ICAgICAgbmV3IFN0eWxlOjpCdWlsZGVyU3RhdGUuIFBhc3MgQnVpbGRlclN0YXRlIGFyb3VuZCBp
biBhbGwgZnVuY3Rpb25zIGludm9rZWQgZHVyaW5nIHN0eWxlIGJ1aWxkaW5nCisgICAgICAgIGlu
c3RlYWQgb2YgU3R5bGVSZXNvbHZlci4KKworICAgICAgICBVbmxpa2UgU3R5bGVSZXNvbHZlciwg
QnVpbGRlclN0YXRlIGlzIGEgc3RhY2stYWxsb2NhdGVkIG9iamVjdCB0aGF0IGV4aXN0cyBkdXJp
bmcgc3R5bGUgYnVpbGRpbmcgb25seS4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAg
ICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpDU1NUb1N0
eWxlTWFwKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnN0eWxlIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxlTWFwOjpzdHlsZUltYWdlKToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxTaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
VG9TdHlsZU1hcDo6bWFwRmlsbFlQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0
eWxlTWFwOjptYXBBbmltYXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1RvU3R5bGVN
YXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NUb1N0eWxl
TWFwOjpyb290RWxlbWVudFN0eWxlIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBjc3MvQ1NT
VG9TdHlsZU1hcC5oOgorICAgICAgICAqIGNzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZSk6CisgICAgICAgIChXZWJDb3JlOjpy
ZXNvbHZlVG9rZW5SYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NWYXJpYWJsZVJlZmVyZW5j
ZVZhbHVlOjpyZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzIGNvbnN0KToKKyAgICAgICAgKiBjc3Mv
Q1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oOgorICAgICAgICAqIGNzcy9ET01DU1NSZWdpc3Rl
ckN1c3RvbVByb3BlcnR5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRPTUNTU1JlZ2lzdGVyQ3Vz
dG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkpOgorICAgICAgICAqIGNzcy9TdHlsZUJ1aWxk
ZXIuaDoKKyAgICAgICAgKiBjc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmg6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGVuZ3RoT3JBdXRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aFNpemlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMZW5n
dGhNYXhTaXppbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGFiU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRDb21wdXRlZExlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRMaW5lV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSYWRpdXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WSk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRPYmplY3RQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnROdW1iZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Qm9yZGVy
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Qm9yZGVyTWFzayk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTdHlsZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nT3JBdXRvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0cmluZ09yTm9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RW1waGFzaXNQb3NpdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxp
Z24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q2xp
cFBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UmVzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVPZmZzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERl
Y29yYXRpb25UaGlja25lc3MpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0UmVmbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRJbml0aWFsTGV0dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRTdHJva2VXaWR0aCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29udGFpbik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
blNraXApOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U2hhcGVWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRTY3JvbGxTbmFwVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrU2l6ZSk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNr
U2l6ZUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0R3JpZFRyYWNrU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRHcmlkUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0R3JpZEF1dG9GbG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZh
Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRX
b3JkU3BhY2luZyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRQZXJzcGVjdGl2ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydEZpbHRlck9wZXJhdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250V2VpZ2h0
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHJldGNoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRWYXJpYXRpb25TZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENhbGxvdXQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxp
bmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZH
TGVuZ3RoVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFN0cm9rZURhc2hBcnJheSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQYWludE9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE9wYWNpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0NvbG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1
bHRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydENvbnRlbnRBbGlnbm1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0
byk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dEZvbnRTeW50aGVzaXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U3BlYWtBcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R2FwTGVuZ3RoKToKKyAgICAgICAgKiBjc3MvU3R5bGVC
dWlsZGVyQ3VzdG9tLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250RmVh
dHVyZVNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRBbGln
bik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
QWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjpyZXNldEVmZmVj
dGl2ZVpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bmhlcml0Wm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVab29tKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVZlcnRpY2FsQWxpZ24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFnZVJlc29sdXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0U2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRleHRJbmRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0SW5kZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRJbmRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlcklt
YWdlTW9kaWZpZXI6OmFwcGx5SW5oZXJpdFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkFwcGx5
UHJvcGVydHlCb3JkZXJJbWFnZU1vZGlmaWVyOjphcHBseUluaXRpYWxWYWx1ZSk6CisgICAgICAg
IChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6YXBwbHlWYWx1ZSk6
CisgICAgICAgIChXZWJDb3JlOjpBcHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjo6Z2V0
VmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZp
ZXI6OnNldFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0TGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbExpbmVIZWlnaHQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlTGluZUhlaWdodCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdE91dGxpbmVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbE91dGxpbmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xp
cCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDbGlw
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtp
dExvY2FsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFs
dWVXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20pOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ29sb3JTY2hl
bWUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbml0aWFsVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFRleHRTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dFNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRvdyk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFkb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRCb3hTaGFk
b3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRX
ZWJraXRCb3hTaGFkb3cpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0Qm94U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udEZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRGYW1pbHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5KToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZURpc3BsYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVT
aGlmdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdEFzcGVjdFJhdGlvKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0V2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0QXNwZWN0UmF0aW8pOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxXZWJraXRUZXh0RW1waGFz
aXNTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ291bnRlcklu
Y3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdENvdW50ZXJJbmNyZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ291bnRlckluY3JlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJSZXNldCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVyUmVzZXQp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDdXJz
b3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRD
dXJzb3IpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Q3Vyc29yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdEZpbGwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlRmlsbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5p
dGlhbFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdFN0cm9rZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVTdHJva2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbmhlcml0Q29udGVudCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVDb250ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJl
cyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
VmFyaWFudExpZ2F0dXJlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50TnVtZXJpYyk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVy
aWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250VmFyaWFudEVhc3RBc2lhbik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5pdGlhbEZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRWYXJpYW50RWFzdEFzaWFuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFNpemUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250
U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1
YnlUZXh0U2l6ZU11bHRpcGxpZXIpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlQXJlYXMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVt
cGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVHcmlkVGVtcGxhdGVBcmVhcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1w
bGF0ZUNvbHVtbnMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUFsdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZVdpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9r
ZUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3VzdG9tUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0
eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3R5bGVS
ZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6U3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c3R5bGVGb3JLZXlmcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpzdHlsZUZvclBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJlc29sdmVyOjppbml0aWFsaXplRm9udFN0eWxlKToKKyAgICAgICAgKiBj
c3MvU3R5bGVSZXNvbHZlci5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6aW5z
cGVjdG9yQ1NTT01XcmFwcGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpT
dGF0ZTo6c2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRBcHBseVByb3BlcnR5VG9WaXNpdGVk
TGlua1N0eWxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0
YXRlOjphcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnNldEZvbnREaXJ0eSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHls
ZVJlc29sdmVyOjpTdGF0ZTo6Zm9udERpcnR5IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpmb250RGVzY3JpcHRpb24pOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnBhcmVudEZvbnREZXNjcmlw
dGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6
c2V0Rm9udERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OlN0YXRlOjpzZXRab29tKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
UmVzb2x2ZXI6OlN0YXRlOjpzZXRFZmZlY3RpdmVab29tKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpzZXRXcml0aW5nTW9kZSk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpTdGF0ZTo6c2V0VGV4dE9yaWVudGF0aW9u
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpjYXNj
YWRlTGV2ZWwgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6U3RhdGU6OnNldENhc2NhZGVMZXZlbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjpTdGF0ZTo6c3R5bGVTY29wZU9yZGluYWwgY29uc3QpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6U3RhdGU6OnNldFN0eWxlU2NvcGVPcmRp
bmFsKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpT
dHlsZVJlc29sdmVyOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlIGNvbnN0KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OnN0eWxlTWFwKTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmZvbnREZXNjcmlwdGlvbik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVyOjpwYXJlbnRGb250RGVzY3Jp
cHRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0Rm9u
dERlc2NyaXB0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6
OnNldFpvb20pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6c2V0
RWZmZWN0aXZlWm9vbSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpzZXRXcml0aW5nTW9kZSk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29s
dmVyOjpzZXRUZXh0T3JpZW50YXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGNzcy9tYWtlcHJv
cC5wbDoKKyAgICAgICAgKGdldEF1dG9HZXR0ZXIpOgorICAgICAgICAoZ2V0QXV0b1NldHRlcik6
CisgICAgICAgIChnZXRWaXNpdGVkTGlua1NldHRlcik6CisgICAgICAgIChjb2xvckZyb21Qcmlt
aXRpdmVWYWx1ZSk6CisgICAgICAgIChnZW5lcmF0ZUNvbG9yVmFsdWVTZXR0ZXIpOgorICAgICAg
ICAoaGFuZGxlQ3VycmVudENvbG9yVmFsdWUpOgorICAgICAgICAoZ2VuZXJhdGVBbmltYXRpb25Q
cm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUFuaW1hdGlvblBy
b3BlcnR5SW5oZXJpdFZhbHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlQW5pbWF0aW9uUHJv
cGVydHlWYWx1ZVNldHRlcik6CisgICAgICAgIChnZW5lcmF0ZUZpbGxMYXllclByb3BlcnR5SW5p
dGlhbFZhbHVlU2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhl
cml0VmFsdWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0eVZhbHVl
U2V0dGVyKToKKyAgICAgICAgKGdlbmVyYXRlU2V0VmFsdWVTdGF0ZW1lbnQpOgorICAgICAgICAo
Z2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVJbmhlcml0VmFs
dWVTZXR0ZXIpOgorICAgICAgICAoZ2VuZXJhdGVWYWx1ZVNldHRlcik6CisgICAgICAgICogY3Nz
L3BhcnNlci9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJz
ZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQ
YXJzZXIuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVy
dHlWYWx1ZSk6CisgICAgICAgICogY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvY2FudmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ6OnNldEZvbnQpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpHcmFwaGljc0NvbnRleHQ6OmJ1aWxkZXJTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFw
aGljc0NvbnRleHQ6OmFwcGx5U3RhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Rp
c3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmg6CisgICAgICAgICogc3R5bGUvQ2FzY2FkZUxl
dmVsLmg6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaC4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjphbGxDYXNjYWRlTGV2ZWxzKToKKyAgICAgICAgKiBzdHls
ZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5
Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9w
ZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydGllc0ltcGwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGU6OlByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjphcHBseVByb3BlcnR5KToKKyAgICAgICAgKFdl
YkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlZFZhcmlhYmxlVmFsdWUpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZURpcmVjdGlv
bkFuZFdyaXRpbmdNb2RlKToKKyAgICAgICAgKiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlOjpQcm9wZXJ0eUNhc2NhZGU6OmJ1aWxkZXJTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZTo6YWxsQ2FzY2FkZUxldmVscyk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZTo6UHJvcGVydHlDYXNjYWRlOjpzdHlsZVJlc29sdmVyKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBzdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6QnVpbGRlclN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnVzZVNWR1pvb21SdWxlcyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjp1c2VTVkdab29tUnVsZXNG
b3JMZW5ndGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6
Y3JlYXRlU3R5bGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpjcmVhdGVGaWx0ZXJPcGVyYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnNldEZvbnRTaXplKToKKyAgICAgICAgKiBzdHlsZS9T
dHlsZUJ1aWxkZXJTdGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWls
ZGVyU3RhdGU6OmNhc2NhZGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0
ZTo6c3R5bGVSZXNvbHZlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpzdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpwYXJlbnRT
dHlsZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjpyb290
RWxlbWVudFN0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3Rh
dGU6OmRvY3VtZW50IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3Rh
dGU6OmVsZW1lbnQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0
ZTo6c2V0Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
U3RhdGU6OnNldFpvb20pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6
c2V0RWZmZWN0aXZlWm9vbSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpzZXRXcml0aW5nTW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRl
OjpzZXRUZXh0T3JpZW50YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJT
dGF0ZTo6Zm9udERpcnR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
U3RhdGU6OnNldEZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0
YXRlOjpjbGVhckZvbnREaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0
YXRlOjpmb250RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OkJ1aWxkZXJT
dGF0ZTo6cGFyZW50Rm9udERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpC
dWlsZGVyU3RhdGU6OmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZTo6QnVpbGRlclN0YXRlOjphcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVyU3RhdGU6OnN0
eWxlU2NvcGVPcmRpbmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlOjpCdWlsZGVy
U3RhdGU6OmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGU6OkJ1aWxkZXJTdGF0ZTo6c3R5bGVNYXApOgorCiAyMDE5LTEwLTI5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJlbW92ZSBIVE1MTWVkaWFFbGVt
ZW50RGVzdHJ1Y3RvclNjb3BlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4
dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDRlMjA5ZmVlYWNjLi5mNDQ4NDc1
ZTRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNl
L1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTIzNDUsNiArMjM0NSw3IEBAIHN0eWxlL0NsYXNzQ2hh
bmdlSW52YWxpZGF0aW9uLmNwcAogc3R5bGUvSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwCiBzdHls
ZS9JbmxpbmVUZXh0Qm94U3R5bGUuY3BwCiBzdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCitzdHls
ZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKIHN0eWxlL1N0eWxlQ2hhbmdlLmNwcAogc3R5bGUvU3R5
bGVGb250U2l6ZUZ1bmN0aW9ucy5jcHAKIHN0eWxlL1N0eWxlSW52YWxpZGF0b3IuY3BwCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
Mzk5NGM1Zjc1NWEuLjViZTFiMDM3YmU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC00ODQwLDYgKzQ4NDAsOCBAQAogCQlFNEE4
MTRFMDFDNzMzOEVCMDBCRjg1QUMgLyogSWRDaGFuZ2VJbnZhbGlkYXRpb24uaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QTgxNERGMUM3MzM4RUIwMEJG
ODVBQyAvKiBJZENoYW5nZUludmFsaWRhdGlvbi5oICovOyB9OwogCQlFNEE4RDIxNjIyNTc4REI3
MDBBODQ2M0MgLyogRXZlbnRSZWdpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEU0QThEMjE0MjI1NzhEQTAwMEE4NDYzQyAvKiBFdmVudFJlZ2lvbi5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUU0QUJB
QkU0MjM2MUEzMjkwMEZBNDM0NSAvKiBQcm9wZXJ0eUNhc2NhZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEU0QUJBQkUyMjM2MUEzMjkwMEZBNDM0NSAv
KiBQcm9wZXJ0eUNhc2NhZGUuaCAqLzsgfTsKKwkJRTRBQkFCRjMyMzY4Qjk1OTAwRkE0MzQ1IC8q
IFN0eWxlQnVpbGRlclN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFNEFCQUJGMjIzNjhCOTU4MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyU3RhdGUu
aCAqLzsgfTsKKwkJRTRBQkFCRjUyMzY4QzZFRjAwRkE0MzQ1IC8qIENhc2NhZGVMZXZlbC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTRBQkFCRjQyMzY4
QzZFRjAwRkE0MzQ1IC8qIENhc2NhZGVMZXZlbC5oICovOyB9OwogCQlFNEFFN0MxNjE3RDFCQjk1
MDAwOUZCMzEgLyogRWxlbWVudEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxNTE3RDFCQjk1MDAwOUZCMzEgLyogRWxlbWVudEl0
ZXJhdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
IAkJRTRBRTdDMUExN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFNEFFN0MxOTE3
RDIzMjM1MDAwOUZCMzEgLyogRWxlbWVudEFuY2VzdG9ySXRlcmF0b3IuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFNEFGQ0ZBNTBEQUYyOUEzMDBG
NUY1NUMgLyogVW5pdEJlemllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRTRBRkNGQTQwREFGMjlBMzAwRjVGNTVDIC8qIFVuaXRCZXppZXIuaCAqLzsg
fTsKQEAgLTE1MTczLDYgKzE1MTc1LDkgQEAKIAkJRTRBOEQyMTUyMjU3OERBMDAwQTg0NjNDIC8q
IEV2ZW50UmVnaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEV2
ZW50UmVnaW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBQkFCRTIyMzYx
QTMyOTAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBQcm9wZXJ0eUNhc2NhZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRBQkFCRTUyMzYxQTM0MjAwRkE0MzQ1IC8qIFByb3BlcnR5Q2FzY2FkZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBQcm9wZXJ0eUNhc2NhZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQlFNEFCQUJGMDIzNjhCOTE4MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVyU3RhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gU3R5bGVCdWlsZGVyU3RhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlFNEFCQUJGMjIzNjhCOTU4MDBGQTQzNDUgLyogU3R5bGVCdWlsZGVy
U3RhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3R5bGVCdWlsZGVyU3Rh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTRBQkFCRjQyMzY4QzZFRjAwRkE0
MzQ1IC8qIENhc2NhZGVMZXZlbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBD
YXNjYWRlTGV2ZWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTRBRTdDMTUxN0Qx
QkI5NTAwMDlGQjMxIC8qIEVsZW1lbnRJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBFbGVtZW50SXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJRTRBRTdDMTkxN0QyMzIzNTAwMDlGQjMxIC8qIEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVsZW1lbnRBbmNlc3Rvckl0ZXJhdG9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUU0QUZDRkE0MERBRjI5QTMwMEY1RjU1
QyAvKiBVbml0QmV6aWVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVuaXRC
ZXppZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI2OTM5LDYgKzI2OTQ0LDcg
QEAKIAkJCWNoaWxkcmVuID0gKAogCQkJCUU0QTgxNEQ3MUM3MEUxMDUwMEJGODVBQyAvKiBBdHRy
aWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICovLAogCQkJCUU0QTgxNEQ5MUM3MEUxMEQwMEJG
ODVBQyAvKiBBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uaCAqLywKKwkJCQlFNEFCQUJGNDIz
NjhDNkVGMDBGQTQzNDUgLyogQ2FzY2FkZUxldmVsLmggKi8sCiAJCQkJRTRBODE0RDUxQzZERUU4
RDAwQkY4NUFDIC8qIENsYXNzQ2hhbmdlSW52YWxpZGF0aW9uLmNwcCAqLywKIAkJCQlFNEE4MTRE
MzFDNkRFQzQwMDBCRjg1QUMgLyogQ2xhc3NDaGFuZ2VJbnZhbGlkYXRpb24uaCAqLywKIAkJCQlF
NEE4MTRERDFDNzMzOEQxMDBCRjg1QUMgLyogSWRDaGFuZ2VJbnZhbGlkYXRpb24uY3BwICovLApA
QCAtMjY5NDcsNiArMjY5NTMsOCBAQAogCQkJCTFDMDEwNkZGMTkyNTk0REYwMDhBNDIwMSAvKiBJ
bmxpbmVUZXh0Qm94U3R5bGUuaCAqLywKIAkJCQlFNEFCQUJFNTIzNjFBMzQyMDBGQTQzNDUgLyog
UHJvcGVydHlDYXNjYWRlLmNwcCAqLywKIAkJCQlFNEFCQUJFMjIzNjFBMzI5MDBGQTQzNDUgLyog
UHJvcGVydHlDYXNjYWRlLmggKi8sCisJCQkJRTRBQkFCRjAyMzY4QjkxODAwRkE0MzQ1IC8qIFN0
eWxlQnVpbGRlclN0YXRlLmNwcCAqLywKKwkJCQlFNEFCQUJGMjIzNjhCOTU4MDBGQTQzNDUgLyog
U3R5bGVCdWlsZGVyU3RhdGUuaCAqLywKIAkJCQlFNDAxRTBBNTFDM0MwQ0Y3MDBGMzREMTAgLyog
U3R5bGVDaGFuZ2UuY3BwICovLAogCQkJCUU0MDFFMEEzMUMzQzBCODMwMEYzNEQxMCAvKiBTdHls
ZUNoYW5nZS5oICovLAogCQkJCUU0RDU4RUI2MTdCNEVEODkwMENCRENBOCAvKiBTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmNwcCAqLywKQEAgLTMwMjEyLDYgKzMwMjIwLDcgQEAKIAkJCQlCRThFRjA0
NTE3MUM4RkY5MDA5QjQ4QzMgLyogSlNBdWRpb1RyYWNrTGlzdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTdEMTM1MkEyMjk0QUEzOTAwODI3NDAxIC8qIEpTQXV0aGVudGljYXRpb25FeHRlbnNpb25z
Q2xpZW50SW5wdXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1NzMwM0MyRjIwMDlCN0UxMDAzNTU5
NjUgLyogSlNBdXRoZW50aWNhdG9yQXNzZXJ0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCUU0QUJBQkYzMjM2OEI5NTkwMEZBNDM0NSAvKiBTdHlsZUJ1aWxkZXJTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNTczMDNDMjIyMDA5QUYwMzAwMzU1OTY1IC8qIEpTQXV0aGVudGljYXRv
ckF0dGVzdGF0aW9uUmVzcG9uc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTU3MzAzQkUxMjAwOTVE
NjEwMDM1NTk2NSAvKiBKU0F1dGhlbnRpY2F0b3JSZXNwb25zZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTdEQ0VEOTgyMTQ4ODIxNjAwMTZCODQ3IC8qIEpTQXV0aGVudGljYXRvclRyYW5zcG9ydC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMTU0MCw2ICszMTU0OSw3IEBACiAJCQkJQkMzQkUxMkIwRTk4
MDkyRjAwODM1NTg4IC8qIFBvcHVwTWVudVN0eWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzN0Y1
NjdDRTE2NTM1OEY0MDBEREU5MkIgLyogUG9wdXBPcGVuaW5nT2JzZXJ2ZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzRjE5OURFMDgyNDVFNTkwMDFFOUFCQyAvKiBQb3NpdGlvbi5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTRBQkFCRjUyMzY4QzZFRjAwRkE0MzQ1IC8qIENhc2NhZGVMZXZlbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTc0NkFGMkMxNEY0RERFNjAwM0U3QTcwIC8qIFBvc2l0aW9uQ2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTk3NDZBRjMwMTRGNERERTYwMDNFN0E3MCAvKiBQ
b3NpdGlvbkVycm9yQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTM3OTE5QzI0MEI3RDE4
ODYwMEE1Njk5OCAvKiBQb3NpdGlvbkl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAppbmRleCBjODU5MjBiMDE3My4uNjMzZjJiNThmNzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NUb1N0eWxlTWFwLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5jcHAKQEAgLTQ1LDI5ICs0NSwyNCBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLUNTU1RvU3R5bGVNYXA6OkNTU1RvU3R5bGVNYXAoU3R5bGVS
ZXNvbHZlciogcmVzb2x2ZXIpCi0gICAgOiBtX3Jlc29sdmVyKHJlc29sdmVyKQorQ1NTVG9TdHls
ZU1hcDo6Q1NTVG9TdHlsZU1hcChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCisg
ICAgOiBtX2J1aWxkZXJTdGF0ZShidWlsZGVyU3RhdGUpCiB7CiB9CiAKIFJlbmRlclN0eWxlKiBD
U1NUb1N0eWxlTWFwOjpzdHlsZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIG1fcmVzb2x2ZXItPnN0
eWxlKCk7Ci19Ci0KLWNvbnN0IFJlbmRlclN0eWxlKiBDU1NUb1N0eWxlTWFwOjpyb290RWxlbWVu
dFN0eWxlKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+cm9vdEVsZW1lbnRTdHls
ZSgpOworICAgIHJldHVybiAmbV9idWlsZGVyU3RhdGUuc3R5bGUoKTsKIH0KIAogYm9vbCBDU1NU
b1N0eWxlTWFwOjp1c2VTVkdab29tUnVsZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX3Jlc29s
dmVyLT51c2VTVkdab29tUnVsZXMoKTsKKyAgICByZXR1cm4gbV9idWlsZGVyU3RhdGUudXNlU1ZH
Wm9vbVJ1bGVzKCk7CiB9CiAKIFJlZlB0cjxTdHlsZUltYWdlPiBDU1NUb1N0eWxlTWFwOjpzdHls
ZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gbV9yZXNvbHZlci0+c3R5bGVJ
bWFnZSh2YWx1ZSk7CisgICAgcmV0dXJuIG1fYnVpbGRlclN0YXRlLmNyZWF0ZVN0eWxlSW1hZ2Uo
dmFsdWUpOwogfQogCiB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxBdHRhY2htZW50KENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgRmlsbExheWVyJiBsYXllciwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQpAQCAtMjE0LDcgKzIwOSw3IEBAIHZvaWQgQ1NTVG9TdHlsZU1hcDo6bWFwRmlsbFNpemUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLCBjb25zCiAgICAgICAg
IGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIEFTU0VSVChmaWxsU2l6ZS50eXBlID09IEZp
bGxTaXplVHlwZTo6U2l6ZSk7Ci0gICAgICAgIGlmICghY29udmVydFRvTGVuZ3RoU2l6ZShwcmlt
aXRpdmVWYWx1ZSwgbV9yZXNvbHZlci0+c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCksIGZpbGxTaXplLnNpemUpKQorICAgICAgICBpZiAoIWNvbnZlcnRUb0xlbmd0aFNpemUocHJp
bWl0aXZlVmFsdWUsIG1fYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwg
ZmlsbFNpemUuc2l6ZSkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTIzNiw5ICsyMzEsOSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxYUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLAogICAgIExlbmd0
aCBsZW5ndGg7CiAgICAgaWYgKHBhaXIpIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0
eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCB8fCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCk7Ci0gICAgICAgIGxlbmd0
aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aCgqbV9yZXNvbHZlciwgKnBh
aXItPnNlY29uZCgpKTsKKyAgICAgICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGVuZ3RoKG1fYnVpbGRlclN0YXRlLCAqcGFpci0+c2Vjb25kKCkpOwogICAgIH0gZWxz
ZQotICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudFgoKm1fcmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgbGVuZ3RoID0gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRYKG1fYnVpbGRlclN0YXRl
LCB2YWx1ZSk7CiAKICAgICBsYXllci5zZXRYUG9zaXRpb24obGVuZ3RoKTsKICAgICBpZiAocGFp
cikKQEAgLTI2MCw5ICsyNTUsOSBAQCB2b2lkIENTU1RvU3R5bGVNYXA6Om1hcEZpbGxZUG9zaXRp
b24oQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBGaWxsTGF5ZXImIGxheWVyLAogICAgIExlbmd0
aCBsZW5ndGg7CiAgICAgaWYgKHBhaXIpIHsKICAgICAgICAgQVNTRVJUX1VOVVNFRChwcm9wZXJ0
eUlELCBwcm9wZXJ0eUlEID09IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSB8fCBwcm9w
ZXJ0eUlEID09IENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWSk7Ci0gICAgICAgIGxlbmd0
aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aCgqbV9yZXNvbHZlciwgKnBh
aXItPnNlY29uZCgpKTsKKyAgICAgICAgbGVuZ3RoID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGVuZ3RoKG1fYnVpbGRlclN0YXRlLCAqcGFpci0+c2Vjb25kKCkpOwogICAgIH0gZWxz
ZQotICAgICAgICBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlv
bkNvbXBvbmVudFkoKm1fcmVzb2x2ZXIsIHZhbHVlKTsKKyAgICAgICAgbGVuZ3RoID0gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKG1fYnVpbGRlclN0YXRl
LCB2YWx1ZSk7CiAgICAgCiAgICAgbGF5ZXIuc2V0WVBvc2l0aW9uKGxlbmd0aCk7CiAgICAgaWYg
KHBhaXIpCkBAIC00MDksNyArNDA0LDcgQEAgdm9pZCBDU1NUb1N0eWxlTWFwOjptYXBBbmltYXRp
b25OYW1lKEFuaW1hdGlvbiYgbGF5ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgbGF5ZXIu
c2V0SXNOb25lQW5pbWF0aW9uKHRydWUpOwogICAgIGVsc2UKLSAgICAgICAgbGF5ZXIuc2V0TmFt
ZShwcmltaXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpLCBtX3Jlc29sdmVyLT5zdGF0ZSgpLnN0eWxl
U2NvcGVPcmRpbmFsKCkpOworICAgICAgICBsYXllci5zZXROYW1lKHByaW1pdGl2ZVZhbHVlLnN0
cmluZ1ZhbHVlKCksIG1fYnVpbGRlclN0YXRlLnN0eWxlU2NvcGVPcmRpbmFsKCkpOwogfQogCiB2
b2lkIENTU1RvU3R5bGVNYXA6Om1hcEFuaW1hdGlvblBsYXlTdGF0ZShBbmltYXRpb24mIGxheWVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC01OTMsNyArNTg4LDcgQEAgTGVuZ3RoQm94IENT
U1RvU3R5bGVNYXA6Om1hcE5pbmVQaWVjZUltYWdlUXVhZChDU1NWYWx1ZSYgdmFsdWUpCiAgICAg
ICAgIHJldHVybiBMZW5ndGhCb3goKTsKIAogICAgIC8vIEdldCBvdXIgem9vbSB2YWx1ZS4KLSAg
ICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gdXNlU1ZHWm9vbVJ1
bGVzKCkgPyBtX3Jlc29sdmVyLT5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5j
b3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fcmVzb2x2ZXItPnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVy
c2lvbkRhdGEgPSB1c2VTVkdab29tUnVsZXMoKSA/IG1fYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKSA6IG1fYnVpbGRlclN0
YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKIAogICAgIC8vIFJldHJpZXZlIHRoZSBw
cmltaXRpdmUgdmFsdWUuCiAgICAgYXV0byYgYm9yZGVyV2lkdGhzID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NU
b1N0eWxlTWFwLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCmluZGV4IDRm
YjI5YTlkM2E2Li5hMWM0NDIxYmFiNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NT
U1RvU3R5bGVNYXAuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVG9TdHlsZU1hcC5oCkBA
IC0zNCwxNCArMzQsMTcgQEAgY2xhc3MgTGVuZ3RoQm94OwogY2xhc3MgTmluZVBpZWNlSW1hZ2U7
CiBjbGFzcyBSZW5kZXJTdHlsZTsKIGNsYXNzIFN0eWxlSW1hZ2U7Ci1jbGFzcyBTdHlsZVJlc29s
dmVyOworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOworfQogCiBjbGFz
cyBDU1NUb1N0eWxlTWFwIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDU1NUb1N0eWxlTWFw
KTsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIAogcHVibGljOgotICAgIENTU1RvU3R5
bGVNYXAoU3R5bGVSZXNvbHZlciopOworICAgIENTU1RvU3R5bGVNYXAoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYpOwogCiAgICAgdm9pZCBtYXBGaWxsQXR0YWNobWVudChDU1NQcm9wZXJ0eUlELCBGaWxs
TGF5ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwogICAgIHZvaWQgbWFwRmlsbENsaXAoQ1NTUHJvcGVy
dHlJRCwgRmlsbExheWVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKQEAgLTcyLDE5ICs3NSwxMiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBtYXBOaW5lUGllY2VJbWFnZVJlcGVhdChDU1NWYWx1ZSYsIE5pbmVQ
aWVjZUltYWdlJik7CiAKIHByaXZhdGU6Ci0gICAgLy8gRklYTUU6IFRoZXNlIGFjY2Vzc29ycyBz
aG91bGQgYmUgcmVwbGFjZWQgYnkgYSBSZXNvbHZlU3RhdGUgb2JqZWN0Ci0gICAgLy8gc2ltaWxh
ciB0byBob3cgUGFpbnRJbmZvL0xheW91dFN0YXRlIGNhY2hlIHZhbHVlcyBuZWVkZWQgZm9yCi0g
ICAgLy8gdGhlIGN1cnJlbnQgcGFpbnQvbGF5b3V0LgogICAgIFJlbmRlclN0eWxlKiBzdHlsZSgp
IGNvbnN0OwotICAgIGNvbnN0IFJlbmRlclN0eWxlKiByb290RWxlbWVudFN0eWxlKCkgY29uc3Q7
CiAgICAgYm9vbCB1c2VTVkdab29tUnVsZXMoKSBjb25zdDsKLQotICAgIC8vIEZJWE1FOiBUaGlz
IHNob3VsZCBiZSBwYXJ0IG9mIHNvbWUgc29ydCBvZiBTdHlsZUltYWdlQ2FjaGUgb2JqZWN0IHdo
aWNoCi0gICAgLy8gaXMgaGVsZCBieSB0aGUgU3R5bGVSZXNvbHZlciwgYW5kIGxpa2VseSBwcm92
aWRlZCB0byB0aGlzIG9iamVjdAotICAgIC8vIGR1cmluZyB0aGUgcmVzb2x2ZS4KICAgICBSZWZQ
dHI8U3R5bGVJbWFnZT4gc3R5bGVJbWFnZShDU1NWYWx1ZSYpOwogCi0gICAgU3R5bGVSZXNvbHZl
ciogbV9yZXNvbHZlcjsKKyAgICAvLyBGSVhNRTogVGhpcyB0eXBlIGNhbiBtZXJnZSBpbnRvIEJ1
aWxkZXJTdGF0ZS4KKyAgICBTdHlsZTo6QnVpbGRlclN0YXRlJiBtX2J1aWxkZXJTdGF0ZTsKIH07
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NW
YXJpYWJsZVJlZmVyZW5jZVZhbHVlLmNwcAppbmRleCBmODRiOGI2ZTliOS4uZmU2MGRjZmJmYjQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJsZVJlZmVyZW5jZVZhbHVl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5j
cHAKQEAgLTQ1LDIxICs0NSwyMSBAQCBTdHJpbmcgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZTo6
Y3VzdG9tQ1NTVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIG1fc3RyaW5nVmFsdWU7CiB9CiAKLXN0
YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNlclRva2VuUmFuZ2UsIFZlY3RvcjxD
U1NQYXJzZXJUb2tlbj4mLCBTdHlsZTo6UHJvcGVydHlDYXNjYWRlJik7CitzdGF0aWMgYm9vbCBy
ZXNvbHZlVG9rZW5SYW5nZShDU1NQYXJzZXJUb2tlblJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9r
ZW4+JiwgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpOwogCi1zdGF0aWMgYm9vbCByZXNvbHZlVmFyaWFi
bGVGYWxsYmFjayhDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9r
ZW4+JiByZXN1bHQsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCitzdGF0aWMgYm9v
bCByZXNvbHZlVmFyaWFibGVGYWxsYmFjayhDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0
b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQsIFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSkKIHsKICAgICBpZiAocmFuZ2UuYXRFbmQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIEFTU0VSVChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbW1hVG9rZW4pOwogICAgIHJhbmdl
LmNvbnN1bWUoKTsKLSAgICByZXR1cm4gcmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc3VsdCwg
Y2FzY2FkZSk7CisgICAgcmV0dXJuIHJlc29sdmVUb2tlblJhbmdlKHJhbmdlLCByZXN1bHQsIGJ1
aWxkZXJTdGF0ZSk7CiB9CiAKLXN0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZShD
U1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyVG9rZW4+JiByZXN1bHQs
IFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUpCitzdGF0aWMgYm9vbCByZXNvbHZlVmFy
aWFibGVSZWZlcmVuY2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSwgVmVjdG9yPENTU1BhcnNl
clRva2VuPiYgcmVzdWx0LCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0g
ICAgYXV0byYgcmVnaXN0ZXJlZFByb3BlcnRpZXMgPSBjYXNjYWRlLnN0eWxlUmVzb2x2ZXIoKS5k
b2N1bWVudCgpLmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpOwotICAgIGF1dG8m
IHN0eWxlID0gKmNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnN0eWxlKCk7CisgICAgYXV0byYgcmVn
aXN0ZXJlZFByb3BlcnRpZXMgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3Rl
cmVkQ3VzdG9tUHJvcGVydHlTZXQoKTsKKyAgICBhdXRvJiBzdHlsZSA9IGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpOwogCiAgICAgcmFuZ2UuY29uc3VtZVdoaXRlc3BhY2UoKTsKICAgICBBU1NFUlQocmFu
Z2UucGVlaygpLnR5cGUoKSA9PSBJZGVudFRva2VuKTsKQEAgLTY3LDExICs2NywxMSBAQCBzdGF0
aWMgYm9vbCByZXNvbHZlVmFyaWFibGVSZWZlcmVuY2UoQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5n
ZSwgVmVjdG9yPENTU1BhcnNlcgogICAgIEFTU0VSVChyYW5nZS5hdEVuZCgpIHx8IChyYW5nZS5w
ZWVrKCkudHlwZSgpID09IENvbW1hVG9rZW4pKTsKIAogICAgIC8vIEFwcGx5IHRoaXMgdmFyaWFi
bGUgZmlyc3QsIGluIGNhc2UgaXQgaXMgc3RpbGwgdW5yZXNvbHZlZAotICAgIGNhc2NhZGUuYXBw
bHlDdXN0b21Qcm9wZXJ0eSh2YXJpYWJsZU5hbWUpOworICAgIGJ1aWxkZXJTdGF0ZS5jYXNjYWRl
KCkuYXBwbHlDdXN0b21Qcm9wZXJ0eSh2YXJpYWJsZU5hbWUpOwogCiAgICAgLy8gQXBwbHkgZmFs
bGJhY2sgdG8gZGV0ZWN0IGN5Y2xlcwogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gZmFsbGJh
Y2tSZXN1bHQ7Ci0gICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxi
YWNrKENTU1BhcnNlclRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgY2FzY2FkZSk7
CisgICAgYm9vbCBmYWxsYmFja1JldHVybiA9IHJlc29sdmVWYXJpYWJsZUZhbGxiYWNrKENTU1Bh
cnNlclRva2VuUmFuZ2UocmFuZ2UpLCBmYWxsYmFja1Jlc3VsdCwgYnVpbGRlclN0YXRlKTsKIAog
ICAgIGF1dG8qIHByb3BlcnR5ID0gc3R5bGUuZ2V0Q3VzdG9tUHJvcGVydHkodmFyaWFibGVOYW1l
KTsKIApAQCAtOTMsMjQgKzkzLDI0IEBAIHN0YXRpYyBib29sIHJlc29sdmVWYXJpYWJsZVJlZmVy
ZW5jZShDU1NQYXJzZXJUb2tlblJhbmdlIHJhbmdlLCBWZWN0b3I8Q1NTUGFyc2VyCiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENTU1BhcnNlclRv
a2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwgU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSYgY2FzY2FkZSkKK3N0YXRpYyBib29sIHJlc29sdmVUb2tlblJhbmdlKENT
U1BhcnNlclRva2VuUmFuZ2UgcmFuZ2UsIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4mIHJlc3VsdCwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIGJvb2wgc3VjY2VzcyA9
IHRydWU7CiAgICAgd2hpbGUgKCFyYW5nZS5hdEVuZCgpKSB7CiAgICAgICAgIGlmIChyYW5nZS5w
ZWVrKCkuZnVuY3Rpb25JZCgpID09IENTU1ZhbHVlVmFyIHx8IHJhbmdlLnBlZWsoKS5mdW5jdGlv
bklkKCkgPT0gQ1NTVmFsdWVFbnYpCi0gICAgICAgICAgICBzdWNjZXNzICY9IHJlc29sdmVWYXJp
YWJsZVJlZmVyZW5jZShyYW5nZS5jb25zdW1lQmxvY2soKSwgcmVzdWx0LCBjYXNjYWRlKTsKKyAg
ICAgICAgICAgIHN1Y2Nlc3MgJj0gcmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlKHJhbmdlLmNvbnN1
bWVCbG9jaygpLCByZXN1bHQsIGJ1aWxkZXJTdGF0ZSk7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmFuZ2UuY29uc3VtZSgpKTsKICAgICB9CiAgICAgcmV0dXJuIHN1
Y2Nlc3M7CiB9CiAKLVJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJlbmNl
VmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYg
Y2FzY2FkZSkgY29uc3QKK1JlZlB0cjxDU1NWYXJpYWJsZURhdGE+IENTU1ZhcmlhYmxlUmVmZXJl
bmNlVmFsdWU6OnJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlKSBjb25zdAogewogICAgIFZlY3RvcjxDU1NQYXJzZXJUb2tlbj4gcmVzb2x2
ZWRUb2tlbnM7CiAgICAgQ1NTUGFyc2VyVG9rZW5SYW5nZSByYW5nZSA9IG1fZGF0YS0+dG9rZW5S
YW5nZSgpOwogCi0gICAgaWYgKCFyZXNvbHZlVG9rZW5SYW5nZShyYW5nZSwgcmVzb2x2ZWRUb2tl
bnMsIGNhc2NhZGUpKQorICAgIGlmICghcmVzb2x2ZVRva2VuUmFuZ2UocmFuZ2UsIHJlc29sdmVk
VG9rZW5zLCBidWlsZGVyU3RhdGUpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJl
dHVybiBDU1NWYXJpYWJsZURhdGE6OmNyZWF0ZShyZXNvbHZlZFRva2Vucyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZS5oIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUuaAppbmRleCA5YTEyMGMzNjc3
NC4uYzU2ZjNiZTMyNWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUuaApAQCAtNDIsNyArNDIsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBDU1NQYXJzZXJUb2tlblJhbmdlOwogCiBuYW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVy
dHlDYXNjYWRlOworY2xhc3MgQnVpbGRlclN0YXRlOwogfQogCiBjbGFzcyBDU1NWYXJpYWJsZVJl
ZmVyZW5jZVZhbHVlIDogcHVibGljIENTU1ZhbHVlIHsKQEAgLTU1LDcgKzU1LDcgQEAgcHVibGlj
OgogICAgIGJvb2wgZXF1YWxzKGNvbnN0IENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWUmIG90aGVy
KSBjb25zdCB7IHJldHVybiBtX2RhdGEuZ2V0KCkgPT0gb3RoZXIubV9kYXRhLmdldCgpOyB9CiAg
ICAgU3RyaW5nIGN1c3RvbUNTU1RleHQoKSBjb25zdDsKIAotICAgIFJlZlB0cjxDU1NWYXJpYWJs
ZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVyZW5jZXMoU3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYp
IGNvbnN0OworICAgIFJlZlB0cjxDU1NWYXJpYWJsZURhdGE+IHJlc29sdmVWYXJpYWJsZVJlZmVy
ZW5jZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIGNvbnN0OwogCiBwcml2YXRlOgogICAgIENTU1Zh
cmlhYmxlUmVmZXJlbmNlVmFsdWUoUmVmPENTU1ZhcmlhYmxlRGF0YT4mJiBkYXRhKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3Bw
IGIvU291cmNlL1dlYkNvcmUvY3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCmlu
ZGV4IDBkZjZhYWU5NmYwLi4xZTdhNTNiMTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Y3NzL0RPTUNTU1JlZ2lzdGVyQ3VzdG9tUHJvcGVydHkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9ET01DU1NSZWdpc3RlckN1c3RvbVByb3BlcnR5LmNwcApAQCAtMzMsNiArMzMsNyBAQAog
I2luY2x1ZGUgIkNTU1Rva2VuaXplci5oIgogI2luY2x1ZGUgIkRPTUNTU05hbWVzcGFjZS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5j
bHVkZSAiU3R5bGVCdWlsZGVyQ29udmVydGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CiAKQEAgLTUxLDcgKzUyLDYgQEAgRXhjZXB0aW9uT3I8dm9pZD4gRE9NQ1NTUmVnaXN0
ZXJDdXN0b21Qcm9wZXJ0eTo6cmVnaXN0ZXJQcm9wZXJ0eShEb2N1bWVudCYgZG9jdW0KICAgICAg
ICAgLy8gV2UgbmVlZCB0byBpbml0aWFsaXplIHRoaXMgc28gdGhhdCB3ZSBjYW4gc3VjY2Vzc2Z1
bGx5IHBhcnNlIGNvbXB1dGF0aW9uYWxseSBkZXBlbmRlbnQgdmFsdWVzIChsaWtlIGVtIHVuaXRz
KS4KICAgICAgICAgLy8gV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgdmFsdWVzIHRvIGJlIGFj
Y3VyYXRlLCBzaW5jZSB0aGV5IHdpbGwgYmUgcmVqZWN0ZWQgbGF0ZXIgYW55d2F5CiAgICAgICAg
IHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvU3R5bGUoQ1NTUHJvcGVydHlJbnZhbGlkLCBu
dWxscHRyLCBzdHlsZVJlc29sdmVyLmRlZmF1bHRTdHlsZUZvckVsZW1lbnQoKSk7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogCiAgICAgICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4gZGVwZW5kZW5jaWVzOwogICAgICAgICBDU1NQcm9wZXJ0eVBhcnNlcjo6Y29sbGVjdFBh
cnNlZEN1c3RvbVByb3BlcnR5VmFsdWVEZXBlbmRlbmNpZXMoZGVzY3JpcHRvci5zeW50YXgsIGZh
bHNlLCBkZXBlbmRlbmNpZXMsIHRva2VuaXplci50b2tlblJhbmdlKCksIHN0cmljdENTU1BhcnNl
ckNvbnRleHQoKSk7CkBAIC01OSw3ICs1OSw5IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IERPTUNTU1Jl
Z2lzdGVyQ3VzdG9tUHJvcGVydHk6OnJlZ2lzdGVyUHJvcGVydHkoRG9jdW1lbnQmIGRvY3VtCiAg
ICAgICAgIGlmICghZGVwZW5kZW5jaWVzLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZlbiBpbml0aWFsIHZhbHVlIG11c3QgYmUg
Y29tcHV0YXRpb25hbGx5IGluZGVwZW5kZW50LiIgfTsKIAotICAgICAgICBpbml0aWFsVmFsdWUg
PSBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVzY3Jp
cHRvci5uYW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwgc3R5
bGVSZXNvbHZlciwgc3RyaWN0Q1NTUGFyc2VyQ29udGV4dCgpKTsKKyAgICAgICAgTWF0Y2hSZXN1
bHQgbWF0Y2hSZXN1bHQ7CisgICAgICAgIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUgZHVtbXlDYXNj
YWRlKHN0eWxlUmVzb2x2ZXIsIG1hdGNoUmVzdWx0LCB7IH0pOworICAgICAgICBpbml0aWFsVmFs
dWUgPSBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoZGVz
Y3JpcHRvci5uYW1lLCBkZXNjcmlwdG9yLnN5bnRheCwgdG9rZW5pemVyLnRva2VuUmFuZ2UoKSwg
ZHVtbXlDYXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLCBzdHJpY3RDU1NQYXJzZXJDb250ZXh0KCkpOwog
CiAgICAgICAgIGlmICghaW5pdGlhbFZhbHVlIHx8ICFpbml0aWFsVmFsdWUtPmlzUmVzb2x2ZWQo
KSkKICAgICAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTeW50YXhFcnJvciwgIlRoZSBnaXZl
biBpbml0aWFsIHZhbHVlIGRvZXMgbm90IHBhcnNlIGZvciB0aGUgZ2l2ZW4gc3ludGF4LiIgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAppbmRleCA4ZWU1ODNlZDE3ZS4uNjQ5MThhYzc5ZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZUJ1aWxkZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyLmgKQEAgLTMwLDE0ICszMCwxNiBAQAogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLXN0cnVjdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHk7CiBj
bGFzcyBDU1NWYWx1ZTsKLWNsYXNzIFN0eWxlUmVzb2x2ZXI7CiBzdHJ1Y3QgQ1NTUmVnaXN0ZXJl
ZEN1c3RvbVByb3BlcnR5OwogCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRl
OworfQorCiBjbGFzcyBTdHlsZUJ1aWxkZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFw
cGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJiwgYm9v
bCBpc0luaXRpYWwsIGJvb2wgaXNJbmhlcml0LCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJv
cGVydHkqKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYsIGJvb2wgaXNJbml0aWFsLCBib29sIGlzSW5o
ZXJpdCwgY29uc3QgQ1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5Kik7CiB9OwogCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWls
ZGVyQ29udmVydGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVy
LmgKaW5kZXggMDg5OTU3ZDIzNmMuLmJiNWNhNjQwMzUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9jc3MvU3R5bGVCdWlsZGVyQ29udmVydGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlQnVpbGRlckNvbnZlcnRlci5oCkBAIC01MSw3ICs1MSw3IEBACiAjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2lu
Y2x1ZGUgIlNldHRpbmdzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorI2luY2x1ZGUg
IlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSAiU3R5bGVTY3JvbGxTbmFwUG9pbnRzLmgi
CiAjaW5jbHVkZSAiVGFiU2l6ZS5oIgogI2luY2x1ZGUgIlRvdWNoQWN0aW9uLmgiCkBAIC02Mywx
MDcgKzYzLDEwNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBOb3RlIHRoYXQgd2UgYXNzdW1l
IHRoZSBDU1MgcGFyc2VyIG9ubHkgYWxsb3dzIHZhbGlkIENTU1ZhbHVlIHR5cGVzLgogY2xhc3Mg
U3R5bGVCdWlsZGVyQ29udmVydGVyIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZl
cnRMZW5ndGgoY29uc3QgU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3Rh
dGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5ndGggY29udmVydExlbmd0aFNpemluZyhjb25z
dCBTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgTGVuZ3RoIGNv
bnZlcnRMZW5ndGhNYXhTaXppbmcoY29uc3QgU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
Jik7Ci0gICAgc3RhdGljIFRhYlNpemUgY29udmVydFRhYlNpemUoY29uc3QgU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQg
Y29udmVydENvbXB1dGVkTGVuZ3RoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnRMaW5lV2lkdGgoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGZsb2F0IGNvbnZlcnRTcGFj
aW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBMZW5ndGhT
aXplIGNvbnZlcnRSYWRpdXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAg
c3RhdGljIExlbmd0aFBvaW50IGNvbnZlcnRPYmplY3RQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwg
Y29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uPiBj
b252ZXJ0VGV4dERlY29yYXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0g
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51bWJlcihTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMg
VCBjb252ZXJ0TnVtYmVyT3JBdXRvKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBzaG9ydCBjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBz
dGF0aWMgTmluZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlckltYWdlKFN0eWxlUmVzb2x2ZXImLCBD
U1NWYWx1ZSYpOwotICAgIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+IHN0YXRpYyBOaW5lUGllY2VJ
bWFnZSBjb252ZXJ0Qm9yZGVyTWFzayhTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICB0
ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgUmVmUHRyPFN0eWxlSW1hZ2U+IGNvbnZlcnRT
dHlsZUltYWdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUcmFuc2Zv
cm1PcGVyYXRpb25zIGNvbnZlcnRUcmFuc2Zvcm0oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVuZ3RoKGNvbnN0IFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydExl
bmd0aE9yQXV0byhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRMZW5ndGhTaXppbmcoY29uc3QgU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBjb252ZXJ0TGVu
Z3RoTWF4U2l6aW5nKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBUYWJTaXplIGNvbnZlcnRUYWJTaXplKGNvbnN0IFN0eWxlOjpCdWlsZGVy
U3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0YXRp
YyBUIGNvbnZlcnRDb21wdXRlZExlbmd0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdGF0aWMgVCBjb252ZXJ0TGluZVdp
ZHRoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBm
bG9hdCBjb252ZXJ0U3BhY2luZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgTGVuZ3RoU2l6ZSBjb252ZXJ0UmFkaXVzKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGhQb2ludCBjb252ZXJ0T2Jq
ZWN0UG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gY29udmVydFRleHREZWNvcmF0aW9uKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0YXRpYyBUIGNvbnZlcnROdW1iZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RhdGljIFQgY29udmVydE51
bWJlck9yQXV0byhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgc2hvcnQgY29udmVydFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4g
c3RhdGljIE5pbmVQaWVjZUltYWdlIGNvbnZlcnRCb3JkZXJJbWFnZShTdHlsZTo6QnVpbGRlclN0
YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEPiBzdGF0aWMgTmlu
ZVBpZWNlSW1hZ2UgY29udmVydEJvcmRlck1hc2soU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1Zh
bHVlJik7CisgICAgdGVtcGxhdGU8Q1NTUHJvcGVydHlJRD4gc3RhdGljIFJlZlB0cjxTdHlsZUlt
YWdlPiBjb252ZXJ0U3R5bGVJbWFnZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsK
KyAgICBzdGF0aWMgVHJhbnNmb3JtT3BlcmF0aW9ucyBjb252ZXJ0VHJhbnNmb3JtKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2lmIEVOQUJMRShEQVJLX01PREVfQ1NT
KQotICAgIHN0YXRpYyBTdHlsZUNvbG9yU2NoZW1lIGNvbnZlcnRDb2xvclNjaGVtZShTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgU3R5bGVDb2xvclNjaGVtZSBj
b252ZXJ0Q29sb3JTY2hlbWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAjZW5kaWYKLSAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmcoU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5nT3JBdXRv
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29u
dmVydFN0cmluZ09yTm9uZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBz
dGF0aWMgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBjb252ZXJ0VGV4dEVtcGhhc2lz
UG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRl
eHRBbGlnbk1vZGUgY29udmVydFRleHRBbGlnbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmKTsKLSAgICBzdGF0aWMgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBjb252ZXJ0Q2xpcFBh
dGgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFJlc2l6ZSBj
b252ZXJ0UmVzaXplKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRp
YyBpbnQgY29udmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBpbnQgY29udmVydE1hcnF1ZWVTcGVlZChTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmPFF1b3Rlc0RhdGE+IGNvbnZlcnRR
dW90ZXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFRleHRV
bmRlcmxpbmVQb3NpdGlvbiBjb252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlUmVzb2x2
ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBUZXh0VW5kZXJsaW5lT2Zmc2V0IGNv
bnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYp
OwotICAgIHN0YXRpYyBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBjb252ZXJ0VGV4dERlY29yYXRp
b25UaGlja25lc3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGlj
IFJlZlB0cjxTdHlsZVJlZmxlY3Rpb24+IGNvbnZlcnRSZWZsZWN0aW9uKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBJbnRTaXplIGNvbnZlcnRJbml0aWFsTGV0
dGVyKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBmbG9hdCBj
b252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBPcHRpb25TZXQ8TGluZUJveENvbnRhaW4+IGNvbnZlcnRMaW5lQm94Q29udGFp
bihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uU2V0
PFRleHREZWNvcmF0aW9uU2tpcD4gY29udmVydFRleHREZWNvcmF0aW9uU2tpcChTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgUmVmUHRyPFNoYXBlVmFsdWU+IGNv
bnZlcnRTaGFwZVZhbHVlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBT
dHJpbmcgY29udmVydFN0cmluZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
KTsKKyAgICBzdGF0aWMgU3RyaW5nIGNvbnZlcnRTdHJpbmdPckF1dG8oU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFN0cmluZyBjb252ZXJ0U3RyaW5n
T3JOb25lKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRp
YyBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9zaXRpb24+IGNvbnZlcnRUZXh0RW1waGFzaXNQb3Np
dGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
VGV4dEFsaWduTW9kZSBjb252ZXJ0VGV4dEFsaWduKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGNvbnZl
cnRDbGlwUGF0aChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBz
dGF0aWMgUmVzaXplIGNvbnZlcnRSZXNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIGludCBjb252ZXJ0TWFycXVlZVJlcGV0aXRpb24oU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGludCBjb252ZXJ0
TWFycXVlZVNwZWVkKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBSZWY8UXVvdGVzRGF0YT4gY29udmVydFF1b3RlcyhTdHlsZTo6QnVpbGRlclN0YXRl
JiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgVGV4dFVuZGVybGluZVBvc2l0aW9uIGNv
bnZlcnRUZXh0VW5kZXJsaW5lUG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIFRleHRVbmRlcmxpbmVPZmZzZXQgY29udmVydFRleHRVbmRl
cmxpbmVPZmZzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAg
c3RhdGljIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
UmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gY29udmVydFJlZmxlY3Rpb24oU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEludFNpemUgY29udmVydEluaXRp
YWxMZXR0ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIGZsb2F0IGNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNv
bnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNldDxMaW5lQm94Q29udGFpbj4gY29u
dmVydExpbmVCb3hDb250YWluKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBjb252ZXJ0VGV4dERl
Y29yYXRpb25Ta2lwKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAg
IHN0YXRpYyBSZWZQdHI8U2hhcGVWYWx1ZT4gY29udmVydFNoYXBlVmFsdWUoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKLSAgICBz
dGF0aWMgU2Nyb2xsU25hcFR5cGUgY29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTY3JvbGxTbmFwQWxpZ24gY29udmVydFNj
cm9sbFNuYXBBbGlnbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgU2Nyb2xsU25hcFR5cGUgY29udmVydFNjcm9sbFNuYXBUeXBlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTY3JvbGxTbmFwQWxpZ24gY29udmVy
dFNjcm9sbFNuYXBBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsK
ICNlbmRpZgotICAgIHN0YXRpYyBHcmlkVHJhY2tTaXplIGNvbnZlcnRHcmlkVHJhY2tTaXplKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBWZWN0b3I8R3JpZFRy
YWNrU2l6ZT4gY29udmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxHcmlkUG9zaXRpb24+IGNvbnZlcnRHcmlk
UG9zaXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEdy
aWRBdXRvRmxvdyBjb252ZXJ0R3JpZEF1dG9GbG93KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NW
YWx1ZSYpOwotICAgIHN0YXRpYyBPcHRpb25hbDxMZW5ndGg+IGNvbnZlcnRXb3JkU3BhY2luZyhT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8Zmxv
YXQ+IGNvbnZlcnRQZXJzcGVjdGl2ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsK
LSAgICBzdGF0aWMgT3B0aW9uYWw8TGVuZ3RoPiBjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgT3B0aW9uYWw8RmlsdGVy
T3BlcmF0aW9ucz4gY29udmVydEZpbHRlck9wZXJhdGlvbnMoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdyaWRUcmFja1NpemUgY29udmVydEdyaWRUcmFja1Np
emUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFZl
Y3RvcjxHcmlkVHJhY2tTaXplPiBjb252ZXJ0R3JpZFRyYWNrU2l6ZUxpc3QoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPEdyaWRQb3Np
dGlvbj4gY29udmVydEdyaWRQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgR3JpZEF1dG9GbG93IGNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFs
PExlbmd0aD4gY29udmVydFdvcmRTcGFjaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxmbG9hdD4gY29udmVydFBlcnNwZWN0aXZl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRp
b25hbDxMZW5ndGg+IGNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBPcHRpb25hbDxGaWx0ZXJPcGVyYXRpb25z
PiBjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIHN0YXRpYyBib29sIGNvbnZl
cnRUb3VjaENhbGxvdXQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3Rh
dGljIGJvb2wgY29udmVydFRvdWNoQ2FsbG91dChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKICNlbmRpZgogI2lmIEVOQUJMRShUT1VDSF9FVkVOVFMpCi0gICAgc3RhdGlj
IENvbG9yIGNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgQ29sb3IgY29udmVydFRhcEhpZ2hsaWdodENvbG9yKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCiAjaWYgRU5BQkxFKFBP
SU5URVJfRVZFTlRTKQotICAgIHN0YXRpYyBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IGNvbnZlcnRU
b3VjaEFjdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
T3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjZW5kaWYKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NS
T0xMSU5HX1RPVUNIKQotICAgIHN0YXRpYyBib29sIGNvbnZlcnRPdmVyZmxvd1Njcm9sbGluZyhT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgYm9vbCBjb252ZXJ0
T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CiAjZW5kaWYKLSAgICBzdGF0aWMgRm9udEZlYXR1cmVTZXR0aW5ncyBjb252ZXJ0Rm9udEZlYXR1
cmVTZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
Rm9udEZlYXR1cmVTZXR0aW5ncyBjb252ZXJ0Rm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZTo6QnVp
bGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKICAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZh
bHVlIGNvbnZlcnRGb250V2VpZ2h0RnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVlJik7CiAgICAgc3Rh
dGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFN0cmV0Y2hGcm9tVmFsdWUoY29uc3Qg
Q1NTVmFsdWUmKTsKICAgICBzdGF0aWMgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBjb252
ZXJ0Rm9udFN0eWxlRnJvbVZhbHVlKGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEZvbnRT
ZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFdlaWdodChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmKTsKLSAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3RyZXRj
aChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgRm9udFNlbGVj
dGlvblZhbHVlIGNvbnZlcnRGb250U3R5bGUoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVl
Jik7CisgICAgc3RhdGljIEZvbnRTZWxlY3Rpb25WYWx1ZSBjb252ZXJ0Rm9udFdlaWdodChTdHls
ZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgRm9udFNlbGVj
dGlvblZhbHVlIGNvbnZlcnRGb250U3RyZXRjaChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgRm9udFNlbGVjdGlvblZhbHVlIGNvbnZlcnRGb250U3R5
bGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKFZB
UklBVElPTl9GT05UUykKLSAgICBzdGF0aWMgRm9udFZhcmlhdGlvblNldHRpbmdzIGNvbnZlcnRG
b250VmFyaWF0aW9uU2V0dGluZ3MoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Cisg
ICAgc3RhdGljIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBjb252ZXJ0Rm9udFZhcmlhdGlvblNldHRp
bmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlmCi0gICAg
c3RhdGljIFNWR0xlbmd0aFZhbHVlIGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShTdHlsZVJlc29sdmVy
JiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBj
b252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwot
ICAgIHN0YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGNvbnZlcnRTdHJva2VEYXNoQXJyYXko
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIFBhaW50T3JkZXIg
Y29udmVydFBhaW50T3JkZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAg
c3RhdGljIGZsb2F0IGNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYpOwotICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFNWR1VSSVJlZmVyZW5jZShTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQ29sb3IgY29udmVydFNWR0NvbG9y
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyBTdHlsZVNlbGZB
bGlnbm1lbnREYXRhIGNvbnZlcnRTZWxmT3JEZWZhdWx0QWxpZ25tZW50RGF0YShTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgU3R5bGVDb250ZW50QWxpZ25tZW50
RGF0YSBjb252ZXJ0Q29udGVudEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJik7Ci0gICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50
YXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIEdseXBo
T3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oU3R5bGVSZXNvbHZlciYs
IGNvbnN0IENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydExp
bmVIZWlnaHQoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiwgZmxvYXQgbXVsdGlwbGll
ciA9IDEuZik7Ci0gICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29udmVydEZvbnRTeW50aGVzaXMo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFNWR0xlbmd0aFZh
bHVlIGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NT
VmFsdWUmKTsKKyAgICBzdGF0aWMgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBjb252ZXJ0U1ZHTGVu
Z3RoVmVjdG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0
YXRpYyBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGNvbnZlcnRTdHJva2VEYXNoQXJyYXkoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIFBhaW50T3JkZXIg
Y29udmVydFBhaW50T3JkZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7
CisgICAgc3RhdGljIGZsb2F0IGNvbnZlcnRPcGFjaXR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBTdHJpbmcgY29udmVydFNWR1VSSVJlZmVyZW5j
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQ29s
b3IgY29udmVydFNWR0NvbG9yKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYp
OworICAgIHN0YXRpYyBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIGNvbnZlcnRTZWxmT3JEZWZhdWx0
QWxpZ25tZW50RGF0YShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgU3R5bGVDb250ZW50QWxpZ25tZW50RGF0YSBjb252ZXJ0Q29udGVudEFsaWdubWVu
dERhdGEoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGlj
IEdseXBoT3JpZW50YXRpb24gY29udmVydEdseXBoT3JpZW50YXRpb24oU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdseXBoT3JpZW50YXRpb24gY29u
dmVydEdseXBoT3JpZW50YXRpb25PckF1dG8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvbmFsPExlbmd0aD4gY29udmVydExpbmVIZWlnaHQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiwgZmxvYXQgbXVsdGlwbGllciA9
IDEuZik7CisgICAgc3RhdGljIEZvbnRTeW50aGVzaXMgY29udmVydEZvbnRTeW50aGVzaXMoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAgICAgCi0gICAgc3RhdGljIEJy
ZWFrQmV0d2VlbiBjb252ZXJ0UGFnZUJyZWFrQmV0d2VlbihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydFBhZ2VCcmVha0luc2lk
ZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgQnJlYWtCZXR3
ZWVuIGNvbnZlcnRDb2x1bW5CcmVha0JldHdlZW4oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1Zh
bHVlJik7Ci0gICAgc3RhdGljIEJyZWFrSW5zaWRlIGNvbnZlcnRDb2x1bW5CcmVha0luc2lkZShT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtCZXR3ZWVu
IGNvbnZlcnRQYWdlQnJlYWtCZXR3ZWVuKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0luc2lkZSBjb252ZXJ0UGFnZUJyZWFrSW5zaWRlKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBCcmVha0Jl
dHdlZW4gY29udmVydENvbHVtbkJyZWFrQmV0d2VlbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgQnJlYWtJbnNpZGUgY29udmVydENvbHVtbkJyZWFr
SW5zaWRlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogCi0gICAgc3Rh
dGljIE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IGNvbnZlcnRIYW5naW5nUHVuY3R1YXRp
b24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIE9wdGlvblNl
dDxIYW5naW5nUHVuY3R1YXRpb24+IGNvbnZlcnRIYW5naW5nUHVuY3R1YXRpb24oU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgT3B0aW9uU2V0PFNw
ZWFrQXM+IGNvbnZlcnRTcGVha0FzKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYpOwor
ICAgIHN0YXRpYyBPcHRpb25TZXQ8U3BlYWtBcz4gY29udmVydFNwZWFrQXMoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgTGVuZ3RoIGNvbnZlcnRQ
b3NpdGlvbkNvbXBvbmVudFgoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7Ci0gICAg
c3RhdGljIExlbmd0aCBjb252ZXJ0UG9zaXRpb25Db21wb25lbnRZKFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyBMZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9u
ZW50WChTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMg
TGVuZ3RoIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudFkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNv
bnN0IENTU1ZhbHVlJik7CiAKLSAgICBzdGF0aWMgR2FwTGVuZ3RoIGNvbnZlcnRHYXBMZW5ndGgo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIEdhcExlbmd0aCBj
b252ZXJ0R2FwTGVuZ3RoKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwog
ICAgIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgU3R5bGVCdWlsZGVyQ3VzdG9tOwpAQCAt
MTcyLDcgKzE3Miw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIE9wdGlvblNldDxUZXh0RW1waGFz
aXNQb3NpdGlvbj4gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oY29uc3QgQ1NTUHJpbWl0aXZlVmFs
dWUmKTsKICAgICBzdGF0aWMgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uU2tpcD4gdmFsdWVUb0Rl
Y29yYXRpb25Ta2lwKGNvbnN0IENTU1ByaW1pdGl2ZVZhbHVlJik7CiAjaWYgRU5BQkxFKENTU19T
Q1JPTExfU05BUCkKLSAgICBzdGF0aWMgTGVuZ3RoIHBhcnNlU25hcENvb3JkaW5hdGUoU3R5bGVS
ZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJik7CisgICAgc3RhdGljIExlbmd0aCBwYXJzZVNuYXBD
b29yZGluYXRlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYpOwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKQEAgLTE4MCwyMyArMTgwLDIzIEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogICAgIHN0YXRpYyBMZW5ndGggY29udmVydFRvMTAwUGVyY2VudE1pbnVz
TGVuZ3RoKGNvbnN0IExlbmd0aCYpOwotICAgIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENTU1ZhbHVl
SUQ+IHN0YXRpYyBMZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOworICAgIHRlbXBsYXRlPENTU1ZhbHVlSUQsIENT
U1ZhbHVlSUQ+IHN0YXRpYyBMZW5ndGggY29udmVydFBvc2l0aW9uQ29tcG9uZW50KFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYpOwogCi0gICAgc3RhdGljIEdy
aWRMZW5ndGggY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYs
IFN0eWxlUmVzb2x2ZXImKTsKLSAgICBzdGF0aWMgR3JpZFRyYWNrU2l6ZSBjcmVhdGVHcmlkVHJh
Y2tTaXplKGNvbnN0IENTU1ZhbHVlJiwgU3R5bGVSZXNvbHZlciYpOworICAgIHN0YXRpYyBHcmlk
TGVuZ3RoIGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmLCBT
dHlsZTo6QnVpbGRlclN0YXRlJik7CisgICAgc3RhdGljIEdyaWRUcmFja1NpemUgY3JlYXRlR3Jp
ZFRyYWNrU2l6ZShjb25zdCBDU1NWYWx1ZSYsIFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICBz
dHJ1Y3QgVHJhY2tzRGF0YTsKLSAgICBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KGNv
bnN0IENTU1ZhbHVlJiwgVHJhY2tzRGF0YSYsIFN0eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMg
Ym9vbCBjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENTU1ZhbHVlJiwgVHJhY2tzRGF0YSYsIFN0
eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICBzdGF0aWMgYm9vbCBjcmVhdGVHcmlkUG9zaXRpb24o
Y29uc3QgQ1NTVmFsdWUmLCBHcmlkUG9zaXRpb24mKTsKICAgICBzdGF0aWMgdm9pZCBjcmVhdGVJ
bXBsaWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAm
LCBOYW1lZEdyaWRMaW5lc01hcCYsIEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbik7Ci0gICAgc3Rh
dGljIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdp
dGhUZXh0Wm9vbUZhY3RvcihTdHlsZVJlc29sdmVyJik7CisgICAgc3RhdGljIENTU1RvTGVuZ3Ro
Q29udmVyc2lvbkRhdGEgY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rv
cihTdHlsZTo6QnVpbGRlclN0YXRlJik7CiB9OwogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydExlbmd0aChjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydExlbmd0aChjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVy
U3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgQ1NTVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVzb2x2ZXIudXNlU1ZHWm9vbVJ1
bGVzRm9yTGVuZ3RoKCkgPwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMGYpCi0gICAgICAgIDog
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICBD
U1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLnVz
ZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpID8KKyAgICAgICAgYnVpbGRlclN0YXRlLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9vbSgxLjBmKQorICAgICAgICA6
IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCk7CiAKICAgICBpZiAocHJp
bWl0aXZlVmFsdWUuaXNMZW5ndGgoKSkgewogICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNvbnZlcnNpb25EYXRhKTsKQEAgLTIxNCwx
OSArMjE0LDE5IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TGVuZ3RoKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzCiAgICAgcmV0dXJuIExlbmd0aCgw
LCBGaXhlZCk7CiB9CiAKLWlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0TGVuZ3RoT3JBdXRvKGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIHJldHVy
biBMZW5ndGgoQXV0byk7Ci0gICAgcmV0dXJuIGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwg
dmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpOwog
fQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0aFNp
emluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aFNpemluZyhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgc3dpdGNoIChwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkpIHsKICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDoKLSAgICAgICAgcmV0dXJuIGNvbnZl
cnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgICAgICByZXR1cm4gY29udmVydExl
bmd0aChidWlsZGVyU3RhdGUsIHZhbHVlKTsKICAgICBjYXNlIENTU1ZhbHVlSW50cmluc2ljOgog
ICAgICAgICByZXR1cm4gTGVuZ3RoKEludHJpbnNpYyk7CiAgICAgY2FzZSBDU1NWYWx1ZU1pbklu
dHJpbnNpYzoKQEAgLTI1MCwyOSArMjUwLDI5IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjb252ZXJ0TGVuZ3RoU2l6aW5nKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0CiAg
ICAgfQogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExl
bmd0aE1heFNpemluZyhjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExlbmd0aE1heFNpemluZyhjb25zdCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICByZXR1
cm4gTGVuZ3RoKFVuZGVmaW5lZCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRMZW5ndGhTaXppbmcoc3R5
bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0TGVuZ3RoU2l6aW5nKGJ1aWxk
ZXJTdGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgVGFiU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUYWJTaXplKGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNv
bnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBUYWJTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFRhYlNpemUoY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1
ZS5pc051bWJlcigpKQogICAgICAgICByZXR1cm4gVGFiU2l6ZShwcmltaXRpdmVWYWx1ZS5mbG9h
dFZhbHVlKCksIFNwYWNlVmFsdWVUeXBlKTsKLSAgICByZXR1cm4gVGFiU2l6ZShwcmltaXRpdmVW
YWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKSwgTGVuZ3RoVmFsdWVUeXBlKTsKKyAgICByZXR1cm4gVGFiU2l6
ZShwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0PihidWlsZGVyU3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpKSwgTGVuZ3RoVmFsdWVUeXBlKTsKIH0KIAogdGVtcGxhdGU8
dHlwZW5hbWUgVD4KLWlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbXB1
dGVkTGVuZ3RoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbXB1dGVkTGVu
Z3RoKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewotICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLmNv
bXB1dGVMZW5ndGg8VD4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lv
bkRhdGEoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSku
Y29tcHV0ZUxlbmd0aDxUPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydExpbmVXaWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRMaW5lV2lkdGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIHN3aXRjaCAocHJpbWl0aXZlVmFsdWUudmFsdWVJ
RCgpKSB7CkBAIC0yODUsMTYgKzI4NSwxNiBAQCBpbmxpbmUgVCBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRMaW5lV2lkdGgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgYwogICAg
IGNhc2UgQ1NTVmFsdWVJbnZhbGlkOiB7CiAgICAgICAgIC8vIEFueSBvcmlnaW5hbCByZXN1bHQg
dGhhdCB3YXMgPj0gMSBzaG91bGQgbm90IGJlIGFsbG93ZWQgdG8gZmFsbCBiZWxvdyAxLgogICAg
ICAgICAvLyBUaGlzIGtlZXBzIGJvcmRlciBsaW5lcyBmcm9tIHZhbmlzaGluZy4KLSAgICAgICAg
VCByZXN1bHQgPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8VD4oc3R5bGVSZXNvbHZlciwgdmFsdWUp
OwotICAgICAgICBpZiAoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLnN0eWxlKCktPmVmZmVjdGl2ZVpv
b20oKSA8IDEuMGYgJiYgcmVzdWx0IDwgMS4wKSB7Ci0gICAgICAgICAgICBUIG9yaWdpbmFsTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxUPihzdHlsZVJlc29sdmVyLnN0YXRl
KCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMCkp
OworICAgICAgICBUIHJlc3VsdCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxUPihidWlsZGVyU3Rh
dGUsIHZhbHVlKTsKKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmVmZmVjdGl2ZVpv
b20oKSA8IDEuMGYgJiYgcmVzdWx0IDwgMS4wKSB7CisgICAgICAgICAgICBUIG9yaWdpbmFsTGVu
Z3RoID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxUPihidWlsZGVyU3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29tKDEuMCkpOwogICAgICAg
ICAgICAgaWYgKG9yaWdpbmFsTGVuZ3RoID49IDEuMCkKICAgICAgICAgICAgICAgICByZXR1cm4g
MTsKICAgICAgICAgfQotICAgICAgICBmbG9hdCBtaW5pbXVtTGluZVdpZHRoID0gMSAvIHN0eWxl
UmVzb2x2ZXIuZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpOworICAgICAgICBmbG9hdCBt
aW5pbXVtTGluZVdpZHRoID0gMSAvIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmRldmljZVNjYWxl
RmFjdG9yKCk7CiAgICAgICAgIGlmIChyZXN1bHQgPiAwICYmIHJlc3VsdCA8IG1pbmltdW1MaW5l
V2lkdGgpCiAgICAgICAgICAgICByZXR1cm4gbWluaW11bUxpbmVXaWR0aDsKLSAgICAgICAgcmV0
dXJuIGZsb29yVG9EZXZpY2VQaXhlbChyZXN1bHQsIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKKyAgICAgICAgcmV0dXJuIGZsb29yVG9EZXZpY2VQaXhlbChy
ZXN1bHQsIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAg
IH0KICAgICBkZWZhdWx0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTMwMiwx
NSArMzAyLDE1IEBAIGlubGluZSBUIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExpbmVX
aWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjCiAgICAgfQogfQogCi1pbmxpbmUg
ZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyhTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgZmxvYXQgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BhY2luZyhTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRp
dmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vcm1hbCkKICAgICAgICAgcmV0dXJu
IDAuZjsKIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBz
dHlsZVJlc29sdmVyLnVzZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpID8KLSAgICAgICAgc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVz
dGVkWm9vbSgxLjBmKQotICAgICAgICA6IHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0
aENvbnZlcnNpb25EYXRhKCk7CisgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJz
aW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS51c2VTVkdab29tUnVsZXNGb3JMZW5ndGgoKSA/CisgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1
c3RlZFpvb20oMS4wZikKKyAgICAgICAgOiBidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpOwogICAgIHJldHVybiBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPGZsb2F0
Pihjb252ZXJzaW9uRGF0YSk7CiB9CiAKQEAgLTMyMywxMyArMzIzLDEzIEBAIGlubGluZSBMZW5n
dGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG9SYWRpdXNMZW5ndGgoQ1NTVG9MZW5n
dGhDb252ZXJzaW9uCiAgICAgcmV0dXJuIHZhbHVlLmNvbXB1dGVMZW5ndGg8TGVuZ3RoPihjb252
ZXJzaW9uRGF0YSk7CiB9CiAKLWlubGluZSBMZW5ndGhTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFJhZGl1cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoU2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRSYWRpdXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byogcGFpciA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkucGFpclZhbHVlKCk7CiAgICAgaWYgKCFwYWlyIHx8ICFwYWlyLT5maXJzdCgp
IHx8ICFwYWlyLT5zZWNvbmQoKSkKICAgICAgICAgcmV0dXJuIHsgeyAwLCBGaXhlZCB9LCB7IDAs
IEZpeGVkIH0gfTsKIAotICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRh
dGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwor
ICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgY29udmVyc2lvbkRhdGEgPSBidWlsZGVyU3Rh
dGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwogICAgIExlbmd0aFNpemUgcmFkaXVzIHsg
Y29udmVydFRvUmFkaXVzTGVuZ3RoKGNvbnZlcnNpb25EYXRhLCAqcGFpci0+Zmlyc3QoKSksIGNv
bnZlcnRUb1JhZGl1c0xlbmd0aChjb252ZXJzaW9uRGF0YSwgKnBhaXItPnNlY29uZCgpKSB9Owog
CiAgICAgQVNTRVJUKCFyYWRpdXMud2lkdGguaXNOZWdhdGl2ZSgpKTsKQEAgLTM1NCwxOCArMzU0
LDE4IEBAIGlubGluZSBMZW5ndGggU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG8xMDBQ
ZXJjZW50TWludXNMZW5ndGgoY29uc3QgTGVuZ3RoCiAgICAgcmV0dXJuIExlbmd0aChDYWxjdWxh
dGlvblZhbHVlOjpjcmVhdGUoV1RGTW92ZShvcCksIFZhbHVlUmFuZ2VBbGwpKTsKIH0KIAotaW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVu
dFgoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBv
bmVudFgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCiB7Ci0gICAgcmV0dXJuIGNvbnZlcnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZUxl
ZnQsIENTU1ZhbHVlUmlnaHQ+KHN0eWxlUmVzb2x2ZXIsIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkpOworICAgIHJldHVybiBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFs
dWVMZWZ0LCBDU1NWYWx1ZVJpZ2h0PihidWlsZGVyU3RhdGUsIGRvd25jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlPih2YWx1ZSkpOwogfQogCi1pbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFBvc2l0aW9uQ29tcG9uZW50WShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4gY29udmVydFBv
c2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlVG9wLCBDU1NWYWx1ZUJvdHRvbT4oc3R5bGVSZXNvbHZl
ciwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgcmV0dXJuIGNvbnZl
cnRQb3NpdGlvbkNvbXBvbmVudDxDU1NWYWx1ZVRvcCwgQ1NTVmFsdWVCb3R0b20+KGJ1aWxkZXJT
dGF0ZSwgZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CiB9CiAKIHRlbXBsYXRl
PENTU1ZhbHVlSUQgY3NzVmFsdWVGb3IwLCBDU1NWYWx1ZUlEIGNzc1ZhbHVlRm9yMTAwPgotaW5s
aW5lIExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRQb3NpdGlvbkNvbXBvbmVu
dChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NT
UHJpbWl0aXZlVmFsdWUmIHZhbHVlKQogewogICAgIExlbmd0aCBsZW5ndGg7CiAKQEAgLTM5Miw3
ICszOTIsNyBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBv
c2l0aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImIHN0eQogICAgICAgICB9CiAgICAgfQogICAg
ICAgICAKLSAgICBsZW5ndGggPSBjb252ZXJ0TGVuZ3RoKHN0eWxlUmVzb2x2ZXIsICpsZW5ndGhW
YWx1ZSk7CisgICAgbGVuZ3RoID0gY29udmVydExlbmd0aChidWlsZGVyU3RhdGUsICpsZW5ndGhW
YWx1ZSk7CiAKICAgICBpZiAocmVsYXRpdmVUb1RyYWlsaW5nRWRnZSkKICAgICAgICAgbGVuZ3Ro
ID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGxlbmd0aCk7CkBAIC00MDAsMjAgKzQw
MCwyMCBAQCBpbmxpbmUgTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBvc2l0
aW9uQ29tcG9uZW50KFN0eWxlUmVzb2x2ZXImIHN0eQogICAgIHJldHVybiBsZW5ndGg7CiB9CiAK
LWlubGluZSBMZW5ndGhQb2ludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPYmplY3RQ
b3NpdGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgTGVuZ3RoUG9pbnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T2Jq
ZWN0UG9zaXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIFBhaXIqIHBhaXIgPSBwcmltaXRpdmVWYWx1ZS5w
YWlyVmFsdWUoKTsKICAgICBpZiAoIXBhaXIgfHwgIXBhaXItPmZpcnN0KCkgfHwgIXBhaXItPnNl
Y29uZCgpKQogICAgICAgICByZXR1cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxPYmplY3RQb3NpdGlv
bigpOwogCi0gICAgTGVuZ3RoIGxlbmd0aFggPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NT
VmFsdWVMZWZ0LCBDU1NWYWx1ZVJpZ2h0PihzdHlsZVJlc29sdmVyLCAqcGFpci0+Zmlyc3QoKSk7
Ci0gICAgTGVuZ3RoIGxlbmd0aFkgPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVU
b3AsIENTU1ZhbHVlQm90dG9tPihzdHlsZVJlc29sdmVyLCAqcGFpci0+c2Vjb25kKCkpOworICAg
IExlbmd0aCBsZW5ndGhYID0gY29udmVydFBvc2l0aW9uQ29tcG9uZW50PENTU1ZhbHVlTGVmdCwg
Q1NTVmFsdWVSaWdodD4oYnVpbGRlclN0YXRlLCAqcGFpci0+Zmlyc3QoKSk7CisgICAgTGVuZ3Ro
IGxlbmd0aFkgPSBjb252ZXJ0UG9zaXRpb25Db21wb25lbnQ8Q1NTVmFsdWVUb3AsIENTU1ZhbHVl
Qm90dG9tPihidWlsZGVyU3RhdGUsICpwYWlyLT5zZWNvbmQoKSk7CiAKICAgICByZXR1cm4gTGVu
Z3RoUG9pbnQobGVuZ3RoWCwgbGVuZ3RoWSk7CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8VGV4dERl
Y29yYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHREZWNvcmF0aW9uKFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0PFRl
eHREZWNvcmF0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlv
bihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1
dG8gcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmluaXRpYWxUZXh0RGVjb3JhdGlvbigpOwogICAgIGlm
IChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewpAQCAtNDI0LDIwICs0MjQsMjAgQEAgaW5saW5l
IE9wdGlvblNldDxUZXh0RGVjb3JhdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
VGV4dERlY29yYXRpb24oU3QKIH0KIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBUIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlcihTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
TnVtYmVyKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWU8VD4oQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpOwogfQogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgot
aW5saW5lIFQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TnVtYmVyT3JBdXRvKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBU
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE51bWJlck9yQXV0byhTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVB
dXRvKQogICAgICAgICByZXR1cm4gLTE7Ci0gICAgcmV0dXJuIGNvbnZlcnROdW1iZXI8VD4oc3R5
bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0TnVtYmVyPFQ+KGJ1aWxkZXJT
dGF0ZSwgdmFsdWUpOwogfQogCi1pbmxpbmUgc2hvcnQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHNob3J0IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dFdlYmtpdEh5cGhlbmF0ZUxpbWl0TGluZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQo
KSA9PSBDU1NWYWx1ZU5vTGltaXQpCkBAIC00NDYsMzEgKzQ0NiwzMSBAQCBpbmxpbmUgc2hvcnQg
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0V2Via2l0SHlwaGVuYXRlTGltaXRMaW5lcyhT
dHlsZVJlc29sdgogfQogCiB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5PgotaW5saW5l
IE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRlckltYWdl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBO
aW5lUGllY2VJbWFnZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRCb3JkZXJJbWFnZShT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBOaW5lUGllY2VJbWFnZSBpbWFnZTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1h
cE5pbmVQaWVjZUltYWdlKHByb3BlcnR5LCAmdmFsdWUsIGltYWdlKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZShwcm9wZXJ0eSwgJnZhbHVlLCBpbWFnZSk7
CiAgICAgcmV0dXJuIGltYWdlOwogfQogCiB0ZW1wbGF0ZTxDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
PgotaW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJv
cmRlck1hc2soU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIE5pbmVQaWVjZUltYWdlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEJvcmRl
ck1hc2soU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUp
CiB7CiAgICAgTmluZVBpZWNlSW1hZ2UgaW1hZ2UoTmluZVBpZWNlSW1hZ2U6OlR5cGU6Ok1hc2sp
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2UocHJvcGVy
dHksICZ2YWx1ZSwgaW1hZ2UpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLm1hcE5pbmVQ
aWVjZUltYWdlKHByb3BlcnR5LCAmdmFsdWUsIGltYWdlKTsKICAgICByZXR1cm4gaW1hZ2U7CiB9
CiAKIHRlbXBsYXRlPENTU1Byb3BlcnR5SUQ+Ci1pbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFN0eWxlSW1hZ2UoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHlsZUltYWdlKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHJldHVybiBzdHlsZVJl
c29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOworICAgIHJldHVybiBidWlsZGVyU3RhdGUuY3JlYXRl
U3R5bGVJbWFnZSh2YWx1ZSk7CiB9CiAKLWlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRyYW5zZm9ybShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9u
cyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUcmFuc2Zvcm0oU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgVHJhbnNm
b3JtT3BlcmF0aW9ucyBvcGVyYXRpb25zOwotICAgIHRyYW5zZm9ybXNGb3JWYWx1ZSh2YWx1ZSwg
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgb3BlcmF0
aW9ucyk7CisgICAgdHJhbnNmb3Jtc0ZvclZhbHVlKHZhbHVlLCBidWlsZGVyU3RhdGUuY3NzVG9M
ZW5ndGhDb252ZXJzaW9uRGF0YSgpLCBvcGVyYXRpb25zKTsKICAgICByZXR1cm4gb3BlcmF0aW9u
czsKIH0KIApAQCAtNDk4LDcgKzQ5OCw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6dXBkYXRlQ29sb3JTY2hlbWUoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByCiAgICAg
fQogfQogCi1pbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRDb2xvclNjaGVtZShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIFN0eWxlQ29sb3JTY2hlbWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29s
b3JTY2hlbWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBTdHlsZUNvbG9yU2NoZW1lIGNvbG9yU2NoZW1lOwogCkBAIC01MTYsMjMgKzUxNiwyMyBA
QCBpbmxpbmUgU3R5bGVDb2xvclNjaGVtZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRD
b2xvclNjaGVtZShTdHlsZVJlc29sdmVyJgogfQogI2VuZGlmCiAKLWlubGluZSBTdHJpbmcgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3RyaW5nKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU3RyaW5nIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFN0cmluZyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQog
ewogICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnN0cmluZ1Zh
bHVlKCk7CiB9CiAKLWlubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
U3RyaW5nT3JBdXRvKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3Ry
aW5nT3JBdXRvKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQogewogICAgIGlmIChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
LnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pCiAgICAgICAgIHJldHVybiBudWxsQXRvbSgpOwot
ICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICByZXR1
cm4gY29udmVydFN0cmluZyhidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIFN0cmlu
ZyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmdPck5vbmUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFN0cmluZyBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJpbmdPck5vbmUoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGRv
d25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9u
ZSkKICAgICAgICAgcmV0dXJuIG51bGxBdG9tKCk7Ci0gICAgcmV0dXJuIGNvbnZlcnRTdHJpbmco
c3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0U3RyaW5nKGJ1aWxkZXJT
dGF0ZSwgdmFsdWUpOwogfQogCiBpbmxpbmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9u
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OnZhbHVlVG9FbXBoYXNpc1Bvc2l0aW9uKGNvbnN0IENT
U1ByaW1pdGl2ZVZhbHVlJiBwcmltaXRpdmVWYWx1ZSkKQEAgLTU1Niw3ICs1NTYsNyBAQCBpbmxp
bmUgT3B0aW9uU2V0PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OnZhbHVlVG9FbXBoYXNpc1BvcwogICAgIHJldHVybiBSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRF
bXBoYXNpc1Bvc2l0aW9uKCk7CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8VGV4dEVtcGhhc2lzUG9z
aXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFRleHRFbXBoYXNpc1Bvc2l0aW9u
KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0
PFRleHRFbXBoYXNpc1Bvc2l0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
RW1waGFzaXNQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKQogICAgICAgICBy
ZXR1cm4gdmFsdWVUb0VtcGhhc2lzUG9zaXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSk7CkBAIC01NjcsNyArNTY3LDcgQEAgaW5saW5lIE9wdGlvblNldDxUZXh0RW1waGFz
aXNQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dEVtcGhhc2kKICAg
ICByZXR1cm4gcG9zaXRpb247CiB9CiAKLWlubGluZSBUZXh0QWxpZ25Nb2RlIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVGV4dEFsaWduTW9kZSBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFs
dWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIEFTU0VSVChwcmlt
aXRpdmVWYWx1ZS5pc1ZhbHVlSUQoKSk7CkBAIC01NzUsMjEgKzU3NSwyMSBAQCBpbmxpbmUgVGV4
dEFsaWduTW9kZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0QWxpZ24oU3R5bGVS
ZXNvbHZlciYgc3R5bAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgIT0gQ1NTVmFs
dWVXZWJraXRNYXRjaFBhcmVudCkKICAgICAgICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlOwogCi0g
ICAgYXV0byogcGFyZW50U3R5bGUgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCk7Ci0gICAg
aWYgKHBhcmVudFN0eWxlLT50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpTdGFydCkKLSAg
ICAgICAgcmV0dXJuIHBhcmVudFN0eWxlLT5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkgPyBUZXh0
QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7Ci0gICAgaWYgKHBhcmVudFN0
eWxlLT50ZXh0QWxpZ24oKSA9PSBUZXh0QWxpZ25Nb2RlOjpFbmQpCi0gICAgICAgIHJldHVybiBw
YXJlbnRTdHlsZS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gVGV4dEFsaWduTW9kZTo6Umln
aHQgOiBUZXh0QWxpZ25Nb2RlOjpMZWZ0OwotICAgIHJldHVybiBwYXJlbnRTdHlsZS0+dGV4dEFs
aWduKCk7CisgICAgYXV0byYgcGFyZW50U3R5bGUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUo
KTsKKyAgICBpZiAocGFyZW50U3R5bGUudGV4dEFsaWduKCkgPT0gVGV4dEFsaWduTW9kZTo6U3Rh
cnQpCisgICAgICAgIHJldHVybiBwYXJlbnRTdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkg
PyBUZXh0QWxpZ25Nb2RlOjpMZWZ0IDogVGV4dEFsaWduTW9kZTo6UmlnaHQ7CisgICAgaWYgKHBh
cmVudFN0eWxlLnRleHRBbGlnbigpID09IFRleHRBbGlnbk1vZGU6OkVuZCkKKyAgICAgICAgcmV0
dXJuIHBhcmVudFN0eWxlLmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IFRleHRBbGlnbk1vZGU6
OlJpZ2h0IDogVGV4dEFsaWduTW9kZTo6TGVmdDsKKyAgICByZXR1cm4gcGFyZW50U3R5bGUudGV4
dEFsaWduKCk7CiB9CiAKLWlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENsaXBQYXRoKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZh
bHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKHBy
aW1pdGl2ZVZhbHVlLnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1VS
SSkgewogICAgICAgICAgICAgU3RyaW5nIGNzc1VSTFZhbHVlID0gcHJpbWl0aXZlVmFsdWUuc3Ry
aW5nVmFsdWUoKTsKLSAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VSSVJlZmVyZW5j
ZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwgc3R5bGVSZXNv
bHZlci5kb2N1bWVudCgpKTsKKyAgICAgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IFNWR1VSSVJl
ZmVyZW5jZTo6ZnJhZ21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhjc3NVUkxWYWx1ZSwgYnVp
bGRlclN0YXRlLmRvY3VtZW50KCkpOwogICAgICAgICAgICAgLy8gRklYTUU6IEl0IGRvZXNuJ3Qg
d29yayB3aXRoIGV4dGVybmFsIFNWRyByZWZlcmVuY2VzIChzZWUgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNjEzMykKICAgICAgICAgICAgIHJldHVybiBSZWZlcmVu
Y2VDbGlwUGF0aE9wZXJhdGlvbjo6Y3JlYXRlKGNzc1VSTFZhbHVlLCBmcmFnbWVudCk7CiAgICAg
ICAgIH0KQEAgLTYwNCw3ICs2MDQsNyBAQCBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9u
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDbGlwUGF0aChTdHlsZVJlcwogICAgICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPihjdXJy
ZW50VmFsdWUuZ2V0KCkpOwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTaGFwZSgpKSB7
CiAgICAgICAgICAgICBBU1NFUlQoIW9wZXJhdGlvbik7Ci0gICAgICAgICAgICBvcGVyYXRpb24g
PSBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUoYmFzaWNTaGFwZUZvclZhbHVlKHN0eWxl
UmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVW
YWx1ZS5zaGFwZVZhbHVlKCkpKTsKKyAgICAgICAgICAgIG9wZXJhdGlvbiA9IFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZShiYXNpY1NoYXBlRm9yVmFsdWUoYnVpbGRlclN0YXRlLmNzc1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEoKSwgKnByaW1pdGl2ZVZhbHVlLnNoYXBlVmFsdWUoKSkpOwog
ICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKHByaW1pdGl2ZVZhbHVlLnZhbHVl
SUQoKSA9PSBDU1NWYWx1ZUNvbnRlbnRCb3gKICAgICAgICAgICAgICAgICB8fCBwcmltaXRpdmVW
YWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKQEAgLTYyNywyMCArNjI3LDIwIEBA
IGlubGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydENsaXBQYXRoKFN0eWxlUmVzCiAgICAgcmV0dXJuIG9wZXJhdGlvbjsKIH0KIAotaW5s
aW5lIFJlc2l6ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZXNpemUoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIFJlc2l6
ZSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZXNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJp
bWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCiAgICAg
UmVzaXplIHJlc2l6ZSA9IFJlc2l6ZTo6Tm9uZTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFs
dWVJRCgpID09IENTU1ZhbHVlQXV0bykKLSAgICAgICAgcmVzaXplID0gc3R5bGVSZXNvbHZlci5z
ZXR0aW5ncygpLnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUmVzaXplOjpCb3RoIDogUmVzaXpl
OjpOb25lOworICAgICAgICByZXNpemUgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5zZXR0aW5n
cygpLnRleHRBcmVhc0FyZVJlc2l6YWJsZSgpID8gUmVzaXplOjpCb3RoIDogUmVzaXplOjpOb25l
OwogICAgIGVsc2UKICAgICAgICAgcmVzaXplID0gcHJpbWl0aXZlVmFsdWU7CiAKICAgICByZXR1
cm4gcmVzaXplOwogfQogCi1pbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUp
CitpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydE1hcnF1ZWVSZXBldGl0
aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAg
YXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
OwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVJbmZpbml0ZSkK
QEAgLTY1MCw3ICs2NTAsNyBAQCBpbmxpbmUgaW50IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydE1hcnF1ZWVSZXBldGl0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdAogICAgIHJldHVybiBw
cmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgpOwogfQogCi1pbmxpbmUgaW50IFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydE1hcnF1ZWVTcGVlZChTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIGludCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJx
dWVlU3BlZWQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSk7CiAgICAgaW50IHNwZWVkID0gODU7CkBAIC02NzksNyArNjc5LDcgQEAgaW5saW5lIGlu
dCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlU3BlZWQoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1YKICAgICByZXR1cm4gc3BlZWQ7CiB9CiAKLWlubGluZSBSZWY8UXVvdGVz
RGF0YT4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UXVvdGVzKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmPFF1b3Rlc0RhdGE+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFF1b3RlcyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3Qg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
KSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZh
bHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwpAQCAtNzAyLDEzICs3MDIsMTMgQEAgaW5saW5lIFJl
ZjxRdW90ZXNEYXRhPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRRdW90ZXMoU3R5bGVS
ZXNvbHZlciYsIGNvbnMKICAgICByZXR1cm4gUXVvdGVzRGF0YTo6Y3JlYXRlKHF1b3Rlcyk7CiB9
CiAKLWlubGluZSBUZXh0VW5kZXJsaW5lUG9zaXRpb24gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0VGV4dFVuZGVybGluZVBvc2l0aW9uKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCitpbmxpbmUgVGV4dFVuZGVybGluZVBvc2l0aW9uIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydFRleHRVbmRlcmxpbmVQb3NpdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiwg
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVChpczxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpKTsKICAgICByZXR1cm4gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KTsKIH0KIAotaW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0VGV4dFVuZGVybGluZU9mZnNldChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVGV4dFVuZGVybGluZU9mZnNldCBTdHls
ZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEFT
U0VSVChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKICAgICBhdXRvJiBwcmltaXRpdmVW
YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC03MTcsMTIgKzcx
NywxMiBAQCBpbmxpbmUgVGV4dFVuZGVybGluZU9mZnNldCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRUZXh0VW5kZXJsaW5lT2Zmc2V0KFN0eQogICAgICAgICByZXR1cm4gVGV4dFVuZGVy
bGluZU9mZnNldDo6Y3JlYXRlV2l0aEF1dG8oKTsKICAgICBkZWZhdWx0OgogICAgICAgICBBU1NF
UlQocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSk7Ci0gICAgICAgIGF1dG8gY29tcHV0ZWRMZW5n
dGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2
ZVZhbHVlKTsKKyAgICAgICAgYXV0byBjb21wdXRlZExlbmd0aCA9IGNvbnZlcnRDb21wdXRlZExl
bmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLCBwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIHJldHVy
biBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoTGVuZ3RoKGNvbXB1dGVkTGVuZ3RoKTsK
ICAgICB9CiB9CiAKLWlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyhTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVGV4dERlY29yYXRp
b25UaGlja25lc3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dERlY29yYXRpb25U
aGlja25lc3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1
ZSYgdmFsdWUpCiB7CiAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwog
ICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKTsKQEAgLTczMywxMiArNzMzLDEyIEBAIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVjb3JhdGlvblRoaWNrCiAgICAg
ICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlRnJvbUZvbnQoKTsKICAg
ICBkZWZhdWx0OgogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgoKSk7Ci0g
ICAgICAgIGF1dG8gY29tcHV0ZWRMZW5ndGggPSBjb252ZXJ0Q29tcHV0ZWRMZW5ndGg8ZmxvYXQ+
KHN0eWxlUmVzb2x2ZXIsIHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYXV0byBjb21wdXRlZExl
bmd0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLCBwcmltaXRp
dmVWYWx1ZSk7CiAgICAgICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRl
V2l0aExlbmd0aChjb21wdXRlZExlbmd0aCk7CiAgICAgfQogfQogCi1pbmxpbmUgUmVmUHRyPFN0
eWxlUmVmbGVjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UmVmbGVjdGlvbihT
dHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgUmVmUHRyPFN0eWxlUmVmbGVjdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
UmVmbGVjdGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewog
ICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTc0OSwxNiArNzQ5LDE2IEBAIGlubGluZSBSZWZQdHI8
U3R5bGVSZWZsZWN0aW9uPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRSZWZsZWN0aW9u
KFN0eWxlUmVzCiAKICAgICBhdXRvIHJlZmxlY3Rpb24gPSBTdHlsZVJlZmxlY3Rpb246OmNyZWF0
ZSgpOwogICAgIHJlZmxlY3Rpb24tPnNldERpcmVjdGlvbihyZWZsZWN0VmFsdWUuZGlyZWN0aW9u
KCkpOwotICAgIHJlZmxlY3Rpb24tPnNldE9mZnNldChyZWZsZWN0VmFsdWUub2Zmc2V0KCkuY29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhD
b252ZXJzaW9uRGF0YSgpKSk7CisgICAgcmVmbGVjdGlvbi0+c2V0T2Zmc2V0KHJlZmxlY3RWYWx1
ZS5vZmZzZXQoKS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNl
bnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24+KGJ1aWxkZXJTdGF0ZS5jc3NUb0xl
bmd0aENvbnZlcnNpb25EYXRhKCkpKTsKIAogICAgIE5pbmVQaWVjZUltYWdlIG1hc2soTmluZVBp
ZWNlSW1hZ2U6OlR5cGU6Ok1hc2spOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFw
TmluZVBpZWNlSW1hZ2UoQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0LCByZWZsZWN0VmFsdWUu
bWFzaygpLCBtYXNrKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJ
bWFnZShDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3QsIHJlZmxlY3RWYWx1ZS5tYXNrKCksIG1h
c2spOwogICAgIHJlZmxlY3Rpb24tPnNldE1hc2sobWFzayk7CiAKICAgICByZXR1cm4gcmVmbGVj
dGlvbjsKIH0KIAotaW5saW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
SW5pdGlhbExldHRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIEludFNpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SW5pdGlhbExldHRlcihT
dHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIApA
QCAtNzczLDcgKzc3Myw3IEBAIGlubGluZSBJbnRTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydEluaXRpYWxMZXR0ZXIoU3R5bGVSZXNvbHZlciYsIGNvbnN0CiAgICAgcmV0dXJuIElu
dFNpemUocGFpci0+Zmlyc3QoKS0+aW50VmFsdWUoKSwgcGFpci0+c2Vjb25kKCktPmludFZhbHVl
KCkpOwogfQogCi1pbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4
dFN0cm9rZVdpZHRoKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVl
JiB2YWx1ZSkKK2lubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0
U3Ryb2tlV2lkdGgoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NW
YWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQ
cmltaXRpdmVWYWx1ZT4odmFsdWUpOwogCkBAIC03ODgsMTEgKzc4OCwxMSBAQCBpbmxpbmUgZmxv
YXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VGV4dFN0cm9rZVdpZHRoKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUgogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVUaGljaykKICAgICAgICAgICAgIHJlc3VsdCAqPSA1OwogICAgICAgICBSZWY8
Q1NTUHJpbWl0aXZlVmFsdWU+IGVtc1ZhbHVlKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVz
dWx0LCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0VNUykpOwotICAgICAgICB3aWR0aCA9IGNvbnZl
cnRDb21wdXRlZExlbmd0aDxmbG9hdD4oc3R5bGVSZXNvbHZlciwgZW1zVmFsdWUpOworICAgICAg
ICB3aWR0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLCBlbXNW
YWx1ZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIENTU1ZhbHVlSW52YWxpZDog
ewotICAgICAgICB3aWR0aCA9IGNvbnZlcnRDb21wdXRlZExlbmd0aDxmbG9hdD4oc3R5bGVSZXNv
bHZlciwgcHJpbWl0aXZlVmFsdWUpOworICAgICAgICB3aWR0aCA9IGNvbnZlcnRDb21wdXRlZExl
bmd0aDxmbG9hdD4oYnVpbGRlclN0YXRlLCBwcmltaXRpdmVWYWx1ZSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICBkZWZhdWx0OgpAQCAtODAzLDcgKzgwMyw3IEBAIGlubGluZSBmbG9hdCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0U3Ryb2tlV2lkdGgoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSCiAgICAgcmV0dXJuIHdpZHRoOwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PExpbmVC
b3hDb250YWluPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5lQm94Q29udGFpbihT
dHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxM
aW5lQm94Q29udGFpbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUJveENvbnRh
aW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBp
ZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKTsK
QEAgLTgzNCw3ICs4MzQsNyBAQCBpbmxpbmUgT3B0aW9uU2V0PFRleHREZWNvcmF0aW9uU2tpcD4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjp2YWx1ZVRvRGVjb3JhdGlvblNraQogICAgIHJldHVybiBP
cHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiB7IH07CiB9CiAKLWlubGluZSBPcHRpb25TZXQ8
VGV4dERlY29yYXRpb25Ta2lwPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUZXh0RGVj
b3JhdGlvblNraXAoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSBPcHRpb25TZXQ8VGV4dERlY29yYXRpb25Ta2lwPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRUZXh0RGVjb3JhdGlvblNraXAoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkKICAg
ICAgICAgcmV0dXJuIHZhbHVlVG9EZWNvcmF0aW9uU2tpcChkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKTsKQEAgLTg1MCw3ICs4NTAsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNJ
bWFnZVNoYXBlKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKICAgICByZXR1cm4gaXM8Q1NTSW1hZ2VW
YWx1ZT4odmFsdWUpIHx8IGlzPENTU0ltYWdlU2V0VmFsdWU+KHZhbHVlKSB8fCBpczxDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlPih2YWx1ZSk7CiB9CiAKLWlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2hhcGVWYWx1ZShTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC04NTgsMTQg
Kzg1OCwxNCBAQCBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydFNoYXBlVmFsdWUoU3R5bGVSZXNvbHZlcgogICAgIH0KIAogICAgIGlmIChpc0lt
YWdlU2hhcGUodmFsdWUpKQotICAgICAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHN0eWxl
UmVzb2x2ZXIuc3R5bGVJbWFnZSh2YWx1ZSkucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgIHJl
dHVybiBTaGFwZVZhbHVlOjpjcmVhdGUoYnVpbGRlclN0YXRlLmNyZWF0ZVN0eWxlSW1hZ2UodmFs
dWUpLnJlbGVhc2VOb25OdWxsKCkpOwogCiAgICAgUmVmUHRyPEJhc2ljU2hhcGU+IHNoYXBlOwog
ICAgIENTU0JveFR5cGUgcmVmZXJlbmNlQm94ID0gQ1NTQm94VHlwZTo6Qm94TWlzc2luZzsKICAg
ICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUp
KSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KGN1cnJlbnRWYWx1ZS5nZXQoKSk7CiAgICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5p
c1NoYXBlKCkpCi0gICAgICAgICAgICBzaGFwZSA9IGJhc2ljU2hhcGVGb3JWYWx1ZShzdHlsZVJl
c29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLCAqcHJpbWl0aXZlVmFs
dWUuc2hhcGVWYWx1ZSgpKTsKKyAgICAgICAgICAgIHNoYXBlID0gYmFzaWNTaGFwZUZvclZhbHVl
KGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCksICpwcmltaXRpdmVWYWx1
ZS5zaGFwZVZhbHVlKCkpOwogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVDb250ZW50Qm94CiAgICAgICAgICAgICB8fCBwcmltaXRpdmVWYWx1ZS52
YWx1ZUlEKCkgPT0gQ1NTVmFsdWVCb3JkZXJCb3gKICAgICAgICAgICAgIHx8IHByaW1pdGl2ZVZh
bHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVBhZGRpbmdCb3gKQEAgLTg4OSw3ICs4ODksNyBAQCBp
bmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNo
YXBlVmFsdWUoU3R5bGVSZXNvbHZlcgogCiAjaWYgRU5BQkxFKENTU19TQ1JPTExfU05BUCkKIAot
aW5saW5lIFNjcm9sbFNuYXBUeXBlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNjcm9s
bFNuYXBUeXBlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
U2Nyb2xsU25hcFR5cGUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcFR5
cGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBT
Y3JvbGxTbmFwVHlwZSB0eXBlOwogICAgIGF1dG8mIHZhbHVlcyA9IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpOwpAQCAtOTE0LDcgKzkxNCw3IEBAIGlubGluZSBTY3JvbGxTbmFwVHlwZSBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTY3JvbGxTbmFwVHlwZShTdHlsZVJlc29sdmVy
CiAgICAgcmV0dXJuIHR5cGU7CiB9CiAKLWlubGluZSBTY3JvbGxTbmFwQWxpZ24gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U2Nyb2xsU25hcEFsaWduKFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU2Nyb2xsU25hcEFsaWduIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6Y29udmVydFNjcm9sbFNuYXBBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHZhbHVlcyA9IGRvd25jYXN0PENTU1Zh
bHVlTGlzdD4odmFsdWUpOwogICAgIFNjcm9sbFNuYXBBbGlnbiBhbGlnbm1lbnQ7CkBAIC05Mjgs
NyArOTI4LDcgQEAgaW5saW5lIFNjcm9sbFNuYXBBbGlnbiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRTY3JvbGxTbmFwQWxpZ24oU3R5bGVSZXNvbHYKIAogI2VuZGlmCiAKLWlubGluZSBH
cmlkTGVuZ3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChj
b25zdCBDU1NQcmltaXRpdmVWYWx1ZSYgcHJpbWl0aXZlVmFsdWUsIFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgR3JpZExlbmd0aCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNy
ZWF0ZUdyaWRUcmFja0JyZWFkdGgoY29uc3QgQ1NTUHJpbWl0aXZlVmFsdWUmIHByaW1pdGl2ZVZh
bHVlLCBTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAgaWYgKHByaW1p
dGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU1pbkNvbnRlbnQgfHwgcHJpbWl0aXZlVmFs
dWUudmFsdWVJRCgpID09IENTU1ZhbHVlV2Via2l0TWluQ29udGVudCkKICAgICAgICAgcmV0dXJu
IExlbmd0aChNaW5Db250ZW50KTsKQEAgLTk0MCwyMyArOTQwLDIzIEBAIGlubGluZSBHcmlkTGVu
Z3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrQnJlYWR0aChjb25zdCBD
U1NQcmltaXRpCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLmlzRmxleCgpKQogICAgICAgICByZXR1
cm4gR3JpZExlbmd0aChwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpKTsKIAotICAgIHJldHVy
biBwcmltaXRpdmVWYWx1ZS5jb252ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8
IFBlcmNlbnRDb252ZXJzaW9uIHwgQ2FsY3VsYXRlZENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lv
bj4oc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKSk7Cisg
ICAgcmV0dXJuIHByaW1pdGl2ZVZhbHVlLmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252
ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBDYWxjdWxhdGVkQ29udmVyc2lvbiB8IEF1dG9D
b252ZXJzaW9uPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKIH0K
IAotaW5saW5lIEdyaWRUcmFja1NpemUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlk
VHJhY2tTaXplKGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSBHcmlkVHJhY2tTaXplIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRl
R3JpZFRyYWNrU2l6ZShjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkK
LSAgICAgICAgcmV0dXJuIEdyaWRUcmFja1NpemUoY3JlYXRlR3JpZFRyYWNrQnJlYWR0aChkb3du
Y2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAg
IHJldHVybiBHcmlkVHJhY2tTaXplKGNyZWF0ZUdyaWRUcmFja0JyZWFkdGgoZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKSwgYnVpbGRlclN0YXRlKSk7CiAKICAgICBBU1NFUlQoaXM8
Q1NTRnVuY3Rpb25WYWx1ZT4odmFsdWUpKTsKICAgICBjb25zdCBhdXRvJiBmdW5jdGlvbiA9IGRv
d25jYXN0PENTU0Z1bmN0aW9uVmFsdWU+KHZhbHVlKTsKIAogICAgIGlmIChmdW5jdGlvbi5sZW5n
dGgoKSA9PSAxKQotICAgICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tC
cmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRC
b3VuZHNDaGVjaygwKSksIHN0eWxlUmVzb2x2ZXIpLCBGaXRDb250ZW50VHJhY2tTaXppbmcpOwor
ICAgICAgICByZXR1cm4gR3JpZFRyYWNrU2l6ZShjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25j
YXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygw
KSksIGJ1aWxkZXJTdGF0ZSksIEZpdENvbnRlbnRUcmFja1NpemluZyk7CiAKICAgICBBU1NFUlRf
V0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihmdW5jdGlvbi5sZW5ndGgoKSA9PSAyKTsKLSAgICBH
cmlkTGVuZ3RoIG1pblRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0
PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSks
IHN0eWxlUmVzb2x2ZXIpKTsKLSAgICBHcmlkTGVuZ3RoIG1heFRyYWNrQnJlYWR0aChjcmVhdGVH
cmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRl
bVdpdGhvdXRCb3VuZHNDaGVjaygxKSksIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICBHcmlkTGVuZ3Ro
IG1pblRyYWNrQnJlYWR0aChjcmVhdGVHcmlkVHJhY2tCcmVhZHRoKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPigqZnVuY3Rpb24uaXRlbVdpdGhvdXRCb3VuZHNDaGVjaygwKSksIGJ1aWxkZXJT
dGF0ZSkpOworICAgIEdyaWRMZW5ndGggbWF4VHJhY2tCcmVhZHRoKGNyZWF0ZUdyaWRUcmFja0Jy
ZWFkdGgoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCpmdW5jdGlvbi5pdGVtV2l0aG91dEJv
dW5kc0NoZWNrKDEpKSwgYnVpbGRlclN0YXRlKSk7CiAgICAgcmV0dXJuIEdyaWRUcmFja1NpemUo
bWluVHJhY2tCcmVhZHRoLCBtYXhUcmFja0JyZWFkdGgpOwogfQogCkBAIC05ODgsNyArOTg4LDcg
QEAgcHVibGljOgogICAgIEF1dG9SZXBlYXRUeXBlIG1fYXV0b1JlcGVhdFR5cGUgeyBSZW5kZXJT
dHlsZTo6aW5pdGlhbEdyaWRBdXRvUmVwZWF0VHlwZSgpIH07CiB9OwogCi1pbmxpbmUgYm9vbCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3QoY29uc3QgQ1NTVmFsdWUm
IHZhbHVlLCBUcmFja3NEYXRhJiB0cmFja3NEYXRhLCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyKQoraW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tM
aXN0KGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwgVHJhY2tzRGF0YSYgdHJhY2tzRGF0YSwgU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIC8vIEhhbmRsZSAnbm9uZScuCiAg
ICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpCkBAIC0xMDAzLDcgKzEwMDMsNyBA
QCBpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNyZWF0ZUdyaWRUcmFja0xpc3Qo
Y29uc3QgQ1NTVmFsdWUmIHZhbHVlLCBUcgogICAgICAgICAgICAgY3JlYXRlR3JpZExpbmVOYW1l
c0xpc3QoY3VycmVudFZhbHVlLCBjdXJyZW50TmFtZWRHcmlkTGluZSwgdHJhY2tzRGF0YS5tX25h
bWVkR3JpZExpbmVzLCB0cmFja3NEYXRhLm1fb3JkZXJlZE5hbWVkR3JpZExpbmVzKTsKICAgICAg
ICAgZWxzZSB7CiAgICAgICAgICAgICArK2N1cnJlbnROYW1lZEdyaWRMaW5lOwotICAgICAgICAg
ICAgdHJhY2tzRGF0YS5tX3RyYWNrU2l6ZXMuYXBwZW5kKGNyZWF0ZUdyaWRUcmFja1NpemUoY3Vy
cmVudFZhbHVlLCBzdHlsZVJlc29sdmVyKSk7CisgICAgICAgICAgICB0cmFja3NEYXRhLm1fdHJh
Y2tTaXplcy5hcHBlbmQoY3JlYXRlR3JpZFRyYWNrU2l6ZShjdXJyZW50VmFsdWUsIGJ1aWxkZXJT
dGF0ZSkpOwogICAgICAgICB9CiAgICAgfTsKIApAQCAtMTAyMCw3ICsxMDIwLDcgQEAgaW5saW5l
IGJvb2wgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSwgVHIKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICsrYXV0b1JlcGVhdEluZGV4OwotICAgICAgICAg
ICAgICAgIHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0VHJhY2tTaXplcy5hcHBlbmQoY3JlYXRlR3Jp
ZFRyYWNrU2l6ZShhdXRvUmVwZWF0VmFsdWUuZ2V0KCksIHN0eWxlUmVzb2x2ZXIpKTsKKyAgICAg
ICAgICAgICAgICB0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFRyYWNrU2l6ZXMuYXBwZW5kKGNyZWF0
ZUdyaWRUcmFja1NpemUoYXV0b1JlcGVhdFZhbHVlLmdldCgpLCBidWlsZGVyU3RhdGUpKTsKICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0SW5zZXJ0aW9u
UG9pbnQgPSBjdXJyZW50TmFtZWRHcmlkTGluZSsrOwogICAgICAgICAgICAgY29udGludWU7CkBA
IC0xMTExLDcgKzExMTEsNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNy
ZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEoY29ucwogICAgIH0KIH0KIAot
aW5saW5lIFZlY3RvcjxHcmlkVHJhY2tTaXplPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRHcmlkVHJhY2tTaXplTGlzdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBD
U1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgVmVjdG9yPEdyaWRUcmFja1NpemU+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemVMaXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1
ZS5pc1ZhbHVlTGlzdCgpKTsKICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1
ZUxpc3Q+KHZhbHVlKTsKQEAgLTExMjEsMTcgKzExMjEsMTcgQEAgaW5saW5lIFZlY3RvcjxHcmlk
VHJhY2tTaXplPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkVHJhY2tTaXplTGlz
dChTdHkKICAgICAgICAgQVNTRVJUKCFjdXJyVmFsdWUtPmlzR3JpZExpbmVOYW1lc1ZhbHVlKCkp
OwogICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+aXNHcmlkQXV0b1JlcGVhdFZhbHVlKCkpOwog
ICAgICAgICBBU1NFUlQoIWN1cnJWYWx1ZS0+aXNHcmlkSW50ZWdlclJlcGVhdFZhbHVlKCkpOwot
ICAgICAgICB0cmFja1NpemVzLnVuY2hlY2tlZEFwcGVuZChjb252ZXJ0R3JpZFRyYWNrU2l6ZShz
dHlsZVJlc29sdmVyLCBjdXJyVmFsdWUpKTsKKyAgICAgICAgdHJhY2tTaXplcy51bmNoZWNrZWRB
cHBlbmQoY29udmVydEdyaWRUcmFja1NpemUoYnVpbGRlclN0YXRlLCBjdXJyVmFsdWUpKTsKICAg
ICB9CiAgICAgcmV0dXJuIHRyYWNrU2l6ZXM7CiB9CiAKLWlubGluZSBHcmlkVHJhY2tTaXplIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRUcmFja1NpemUoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEdyaWRUcmFja1Np
emUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFRyYWNrU2l6ZShTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBy
ZXR1cm4gY3JlYXRlR3JpZFRyYWNrU2l6ZSh2YWx1ZSwgc3R5bGVSZXNvbHZlcik7CisgICAgcmV0
dXJuIGNyZWF0ZUdyaWRUcmFja1NpemUodmFsdWUsIGJ1aWxkZXJTdGF0ZSk7CiB9CiAKLWlubGlu
ZSBPcHRpb25hbDxHcmlkUG9zaXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdy
aWRQb3NpdGlvbihTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IE9wdGlvbmFsPEdyaWRQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3Jp
ZFBvc2l0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7
CiAgICAgR3JpZFBvc2l0aW9uIGdyaWRQb3NpdGlvbjsKICAgICBpZiAoY3JlYXRlR3JpZFBvc2l0
aW9uKHZhbHVlLCBncmlkUG9zaXRpb24pKQpAQCAtMTEzOSw3ICsxMTM5LDcgQEAgaW5saW5lIE9w
dGlvbmFsPEdyaWRQb3NpdGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0R3JpZFBv
c2l0aW9uKFN0eWxlUmUKICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogfQogCi1pbmxpbmUgR3Jp
ZEF1dG9GbG93IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdyaWRBdXRvRmxvdyhTdHls
ZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEdyaWRBdXRvRmxvdyBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRHcmlkQXV0b0Zsb3coU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBsaXN0ID0gZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAgICAgaWYgKCFsaXN0Lmxlbmd0aCgpKQpAQCAtMTE3
NywyMyArMTE3NywyMyBAQCBpbmxpbmUgR3JpZEF1dG9GbG93IFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydEdyaWRBdXRvRmxvdyhTdHlsZVJlc29sdmVyJiwgYwogICAgIHJldHVybiBhdXRv
RmxvdzsKIH0KIAotaW5saW5lIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgU3R5bGVCdWlsZGVy
Q29udmVydGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgQ1NTVG9MZW5ndGhDb252ZXJzaW9u
RGF0YSBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNzc3RvTGVuZ3RoQ29udmVyc2lvbkRhdGFXaXRo
VGV4dFpvb21GYWN0b3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAg
IGlmIChhdXRvKiBmcmFtZSA9IHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKS5mcmFtZSgpKSB7Ci0g
ICAgICAgIGZsb2F0IHRleHRab29tRmFjdG9yID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT50ZXh0
Wm9vbSgpICE9IFRleHRab29tOjpSZXNldCA/IGZyYW1lLT50ZXh0Wm9vbUZhY3RvcigpIDogMS4w
ZjsKLSAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZl
cnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5l
ZmZlY3RpdmVab29tKCkgKiB0ZXh0Wm9vbUZhY3Rvcik7CisgICAgaWYgKGF1dG8qIGZyYW1lID0g
YnVpbGRlclN0YXRlLmRvY3VtZW50KCkuZnJhbWUoKSkgeworICAgICAgICBmbG9hdCB0ZXh0Wm9v
bUZhY3RvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnRleHRab29tKCkgIT0gVGV4dFpvb206OlJl
c2V0ID8gZnJhbWUtPnRleHRab29tRmFjdG9yKCkgOiAxLjBmOworICAgICAgICByZXR1cm4gYnVp
bGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFkanVzdGVkWm9v
bShidWlsZGVyU3RhdGUuc3R5bGUoKS5lZmZlY3RpdmVab29tKCkgKiB0ZXh0Wm9vbUZhY3Rvcik7
CiAgICAgfQotICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252
ZXJzaW9uRGF0YSgpOworICAgIHJldHVybiBidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJz
aW9uRGF0YSgpOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxk
ZXJDb252ZXJ0ZXI6OmNvbnZlcnRXb3JkU3BhY2luZyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBPcHRpb25hbDxMZW5ndGg+
IHdvcmRTcGFjaW5nOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJp
bWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09
IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICB3b3JkU3BhY2luZyA9IFJlbmRlclN0eWxlOjppbml0
aWFsV29yZFNwYWNpbmcoKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgp
KQotICAgICAgICB3b3JkU3BhY2luZyA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8TGVu
Z3RoPihjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRab29tRmFjdG9yKHN0eWxlUmVz
b2x2ZXIpKTsKKyAgICAgICAgd29yZFNwYWNpbmcgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVu
Z3RoPExlbmd0aD4oY3NzdG9MZW5ndGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3Rvcihi
dWlsZGVyU3RhdGUpKTsKICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1ZS5pc1BlcmNlbnRhZ2Uo
KSkKICAgICAgICAgd29yZFNwYWNpbmcgPSBMZW5ndGgoY2xhbXBUbzxmbG9hdD4ocHJpbWl0aXZl
VmFsdWUuZG91YmxlVmFsdWUoKSwgbWluVmFsdWVGb3JDc3NMZW5ndGgsIG1heFZhbHVlRm9yQ3Nz
TGVuZ3RoKSwgUGVyY2VudCk7CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIo
KSkKQEAgLTEyMDIsNyArMTIwMiw3IEBAIGlubGluZSBPcHRpb25hbDxMZW5ndGg+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFdvcmRTcGFjaW5nKFN0eWxlUmVzb2x2ZXImCiAgICAgcmV0
dXJuIHdvcmRTcGFjaW5nOwogfQogCi1pbmxpbmUgT3B0aW9uYWw8ZmxvYXQ+IFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2
ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25hbDxmbG9hdD4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGVyc3BlY3RpdmUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYg
YnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb25lKQpAQCAtMTIxMCwxNiArMTIx
MCwxNiBAQCBpbmxpbmUgT3B0aW9uYWw8ZmxvYXQ+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydFBlcnNwZWN0aXZlKFN0eWxlUmVzb2x2ZXImCiAKICAgICBmbG9hdCBwZXJzcGVjdGl2ZSA9
IC0xOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKQotICAgICAgICBwZXJzcGVj
dGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KHN0eWxlUmVzb2x2ZXIu
c3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOworICAgICAgICBwZXJzcGVjdGl2
ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8ZmxvYXQ+KGJ1aWxkZXJTdGF0ZS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlz
TnVtYmVyKCkpCi0gICAgICAgIHBlcnNwZWN0aXZlID0gcHJpbWl0aXZlVmFsdWUuZG91YmxlVmFs
dWUoKSAqIHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCku
em9vbSgpOworICAgICAgICBwZXJzcGVjdGl2ZSA9IHByaW1pdGl2ZVZhbHVlLmRvdWJsZVZhbHVl
KCkgKiBidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLnpvb20oKTsKICAg
ICBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogCiAgICAgcmV0dXJuIHBlcnNw
ZWN0aXZlIDwgMCA/IE9wdGlvbmFsPGZsb2F0PihXVEY6Om51bGxvcHQpIDogT3B0aW9uYWw8Zmxv
YXQ+KHBlcnNwZWN0aXZlKTsKIH0KIAotaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TWFycXVlZUluY3JlbWVudChTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3Ro
PiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAg
IE9wdGlvbmFsPExlbmd0aD4gbWFycXVlZUxlbmd0aDsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CkBAIC0xMjM0LDcgKzEyMzQs
NyBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZl
cnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlUmVzbwogICAgICAgICBtYXJxdWVlTGVuZ3RoID0gTGVu
Z3RoKDM2LCBGaXhlZCk7IC8vIDM2cHguCiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ1NTVmFs
dWVJbnZhbGlkOiB7Ci0gICAgICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb252
ZXJ0VG9MZW5ndGg8Rml4ZWRJbnRlZ2VyQ29udmVyc2lvbiB8IFBlcmNlbnRDb252ZXJzaW9uIHwg
Q2FsY3VsYXRlZENvbnZlcnNpb24+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENv
bnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAgICAgICBMZW5n
dGggbGVuZ3RoID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNv
bnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihidWls
ZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpLmNvcHlXaXRoQWRqdXN0ZWRab29t
KDEuMGYpKTsKICAgICAgICAgaWYgKCFsZW5ndGguaXNVbmRlZmluZWQoKSkKICAgICAgICAgICAg
IG1hcnF1ZWVMZW5ndGggPSBsZW5ndGg7CiAgICAgICAgIGJyZWFrOwpAQCAtMTI0NSwxNSArMTI0
NSwxNSBAQCBpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNv
bnZlcnRNYXJxdWVlSW5jcmVtZW50KFN0eWxlUmVzbwogICAgIHJldHVybiBtYXJxdWVlTGVuZ3Ro
OwogfQogCi1pbmxpbmUgT3B0aW9uYWw8RmlsdGVyT3BlcmF0aW9ucz4gU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uYWw8RmlsdGVyT3BlcmF0
aW9ucz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0RmlsdGVyT3BlcmF0aW9ucyhTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICBGaWx0ZXJPcGVyYXRpb25zIG9wZXJhdGlvbnM7Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIu
Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyh2YWx1ZSwgb3BlcmF0aW9ucykpCisgICAgaWYgKGJ1aWxk
ZXJTdGF0ZS5jcmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvcGVyYXRpb25zKSkKICAgICAg
ICAgcmV0dXJuIG9wZXJhdGlvbnM7CiAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAotaW5s
aW5lIEZvbnRGZWF0dXJlU2V0dGluZ3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9u
dEZlYXR1cmVTZXR0aW5ncyhTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQor
aW5saW5lIEZvbnRGZWF0dXJlU2V0dGluZ3MgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0
Rm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAg
ICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vcm1hbCk7CkBAIC0xMzIzLDI3ICsxMzIzLDI3IEBAIGlubGluZSBPcHRpb25h
bDxGb250U2VsZWN0aW9uVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRT
dHlsZUZyb21WCiAgICAgcmV0dXJuIGl0YWxpY1ZhbHVlKCk7CiB9CiAKLWlubGluZSBGb250U2Vs
ZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9udFdlaWdodChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUg
Rm9udFNlbGVjdGlvblZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRXZWln
aHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgQVNTRVJUKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwogICAgIGF1
dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
ICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpIHsKICAgICAgICAgYXV0byB2YWx1
ZUlEID0gcHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpOwogICAgICAgICBpZiAodmFsdWVJRCA9PSBD
U1NWYWx1ZUJvbGRlcikKLSAgICAgICAgICAgIHJldHVybiBGb250Q2FzY2FkZURlc2NyaXB0aW9u
Ojpib2xkZXJXZWlnaHQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRp
b24oKS53ZWlnaHQoKSk7CisgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlv
bjo6Ym9sZGVyV2VpZ2h0KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlv
bigpLndlaWdodCgpKTsKICAgICAgICAgaWYgKHZhbHVlSUQgPT0gQ1NTVmFsdWVMaWdodGVyKQot
ICAgICAgICAgICAgcmV0dXJuIEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OmxpZ2h0ZXJXZWlnaHQo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSk7
CisgICAgICAgICAgICByZXR1cm4gRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6bGlnaHRlcldlaWdo
dChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRpb24oKS53ZWlnaHQoKSk7
CiAgICAgfQogICAgIHJldHVybiBjb252ZXJ0Rm9udFdlaWdodEZyb21WYWx1ZSh2YWx1ZSk7CiB9
CiAKLWlubGluZSBGb250U2VsZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252
ZXJ0Rm9udFN0cmV0Y2goU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBGb250U2VsZWN0aW9uVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Rm9u
dFN0cmV0Y2goU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsK
ICAgICByZXR1cm4gY29udmVydEZvbnRTdHJldGNoRnJvbVZhbHVlKHZhbHVlKTsKIH0KIAogI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1pbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIFN0
eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5ncyhTdHlsZVJl
c29sdmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIEZvbnRWYXJpYXRpb25TZXR0
aW5ncyBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250VmFyaWF0aW9uU2V0dGluZ3Mo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAo
aXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwpA
QCAtMTM2MCwyMSArMTM2MCwyMSBAQCBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIFN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRWYXJpYXRpb25TZXR0aW5ncwogI2VuZGlmCiAK
ICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VG91Y2hDYWxsb3V0KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgYm9vbCBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb3VjaENh
bGxvdXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICByZXR1cm4gIWVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPih2YWx1ZSkuc3RyaW5nVmFsdWUoKSwgIm5vbmUiKTsKIH0KICNlbmRpZgogCiAj
aWYgRU5BQkxFKFRPVUNIX0VWRU5UUykKLWlubGluZSBDb2xvciBTdHlsZUJ1aWxkZXJDb252ZXJ0
ZXI6OmNvbnZlcnRUYXBIaWdobGlnaHRDb2xvcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VGFwSGlnaGxpZ2h0Q29sb3IoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgcmV0dXJuIHN0eWxlUmVzb2x2
ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSk7CisgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1ZShk
b3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KICNlbmRpZgogCiAjaWYgRU5B
QkxFKFBPSU5URVJfRVZFTlRTKQotaW5saW5lIE9wdGlvblNldDxUb3VjaEFjdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0VG91Y2hBY3Rpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBPcHRpb25TZXQ8VG91Y2hBY3Rpb24+IFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFRvdWNoQWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBj
b25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkpCiAgICAgICAgIHJldHVybiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUp
OwpAQCAtMTM5Niw0MCArMTM5Niw0MCBAQCBpbmxpbmUgT3B0aW9uU2V0PFRvdWNoQWN0aW9uPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRUb3VjaEFjdGlvbihTdHlsZVJlcwogI2VuZGlm
CiAKICNpZiBFTkFCTEUoT1ZFUkZMT1dfU0NST0xMSU5HX1RPVUNIKQotaW5saW5lIGJvb2wgU3R5
bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0T3ZlcmZsb3dTY3JvbGxpbmcoU3R5bGVSZXNvbHZl
ciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBib29sIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydE92ZXJmbG93U2Nyb2xsaW5nKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgcmV0dXJuIGRvd25jYXN0PENTU1ByaW1pdGl2ZVZh
bHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlVG91Y2g7CiB9CiAjZW5kaWYKIAotaW5s
aW5lIFNWR0xlbmd0aFZhbHVlIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0
aFZhbHVlKFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgU1ZH
TGVuZ3RoVmFsdWUgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3RoVmFsdWUo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICByZXR1
cm4gU1ZHTGVuZ3RoVmFsdWU6OmZyb21DU1NQcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmlt
aXRpdmVWYWx1ZT4odmFsdWUpKTsKIH0KIAotaW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4g
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHTGVuZ3RoVmVjdG9yKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBWZWN0b3I8
U1ZHTGVuZ3RoVmFsdWU+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFNWR0xlbmd0aFZl
Y3RvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBhdXRvJiB2YWx1ZUxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKTsKIAogICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gc3ZnTGVuZ3RoczsKICAgICBzdmdM
ZW5ndGhzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodmFsdWVMaXN0Lmxlbmd0aCgpKTsKICAgICBm
b3IgKGF1dG8mIGl0ZW0gOiB2YWx1ZUxpc3QpCi0gICAgICAgIHN2Z0xlbmd0aHMudW5jaGVja2Vk
QXBwZW5kKGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShzdHlsZVJlc29sdmVyLCBpdGVtKSk7CisgICAg
ICAgIHN2Z0xlbmd0aHMudW5jaGVja2VkQXBwZW5kKGNvbnZlcnRTVkdMZW5ndGhWYWx1ZShidWls
ZGVyU3RhdGUsIGl0ZW0pKTsKIAogICAgIHJldHVybiBzdmdMZW5ndGhzOwogfQogCi1pbmxpbmUg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTdHJv
a2VEYXNoQXJyYXkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NTVmFsdWUm
IHZhbHVlKQoraW5saW5lIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0U3Ryb2tlRGFzaEFycmF5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICByZXR1cm4gU1ZH
UmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VEYXNoQXJyYXkoKTsKICAgICB9CiAKLSAgICByZXR1
cm4gY29udmVydFNWR0xlbmd0aFZlY3RvcihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgcmV0
dXJuIGNvbnZlcnRTVkdMZW5ndGhWZWN0b3IoYnVpbGRlclN0YXRlLCB2YWx1ZSk7CiB9CiAKLWlu
bGluZSBQYWludE9yZGVyIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIo
U3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBQYWludE9yZGVy
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydFBhaW50T3JkZXIoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKSkgewogICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpOwpAQCAtMTQ1MCw3ICsxNDUw
LDcgQEAgaW5saW5lIFBhaW50T3JkZXIgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0UGFp
bnRPcmRlcihTdHlsZVJlc29sdmVyJiwgY29uc3QKICAgICB9CiB9CiAKLWlubGluZSBmbG9hdCBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRPcGFjaXR5KFN0eWxlUmVzb2x2ZXImLCBjb25z
dCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
b252ZXJ0T3BhY2l0eShTdHlsZTo6QnVpbGRlclN0YXRlJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KHZhbHVlKTsKICAgICBmbG9hdCBvcGFjaXR5ID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1
ZSgpOwpAQCAtMTQ1OSwyMiArMTQ1OSwyMiBAQCBpbmxpbmUgZmxvYXQgU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjb252ZXJ0T3BhY2l0eShTdHlsZVJlc29sdmVyJiwgY29uc3QgQ1NTVmFsdQogICAg
IHJldHVybiBzdGQ6Om1heCgwLjBmLCBzdGQ6Om1pbigxLjBmLCBvcGFjaXR5KSk7CiB9CiAKLWlu
bGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lu
bGluZSBTdHJpbmcgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHVVJJUmVmZXJlbmNl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTVmFsdWUmIHZhbHVl
KQogewogICAgIFN0cmluZyBzOwogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNVUkko
KSkKICAgICAgICAgcyA9IHByaW1pdGl2ZVZhbHVlLnN0cmluZ1ZhbHVlKCk7CiAKLSAgICByZXR1
cm4gU1ZHVVJJUmVmZXJlbmNlOjpmcmFnbWVudElkZW50aWZpZXJGcm9tSVJJU3RyaW5nKHMsIHN0
eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIFNWR1VSSVJlZmVyZW5jZTo6ZnJh
Z21lbnRJZGVudGlmaWVyRnJvbUlSSVN0cmluZyhzLCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKSk7
CiB9CiAKLWlubGluZSBDb2xvciBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTVkdDb2xv
cihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitp
bmxpbmUgQ29sb3IgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U1ZHQ29sb3IoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSk7CisgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsK
IH0KIAotaW5saW5lIFN0eWxlU2VsZkFsaWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdubWVudERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHlsZVNlbGZBbGlnbm1lbnREYXRhIFN0eWxlQnVp
bGRlckNvbnZlcnRlcjo6Y29udmVydFNlbGZPckRlZmF1bHRBbGlnbm1lbnREYXRhKFN0eWxlOjpC
dWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVTZWxmQWxp
Z25tZW50RGF0YSBhbGlnbm1lbnREYXRhID0gUmVuZGVyU3R5bGU6OmluaXRpYWxTZWxmQWxpZ25t
ZW50KCk7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWUpOwpAQCAtMTQ5NSw3ICsxNDk1LDcgQEAgaW5saW5lIFN0eWxlU2VsZkFsaWdu
bWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U2VsZk9yRGVmYXVsdEFsaWdu
bWUKICAgICByZXR1cm4gYWxpZ25tZW50RGF0YTsKIH0KIAotaW5saW5lIFN0eWxlQ29udGVudEFs
aWdubWVudERhdGEgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29udGVudEFsaWdubWVu
dERhdGEoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBTdHls
ZUNvbnRlbnRBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydENvbnRl
bnRBbGlnbm1lbnREYXRhKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFs
dWUpCiB7CiAgICAgU3R5bGVDb250ZW50QWxpZ25tZW50RGF0YSBhbGlnbm1lbnREYXRhID0gUmVu
ZGVyU3R5bGU6OmluaXRpYWxDb250ZW50QWxpZ25tZW50KCk7CiAgICAgaWYgKCFpczxDU1NDb250
ZW50RGlzdHJpYnV0aW9uVmFsdWU+KHZhbHVlKSkKQEAgLTE1MTAsNyArMTUxMCw3IEBAIGlubGlu
ZSBTdHlsZUNvbnRlbnRBbGlnbm1lbnREYXRhIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVy
dENvbnRlbnRBbGlnbm1lbnRECiAgICAgcmV0dXJuIGFsaWdubWVudERhdGE7CiB9CiAKLWlubGlu
ZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3Jp
ZW50YXRpb24oU3R5bGVSZXNvbHZlciYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBH
bHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50
YXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAg
ICBmbG9hdCBhbmdsZSA9IGZhYnNmKGZtb2RmKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkuZmxvYXRWYWx1ZSgpLCAzNjAuMGYpKTsKICAgICBpZiAoYW5nbGUgPD0gNDUuMGYgfHwg
YW5nbGUgPiAzMTUuMGYpCkBAIC0xNTIyLDIxICsxNTIyLDIxIEBAIGlubGluZSBHbHlwaE9yaWVu
dGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBoT3JpZW50YXRpb24oU3R5
bGVSZXNvCiAgICAgcmV0dXJuIEdseXBoT3JpZW50YXRpb246OkRlZ3JlZXMyNzA7CiB9CiAKLWlu
bGluZSBHbHlwaE9yaWVudGF0aW9uIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdseXBo
T3JpZW50YXRpb25PckF1dG8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIEdseXBoT3JpZW50YXRpb24gU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0R2x5cGhPcmllbnRhdGlvbk9yQXV0byhTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoZG93bmNhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQogICAg
ICAgICByZXR1cm4gR2x5cGhPcmllbnRhdGlvbjo6QXV0bzsKLSAgICByZXR1cm4gY29udmVydEds
eXBoT3JpZW50YXRpb24oc3R5bGVSZXNvbHZlciwgdmFsdWUpOworICAgIHJldHVybiBjb252ZXJ0
R2x5cGhPcmllbnRhdGlvbihidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIE9wdGlv
bmFsPExlbmd0aD4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIGZsb2F0IG11
bHRpcGxpZXIpCitpbmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRMaW5lSGVpZ2h0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29u
c3QgQ1NTVmFsdWUmIHZhbHVlLCBmbG9hdCBtdWx0aXBsaWVyKQogewogICAgIGF1dG8mIHByaW1p
dGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBpZiAo
cHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKQogICAgICAgICByZXR1
cm4gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lSGVpZ2h0KCk7CiAKICAgICBpZiAocHJpbWl0aXZl
VmFsdWUuaXNMZW5ndGgoKSkgewotICAgICAgICBMZW5ndGggbGVuZ3RoID0gcHJpbWl0aXZlVmFs
dWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3NzdG9MZW5n
dGhDb252ZXJzaW9uRGF0YVdpdGhUZXh0Wm9vbUZhY3RvcihzdHlsZVJlc29sdmVyKSk7CisgICAg
ICAgIExlbmd0aCBsZW5ndGggPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4o
U3R5bGVCdWlsZGVyQ29udmVydGVyOjpjc3N0b0xlbmd0aENvbnZlcnNpb25EYXRhV2l0aFRleHRa
b29tRmFjdG9yKGJ1aWxkZXJTdGF0ZSkpOwogICAgICAgICBpZiAobXVsdGlwbGllciAhPSAxLmYp
CiAgICAgICAgICAgICBsZW5ndGggPSBMZW5ndGgobGVuZ3RoLnZhbHVlKCkgKiBtdWx0aXBsaWVy
LCBGaXhlZCk7CiAgICAgICAgIHJldHVybiBsZW5ndGg7CkBAIC0xNTUwLDcgKzE1NTAsNyBAQCBp
bmxpbmUgT3B0aW9uYWw8TGVuZ3RoPiBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRMaW5l
SGVpZ2h0KFN0eWxlUmVzb2x2ZXImCiAgICAgLy8gdmFsdWVzIGFuZCByYXcgbnVtYmVycyB0byBw
ZXJjZW50YWdlcy4KICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNQZXJjZW50YWdlKCkpIHsKICAg
ICAgICAgLy8gRklYTUU6IHBlcmNlbnRhZ2Ugc2hvdWxkIG5vdCBiZSByZXN0cmljdGVkIHRvIGFu
IGludGVnZXIgaGVyZS4KLSAgICAgICAgcmV0dXJuIExlbmd0aCgoc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5jb21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgpKSAvIDEw
MCwgRml4ZWQpOworICAgICAgICByZXR1cm4gTGVuZ3RoKChidWlsZGVyU3RhdGUuc3R5bGUoKS5j
b21wdXRlZEZvbnRTaXplKCkgKiBwcmltaXRpdmVWYWx1ZS5pbnRWYWx1ZSgpKSAvIDEwMCwgRml4
ZWQpOwogICAgIH0KICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNOdW1iZXIoKSkKICAgICAgICAg
cmV0dXJuIExlbmd0aChwcmltaXRpdmVWYWx1ZS5kb3VibGVWYWx1ZSgpICogMTAwLjAsIFBlcmNl
bnQpOwpAQCAtMTU2MCw3ICsxNTYwLDcgQEAgaW5saW5lIE9wdGlvbmFsPExlbmd0aD4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChTdHlsZVJlc29sdmVyJgogICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKLWlubGluZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRl
ckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGVSZXNvbHZlciYsIGNvbnN0IENT
U1ZhbHVlJiB2YWx1ZSkKK2lubGluZSBGb250U3ludGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRl
cjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1Zh
bHVlJiB2YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewog
ICAgICAgICBBU1NFUlQoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb25lKTsKQEAgLTE1ODksNyArMTU4OSw3IEBAIGlubGluZSBGb250U3lu
dGhlc2lzIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEZvbnRTeW50aGVzaXMoU3R5bGVS
ZXNvbHZlciYsCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KICAgICAKLWlubGluZSBPcHRpb25TZXQ8
U3BlYWtBcz4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhTdHlsZVJlc29s
dmVyJiwgY29uc3QgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIE9wdGlvblNldDxTcGVha0FzPiBT
dHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRTcGVha0FzKFN0eWxlOjpCdWlsZGVyU3RhdGUm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byByZXN1bHQgPSBSZW5kZXJTdHls
ZTo6aW5pdGlhbFNwZWFrQXMoKTsKICAgICBpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsK
QEAgLTE1OTksNyArMTU5OSw3IEBAIGlubGluZSBPcHRpb25TZXQ8U3BlYWtBcz4gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0U3BlYWtBcyhTdHlsZVJlc29sdmVyJiwKICAgICByZXR1cm4g
cmVzdWx0OwogfQogCi1pbmxpbmUgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVhdGlvbj4gU3R5bGVC
dWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0eWxlUmVzb2x2ZXIm
LCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgT3B0aW9uU2V0PEhhbmdpbmdQdW5jdHVh
dGlvbj4gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0SGFuZ2luZ1B1bmN0dWF0aW9uKFN0
eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byBy
ZXN1bHQgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEhhbmdpbmdQdW5jdHVhdGlvbigpOwogICAgIGlm
IChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewpAQCAtMTYwOSw5ICsxNjA5LDkgQEAgaW5saW5l
IE9wdGlvblNldDxIYW5naW5nUHVuY3R1YXRpb24+IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydEhhbmdpbmdQdW5jdHUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1pbmxpbmUgR2FwTGVu
Z3RoIFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdhcExlbmd0aChTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgR2FwTGVuZ3Ro
IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydEdhcExlbmd0aChTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICByZXR1cm4g
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVl
Tm9ybWFsKSA/IEdhcExlbmd0aCgpIDogR2FwTGVuZ3RoKGNvbnZlcnRMZW5ndGgoc3R5bGVSZXNv
bHZlciwgdmFsdWUpKTsKKyAgICByZXR1cm4gKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2
YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9ybWFsKSA/IEdhcExlbmd0aCgpIDogR2FwTGVu
Z3RoKGNvbnZlcnRMZW5ndGgoYnVpbGRlclN0YXRlLCB2YWx1ZSkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVy
Q3VzdG9tLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVCdWlsZGVyQ3VzdG9tLmgKaW5kZXgg
MjhkZTExNmM5MjUuLjUwZGYyMzEyZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
U3R5bGVCdWlsZGVyQ3VzdG9tLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlQnVpbGRl
ckN1c3RvbS5oCkBAIC01NCw5ICs1NCw5IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNkZWZp
bmUgREVDTEFSRV9QUk9QRVJUWV9DVVNUT01fSEFORExFUlMocHJvcGVydHkpIFwKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXQjI3Byb3BlcnR5KFN0eWxlUmVzb2x2ZXImKTsgXAotICAgIHN0
YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCMjcHJvcGVydHkoU3R5bGVSZXNvbHZlciYpOyBcCi0gICAg
c3RhdGljIHZvaWQgYXBwbHlWYWx1ZSMjcHJvcGVydHkoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVl
JikKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQjI3Byb3BlcnR5KFN0eWxlOjpCdWlsZGVy
U3RhdGUmKTsgXAorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCMjcHJvcGVydHkoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpOyBcCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZSMjcHJvcGVydHko
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJikKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4g
aW5saW5lIFQgZm9yd2FyZEluaGVyaXRlZFZhbHVlKFQmJiB2YWx1ZSkgeyByZXR1cm4gc3RkOjpm
b3J3YXJkPFQ+KHZhbHVlKTsgfQogaW5saW5lIExlbmd0aCBmb3J3YXJkSW5oZXJpdGVkVmFsdWUo
Y29uc3QgTGVuZ3RoJiB2YWx1ZSkgeyBhdXRvIGNvcHkgPSB2YWx1ZTsgcmV0dXJuIGNvcHk7IH0K
QEAgLTEwOSwxMjYgKzEwOSwxMjYgQEAgcHVibGljOgogICAgIERFQ0xBUkVfUFJPUEVSVFlfQ1VT
VE9NX0hBTkRMRVJTKFpvb20pOwogCiAgICAgLy8gQ3VzdG9tIGhhbmRsaW5nIG9mIGluaXRpYWwg
KyBpbmhlcml0IHZhbHVlIHNldHRpbmcgb25seS4KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaXRp
YWxXZWJraXRNYXNrSW1hZ2UoU3R5bGVSZXNvbHZlciYpIHsgfQotICAgIHN0YXRpYyB2b2lkIGFw
cGx5SW5oZXJpdFdlYmtpdE1hc2tJbWFnZShTdHlsZVJlc29sdmVyJikgeyB9Ci0gICAgc3RhdGlj
IHZvaWQgYXBwbHlJbml0aWFsRm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZVJlc29sdmVyJikgeyB9
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0Rm9udEZlYXR1cmVTZXR0aW5ncyhTdHlsZVJl
c29sdmVyJikgeyB9CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsV2Via2l0TWFza0ltYWdl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7IH0KKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRX
ZWJraXRNYXNrSW1hZ2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQorICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsg
fQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEZvbnRGZWF0dXJlU2V0dGluZ3MoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYpIHsgfQogI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgc3Rh
dGljIHZvaWQgYXBwbHlJbml0aWFsRm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlUmVzb2x2ZXIm
KSB7IH0KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRGb250VmFyaWF0aW9uU2V0dGluZ3Mo
U3R5bGVSZXNvbHZlciYpIHsgfQorICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbEZvbnRWYXJp
YXRpb25TZXR0aW5ncyhTdHlsZTo6QnVpbGRlclN0YXRlJikgeyB9CisgICAgc3RhdGljIHZvaWQg
YXBwbHlJbmhlcml0Rm9udFZhcmlhdGlvblNldHRpbmdzKFN0eWxlOjpCdWlsZGVyU3RhdGUmKSB7
IH0KICNlbmRpZgogCiAgICAgLy8gQ3VzdG9tIGhhbmRsaW5nIG9mIGluaGVyaXQgKyB2YWx1ZSBz
ZXR0aW5nIG9ubHkuCi0gICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0RGlzcGxheShTdHlsZVJl
c29sdmVyJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZURpc3BsYXkoU3R5bGVSZXNvbHZl
ciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0RGlzcGxheShTdHls
ZTo6QnVpbGRlclN0YXRlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZURpc3BsYXkoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAKICAgICAvLyBDdXN0b20gaGFuZGxpbmcg
b2YgdmFsdWUgc2V0dGluZyBvbmx5LgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVCYXNlbGlu
ZVNoaWZ0KFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZv
aWQgYXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImKTsKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlVGV4dEFsaWduKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1
ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGVSZXNvbHZl
ciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRPcmll
bnRhdGlvbihTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBs
eVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBD
U1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVWZXJ0aWNhbEFsaWduKFN0eWxl
OjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlh
bFRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlW
YWx1ZVRleHRBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0
aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0TG9jYWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NW
YWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAjaWYgRU5BQkxFKFRFWFRfQVVUT1NJ
WklORykKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QoU3R5
bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtp
dFRleHRTaXplQWRqdXN0KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOwogI2VuZGlm
Ci0gICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVdlYmtpdFRleHRab29tKFN0eWxlUmVzb2x2ZXIm
LCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXcml0aW5nTW9kZShTdHls
ZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQWx0KFN0
eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOwotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVXaWxs
Q2hhbmdlKFN0eWxlUmVzb2x2ZXImLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5
VmFsdWVXZWJraXRUZXh0Wm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUFsdChTdHlsZTo6QnVpbGRl
clN0YXRlJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlV2lsbENoYW5n
ZShTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKIAogI2lmIEVOQUJMRShEQVJLX01P
REVfQ1NTKQotICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVDb2xvclNjaGVtZShTdHlsZVJlc29s
dmVyJiwgQ1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ29sb3JTY2hlbWUo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIENTU1ZhbHVlJik7CiAjZW5kaWYKIAotICAgIHN0YXRpYyB2
b2lkIGFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZVJlc29sdmVyJiwgQ1NTVmFsdWUmKTsKLSAg
ICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlU3Ryb2tlQ29sb3IoU3R5bGVSZXNvbHZlciYsIENTU1Zh
bHVlJik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZVN0cm9rZVdpZHRoKFN0eWxlOjpCdWls
ZGVyU3RhdGUmLCBDU1NWYWx1ZSYpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5VmFsdWVTdHJva2VD
b2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKIAotICAgIHN0YXRpYyB2b2lk
IGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NSZWdp
c3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKTsKLSAgICBzdGF0
aWMgdm9pZCBhcHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiwgY29uc3Qg
Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSk7Ci0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZUN1c3RvbVByb3BlcnR5KFN0eWxlUmVzb2x2ZXImLCBj
b25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqLCBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVl
Jik7CisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVydHkoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSosIGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUpOworICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdEN1c3RvbVByb3Bl
cnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVy
dHkqLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVl
Q3VzdG9tUHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1JlZ2lzdGVyZWRD
dXN0b21Qcm9wZXJ0eSosIENTU0N1c3RvbVByb3BlcnR5VmFsdWUmKTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgdm9pZCByZXNldEVmZmVjdGl2ZVpvb20oU3R5bGVSZXNvbHZlciYpOworICAgIHN0
YXRpYyB2b2lkIHJlc2V0RWZmZWN0aXZlWm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJik7CiAKICAg
ICBzdGF0aWMgTGVuZ3RoIG1tTGVuZ3RoKGRvdWJsZSBtbSk7CiAgICAgc3RhdGljIExlbmd0aCBp
bmNoTGVuZ3RoKGRvdWJsZSBpbmNoKTsKICAgICBzdGF0aWMgYm9vbCBnZXRQYWdlU2l6ZUZyb21O
YW1lKENTU1ByaW1pdGl2ZVZhbHVlKiBwYWdlU2l6ZU5hbWUsIENTU1ByaW1pdGl2ZVZhbHVlKiBw
YWdlT3JpZW50YXRpb24sIExlbmd0aCYgd2lkdGgsIExlbmd0aCYgaGVpZ2h0KTsKIAogICAgIHRl
bXBsYXRlIDxDU1NQcm9wZXJ0eUlEIGlkPgotICAgIHN0YXRpYyB2b2lkIGFwcGx5VGV4dE9yQm94
U2hhZG93VmFsdWUoU3R5bGVSZXNvbHZlciYsIENTU1ZhbHVlJik7Ci0gICAgc3RhdGljIGJvb2wg
aXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZVJlc29sdmVyJiwgRGlzcGxheVR5cGUpOworICAgIHN0
YXRpYyB2b2lkIGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYs
IENTU1ZhbHVlJik7CisgICAgc3RhdGljIGJvb2wgaXNWYWxpZERpc3BsYXlWYWx1ZShTdHlsZTo6
QnVpbGRlclN0YXRlJiwgRGlzcGxheVR5cGUpOwogCiAgICAgZW51bSBDb3VudGVyQmVoYXZpb3Ig
e0luY3JlbWVudCA9IDAsIFJlc2V0fTsKICAgICB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNv
dW50ZXJCZWhhdmlvcj4KLSAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxl
UmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseUluaGVyaXRDb3VudGVyKFN0eWxlOjpC
dWlsZGVyU3RhdGUmKTsKICAgICB0ZW1wbGF0ZSA8Q291bnRlckJlaGF2aW9yIGNvdW50ZXJCZWhh
dmlvcj4KLSAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ291bnRlcihTdHlsZVJlc29sdmVyJiwg
Q1NTVmFsdWUmKTsKKyAgICBzdGF0aWMgdm9pZCBhcHBseVZhbHVlQ291bnRlcihTdHlsZTo6QnVp
bGRlclN0YXRlJiwgQ1NTVmFsdWUmKTsKIAogICAgIHN0YXRpYyBmbG9hdCBsYXJnZXJGb250U2l6
ZShmbG9hdCBzaXplKTsKICAgICBzdGF0aWMgZmxvYXQgc21hbGxlckZvbnRTaXplKGZsb2F0IHNp
emUpOwotICAgIHN0YXRpYyBmbG9hdCBkZXRlcm1pbmVSdWJ5VGV4dFNpemVNdWx0aXBsaWVyKFN0
eWxlUmVzb2x2ZXImKTsKKyAgICBzdGF0aWMgZmxvYXQgZGV0ZXJtaW5lUnVieVRleHRTaXplTXVs
dGlwbGllcihTdHlsZTo6QnVpbGRlclN0YXRlJik7CiB9OwogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVEaXJlY3Rpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRGlyZWN0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0RGlyZWN0aW9u
KGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldERpcmVjdGlvbih0cnVlKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXREaXJlY3Rpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZh
bHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseVNldERpcmVj
dGlvbih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxUZXh0QWxpZ24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dEFsaWduKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRl
eHRBbGlnbihSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRBbGlnbigpKTsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRUZXh0QWxpZ24odHJ1ZSk7CisgICAgYnVp
bGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEFsaWduKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEFs
aWduKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRUZXh0
QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZVRleHRBbGlnbihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFs
dWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0QWxpZ24o
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0QWxpZ24oU3R5bGVCdWlsZGVyQ29udmVy
dGVyOjpjb252ZXJ0VGV4dEFsaWduKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKSk7Ci0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNFeHBsaWNpdGx5U2V0VGV4dEFsaWduKHRydWUpOworICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRBbGlnbihTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNvbnZlcnRUZXh0QWxpZ24oYnVpbGRlclN0YXRlLCB2YWx1ZSkpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRUZXh0QWxpZ24odHJ1ZSk7CiB9CiAKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6cmVzZXRFZmZlY3RpdmVab29tKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OnJlc2V0
RWZmZWN0aXZlWm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7CiAgICAg
Ly8gUmVzZXQgdGhlIHpvb20gaW4gZWZmZWN0LiBUaGlzIGFsbG93cyB0aGUgc2V0Wm9vbSBtZXRo
b2QgdG8gYWNjdXJhdGVseSBjb21wdXRlIGEgbmV3IHpvb20gaW4gZWZmZWN0LgotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkgPyBz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmVmZmVjdGl2ZVpvb20oKSA6IFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0RWZmZWN0aXZlWm9vbShidWls
ZGVyU3RhdGUucGFyZW50U3R5bGUoKS5lZmZlY3RpdmVab29tKCkpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFpvb20oU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFs
Wm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgcmVzZXRFZmZl
Y3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Wm9vbShSZW5k
ZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CisgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJT
dGF0ZSk7CisgICAgYnVpbGRlclN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29t
KCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFpv
b20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbmhlcml0Wm9vbShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUpCiB7Ci0gICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxlUmVzb2x2ZXIpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Wm9vbShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnpvb20oKSk7Cisg
ICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CisgICAgYnVpbGRlclN0YXRlLnNl
dFpvb20oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuem9vbSgpKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlWm9vbShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVab29tKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NT
UHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKIAogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlE
KCkgPT0gQ1NTVmFsdWVOb3JtYWwpIHsKLSAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKHN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20oUmVuZGVyU3R5bGU6Omlu
aXRpYWxab29tKCkpOworICAgICAgICByZXNldEVmZmVjdGl2ZVpvb20oYnVpbGRlclN0YXRlKTsK
KyAgICAgICAgYnVpbGRlclN0YXRlLnNldFpvb20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkp
OwogICAgIH0gZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlUmVz
ZXQpIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRFZmZlY3RpdmVab29tKFJlbmRlclN0eWxl
Ojppbml0aWFsWm9vbSgpKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zZXRab29tKFJlbmRlclN0
eWxlOjppbml0aWFsWm9vbSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnNldEVmZmVjdGl2ZVpv
b20oUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc2V0
Wm9vbShSZW5kZXJTdHlsZTo6aW5pdGlhbFpvb20oKSk7CiAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVEb2N1bWVudCkgewotICAgICAgICBmbG9hdCBk
b2Nab29tID0gc3R5bGVSZXNvbHZlci5yb290RWxlbWVudFN0eWxlKCkgPyBzdHlsZVJlc29sdmVy
LnJvb3RFbGVtZW50U3R5bGUoKS0+em9vbSgpIDogUmVuZGVyU3R5bGU6OmluaXRpYWxab29tKCk7
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc2V0RWZmZWN0aXZlWm9vbShkb2Nab29tKTsKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5zZXRab29tKGRvY1pvb20pOworICAgICAgICBmbG9hdCBkb2Nab29t
ID0gYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKS56b29tKCk7CisgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRFZmZlY3RpdmVab29tKGRvY1pvb20pOworICAgICAgICBidWlsZGVyU3RhdGUu
c2V0Wm9vbShkb2Nab29tKTsKICAgICB9IGVsc2UgaWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2Vu
dGFnZSgpKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJlc29sdmVyKTsKKyAg
ICAgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CiAgICAgICAgIGlmIChmbG9h
dCBwZXJjZW50ID0gcHJpbWl0aXZlVmFsdWUuZmxvYXRWYWx1ZSgpKQotICAgICAgICAgICAgc3R5
bGVSZXNvbHZlci5zZXRab29tKHBlcmNlbnQgLyAxMDAuMGYpOworICAgICAgICAgICAgYnVpbGRl
clN0YXRlLnNldFpvb20ocGVyY2VudCAvIDEwMC4wZik7CiAgICAgfSBlbHNlIGlmIChwcmltaXRp
dmVWYWx1ZS5pc051bWJlcigpKSB7Ci0gICAgICAgIHJlc2V0RWZmZWN0aXZlWm9vbShzdHlsZVJl
c29sdmVyKTsKKyAgICAgICAgcmVzZXRFZmZlY3RpdmVab29tKGJ1aWxkZXJTdGF0ZSk7CiAgICAg
ICAgIGlmIChmbG9hdCBudW1iZXIgPSBwcmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkpCi0gICAg
ICAgICAgICBzdHlsZVJlc29sdmVyLnNldFpvb20obnVtYmVyKTsKKyAgICAgICAgICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRab29tKG51bWJlcik7CiAgICAgfQogfQogaW5saW5lIExlbmd0aCBTdHlsZUJ1
aWxkZXJDdXN0b206Om1tTGVuZ3RoKGRvdWJsZSBtbSkKQEAgLTMxNSwzMiArMzE1LDMyIEBAIGJv
b2wgU3R5bGVCdWlsZGVyQ3VzdG9tOjpnZXRQYWdlU2l6ZUZyb21OYW1lKENTU1ByaW1pdGl2ZVZh
bHVlKiBwYWdlU2l6ZU5hbWUsIENTCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVZlcnRpY2FsQWxpZ24oU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlVmVydGljYWxBbGlnbihTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1
ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRWZXJ0
aWNhbEFsaWduKHByaW1pdGl2ZVZhbHVlKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0VmVydGljYWxBbGlnbihwcmltaXRpdmVWYWx1ZSk7CiAgICAgZWxzZQotICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFZlcnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUu
Y29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lv
biB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5n
dGhDb252ZXJzaW9uRGF0YSgpKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFZl
cnRpY2FsQWxpZ25MZW5ndGgocHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50
ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9u
PihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKSk7CiB9CiAKICNpZiBF
TkFCTEUoQ1NTX0lNQUdFX1JFU09MVVRJT04pCiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0SW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEltYWdl
UmVzb2x1dGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5
bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uoc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT5pbWFnZVJlc29sdXRpb25Tb3VyY2UoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29sdXRpb25TbmFwKHN0eWxlUmVzb2x2ZXIucGFyZW50
U3R5bGUoKS0+aW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldEltYWdlUmVzb2x1dGlvbihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmltYWdl
UmVzb2x1dGlvbigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRp
b25Tb3VyY2UoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuaW1hZ2VSZXNvbHV0aW9uU291cmNl
KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvblNuYXAoYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkuaW1hZ2VSZXNvbHV0aW9uU25hcCgpKTsKKyAgICBidWls
ZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb24oYnVpbGRlclN0YXRlLnBhcmVudFN0
eWxlKCkuaW1hZ2VSZXNvbHV0aW9uKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxJbWFn
ZVJlc29sdXRpb24oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKFJlbmRlclN0eWxl
Ojppbml0aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVz
b2x1dGlvblNuYXAoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRJbWFnZVJlc29s
dXRpb24oUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb24oKSk7CisgICAgYnVpbGRl
clN0YXRlLnN0eWxlKCkuc2V0SW1hZ2VSZXNvbHV0aW9uU291cmNlKFJlbmRlclN0eWxlOjppbml0
aWFsSW1hZ2VSZXNvbHV0aW9uU291cmNlKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEltYWdlUmVzb2x1dGlvblNuYXAoUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25T
bmFwKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvbihSZW5k
ZXJTdHlsZTo6aW5pdGlhbEltYWdlUmVzb2x1dGlvbigpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlSW1hZ2VSZXNvbHV0aW9uKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBJbWFnZVJlc29sdXRpb25Tb3Vy
Y2Ugc291cmNlID0gUmVuZGVyU3R5bGU6OmluaXRpYWxJbWFnZVJlc29sdXRpb25Tb3VyY2UoKTsK
ICAgICBJbWFnZVJlc29sdXRpb25TbmFwIHNuYXAgPSBSZW5kZXJTdHlsZTo6aW5pdGlhbEltYWdl
UmVzb2x1dGlvblNuYXAoKTsKQEAgLTM1NCwyMCArMzU0LDIwIEBAIGlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUltYWdlUmVzb2x1dGlvbihTdHlsZVJlc29sdmVyJiBz
dHlsZVJlCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHJlc29sdXRpb24gPSBwcmltaXRpdmVW
YWx1ZS5kb3VibGVWYWx1ZShDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0RQUFgpOwogICAgIH0KLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvblNvdXJjZShzb3VyY2Up
OwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0SW1hZ2VSZXNvbHV0aW9uU25hcChzbmFw
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEltYWdlUmVzb2x1dGlvbihyZXNvbHV0
aW9uKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25Tb3VyY2Uo
c291cmNlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRJbWFnZVJlc29sdXRpb25TbmFw
KHNuYXApOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEltYWdlUmVzb2x1dGlvbihyZXNv
bHV0aW9uKTsKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShDU1NfSU1BR0VfUkVTT0xVVElPTikKIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRTaXplKFN0eWxlUmVz
b2x2ZXImKSB7IH0KK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
U2l6ZShTdHlsZTo6QnVpbGRlclN0YXRlJikgeyB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlJbml0aWFsU2l6ZShTdHlsZVJlc29sdmVyJikgeyB9CitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXpl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVNpemUoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5yZXNldFBhZ2VTaXplVHlwZSgpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnJl
c2V0UGFnZVNpemVUeXBlKCk7CiAKICAgICBpZiAoIWlzPENTU1ZhbHVlTGlzdD4odmFsdWUpKQog
ICAgICAgICByZXR1cm47CkBAIC0zOTAsNyArMzkwLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlU2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1MKICAgICAgICAgICAgIC8vIDxsZW5ndGg+ezJ9CiAgICAgICAgICAgICBpZiAoIXNlY29uZFBy
aW1pdGl2ZVZhbHVlLmlzTGVuZ3RoKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICAgICAgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBjb252ZXJzaW9uRGF0YSA9IHN0eWxlUmVz
b2x2ZXIuc3RhdGUoKS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3Rl
ZFpvb20oMS4wZik7CisgICAgICAgICAgICBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhIGNvbnZl
cnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5
V2l0aEFkanVzdGVkWm9vbSgxLjBmKTsKICAgICAgICAgICAgIHdpZHRoID0gZmlyc3RQcmltaXRp
dmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExlbmd0aD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICAg
ICAgaGVpZ2h0ID0gc2Vjb25kUHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KGNv
bnZlcnNpb25EYXRhKTsKICAgICAgICAgfSBlbHNlIHsKQEAgLTQxMSw3ICs0MTEsNyBAQCBpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTaXplKFN0eWxlUmVzb2x2ZXIm
IHN0eWxlUmVzb2x2ZXIsIENTUwogICAgICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNMZW5ndGgo
KSkgewogICAgICAgICAgICAgLy8gPGxlbmd0aD4KICAgICAgICAgICAgIHBhZ2VTaXplVHlwZSA9
IFBBR0VfU0laRV9SRVNPTFZFRDsKLSAgICAgICAgICAgIHdpZHRoID0gaGVpZ2h0ID0gcHJpbWl0
aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxMZW5ndGg+KHN0eWxlUmVzb2x2ZXIuc3RhdGUoKS5jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhKCkuY29weVdpdGhBZGp1c3RlZFpvb20oMS4wZikpOworICAg
ICAgICAgICAgd2lkdGggPSBoZWlnaHQgPSBwcmltaXRpdmVWYWx1ZS5jb21wdXRlTGVuZ3RoPExl
bmd0aD4oYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKS5jb3B5V2l0aEFk
anVzdGVkWm9vbSgxLjBmKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2gg
KHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkgewogICAgICAgICAgICAgY2FzZSAwOgpAQCAtNDM3
LDI5ICs0MzcsMjkgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1MKICAgICBkZWZhdWx0OgogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0UGFnZVNp
emVUeXBlKHBhZ2VTaXplVHlwZSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRQYWdl
U2l6ZSh7IFdURk1vdmUod2lkdGgpLCBXVEZNb3ZlKGhlaWdodCkgfSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0UGFnZVNpemVUeXBlKHBhZ2VTaXplVHlwZSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0UGFnZVNpemUoeyBXVEZNb3ZlKHdpZHRoKSwgV1RGTW92ZShoZWlnaHQp
IH0pOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFRl
eHRJbmRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0VGV4dEluZGVudChTdHlsZTo6QnVpbGRlclN0YXRl
JiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5k
ZW50KExlbmd0aCB7IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEluZGVudCgpIH0p
OworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRlbnQoTGVuZ3RoIHsgYnVpbGRl
clN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEluZGVudCgpIH0pOwogI2lmIEVOQUJMRShDU1MzX1RF
WFQpCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZShzdHlsZVJl
c29sdmVyLnBhcmVudFN0eWxlKCktPnRleHRJbmRlbnRMaW5lKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudFR5cGUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgp
LT50ZXh0SW5kZW50VHlwZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5k
ZW50TGluZShidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS50ZXh0SW5kZW50TGluZSgpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50VHlwZShidWlsZGVyU3RhdGUucGFy
ZW50U3R5bGUoKS50ZXh0SW5kZW50VHlwZSgpKTsKICNlbmRpZgogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFRleHRJbmRlbnQoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsVGV4dEluZGVudChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50KFJlbmRlclN0eWxlOjppbml0aWFs
VGV4dEluZGVudCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0SW5kZW50KFJl
bmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudCgpKTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEluZGVudExpbmUoUmVuZGVyU3R5bGU6
OmluaXRpYWxUZXh0SW5kZW50TGluZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRJbmRlbnRUeXBlKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEluZGVudFR5cGUoKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEluZGVudExpbmUoUmVuZGVyU3R5bGU6Omlu
aXRpYWxUZXh0SW5kZW50TGluZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0
SW5kZW50VHlwZShSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRJbmRlbnRUeXBlKCkpOwogI2VuZGlm
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVRleHRJbmRl
bnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlVGV4dEluZGVudChTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBMZW5ndGgg
bGVuZ3RoT3JQZXJjZW50YWdlVmFsdWU7CiAjaWYgRU5BQkxFKENTUzNfVEVYVCkKQEAgLTQ2OSw3
ICs0NjksNyBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0
SW5kZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgIGZvciAoYXV0byYgaXRlbSA6
IGRvd25jYXN0PENTU1ZhbHVlTGlzdD4odmFsdWUpKSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpOwogICAgICAg
ICBpZiAoIXByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSkKLSAgICAgICAgICAgIGxlbmd0aE9yUGVy
Y2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdl
ckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1bGF0ZWRDb252ZXJzaW9uPihz
dHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpKTsKKyAgICAg
ICAgICAgIGxlbmd0aE9yUGVyY2VudGFnZVZhbHVlID0gcHJpbWl0aXZlVmFsdWUuY29udmVydFRv
TGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8IENhbGN1
bGF0ZWRDb252ZXJzaW9uPihidWlsZGVyU3RhdGUuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgp
KTsKICNpZiBFTkFCTEUoQ1NTM19URVhUKQogICAgICAgICBlbHNlIGlmIChwcmltaXRpdmVWYWx1
ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVXZWJraXRFYWNoTGluZSkKICAgICAgICAgICAgIHRleHRJ
bmRlbnRMaW5lVmFsdWUgPSBUZXh0SW5kZW50TGluZTo6RWFjaExpbmU7CkBAIC00ODEsMTAgKzQ4
MSwxMCBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0SW5k
ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgIGlmIChsZW5ndGhPclBlcmNlbnRh
Z2VWYWx1ZS5pc1VuZGVmaW5lZCgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnQoV1RGTW92ZShsZW5ndGhPclBlcmNlbnRhZ2VWYWx1
ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRlbnQoV1RGTW92ZShsZW5n
dGhPclBlcmNlbnRhZ2VWYWx1ZSkpOwogI2lmIEVOQUJMRShDU1MzX1RFWFQpCi0gICAgc3R5bGVS
ZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0SW5kZW50TGluZSh0ZXh0SW5kZW50TGluZVZhbHVlKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRJbmRlbnRUeXBlKHRleHRJbmRlbnRU
eXBlVmFsdWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRlbnRMaW5lKHRl
eHRJbmRlbnRMaW5lVmFsdWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRJbmRl
bnRUeXBlKHRleHRJbmRlbnRUeXBlVmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTQ5MywyOSArNDkz
LDI5IEBAIGVudW0gQm9yZGVySW1hZ2VNb2RpZmllclR5cGUgeyBPdXRzZXQsIFJlcGVhdCwgU2xp
Y2UsIFdpZHRoIH07CiB0ZW1wbGF0ZSA8Qm9yZGVySW1hZ2VUeXBlIHR5cGUsIEJvcmRlckltYWdl
TW9kaWZpZXJUeXBlIG1vZGlmaWVyPgogY2xhc3MgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9k
aWZpZXIgewogcHVibGljOgotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5oZXJpdFZhbHVlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbmhlcml0VmFs
dWUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogICAgIHsKLSAgICAgICAgTmlu
ZVBpZWNlSW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7CisgICAg
ICAgIE5pbmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpKSk7
CiAgICAgICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6Ci0gICAg
ICAgICAgICBpbWFnZS5jb3B5T3V0c2V0RnJvbShnZXRWYWx1ZShzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlPdXRzZXRGcm9tKGdldFZhbHVlKGJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBpbWFnZS5jb3B5UmVwZWF0RnJvbShnZXRWYWx1ZShz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpKTsKKyAgICAgICAgICAgIGltYWdlLmNvcHlSZXBl
YXRGcm9tKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBTbGljZToKLSAgICAgICAgICAgIGltYWdlLmNvcHlJbWFn
ZVNsaWNlc0Zyb20oZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKSk7CisgICAg
ICAgICAgICBpbWFnZS5jb3B5SW1hZ2VTbGljZXNGcm9tKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5w
YXJlbnRTdHlsZSgpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBXaWR0aDoK
LSAgICAgICAgICAgIGltYWdlLmNvcHlCb3JkZXJTbGljZXNGcm9tKGdldFZhbHVlKHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKSkpOworICAgICAgICAgICAgaW1hZ2UuY29weUJvcmRlclNsaWNl
c0Zyb20oZ2V0VmFsdWUoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIHNldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KSwgaW1hZ2UpOworICAgICAgICBzZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSwgaW1hZ2Up
OwogICAgIH0KIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbFZhbHVlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgc3RhdGljIHZvaWQgYXBwbHlJbml0aWFsVmFsdWUoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogICAgIHsKLSAgICAgICAgTmluZVBpZWNl
SW1hZ2UgaW1hZ2UoZ2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpKSk7CisgICAgICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpKSk7CiAgICAg
ICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKICAgICAgICAgY2FzZSBPdXRzZXQ6CiAgICAgICAgICAg
ICBpbWFnZS5zZXRPdXRzZXQoTGVuZ3RoQm94KDApKTsKQEAgLTUzOCw1MyArNTM4LDUzIEBAIHB1
YmxpYzoKICAgICAgICAgICAgIGltYWdlLnNldEJvcmRlclNsaWNlcyh0eXBlID09IEJvcmRlcklt
YWdlID8gbGVuZ3RoQm94IDogTGVuZ3RoQm94KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KLSAgICAgICAgc2V0VmFsdWUoc3R5bGVSZXNvbHZlci5zdHlsZSgpLCBpbWFnZSk7Cisg
ICAgICAgIHNldFZhbHVlKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBpbWFnZSk7CiAgICAgfQogCi0g
ICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBD
U1NWYWx1ZSYgdmFsdWUpCisgICAgc3RhdGljIHZvaWQgYXBwbHlWYWx1ZShTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIE5p
bmVQaWVjZUltYWdlIGltYWdlKGdldFZhbHVlKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSkpOworICAg
ICAgICBOaW5lUGllY2VJbWFnZSBpbWFnZShnZXRWYWx1ZShidWlsZGVyU3RhdGUuc3R5bGUoKSkp
OwogICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CiAgICAgICAgIGNhc2UgT3V0c2V0OgotICAg
ICAgICAgICAgaW1hZ2Uuc2V0T3V0c2V0KHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmlu
ZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CisgICAgICAgICAgICBpbWFnZS5zZXRPdXRzZXQoYnVp
bGRlclN0YXRlLnN0eWxlTWFwKCkubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBSZXBlYXQ6Ci0gICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUltYWdlUmVwZWF0KHZhbHVlLCBpbWFnZSk7
CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGVNYXAoKS5tYXBOaW5lUGllY2VJbWFnZVJl
cGVhdCh2YWx1ZSwgaW1hZ2UpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgU2xp
Y2U6Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPm1hcE5pbmVQaWVjZUlt
YWdlU2xpY2UodmFsdWUsIGltYWdlKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZU1h
cCgpLm1hcE5pbmVQaWVjZUltYWdlU2xpY2UodmFsdWUsIGltYWdlKTsKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICBjYXNlIFdpZHRoOgotICAgICAgICAgICAgaW1hZ2Uuc2V0Qm9yZGVyU2xp
Y2VzKHN0eWxlUmVzb2x2ZXIuc3R5bGVNYXAoKS0+bWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVl
KSk7CisgICAgICAgICAgICBpbWFnZS5zZXRCb3JkZXJTbGljZXMoYnVpbGRlclN0YXRlLnN0eWxl
TWFwKCkubWFwTmluZVBpZWNlSW1hZ2VRdWFkKHZhbHVlKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBzZXRWYWx1ZShzdHlsZVJlc29sdmVyLnN0eWxlKCksIGltYWdl
KTsKKyAgICAgICAgc2V0VmFsdWUoYnVpbGRlclN0YXRlLnN0eWxlKCksIGltYWdlKTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBnZXRWYWx1ZShj
b25zdCBSZW5kZXJTdHlsZSogc3R5bGUpCisgICAgc3RhdGljIGNvbnN0IE5pbmVQaWVjZUltYWdl
JiBnZXRWYWx1ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCiAgICAgewotICAgICAgICByZXR1
cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxlLT5ib3JkZXJJbWFnZSgpIDogc3R5bGUtPm1h
c2tCb3hJbWFnZSgpOworICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/IHN0eWxl
LmJvcmRlckltYWdlKCkgOiBzdHlsZS5tYXNrQm94SW1hZ2UoKTsKICAgICB9CiAKLSAgICBzdGF0
aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IE5pbmVQaWVjZUltYWdl
JiB2YWx1ZSkKKyAgICBzdGF0aWMgdm9pZCBzZXRWYWx1ZShSZW5kZXJTdHlsZSYgc3R5bGUsIGNv
bnN0IE5pbmVQaWVjZUltYWdlJiB2YWx1ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiB0eXBlID09
IEJvcmRlckltYWdlID8gc3R5bGUtPnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLT5zZXRN
YXNrQm94SW1hZ2UodmFsdWUpOworICAgICAgICByZXR1cm4gdHlwZSA9PSBCb3JkZXJJbWFnZSA/
IHN0eWxlLnNldEJvcmRlckltYWdlKHZhbHVlKSA6IHN0eWxlLnNldE1hc2tCb3hJbWFnZSh2YWx1
ZSk7CiAgICAgfQogfTsKIAogI2RlZmluZSBERUZJTkVfQk9SREVSX0lNQUdFX01PRElGSUVSX0hB
TkRMRVIodHlwZSwgbW9kaWZpZXIpIFwKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0IyN0eXBlIyNtb2RpZmllcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
KSBcCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdCMjdHlwZSMj
bW9kaWZpZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKSBcCiB7IFwKLSAgICBB
cHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5SW5o
ZXJpdFZhbHVlKHN0eWxlUmVzb2x2ZXIpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdl
TW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseUluaGVyaXRWYWx1ZShidWlsZGVyU3RhdGUp
OyBcCiB9IFwKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsIyN0
eXBlIyNtb2RpZmllcihTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKSBcCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbCMjdHlwZSMjbW9kaWZpZXIoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKSBcCiB7IFwKLSAgICBBcHBseVByb3BlcnR5Qm9y
ZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5SW5pdGlhbFZhbHVlKHN0eWxl
UmVzb2x2ZXIpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdlTW9kaWZpZXI8dHlwZSwg
bW9kaWZpZXI+OjphcHBseUluaXRpYWxWYWx1ZShidWlsZGVyU3RhdGUpOyBcCiB9IFwKLWlubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZSMjdHlwZSMjbW9kaWZpZXIoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKSBcCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWUjI3R5cGUjI21vZGlmaWVyKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKSBcCiB7IFwKLSAgICBB
cHBseVByb3BlcnR5Qm9yZGVySW1hZ2VNb2RpZmllcjx0eXBlLCBtb2RpZmllcj46OmFwcGx5VmFs
dWUoc3R5bGVSZXNvbHZlciwgdmFsdWUpOyBcCisgICAgQXBwbHlQcm9wZXJ0eUJvcmRlckltYWdl
TW9kaWZpZXI8dHlwZSwgbW9kaWZpZXI+OjphcHBseVZhbHVlKGJ1aWxkZXJTdGF0ZSwgdmFsdWUp
OyBcCiB9CiAKIERFRklORV9CT1JERVJfSU1BR0VfTU9ESUZJRVJfSEFORExFUihCb3JkZXJJbWFn
ZSwgT3V0c2V0KQpAQCAtNTk4LDE2ICs1OTgsMTYgQEAgREVGSU5FX0JPUkRFUl9JTUFHRV9NT0RJ
RklFUl9IQU5ETEVSKFdlYmtpdE1hc2tCb3hJbWFnZSwgV2lkdGgpCiAKICNpZiBFTkFCTEUoVEVY
VF9BVVRPU0laSU5HKQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5o
ZXJpdExpbmVIZWlnaHQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0TGluZUhlaWdodChTdHlsZTo6QnVpbGRl
clN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRM
aW5lSGVpZ2h0KExlbmd0aCB7IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+bGluZUhlaWdo
dCgpIH0pOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0U3BlY2lmaWVkTGluZUhlaWdo
dChMZW5ndGggeyBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPnNwZWNpZmllZExpbmVIZWln
aHQoKSB9KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRMaW5lSGVpZ2h0KExlbmd0aCB7
IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmxpbmVIZWlnaHQoKSB9KTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRMaW5lSGVpZ2h0KExlbmd0aCB7IGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpLnNwZWNpZmllZExpbmVIZWlnaHQoKSB9KTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbExpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewot
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TGluZUhlaWdodChSZW5kZXJTdHlsZTo6aW5p
dGlhbExpbmVIZWlnaHQoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRTcGVjaWZp
ZWRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRMaW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0
aWFsTGluZUhlaWdodCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRTcGVjaWZpZWRM
aW5lSGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsU3BlY2lmaWVkTGluZUhlaWdodCgpKTsKIH0K
IAogc3RhdGljIGlubGluZSBmbG9hdCBjb21wdXRlQmFzZVNwZWNpZmllZEZvbnRTaXplKGNvbnN0
IERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBib29sIHBlcmNl
bnRhZ2VBdXRvc2l6aW5nRW5hYmxlZCkKQEAgLTY1NCw5ICs2NTQsOSBAQCBzdGF0aWMgaW5saW5l
IGZsb2F0IGNvbXB1dGVMaW5lSGVpZ2h0TXVsdGlwbGllckR1ZVRvRm9udFNpemUoY29uc3QgRG9j
dW1lbnQmIGRvYwogICAgIHJldHVybiAxOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUxpbmVIZWlnaHQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1
ZSYgdmFsdWUpCiB7Ci0gICAgT3B0aW9uYWw8TGVuZ3RoPiBsaW5lSGVpZ2h0ID0gU3R5bGVCdWls
ZGVyQ29udmVydGVyOjpjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgMSk7
CisgICAgT3B0aW9uYWw8TGVuZ3RoPiBsaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TGluZUhlaWdodChidWlsZGVyU3RhdGUsIHZhbHVlLCAxKTsKICAgICBpZiAoIWxp
bmVIZWlnaHQpCiAgICAgICAgIHJldHVybjsKIApAQCAtNjY1LDE0NCArNjY1LDE0NCBAQCBpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVMaW5lSGVpZ2h0KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZQogICAgICAgICBjb21wdXRlZExpbmVIZWlnaHQgPSBsaW5lSGVp
Z2h0LnZhbHVlKCk7CiAgICAgZWxzZSB7CiAgICAgICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0g
ZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKLSAgICAgICAgYXV0byBtdWx0aXBs
aWVyID0gY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVlVG9Gb250U2l6ZShzdHlsZVJlc29s
dmVyLmRvY3VtZW50KCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCksIHByaW1pdGl2ZVZhbHVlKTsK
KyAgICAgICAgYXV0byBtdWx0aXBsaWVyID0gY29tcHV0ZUxpbmVIZWlnaHRNdWx0aXBsaWVyRHVl
VG9Gb250U2l6ZShidWlsZGVyU3RhdGUuZG9jdW1lbnQoKSwgYnVpbGRlclN0YXRlLnN0eWxlKCks
IHByaW1pdGl2ZVZhbHVlKTsKICAgICAgICAgaWYgKG11bHRpcGxpZXIgPT0gMSkKICAgICAgICAg
ICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IGxpbmVIZWlnaHQudmFsdWUoKTsKICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgY29tcHV0ZWRMaW5lSGVpZ2h0ID0gU3R5bGVCdWlsZGVyQ29udmVydGVy
Ojpjb252ZXJ0TGluZUhlaWdodChzdHlsZVJlc29sdmVyLCB2YWx1ZSwgbXVsdGlwbGllcikudmFs
dWUoKTsKKyAgICAgICAgICAgIGNvbXB1dGVkTGluZUhlaWdodCA9IFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y29udmVydExpbmVIZWlnaHQoYnVpbGRlclN0YXRlLCB2YWx1ZSwgbXVsdGlwbGllciku
dmFsdWUoKTsKICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldExpbmVIZWln
aHQoV1RGTW92ZShjb21wdXRlZExpbmVIZWlnaHQpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldFNwZWNpZmllZExpbmVIZWlnaHQoV1RGTW92ZShsaW5lSGVpZ2h0LnZhbHVlKCkpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRMaW5lSGVpZ2h0KFdURk1vdmUoY29tcHV0ZWRM
aW5lSGVpZ2h0KSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0U3BlY2lmaWVkTGluZUhl
aWdodChXVEZNb3ZlKGxpbmVIZWlnaHQudmFsdWUoKSkpOwogfQogCiAjZW5kaWYKIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRPdXRsaW5lU3R5bGUoU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0T3V0bGluZVN0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0
ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZUlzQXV0byhz
dHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm91dGxpbmVTdHlsZUlzQXV0bygpKTsKLSAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE91dGxpbmVTdHlsZShzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCktPm91dGxpbmVTdHlsZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRP
dXRsaW5lU3R5bGVJc0F1dG8oYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkub3V0bGluZVN0eWxl
SXNBdXRvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE91dGxpbmVTdHlsZShidWls
ZGVyU3RhdGUucGFyZW50U3R5bGUoKS5vdXRsaW5lU3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsT3V0bGluZVN0eWxlKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5pdGlhbE91dGxpbmVTdHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVy
U3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8oKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zZXRPdXRsaW5lU3R5bGUoUmVuZGVyU3R5bGU6OmluaXRpYWxCb3JkZXJTdHlsZSgp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJc0F1dG8oUmVuZGVy
U3R5bGU6OmluaXRpYWxPdXRsaW5lU3R5bGVJc0F1dG8oKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0T3V0bGluZVN0eWxlKFJlbmRlclN0eWxlOjppbml0aWFsQm9yZGVyU3R5bGUoKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZU91dGxpbmVT
dHlsZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVPdXRsaW5lU3R5bGUoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0
byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwog
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRPdXRsaW5lU3R5bGVJc0F1dG8ocHJpbWl0
aXZlVmFsdWUpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0T3V0bGluZVN0eWxlKHBy
aW1pdGl2ZVZhbHVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRPdXRsaW5lU3R5bGVJ
c0F1dG8ocHJpbWl0aXZlVmFsdWUpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE91dGxp
bmVTdHlsZShwcmltaXRpdmVWYWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbml0aWFsQ2xpcChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDbGlwKFN0eWxlOjpCdWls
ZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dENsaXAoTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSwgTGVuZ3RoKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0SGFzQ2xpcChmYWxzZSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0Q2xpcChMZW5ndGgoKSwgTGVuZ3RoKCksIExlbmd0aCgpLCBMZW5ndGgoKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzQ2xpcChmYWxzZSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q2xpcChTdHlsZVJlc29sdmVyJiBz
dHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVy
aXRDbGlwKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvKiBw
YXJlbnRTdHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKTsKLSAgICBpZiAoIXBhcmVu
dFN0eWxlLT5oYXNDbGlwKCkpCi0gICAgICAgIHJldHVybiBhcHBseUluaXRpYWxDbGlwKHN0eWxl
UmVzb2x2ZXIpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q2xpcChMZW5ndGggeyBw
YXJlbnRTdHlsZS0+Y2xpcFRvcCgpIH0sIExlbmd0aCB7IHBhcmVudFN0eWxlLT5jbGlwUmlnaHQo
KSB9LAotICAgICAgICBMZW5ndGggeyBwYXJlbnRTdHlsZS0+Y2xpcEJvdHRvbSgpIH0sIExlbmd0
aCB7IHBhcmVudFN0eWxlLT5jbGlwTGVmdCgpIH0pOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+c2V0SGFzQ2xpcCh0cnVlKTsKKyAgICBhdXRvJiBwYXJlbnRTdHlsZSA9IGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpOworICAgIGlmICghcGFyZW50U3R5bGUuaGFzQ2xpcCgpKQorICAgICAg
ICByZXR1cm4gYXBwbHlJbml0aWFsQ2xpcChidWlsZGVyU3RhdGUpOworICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldENsaXAoTGVuZ3RoIHsgcGFyZW50U3R5bGUuY2xpcFRvcCgpIH0sIExlbmd0
aCB7IHBhcmVudFN0eWxlLmNsaXBSaWdodCgpIH0sCisgICAgICAgIExlbmd0aCB7IHBhcmVudFN0
eWxlLmNsaXBCb3R0b20oKSB9LCBMZW5ndGggeyBwYXJlbnRTdHlsZS5jbGlwTGVmdCgpIH0pOwor
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0NsaXAodHJ1ZSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNsaXAoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ2xpcChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENT
U1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENT
U1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7CiAgICAgaWYgKGF1dG8qIHJlY3QgPSBwcmltaXRpdmVW
YWx1ZS5yZWN0VmFsdWUoKSkgewotICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0gc3R5bGVS
ZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoKTsKKyAgICAgICAgYXV0
byBjb252ZXJzaW9uRGF0YSA9IGJ1aWxkZXJTdGF0ZS5jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRh
KCk7CiAgICAgICAgIGF1dG8gdG9wID0gcmVjdC0+dG9wKCktPmNvbnZlcnRUb0xlbmd0aDxGaXhl
ZEludGVnZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4o
Y29udmVyc2lvbkRhdGEpOwogICAgICAgICBhdXRvIHJpZ2h0ID0gcmVjdC0+cmlnaHQoKS0+Y29u
dmVydFRvTGVuZ3RoPEZpeGVkSW50ZWdlckNvbnZlcnNpb24gfCBQZXJjZW50Q29udmVyc2lvbiB8
IEF1dG9Db252ZXJzaW9uPihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIGF1dG8gYm90dG9tID0g
cmVjdC0+Ym90dG9tKCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVnZXJDb252ZXJzaW9uIHwg
UGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVyc2lvbkRhdGEpOwogICAg
ICAgICBhdXRvIGxlZnQgPSByZWN0LT5sZWZ0KCktPmNvbnZlcnRUb0xlbmd0aDxGaXhlZEludGVn
ZXJDb252ZXJzaW9uIHwgUGVyY2VudENvbnZlcnNpb24gfCBBdXRvQ29udmVyc2lvbj4oY29udmVy
c2lvbkRhdGEpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENsaXAoV1RGTW92
ZSh0b3ApLCBXVEZNb3ZlKHJpZ2h0KSwgV1RGTW92ZShib3R0b20pLCBXVEZNb3ZlKGxlZnQpKTsK
LSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNDbGlwKHRydWUpOworICAgICAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDbGlwKFdURk1vdmUodG9wKSwgV1RGTW92ZShyaWdo
dCksIFdURk1vdmUoYm90dG9tKSwgV1RGTW92ZShsZWZ0KSk7CisgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldEhhc0NsaXAodHJ1ZSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgQVNTRVJU
KHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAgICAgICBhcHBs
eUluaXRpYWxDbGlwKHN0eWxlUmVzb2x2ZXIpOworICAgICAgICBhcHBseUluaXRpYWxDbGlwKGJ1
aWxkZXJTdGF0ZSk7CiAgICAgfQogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5VmFsdWVXZWJraXRMb2NhbGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
V2Via2l0TG9jYWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0
aXZlVmFsdWU+KHZhbHVlKTsKIAotICAgIEZvbnRDYXNjYWRlRGVzY3JpcHRpb24gZm9udERlc2Ny
aXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250RGVzY3JpcHRpb24oKTsKKyAgICBG
b250Q2FzY2FkZURlc2NyaXB0aW9uIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVBdXRvKQogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0TG9jYWxlKG51bGxB
dG9tKCkpOwogICAgIGVsc2UKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldExvY2FsZShwcmlt
aXRpdmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRG
b250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlV3JpdGluZ01vZGUoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRXcml0
aW5nTW9kZShkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKTsKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldEhhc0V4cGxpY2l0bHlTZXRXcml0aW5nTW9kZSh0cnVlKTsKKyAg
ICBidWlsZGVyU3RhdGUuc2V0V3JpdGluZ01vZGUoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzRXhwbGljaXRseVNldFdy
aXRpbmdNb2RlKHRydWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVXZWJraXRUZXh0T3JpZW50YXRpb24oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlV2Via2l0VGV4dE9yaWVudGF0aW9uKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc2V0VGV4dE9yaWVu
dGF0aW9uKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpOworICAgIGJ1aWxkZXJT
dGF0ZS5zZXRUZXh0T3JpZW50YXRpb24oZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVl
KSk7CiB9CiAKICNpZiBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QoU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFNpemVBZGp1c3QoU3R5bGU6OkJ1aWxkZXJT
dGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0
aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChw
cmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKQotICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChBdXRv
VGV4dFNpemVBZGp1c3RtZW50KSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRl
eHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChBdXRvVGV4dFNpemVBZGp1c3RtZW50KSk7
CiAgICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkK
LSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2l6ZUFkanVzdChUZXh0U2l6
ZUFkanVzdG1lbnQoTm9UZXh0U2l6ZUFkanVzdG1lbnQpKTsKKyAgICAgICAgYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3QoVGV4dFNpemVBZGp1c3RtZW50KE5vVGV4dFNpemVB
ZGp1c3RtZW50KSk7CiAgICAgZWxzZQotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dFRleHRTaXplQWRqdXN0KFRleHRTaXplQWRqdXN0bWVudChwcmltaXRpdmVWYWx1ZS5mbG9hdFZh
bHVlKCkpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNpemVBZGp1c3Qo
VGV4dFNpemVBZGp1c3RtZW50KHByaW1pdGl2ZVZhbHVlLmZsb2F0VmFsdWUoKSkpOwogCi0gICAg
c3R5bGVSZXNvbHZlci5zdGF0ZSgpLnNldEZvbnREaXJ0eSh0cnVlKTsKKyAgICBidWlsZGVyU3Rh
dGUuc2V0Rm9udERpcnR5KCk7CiB9CiAjZW5kaWYKIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlV2Via2l0VGV4dFpvb20oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlV2Via2l0VGV4dFpvb20oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
LCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2Fz
dDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0VGV4dFpvb20oVGV4dFpvb206Ok5vcm1hbCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFRleHRab29tKFRleHRab29tOjpOb3JtYWwpOwogICAgIGVsc2UgaWYgKHByaW1pdGl2
ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZVJlc2V0KQotICAgICAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldFRleHRab29tKFRleHRab29tOjpSZXNldCk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdGF0ZSgpLnNldEZvbnREaXJ0eSh0cnVlKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0VGV4dFpvb20oVGV4dFpvb206OlJlc2V0KTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9u
dERpcnR5KCk7CiB9CiAKICNpZiBFTkFCTEUoREFSS19NT0RFX0NTUykKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUNvbG9yU2NoZW1lKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0
Q29sb3JTY2hlbWUoU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0Q29sb3JTY2hlbWUoc3R5
bGVSZXNvbHZlciwgdmFsdWUpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0V4
cGxpY2l0bHlTZXRDb2xvclNjaGVtZSh0cnVlKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5z
ZXRDb2xvclNjaGVtZShTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRDb2xvclNjaGVtZShi
dWlsZGVyU3RhdGUsIHZhbHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFzRXhw
bGljaXRseVNldENvbG9yU2NoZW1lKHRydWUpOwogfQogI2VuZGlmCiAKIHRlbXBsYXRlPENTU1By
b3BlcnR5SUQgcHJvcGVydHk+Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VGV4dE9yQm94U2hhZG93VmFsdWUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUm
IHZhbHVlKQogewogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAg
ICAgIEFTU0VSVChkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9
PSBDU1NWYWx1ZU5vbmUpOwogICAgICAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUZXh0
U2hhZG93KQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0U2hhZG93
KG51bGxwdHIpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRv
dyhudWxscHRyKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRCb3hTaGFkb3cobnVsbHB0cik7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRCb3hTaGFkb3cobnVsbHB0cik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAg
ICBib29sIGlzRmlyc3RFbnRyeSA9IHRydWU7CiAgICAgZm9yIChhdXRvJiBpdGVtIDogZG93bmNh
c3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkpIHsKICAgICAgICAgYXV0byYgc2hhZG93VmFsdWUgPSBk
b3duY2FzdDxDU1NTaGFkb3dWYWx1ZT4oaXRlbS5nZXQoKSk7Ci0gICAgICAgIGF1dG8gY29udmVy
c2lvbkRhdGEgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0
YSgpOworICAgICAgICBhdXRvIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoKTsKICAgICAgICAgaW50IHggPSBzaGFkb3dWYWx1ZS54LT5jb21w
dXRlTGVuZ3RoPGludD4oY29udmVyc2lvbkRhdGEpOwogICAgICAgICBpbnQgeSA9IHNoYWRvd1Zh
bHVlLnktPmNvbXB1dGVMZW5ndGg8aW50Pihjb252ZXJzaW9uRGF0YSk7CiAgICAgICAgIGludCBi
bHVyID0gc2hhZG93VmFsdWUuYmx1ciA/IHNoYWRvd1ZhbHVlLmJsdXItPmNvbXB1dGVMZW5ndGg8
aW50Pihjb252ZXJzaW9uRGF0YSkgOiAwOwpAQCAtODEwLDk0ICs4MTAsOTQgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVRleHRPckJveFNoYWRvd1ZhbHVlKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmUKICAgICAgICAgU2hhZG93U3R5bGUgc2hhZG93U3R5bGUgPSBzaGFkb3dW
YWx1ZS5zdHlsZSAmJiBzaGFkb3dWYWx1ZS5zdHlsZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSW5z
ZXQgPyBJbnNldCA6IE5vcm1hbDsKICAgICAgICAgQ29sb3IgY29sb3I7CiAgICAgICAgIGlmIChz
aGFkb3dWYWx1ZS5jb2xvcikKLSAgICAgICAgICAgIGNvbG9yID0gc3R5bGVSZXNvbHZlci5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZSgqc2hhZG93VmFsdWUuY29sb3IpOworICAgICAgICAgICAgY29s
b3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKnNoYWRvd1ZhbHVlLmNv
bG9yKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmNvbG9yKCk7CisgICAgICAgICAgICBjb2xvciA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LmNvbG9yKCk7CiAgICAgICAgIGF1dG8gc2hhZG93RGF0YSA9IG1ha2VVbmlxdWU8U2hhZG93RGF0
YT4oSW50UG9pbnQoeCwgeSksIGJsdXIsIHNwcmVhZCwgc2hhZG93U3R5bGUsIHByb3BlcnR5ID09
IENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvciA6IENv
bG9yOjp0cmFuc3BhcmVudCk7CiAgICAgICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRl
eHRTaGFkb3cpCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFk
b3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlz
dCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldFRleHRTaGFkb3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRy
eSk7IC8vIGFkZCB0byB0aGUgbGlzdCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFk
b3coV1RGTW92ZShzaGFkb3dEYXRhKSwgIWlzRmlyc3RFbnRyeSk7IC8vIGFkZCB0byB0aGUgbGlz
dCBpZiB0aGlzIGlzIG5vdCB0aGUgZmlyc3QgZW50cnkKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5zdHlsZSgpLnNldEJveFNoYWRvdyhXVEZNb3ZlKHNoYWRvd0RhdGEpLCAhaXNGaXJzdEVudHJ5
KTsgLy8gYWRkIHRvIHRoZSBsaXN0IGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBlbnRyeQogICAg
ICAgICBpc0ZpcnN0RW50cnkgPSBmYWxzZTsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsVGV4dFNoYWRvdyhTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxU
ZXh0U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRTaGFkb3cobnVsbHB0cik7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0VGV4dFNoYWRvdyhudWxscHRyKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dFRleHRTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dFNoYWRvdyhzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPnRleHRTaGFkb3coKSA/IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnN0eWxlUmVzb2x2
ZXIucGFyZW50U3R5bGUoKS0+dGV4dFNoYWRvdygpKSA6IG51bGxwdHIpOworICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldFRleHRTaGFkb3coYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4
dFNoYWRvdygpID8gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqYnVpbGRlclN0YXRlLnBhcmVudFN0
eWxlKCkudGV4dFNoYWRvdygpKSA6IG51bGxwdHIpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVUZXh0U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlWYWx1ZVRleHRTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlUZXh0T3JCb3hTaGFkb3dWYWx1ZTxDU1NQcm9w
ZXJ0eVRleHRTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJv
eFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5VGV4dFNoYWRvdz4oYnVpbGRlclN0YXRlLCB2YWx1ZSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQm94U2hh
ZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEJveFNoYWRvdyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRCb3hTaGFkb3cobnVs
bHB0cik7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Qm94U2hhZG93KG51bGxwdHIpOwog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEJveFNoYWRv
dyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseUluaGVyaXRCb3hTaGFkb3coU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Qm94U2hhZG93KHN0eWxl
UmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+Ym94U2hhZG93KCkgPyBtYWtlVW5pcXVlPFNoYWRvd0Rh
dGE+KCpzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmJveFNoYWRvdygpKSA6IG51bGxwdHIp
OworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEJveFNoYWRvdyhidWlsZGVyU3RhdGUucGFy
ZW50U3R5bGUoKS5ib3hTaGFkb3coKSA/IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKmJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLmJveFNoYWRvdygpKSA6IG51bGxwdHIpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVCb3hTaGFkb3coU3R5bGVSZXNvbHZl
ciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlQm94U2hhZG93KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGFwcGx5VGV4dE9yQm94U2hhZG93VmFs
dWU8Q1NTUHJvcGVydHlCb3hTaGFkb3c+KHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBs
eVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1Byb3BlcnR5Qm94U2hhZG93PihidWlsZGVyU3RhdGUs
IHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRp
YWxXZWJraXRCb3hTaGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0Qm94U2hhZG93KFN0eWxl
OjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhcHBseUluaXRpYWxCb3hTaGFk
b3coc3R5bGVSZXNvbHZlcik7CisgICAgYXBwbHlJbml0aWFsQm94U2hhZG93KGJ1aWxkZXJTdGF0
ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0V2Vi
a2l0Qm94U2hhZG93KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEJveFNoYWRvdyhTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXBwbHlJbmhlcml0Qm94U2hhZG93KHN0
eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdEJveFNoYWRvdyhidWlsZGVyU3RhdGUpOwog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRCb3hT
aGFkb3coU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2Via2l0Qm94U2hhZG93KFN0
eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAg
IGFwcGx5VGV4dE9yQm94U2hhZG93VmFsdWU8Q1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3c+KHN0
eWxlUmVzb2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVRleHRPckJveFNoYWRvd1ZhbHVlPENTU1By
b3BlcnR5V2Via2l0Qm94U2hhZG93PihidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250RmFtaWx5KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5pdGlhbEZvbnRGYW1pbHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQog
ewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5mb250
RGVzY3JpcHRpb24oKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1dG8gaW5pdGlhbERlc2MgPSBGb250Q2Fz
Y2FkZURlc2NyaXB0aW9uKCk7CiAKICAgICAvLyBXZSBuZWVkIHRvIGFkanVzdCB0aGUgc2l6ZSB0
byBhY2NvdW50IGZvciB0aGUgZ2VuZXJpYyBmYW1pbHkgY2hhbmdlIGZyb20gbW9ub3NwYWNlIHRv
IG5vbi1tb25vc3BhY2UuCiAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCkpIHsKICAgICAgICAgaWYgKENTU1ZhbHVlSUQgc2l6ZUlkZW50aWZpZXIgPSBmb250RGVz
Y3JpcHRpb24ua2V5d29yZFNpemVBc0lkZW50aWZpZXIoKSkKLSAgICAgICAgICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHlsZTo6Zm9udFNpemVGb3JLZXl3
b3JkKHNpemVJZGVudGlmaWVyLCBmYWxzZSwgc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpKSk7Cisg
ICAgICAgICAgICBidWlsZGVyU3RhdGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBTdHls
ZTo6Zm9udFNpemVGb3JLZXl3b3JkKHNpemVJZGVudGlmaWVyLCBmYWxzZSwgYnVpbGRlclN0YXRl
LmRvY3VtZW50KCkpKTsKICAgICB9CiAgICAgaWYgKCFpbml0aWFsRGVzYy5maXJzdEZhbWlseSgp
LmlzRW1wdHkoKSkKICAgICAgICAgZm9udERlc2NyaXB0aW9uLnNldEZhbWlsaWVzKGluaXRpYWxE
ZXNjLmZhbWlsaWVzKCkpOwogCi0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24o
V1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRG
b250RmFtaWx5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRv
IGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9u
KCk7Ci0gICAgYXV0byBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLnBhcmVu
dFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0g
YnVpbGRlclN0YXRlLnN0eWxlKCkuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBwYXJlbnRG
b250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5mb250RGVzY3JpcHRp
b24oKTsKIAogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRGYW1pbGllcyhwYXJlbnRGb250RGVzY3Jp
cHRpb24uZmFtaWxpZXMoKSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldElzU3BlY2lmaWVkRm9u
dChwYXJlbnRGb250RGVzY3JpcHRpb24uaXNTcGVjaWZpZWRGb250KCkpOwotICAgIHN0eWxlUmVz
b2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAg
YnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250RmFt
aWx5KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGlu
ZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgYXV0byYg
dmFsdWVMaXN0ID0gZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CiAKLSAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICAvLyBCZWZvcmUgbWFwcGluZyBpbiBhIG5ldyBmb250LWZhbWlseSBw
cm9wZXJ0eSwgd2Ugc2hvdWxkIHJlc2V0IHRoZSBnZW5lcmljIGZhbWlseS4KICAgICBib29sIG9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplID0gZm9udERlc2NyaXB0aW9uLnVzZUZpeGVkRGVm
YXVsdFNpemUoKTsKIApAQCAtOTE2LDcgKzkxNiw3IEBAIGlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUZvbnRGYW1pbHkoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGNvbnRlbnRWYWx1ZS52YWx1
ZUlEKCkpIHsKICAgICAgICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRCb2R5OgotICAgICAgICAg
ICAgICAgIGZhbWlseSA9IHN0eWxlUmVzb2x2ZXIuc2V0dGluZ3MoKS5zdGFuZGFyZEZvbnRGYW1p
bHkoKTsKKyAgICAgICAgICAgICAgICBmYW1pbHkgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5z
ZXR0aW5ncygpLnN0YW5kYXJkRm9udEZhbWlseSgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZVNlcmlmOgogICAgICAgICAgICAgICAgIGZhbWlseSA9
IHNlcmlmRmFtaWx5OwpAQCAtOTY0LDM2ICs5NjQsMzYgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udEZhbWlseShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmUKIAogICAgIGlmIChmb250RGVzY3JpcHRpb24udXNlRml4ZWREZWZhdWx0U2l6ZSgpICE9IG9s
ZEZhbWlseVVzZWRGaXhlZERlZmF1bHRTaXplKSB7CiAgICAgICAgIGlmIChDU1NWYWx1ZUlEIHNp
emVJZGVudGlmaWVyID0gZm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplQXNJZGVudGlmaWVyKCkp
Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwg
U3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChzaXplSWRlbnRpZmllciwgIW9sZEZhbWlseVVzZWRG
aXhlZERlZmF1bHRTaXplLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpKTsKKyAgICAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIFN0eWxlOjpmb250U2l6
ZUZvcktleXdvcmQoc2l6ZUlkZW50aWZpZXIsICFvbGRGYW1pbHlVc2VkRml4ZWREZWZhdWx0U2l6
ZSwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpKTsKICAgICB9CiAKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IAotaW5saW5lIGJvb2wgU3R5bGVCdWlsZGVyQ3VzdG9tOjppc1ZhbGlkRGlzcGxheVZhbHVlKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIERpc3BsYXlUeXBlIGRpc3BsYXkpCitpbmxpbmUg
Ym9vbCBTdHlsZUJ1aWxkZXJDdXN0b206OmlzVmFsaWREaXNwbGF5VmFsdWUoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBEaXNwbGF5VHlwZSBkaXNwbGF5KQogewotICAgIGlmIChp
czxTVkdFbGVtZW50PihzdHlsZVJlc29sdmVyLmVsZW1lbnQoKSkgJiYgc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKKyAgICBpZiAoaXM8U1ZHRWxl
bWVudD4oYnVpbGRlclN0YXRlLmVsZW1lbnQoKSkgJiYgYnVpbGRlclN0YXRlLnN0eWxlKCkuc3R5
bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCiAgICAgICAgIHJldHVybiBkaXNwbGF5ID09IERp
c3BsYXlUeXBlOjpJbmxpbmUgfHwgZGlzcGxheSA9PSBEaXNwbGF5VHlwZTo6QmxvY2sgfHwgZGlz
cGxheSA9PSBEaXNwbGF5VHlwZTo6Tm9uZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXREaXNwbGF5KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdERpc3BsYXkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAg
IERpc3BsYXlUeXBlIGRpc3BsYXkgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmRpc3Bs
YXkoKTsKLSAgICBpZiAoaXNWYWxpZERpc3BsYXlWYWx1ZShzdHlsZVJlc29sdmVyLCBkaXNwbGF5
KSkKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXREaXNwbGF5KGRpc3BsYXkpOwor
ICAgIERpc3BsYXlUeXBlIGRpc3BsYXkgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5kaXNw
bGF5KCk7CisgICAgaWYgKGlzVmFsaWREaXNwbGF5VmFsdWUoYnVpbGRlclN0YXRlLCBkaXNwbGF5
KSkKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0RGlzcGxheShkaXNwbGF5KTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRGlzcGxheShTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVEaXNwbGF5KFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIERpc3BsYXlUeXBlIGRpc3Bs
YXkgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpOwotICAgIGlmIChpc1ZhbGlk
RGlzcGxheVZhbHVlKHN0eWxlUmVzb2x2ZXIsIGRpc3BsYXkpKQotICAgICAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldERpc3BsYXkoZGlzcGxheSk7CisgICAgaWYgKGlzVmFsaWREaXNwbGF5
VmFsdWUoYnVpbGRlclN0YXRlLCBkaXNwbGF5KSkKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0RGlzcGxheShkaXNwbGF5KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVy
LCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
VmFsdWVCYXNlbGluZVNoaWZ0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NT
VmFsdWUmIHZhbHVlKQogewotICAgIFNWR1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlUmVz
b2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBTVkdSZW5kZXJTdHlsZSYgc3Zn
U3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGF1dG8m
IHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAg
ICBpZiAocHJpbWl0aXZlVmFsdWUuaXNWYWx1ZUlEKCkpIHsKICAgICAgICAgc3dpdGNoIChwcmlt
aXRpdmVWYWx1ZS52YWx1ZUlEKCkpIHsKQEAgLTEwMTUsNTcgKzEwMTUsNTcgQEAgaW5saW5lIHZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQmFzZWxpbmVTaGlmdChTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc28KICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsV2Via2l0QXNwZWN0UmF0aW8oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsV2Via2l0
QXNwZWN0UmF0aW8oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9UeXBlKFJlbmRlclN0eWxlOjppbml0
aWFsQXNwZWN0UmF0aW9UeXBlKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9EZW5vbWluYXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvRGVub21p
bmF0b3IoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVy
YXRvcihSZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShSZW5kZXJTdHlsZTo6aW5pdGlh
bEFzcGVjdFJhdGlvVHlwZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RS
YXRpb0Rlbm9taW5hdG9yKFJlbmRlclN0eWxlOjppbml0aWFsQXNwZWN0UmF0aW9EZW5vbWluYXRv
cigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihS
ZW5kZXJTdHlsZTo6aW5pdGlhbEFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdFdlYmtpdEFzcGVjdFJhdGlvKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdFdlYmtpdEFzcGVjdFJhdGlvKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSkKIHsKLSAgICBpZiAoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5hc3Bl
Y3RSYXRpb1R5cGUoKSA9PSBBc3BlY3RSYXRpb1R5cGU6OkF1dG8pCisgICAgaWYgKGJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlvVHlwZSgpID09IEFzcGVjdFJhdGlvVHlwZTo6
QXV0bykKICAgICAgICAgcmV0dXJuOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNw
ZWN0UmF0aW9UeXBlKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+YXNwZWN0UmF0aW9UeXBl
KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0QXNwZWN0UmF0aW9EZW5vbWluYXRv
cihzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvRGVub21pbmF0b3IoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmFzcGVjdFJhdGlvTnVtZXJhdG9yKCkpOworICAgIGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShidWlsZGVyU3RhdGUucGFyZW50
U3R5bGUoKS5hc3BlY3RSYXRpb1R5cGUoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
QXNwZWN0UmF0aW9EZW5vbWluYXRvcihidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5hc3BlY3RS
YXRpb0Rlbm9taW5hdG9yKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJh
dGlvTnVtZXJhdG9yKGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmFzcGVjdFJhdGlvTnVtZXJh
dG9yKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVX
ZWJraXRBc3BlY3RSYXRpbyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYg
dmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXZWJraXRB
c3BlY3RSYXRpbyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2
YWx1ZSkKIHsKICAgICBpZiAoaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSkgewogICAgICAg
ICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1
ZSk7CiAKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZy
b21EaW1lbnNpb25zKQotICAgICAgICAgICAgcmV0dXJuIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6RnJvbURpbWVuc2lvbnMpOworICAg
ICAgICAgICAgcmV0dXJuIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEFzcGVjdFJhdGlvVHlwZShB
c3BlY3RSYXRpb1R5cGU6OkZyb21EaW1lbnNpb25zKTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZh
bHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUZyb21JbnRyaW5zaWMpCi0gICAgICAgICAgICByZXR1
cm4gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9U
eXBlOjpGcm9tSW50cmluc2ljKTsKKyAgICAgICAgICAgIHJldHVybiBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb1R5cGUoQXNwZWN0UmF0aW9UeXBlOjpGcm9tSW50cmluc2ljKTsK
IAogICAgICAgICBBU1NFUlQocHJpbWl0aXZlVmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlQXV0
byk7Ci0gICAgICAgIHJldHVybiBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
VHlwZShBc3BlY3RSYXRpb1R5cGU6OkF1dG8pOworICAgICAgICByZXR1cm4gYnVpbGRlclN0YXRl
LnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6QXV0byk7CiAgICAg
fQogCiAgICAgYXV0byYgYXNwZWN0UmF0aW9WYWx1ZSA9IGRvd25jYXN0PENTU0FzcGVjdFJhdGlv
VmFsdWU+KHZhbHVlKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlv
VHlwZShBc3BlY3RSYXRpb1R5cGU6OlNwZWNpZmllZCk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFzcGVjdFJhdGlvVmFsdWUuZGVub21pbmF0
b3JWYWx1ZSgpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEFzcGVjdFJhdGlvTnVt
ZXJhdG9yKGFzcGVjdFJhdGlvVmFsdWUubnVtZXJhdG9yVmFsdWUoKSk7CisgICAgYnVpbGRlclN0
YXRlLnN0eWxlKCkuc2V0QXNwZWN0UmF0aW9UeXBlKEFzcGVjdFJhdGlvVHlwZTo6U3BlY2lmaWVk
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRBc3BlY3RSYXRpb0Rlbm9taW5hdG9yKGFz
cGVjdFJhdGlvVmFsdWUuZGVub21pbmF0b3JWYWx1ZSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRBc3BlY3RSYXRpb051bWVyYXRvcihhc3BlY3RSYXRpb1ZhbHVlLm51bWVyYXRvclZh
bHVlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bFdlYmtpdFRleHRFbXBoYXNpc1N0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFdlYmtpdFRleHRFbXBo
YXNpc1N0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwoUmVuZGVyU3R5bGU6OmluaXRp
YWxUZXh0RW1waGFzaXNGaWxsKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4
dEVtcGhhc2lzTWFyayhSZW5kZXJTdHlsZTo6aW5pdGlhbFRleHRFbXBoYXNpc01hcmsoKSk7Ci0g
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRl
clN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKKyAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNGaWxsKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVt
cGhhc2lzRmlsbCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNN
YXJrKFJlbmRlclN0eWxlOjppbml0aWFsVGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKFJlbmRlclN0eWxlOjppbml0
aWFsVGV4dEVtcGhhc2lzQ3VzdG9tTWFyaygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaGVyaXRXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZVJlc29s
dmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaGVyaXRXZWJraXRUZXh0RW1waGFzaXNTdHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNG
aWxsKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+dGV4dEVtcGhhc2lzRmlsbCgpKTsKLSAg
ICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc01hcmsoc3R5bGVSZXNvbHZl
ci5wYXJlbnRTdHlsZSgpLT50ZXh0RW1waGFzaXNNYXJrKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhzdHlsZVJlc29sdmVyLnBhcmVudFN0
eWxlKCktPnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0VGV4dEVtcGhhc2lzRmlsbChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS50ZXh0RW1w
aGFzaXNGaWxsKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01h
cmsoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkudGV4dEVtcGhhc2lzTWFyaygpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKGJ1aWxkZXJTdGF0
ZS5wYXJlbnRTdHlsZSgpLnRleHRFbXBoYXNpc0N1c3RvbU1hcmsoKSk7CiB9CiAKLWlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNpc1N0eWxl
KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewog
ICAgIGlmIChpczxDU1NWYWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBhdXRvJiBsaXN0ID0g
ZG93bmNhc3Q8Q1NTVmFsdWVMaXN0Pih2YWx1ZSk7CkBAIC0xMDc0LDM4ICsxMDc0LDM4IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVdlYmtpdFRleHRFbXBoYXNp
c1N0eWxlKFN0eWxlUmVzb2x2ZXImCiAgICAgICAgIGZvciAoYXV0byYgaXRlbSA6IGxpc3QpIHsK
ICAgICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlJiB2YWx1ZSA9IGRvd25jYXN0PENTU1ByaW1p
dGl2ZVZhbHVlPihpdGVtLmdldCgpKTsKICAgICAgICAgICAgIGlmICh2YWx1ZS52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVGaWxsZWQgfHwgdmFsdWUudmFsdWVJRCgpID09IENTU1ZhbHVlT3BlbikKLSAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBoYXNpc0ZpbGwo
dmFsdWUpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBo
YXNpc0ZpbGwodmFsdWUpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzTWFyayh2YWx1ZSk7CiAg
ICAgICAgIH0KLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXND
dXN0b21NYXJrKG51bGxBdG9tKCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRU
ZXh0RW1waGFzaXNDdXN0b21NYXJrKG51bGxBdG9tKCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCiAgICAgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpOwogICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc1N0cmluZygpKSB7Ci0gICAgICAg
IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChUZXh0RW1waGFzaXNG
aWxsOjpGaWxsZWQpOwotICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFRleHRFbXBo
YXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6Q3VzdG9tKTsKLSAgICAgICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKHByaW1pdGl2ZVZhbHVlLnN0cmlu
Z1ZhbHVlKCkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNG
aWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHls
ZSgpLnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6Q3VzdG9tKTsKKyAgICAg
ICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhwcmltaXRp
dmVWYWx1ZS5zdHJpbmdWYWx1ZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzQ3VzdG9tTWFyayhudWxsQXRvbSgp
KTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRUZXh0RW1waGFzaXNDdXN0b21NYXJrKG51
bGxBdG9tKCkpOwogCiAgICAgaWYgKHByaW1pdGl2ZVZhbHVlLnZhbHVlSUQoKSA9PSBDU1NWYWx1
ZUZpbGxlZCB8fCBwcmltaXRpdmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVPcGVuKSB7Ci0g
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRp
dmVWYWx1ZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lz
TWFyayhUZXh0RW1waGFzaXNNYXJrOjpBdXRvKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0VGV4dEVtcGhhc2lzRmlsbChwcmltaXRpdmVWYWx1ZSk7CisgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc01hcmsoVGV4dEVtcGhhc2lzTWFyazo6QXV0byk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRUZXh0RW1w
aGFzaXNGaWxsKFRleHRFbXBoYXNpc0ZpbGw6OkZpbGxlZCk7Ci0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0VGV4dEVtcGhhc2lzTWFyayhwcmltaXRpdmVWYWx1ZSk7CisgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFRleHRFbXBoYXNpc0ZpbGwoVGV4dEVtcGhhc2lzRmls
bDo6RmlsbGVkKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0VGV4dEVtcGhhc2lz
TWFyayhwcmltaXRpdmVWYWx1ZSk7CiAgICAgfQogfQogCiB0ZW1wbGF0ZSA8U3R5bGVCdWlsZGVy
Q3VzdG9tOjpDb3VudGVyQmVoYXZpb3IgY291bnRlckJlaGF2aW9yPgotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdENv
dW50ZXIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8mIG1h
cCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKLSAg
ICBmb3IgKGF1dG8mIGtleVZhbHVlIDogY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKSktPmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKKyAgICBh
dXRvJiBtYXAgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NDb3VudGVyRGlyZWN0aXZlcygp
OworICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4oYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkpLmFjY2Vzc0NvdW50ZXJEaXJlY3RpdmVzKCkpIHsKICAg
ICAgICAgYXV0byYgZGlyZWN0aXZlcyA9IG1hcC5hZGQoa2V5VmFsdWUua2V5LCBDb3VudGVyRGly
ZWN0aXZlcyB7IH0pLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKGNvdW50ZXJCZWhhdmlv
ciA9PSBSZXNldCkKICAgICAgICAgICAgIGRpcmVjdGl2ZXMucmVzZXRWYWx1ZSA9IGtleVZhbHVl
LnZhbHVlLnJlc2V0VmFsdWU7CkBAIC0xMTE1LDE0ICsxMTE1LDE0IEBAIGlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRlcihTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyCiB9CiAKIHRlbXBsYXRlIDxTdHlsZUJ1aWxkZXJDdXN0b206OkNvdW50ZXJCZWhh
dmlvciBjb3VudGVyQmVoYXZpb3I+Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb3VudGVyKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2
YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAg
ICAgYm9vbCBzZXRDb3VudGVySW5jcmVtZW50VG9Ob25lID0gY291bnRlckJlaGF2aW9yID09IElu
Y3JlbWVudCAmJiBpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpICYmIGRvd25jYXN0PENTU1By
aW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZTsKIAogICAgIGlm
ICghaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYgIXNldENvdW50ZXJJbmNyZW1lbnRUb05vbmUp
CiAgICAgICAgIHJldHVybjsKIAotICAgIENvdW50ZXJEaXJlY3RpdmVNYXAmIG1hcCA9IHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzQ291bnRlckRpcmVjdGl2ZXMoKTsKKyAgICBDb3VudGVy
RGlyZWN0aXZlTWFwJiBtYXAgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NDb3VudGVyRGly
ZWN0aXZlcygpOwogICAgIGZvciAoYXV0byYga2V5VmFsdWUgOiBtYXApIHsKICAgICAgICAgaWYg
KGNvdW50ZXJCZWhhdmlvciA9PSBSZXNldCkKICAgICAgICAgICAgIGtleVZhbHVlLnZhbHVlLnJl
c2V0VmFsdWUgPSBXVEY6Om51bGxvcHQ7CkBAIC0xMTQ1LDg0ICsxMTQ1LDg0IEBAIGlubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXIoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlciwKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsQ291bnRlckluY3JlbWVudChTdHlsZVJlc29sdmVyJikgeyB9Citpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvdW50ZXJJbmNyZW1lbnQo
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5SW5oZXJpdENvdW50ZXJJbmNyZW1lbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNv
bHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q291bnRl
ckluY3JlbWVudChTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXBw
bHlJbmhlcml0Q291bnRlcjxJbmNyZW1lbnQ+KHN0eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5o
ZXJpdENvdW50ZXI8SW5jcmVtZW50PihidWlsZGVyU3RhdGUpOwogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb3VudGVySW5jcmVtZW50KFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJJbmNyZW1lbnQoU3R5bGU6OkJ1aWxkZXJTdGF0
ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlWYWx1ZUNvdW50
ZXI8SW5jcmVtZW50PihzdHlsZVJlc29sdmVyLCB2YWx1ZSk7CisgICAgYXBwbHlWYWx1ZUNvdW50
ZXI8SW5jcmVtZW50PihidWlsZGVyU3RhdGUsIHZhbHVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVyUmVzZXQoU3R5bGVSZXNvbHZlciYp
IHsgfQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxDb3VudGVy
UmVzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYpIHsgfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdENvdW50ZXJSZXNldChTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRDb3Vu
dGVyUmVzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGFwcGx5
SW5oZXJpdENvdW50ZXI8UmVzZXQ+KHN0eWxlUmVzb2x2ZXIpOworICAgIGFwcGx5SW5oZXJpdENv
dW50ZXI8UmVzZXQ+KGJ1aWxkZXJTdGF0ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRl
ckN1c3RvbTo6YXBwbHlWYWx1ZUNvdW50ZXJSZXNldChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29s
dmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVDb3VudGVyUmVzZXQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXBwbHlWYWx1ZUNvdW50ZXI8UmVzZXQ+KHN0eWxlUmVz
b2x2ZXIsIHZhbHVlKTsKKyAgICBhcHBseVZhbHVlQ291bnRlcjxSZXNldD4oYnVpbGRlclN0YXRl
LCB2YWx1ZSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsQ3Vyc29yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1cnNvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBi
dWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5jbGVhckN1cnNvckxp
c3QoKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNvcihSZW5kZXJTdHlsZTo6
aW5pdGlhbEN1cnNvcigpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5jbGVhckN1cnNvckxp
c3QoKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoUmVuZGVyU3R5bGU6Omlu
aXRpYWxDdXJzb3IoKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBw
bHlJbmhlcml0Q3Vyc29yKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEN1cnNvcihTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJz
b3Ioc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5jdXJzb3IoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDdXJzb3JMaXN0KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+
Y3Vyc29ycygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoYnVpbGRlclN0
YXRlLnBhcmVudFN0eWxlKCkuY3Vyc29yKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNl
dEN1cnNvckxpc3QoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuY3Vyc29ycygpKTsKIH0KIAot
aW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQ3Vyc29yKFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxl
QnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUN1cnNvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
PmNsZWFyQ3Vyc29yTGlzdCgpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ3Vyc29y
TGlzdCgpOwogICAgIGlmIChpczxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAg
IEN1cnNvclR5cGUgY3Vyc29yID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsK
LSAgICAgICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y3Vyc29yKCkgIT0gY3Vyc29yKQot
ICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoY3Vyc29yKTsKKyAg
ICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmN1cnNvcigpICE9IGN1cnNvcikKKyAgICAg
ICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEN1cnNvcihjdXJzb3IpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDdXJzb3IoQ3Vy
c29yVHlwZTo6QXV0byk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q3Vyc29yKEN1cnNv
clR5cGU6OkF1dG8pOwogICAgIGF1dG8mIGxpc3QgPSBkb3duY2FzdDxDU1NWYWx1ZUxpc3Q+KHZh
bHVlKTsKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBsaXN0KSB7CiAgICAgICAgIGlmIChpczxDU1ND
dXJzb3JJbWFnZVZhbHVlPihpdGVtKSkgewogICAgICAgICAgICAgYXV0byYgaW1hZ2UgPSBkb3du
Y2FzdDxDU1NDdXJzb3JJbWFnZVZhbHVlPihpdGVtLmdldCgpKTsKLSAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+YWRkQ3Vyc29yKHN0eWxlUmVzb2x2ZXIuc3R5bGVJbWFnZShpbWFn
ZSksIGltYWdlLmhvdFNwb3QoKSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5h
ZGRDdXJzb3IoYnVpbGRlclN0YXRlLmNyZWF0ZVN0eWxlSW1hZ2UoaW1hZ2UpLCBpbWFnZS5ob3RT
cG90KCkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIAotICAgICAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldEN1cnNvcihkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4o
aXRlbS5nZXQoKSkpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDdXJzb3IoZG93
bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KGl0ZW0uZ2V0KCkpKTsKICAgICAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShpdGVtLnB0cigpID09IGxpc3QuaXRlbShsaXN0Lmxlbmd0aCgpIC0gMSksICJD
dXJzb3IgSUQgZmFsbGJhY2sgc2hvdWxkIGFsd2F5cyBiZSBsYXN0IGluIHRoZSBsaXN0Iik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3Rv
bTo6YXBwbHlJbml0aWFsRmlsbChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGaWxsKFN0eWxlOjpCdWlsZGVy
U3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+YWNjZXNzU1ZHU3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQo
U1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCksIFNWR1JlbmRlclN0eWxlOjpp
bml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRV
cmkoKSwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIGF1dG8mIHN2
Z1N0eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdT
dHlsZS5zZXRGaWxsUGFpbnQoU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxGaWxsUGFpbnRUeXBlKCks
IFNWR1JlbmRlclN0eWxlOjppbml0aWFsRmlsbFBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6
OmluaXRpYWxGaWxsUGFpbnRVcmkoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1JlZ3Vs
YXJTdHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGaWxs
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5oZXJpdEZpbGwoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRl
KQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5hY2Nlc3NT
VkdTdHlsZSgpOwotICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIHN2Z1N0eWxlLnNldEZpbGxQYWludChzdmdQYXJl
bnRTdHlsZS5maWxsUGFpbnRUeXBlKCksIHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludENvbG9yKCks
IHN2Z1BhcmVudFN0eWxlLmZpbGxQYWludFVyaSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVy
dHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRM
aW5rU3R5bGUoKSk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5h
Y2Nlc3NTVkdTdHlsZSgpOworICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkuc3ZnU3R5bGUoKTsKKyAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQoc3Zn
UGFyZW50U3R5bGUuZmlsbFBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRDb2xv
cigpLCBzdmdQYXJlbnRTdHlsZS5maWxsUGFpbnRVcmkoKSwgYnVpbGRlclN0YXRlLmFwcGx5UHJv
cGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKTsKIAogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5VmFsdWVGaWxsKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1
ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUZpbGwoU3R5bGU6
OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0
byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7Cisg
ICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgp
OwogICAgIGNvbnN0IGF1dG8qIGxvY2FsVmFsdWUgPSB2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkg
PyAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSA6IG51bGxwdHI7CiAgICAgU3Ry
aW5nIHVybDsKICAgICBpZiAodmFsdWUuaXNWYWx1ZUxpc3QoKSkgewpAQCAtMTI0MiwzMSArMTI0
MiwzMSBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGaWxsKFN0
eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIENTUwogICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1
ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkK
ICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6
IFNWR1BhaW50VHlwZTo6VVJJTm9uZTsKICAgICBlbHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVl
SUQoKSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsK
LSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAg
IGNvbG9yID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuY29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBl
ID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlwZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRU
eXBlOjpVUklDdXJyZW50Q29sb3I7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHls
ZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAg
Y29sb3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUp
OwogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNFbXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvciA6IFNWR1BhaW50VHlwZTo6VVJJUkdCQ29sb3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNl
dEZpbGxQYWludChwYWludFR5cGUsIGNvbG9yLCB1cmwsIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRl
ZExpbmtTdHlsZSgpKTsKKyAgICBzdmdTdHlsZS5zZXRGaWxsUGFpbnQocGFpbnRUeXBlLCBjb2xv
ciwgdXJsLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIGJ1aWxk
ZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbFN0cm9rZShTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUlu
aXRpYWxTdHJva2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIFNW
R1JlbmRlclN0eWxlJiBzdmdTdHlsZSA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+YWNjZXNzU1ZH
U3R5bGUoKTsKLSAgICBzdmdTdHlsZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5p
dGlhbFN0cm9rZVBhaW50VHlwZSgpLCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50
Q29sb3IoKSwgU1ZHUmVuZGVyU3R5bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBzdHlsZVJl
c29sdmVyLmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmFwcGx5
UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CisgICAgU1ZHUmVuZGVyU3R5bGUmIHN2Z1N0
eWxlID0gYnVpbGRlclN0YXRlLnN0eWxlKCkuYWNjZXNzU1ZHU3R5bGUoKTsKKyAgICBzdmdTdHls
ZS5zZXRTdHJva2VQYWludChTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50VHlwZSgp
LCBTVkdSZW5kZXJTdHlsZTo6aW5pdGlhbFN0cm9rZVBhaW50Q29sb3IoKSwgU1ZHUmVuZGVyU3R5
bGU6OmluaXRpYWxTdHJva2VQYWludFVyaSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRv
UmVndWxhclN0eWxlKCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dFN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRTdHJva2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIGF1dG8mIHN2Z1N0eWxlID0gc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5hY2Nlc3NTVkdTdHlsZSgpOwotICAgIGF1dG8mIHN2Z1BhcmVudFN0eWxlID0gc3R5bGVSZXNv
bHZlci5wYXJlbnRTdHlsZSgpLT5zdmdTdHlsZSgpOwotICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBh
aW50KHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJlbnRTdHlsZS5zdHJv
a2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VXJpKCksIHN0eWxlUmVz
b2x2ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCksIHN0eWxlUmVzb2x2ZXIuYXBwbHlQ
cm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKTsKKyAgICBhdXRvJiBzdmdTdHlsZSA9IGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnUGFyZW50U3R5
bGUgPSBidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5zdmdTdHlsZSgpOworICAgIHN2Z1N0eWxl
LnNldFN0cm9rZVBhaW50KHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VHlwZSgpLCBzdmdQYXJl
bnRTdHlsZS5zdHJva2VQYWludENvbG9yKCksIHN2Z1BhcmVudFN0eWxlLnN0cm9rZVBhaW50VXJp
KCksIGJ1aWxkZXJTdGF0ZS5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgYnVpbGRlclN0
YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSk7CiB9CiAKLWlubGluZSB2b2lk
IFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZVN0cm9rZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0
b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byYgc3ZnU3R5bGUgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPmFjY2Vzc1NWR1N0eWxlKCk7CisgICAgYXV0byYgc3ZnU3R5bGUgPSBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5hY2Nlc3NTVkdTdHlsZSgpOwogICAgIGNvbnN0IGF1dG8qIGxvY2FsVmFsdWUg
PSB2YWx1ZS5pc1ByaW1pdGl2ZVZhbHVlKCkgPyAmZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlKSA6IG51bGxwdHI7CiAgICAgU3RyaW5nIHVybDsKICAgICBpZiAodmFsdWUuaXNWYWx1
ZUxpc3QoKSkgewpAQCAtMTI4NiwzMiArMTI4NiwzMiBAQCBpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2UoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
QwogICAgIH0gZWxzZSBpZiAobG9jYWxWYWx1ZS0+aXNWYWx1ZUlEKCkgJiYgbG9jYWxWYWx1ZS0+
dmFsdWVJRCgpID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1w
dHkoKSA/IFNWR1BhaW50VHlwZTo6Tm9uZSA6IFNWR1BhaW50VHlwZTo6VVJJTm9uZTsKICAgICBl
bHNlIGlmIChsb2NhbFZhbHVlLT5pc1ZhbHVlSUQoKSAmJiBsb2NhbFZhbHVlLT52YWx1ZUlEKCkg
PT0gQ1NTVmFsdWVDdXJyZW50Y29sb3IpIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPmNvbG9yKCk7CisgICAgICAgIGNvbG9yID0gYnVpbGRlclN0YXRlLnN0eWxlKCku
Y29sb3IoKTsKICAgICAgICAgcGFpbnRUeXBlID0gdXJsLmlzRW1wdHkoKSA/IFNWR1BhaW50VHlw
ZTo6Q3VycmVudENvbG9yIDogU1ZHUGFpbnRUeXBlOjpVUklDdXJyZW50Q29sb3I7CiAgICAgfSBl
bHNlIHsKLSAgICAgICAgY29sb3IgPSBzdHlsZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZh
bHVlKCpsb2NhbFZhbHVlKTsKKyAgICAgICAgY29sb3IgPSBidWlsZGVyU3RhdGUuY29sb3JGcm9t
UHJpbWl0aXZlVmFsdWUoKmxvY2FsVmFsdWUpOwogICAgICAgICBwYWludFR5cGUgPSB1cmwuaXNF
bXB0eSgpID8gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvciA6IFNWR1BhaW50VHlwZTo6VVJJUkdCQ29s
b3I7CiAgICAgfQotICAgIHN2Z1N0eWxlLnNldFN0cm9rZVBhaW50KHBhaW50VHlwZSwgY29sb3Is
IHVybCwgc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSwgc3R5bGVS
ZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpOworICAgIHN2Z1N0eWxl
LnNldFN0cm9rZVBhaW50KHBhaW50VHlwZSwgY29sb3IsIHVybCwgYnVpbGRlclN0YXRlLmFwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpLCBidWlsZGVyU3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlz
aXRlZExpbmtTdHlsZSgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaXRpYWxDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbENvbnRlbnQoU3R5bGU6OkJ1aWxk
ZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xl
YXJDb250ZW50KCk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuY2xlYXJDb250ZW50KCk7CiB9
CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Q29udGVudChT
dHlsZVJlc29sdmVyJikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhl
cml0Q29udGVudChTdHlsZTo6QnVpbGRlclN0YXRlJikKIHsKICAgICAvLyBGSVhNRTogSW4gQ1NT
MywgaXQgd2lsbCBiZSBwb3NzaWJsZSB0byBpbmhlcml0IGNvbnRlbnQuIEluIENTUzIgaXQgaXMg
bm90LiBUaGlzCiAgICAgLy8gbm90ZSBpcyBhIHJlbWluZGVyIHRoYXQgZXZlbnR1YWxseSAiaW5o
ZXJpdCIgbmVlZHMgdG8gYmUgc3VwcG9ydGVkLgogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIs
IENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlW
YWx1ZUNvbnRlbnQoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYg
dmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkpIHsKICAgICAg
ICAgY29uc3QgYXV0byYgcHJpbWl0aXZlVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1
ZT4odmFsdWUpOwogICAgICAgICBBU1NFUlRfVU5VU0VEKHByaW1pdGl2ZVZhbHVlLCBwcmltaXRp
dmVWYWx1ZS52YWx1ZUlEKCkgPT0gQ1NTVmFsdWVOb3JtYWwgfHwgcHJpbWl0aXZlVmFsdWUudmFs
dWVJRCgpID09IENTU1ZhbHVlTm9uZSk7Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
Y2xlYXJDb250ZW50KCk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ29udGVu
dCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xMzE5LDE3ICsxMzE5LDE3IEBAIGlu
bGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNv
bHZlciYgc3R5bGVSZXNvbHZlciwKICAgICBmb3IgKGF1dG8mIGl0ZW0gOiBkb3duY2FzdDxDU1NW
YWx1ZUxpc3Q+KHZhbHVlKSkgewogICAgICAgICBpZiAoaXM8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1
ZT4oaXRlbSkpIHsKICAgICAgICAgICAgIGlmIChpczxDU1NHcmFkaWVudFZhbHVlPihpdGVtKSkK
LSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoU3R5bGVH
ZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKGRvd25jYXN0PENTU0dyYWRpZW50VmFsdWU+KGl0ZW0uZ2V0
KCkpLmdyYWRpZW50V2l0aFN0eWxlc1Jlc29sdmVkKHN0eWxlUmVzb2x2ZXIpKSwgZGlkU2V0KTsK
KyAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50KFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3duY2FzdDxDU1NHcmFkaWVudFZhbHVlPihpdGVtLmdldCgp
KS5ncmFkaWVudFdpdGhTdHlsZXNSZXNvbHZlZChidWlsZGVyU3RhdGUuc3R5bGVSZXNvbHZlcigp
KSksIGRpZFNldCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShkb3du
Y2FzdDxDU1NJbWFnZUdlbmVyYXRvclZhbHVlPihpdGVtLmdldCgpKSksIGRpZFNldCk7CisgICAg
ICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChTdHlsZUdlbmVyYXRl
ZEltYWdlOjpjcmVhdGUoZG93bmNhc3Q8Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZT4oaXRlbS5nZXQo
KSkpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNl
IGlmIChpczxDU1NJbWFnZVNldFZhbHVlPihpdGVtKSkgewotICAgICAgICAgICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxlQ2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwg
ZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5
bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0
ID0gdHJ1ZTsKICAgICAgICAgfQogCiAgICAgICAgIGlmIChpczxDU1NJbWFnZVZhbHVlPihpdGVt
KSkgewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFN0eWxl
Q2FjaGVkSW1hZ2U6OmNyZWF0ZShpdGVtKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoU3R5bGVDYWNoZWRJbWFnZTo6Y3JlYXRlKGl0ZW0pLCBk
aWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgICAgIGNvbnRpbnVl
OwogICAgICAgICB9CkBAIC0xMzM5LDIwICsxMzM5LDIwIEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwKIAogICAgICAgICBhdXRvJiBjb250ZW50VmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZT4oaXRlbS5nZXQoKSk7CiAgICAgICAgIGlmIChjb250ZW50VmFsdWUuaXNTdHJpbmcoKSkg
ewotICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KGNvbnRlbnRW
YWx1ZS5zdHJpbmdWYWx1ZSgpLmltcGwoKSwgZGlkU2V0KTsKKyAgICAgICAgICAgIGJ1aWxkZXJT
dGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoY29udGVudFZhbHVlLnN0cmluZ1ZhbHVlKCkuaW1wbCgp
LCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBlbHNlIGlm
IChjb250ZW50VmFsdWUuaXNBdHRyKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBDYW4gYSBu
YW1lc3BhY2UgYmUgc3BlY2lmaWVkIGZvciBhbiBhdHRyKGZvbyk/Ci0gICAgICAgICAgICBpZiAo
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zdHlsZVR5cGUoKSA9PSBQc2V1ZG9JZDo6Tm9uZSkKLSAg
ICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldEhhc0F0dHJDb250ZW50KCk7
CisgICAgICAgICAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNl
dWRvSWQ6Ok5vbmUpCisgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0SGFz
QXR0ckNvbnRlbnQoKTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb25zdF9j
YXN0PFJlbmRlclN0eWxlKj4oc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKS0+c2V0SGFzQXR0
ckNvbnRlbnQoKTsKKyAgICAgICAgICAgICAgICBjb25zdF9jYXN0PFJlbmRlclN0eWxlJj4oYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkpLnNldEhhc0F0dHJDb250ZW50KCk7CiAgICAgICAgICAg
ICBRdWFsaWZpZWROYW1lIGF0dHIobnVsbEF0b20oKSwgY29udGVudFZhbHVlLnN0cmluZ1ZhbHVl
KCkuaW1wbCgpLCBudWxsQXRvbSgpKTsKLSAgICAgICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZh
bHVlID0gc3R5bGVSZXNvbHZlci5lbGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAg
ICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudCh2YWx1ZS5pc051bGwoKSA/
IGVtcHR5QXRvbSgpIDogdmFsdWUuaW1wbCgpLCBkaWRTZXQpOworICAgICAgICAgICAgY29uc3Qg
QXRvbVN0cmluZyYgdmFsdWUgPSBidWlsZGVyU3RhdGUuZWxlbWVudCgpID8gYnVpbGRlclN0YXRl
LmVsZW1lbnQoKS0+Z2V0QXR0cmlidXRlKGF0dHIpIDogbnVsbEF0b20oKTsKKyAgICAgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQodmFsdWUuaXNOdWxsKCkgPyBlbXB0eUF0
b20oKSA6IHZhbHVlLmltcGwoKSwgZGlkU2V0KTsKICAgICAgICAgICAgIGRpZFNldCA9IHRydWU7
CiAgICAgICAgICAgICAvLyBSZWdpc3RlciB0aGUgZmFjdCB0aGF0IHRoZSBhdHRyaWJ1dGUgdmFs
dWUgYWZmZWN0cyB0aGUgc3R5bGUuCi0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnJ1bGVTZXRz
KCkubXV0YWJsZUZlYXR1cmVzKCkucmVnaXN0ZXJDb250ZW50QXR0cmlidXRlKGF0dHIubG9jYWxO
YW1lKCkpOworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0
cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2Fs
TmFtZSgpKTsKICAgICAgICAgfSBlbHNlIGlmIChjb250ZW50VmFsdWUuaXNDb3VudGVyKCkpIHsK
ICAgICAgICAgICAgIGF1dG8qIGNvdW50ZXJWYWx1ZSA9IGNvbnRlbnRWYWx1ZS5jb3VudGVyVmFs
dWUoKTsKICAgICAgICAgICAgIExpc3RTdHlsZVR5cGUgbGlzdFN0eWxlVHlwZSA9IExpc3RTdHls
ZVR5cGU6Ok5vbmU7CkBAIC0xMzYwLDI0ICsxMzYwLDI0IEBAIGlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlWYWx1ZUNvbnRlbnQoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZl
ciwKICAgICAgICAgICAgIGlmIChsaXN0U3R5bGVJZGVudCAhPSBDU1NWYWx1ZU5vbmUpCiAgICAg
ICAgICAgICAgICAgbGlzdFN0eWxlVHlwZSA9IHN0YXRpY19jYXN0PExpc3RTdHlsZVR5cGU+KGxp
c3RTdHlsZUlkZW50IC0gQ1NTVmFsdWVEaXNjKTsKICAgICAgICAgICAgIGF1dG8gY291bnRlciA9
IG1ha2VVbmlxdWU8Q291bnRlckNvbnRlbnQ+KGNvdW50ZXJWYWx1ZS0+aWRlbnRpZmllcigpLCBs
aXN0U3R5bGVUeXBlLCBjb3VudGVyVmFsdWUtPnNlcGFyYXRvcigpKTsKLSAgICAgICAgICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChXVEZNb3ZlKGNvdW50ZXIpLCBkaWRTZXQp
OworICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChXVEZNb3ZlKGNv
dW50ZXIpLCBkaWRTZXQpOwogICAgICAgICAgICAgZGlkU2V0ID0gdHJ1ZTsKICAgICAgICAgfSBl
bHNlIHsKICAgICAgICAgICAgIHN3aXRjaCAoY29udGVudFZhbHVlLnZhbHVlSUQoKSkgewogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU9wZW5RdW90ZToKLSAgICAgICAgICAgICAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldENvbnRlbnQoUXVvdGVUeXBlOjpPcGVuUXVvdGUsIGRpZFNldCk7
CisgICAgICAgICAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5
cGU6Ok9wZW5RdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZUNsb3NlUXVv
dGU6Ci0gICAgICAgICAgICAgICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50KFF1
b3RlVHlwZTo6Q2xvc2VRdW90ZSwgZGlkU2V0KTsKKyAgICAgICAgICAgICAgICBidWlsZGVyU3Rh
dGUuc3R5bGUoKS5zZXRDb250ZW50KFF1b3RlVHlwZTo6Q2xvc2VRdW90ZSwgZGlkU2V0KTsKICAg
ICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSBDU1NWYWx1ZU5vT3BlblF1b3RlOgotICAgICAgICAgICAgICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0Q29udGVudChRdW90ZVR5cGU6Ok5vT3BlblF1b3RlLCBkaWRT
ZXQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnQoUXVv
dGVUeXBlOjpOb09wZW5RdW90ZSwgZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0
cnVlOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBDU1NWYWx1ZU5v
Q2xvc2VRdW90ZToKLSAgICAgICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldENv
bnRlbnQoUXVvdGVUeXBlOjpOb0Nsb3NlUXVvdGUsIGRpZFNldCk7CisgICAgICAgICAgICAgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVudChRdW90ZVR5cGU6Ok5vQ2xvc2VRdW90ZSwg
ZGlkU2V0KTsKICAgICAgICAgICAgICAgICBkaWRTZXQgPSB0cnVlOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTEzODcsMTI3ICsxMzg3LDEyNyBAQCBp
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVDb250ZW50KFN0eWxlUmVz
b2x2ZXImIHN0eWxlUmVzb2x2ZXIsCiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKCFkaWRTZXQp
Ci0gICAgICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Y2xlYXJDb250ZW50KCk7CisgICAgICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmNsZWFyQ29udGVudCgpOwogfQogCi1pbmxpbmUgdm9pZCBT
dHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TGlnYXR1cmVzKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1
aWxkZXJTdGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIu
Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb21tb25M
aWdhdHVyZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50Q29t
bW9uTGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlv
bmFyeUxpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlh
bnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50SGlzdG9yaWNhbExpZ2F0dXJlcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlv
bigpLnZhcmlhbnRIaXN0b3JpY2FsTGlnYXR1cmVzKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVz
Y3JpcHRpb24oKS52YXJpYW50Q29udGV4dHVhbEFsdGVybmF0ZXMoKSk7Ci0gICAgc3R5bGVSZXNv
bHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudENvbW1vbkxpZ2F0dXJlcyhidWlsZGVyU3RhdGUu
cGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENvbW1vbkxpZ2F0dXJlcygpKTsKKyAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudERpc2NyZXRpb25hcnlMaWdhdHVyZXMoYnVpbGRlclN0
YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnREaXNjcmV0aW9uYXJ5TGlnYXR1cmVz
KCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyhi
dWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEhpc3RvcmljYWxMaWdh
dHVyZXMoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRDb250ZXh0dWFsQWx0ZXJu
YXRlcyhidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudENvbnRleHR1
YWxBbHRlcm5hdGVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudExpZ2F0dXJlcyhTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmVyKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxG
b250VmFyaWFudExpZ2F0dXJlcyhTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7
Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlv
bigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlw
dGlvbigpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29tbW9uTGlnYXR1cmVzKEZv
bnRWYXJpYW50TGlnYXR1cmVzOjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEhpc3RvcmljYWxMaWdhdHVyZXMoRm9udFZh
cmlhbnRMaWdhdHVyZXM6Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRD
b250ZXh0dWFsQWx0ZXJuYXRlcyhGb250VmFyaWFudExpZ2F0dXJlczo6Tm9ybWFsKTsKLSAgICBz
dHlsZVJlc29sdmVyLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3Jp
cHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVl
Rm9udFZhcmlhbnRMaWdhdHVyZXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFs
dWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9u
dFZhcmlhbnRMaWdhdHVyZXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NW
YWx1ZSYgdmFsdWUpCiB7Ci0gICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVy
LmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0
YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGF1dG8gdmFyaWFudExpZ2F0dXJlcyA9IGV4dHJh
Y3RGb250VmFyaWFudExpZ2F0dXJlcyh2YWx1ZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnRDb21tb25MaWdhdHVyZXModmFyaWFudExpZ2F0dXJlcy5jb21tb25MaWdhdHVyZXMpOwog
ICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RGlzY3JldGlvbmFyeUxpZ2F0dXJlcyh2YXJp
YW50TGlnYXR1cmVzLmRpc2NyZXRpb25hcnlMaWdhdHVyZXMpOwogICAgIGZvbnREZXNjcmlwdGlv
bi5zZXRWYXJpYW50SGlzdG9yaWNhbExpZ2F0dXJlcyh2YXJpYW50TGlnYXR1cmVzLmhpc3Rvcmlj
YWxMaWdhdHVyZXMpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50Q29udGV4dHVhbEFs
dGVybmF0ZXModmFyaWFudExpZ2F0dXJlcy5jb250ZXh0dWFsQWx0ZXJuYXRlcyk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsK
KyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0
aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0
Rm9udFZhcmlhbnROdW1lcmljKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRWYXJpYW50TnVtZXJpYyhT
dHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250RGVzY3Jp
cHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOwotICAgIGZvbnREZXNjcmlw
dGlvbi5zZXRWYXJpYW50TnVtZXJpY0ZpZ3VyZShzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLnZhcmlhbnROdW1lcmljRmlndXJlKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5z
ZXRWYXJpYW50TnVtZXJpY1NwYWNpbmcoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRp
b24oKS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZh
cmlhbnROdW1lcmljRnJhY3Rpb24oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS52YXJpYW50TnVtZXJpY0ZyYWN0aW9uKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50TnVtZXJpY09yZGluYWwoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50TnVtZXJpY09yZGluYWwoKSk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRO
dW1lcmljU2xhc2hlZFplcm8oc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52
YXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYXV0byBmb250RGVzY3Jp
cHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0
aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3Jp
cHRpb24oKS52YXJpYW50TnVtZXJpY0ZpZ3VyZSgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNTcGFjaW5nKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24o
KS52YXJpYW50TnVtZXJpY1NwYWNpbmcoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnROdW1lcmljRnJhY3Rpb24oYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZh
cmlhbnROdW1lcmljRnJhY3Rpb24oKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRO
dW1lcmljT3JkaW5hbChidWlsZGVyU3RhdGUucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFu
dE51bWVyaWNPcmRpbmFsKCkpOworICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJp
Y1NsYXNoZWRaZXJvKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50
TnVtZXJpY1NsYXNoZWRaZXJvKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRp
b24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWls
ZGVyQ3VzdG9tOjphcHBseUluaXRpYWxGb250VmFyaWFudE51bWVyaWMoU3R5bGVSZXNvbHZlciYg
c3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0
aWFsRm9udFZhcmlhbnROdW1lcmljKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkK
IHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0
aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2Ny
aXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKEZv
bnRWYXJpYW50TnVtZXJpY0ZpZ3VyZTo6Tm9ybWFsKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0
VmFyaWFudE51bWVyaWNTcGFjaW5nKEZvbnRWYXJpYW50TnVtZXJpY1NwYWNpbmc6Ok5vcm1hbCk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRnJhY3Rpb24oRm9udFZhcmlh
bnROdW1lcmljRnJhY3Rpb246Ok5vcm1hbCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlh
bnROdW1lcmljT3JkaW5hbChGb250VmFyaWFudE51bWVyaWNPcmRpbmFsOjpOb3JtYWwpOwogICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50TnVtZXJpY1NsYXNoZWRaZXJvKEZvbnRWYXJpYW50
TnVtZXJpY1NsYXNoZWRaZXJvOjpOb3JtYWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNl
dEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUg
dm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudE51bWVyaWMoU3R5
bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFZhcmlhbnROdW1lcmljKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewotICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAg
ICBhdXRvIHZhcmlhbnROdW1lcmljID0gZXh0cmFjdEZvbnRWYXJpYW50TnVtZXJpYyh2YWx1ZSk7
CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljRmlndXJlKHZhcmlhbnROdW1l
cmljLmZpZ3VyZSk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnROdW1lcmljU3BhY2lu
Zyh2YXJpYW50TnVtZXJpYy5zcGFjaW5nKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFu
dE51bWVyaWNGcmFjdGlvbih2YXJpYW50TnVtZXJpYy5mcmFjdGlvbik7CiAgICAgZm9udERlc2Ny
aXB0aW9uLnNldFZhcmlhbnROdW1lcmljT3JkaW5hbCh2YXJpYW50TnVtZXJpYy5vcmRpbmFsKTsK
ICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudE51bWVyaWNTbGFzaGVkWmVybyh2YXJpYW50
TnVtZXJpYy5zbGFzaGVkWmVybyk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRp
b24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVS
ZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6
YXBwbHlJbmhlcml0Rm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlKQogewotICAgIGF1dG8gZm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5m
b250RGVzY3JpcHRpb24oKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
blZhcmlhbnQoc3R5bGVSZXNvbHZlci5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFz
dEFzaWFuVmFyaWFudCgpKTsKLSAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
bldpZHRoKHN0eWxlUmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkudmFyaWFudEVhc3RB
c2lhbldpZHRoKCkpOwotICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50RWFzdEFzaWFuUnVi
eShzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLnZhcmlhbnRFYXN0QXNpYW5S
dWJ5KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9u
dERlc2NyaXB0aW9uKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUu
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNp
YW5WYXJpYW50KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFz
dEFzaWFuVmFyaWFudCgpKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lh
bldpZHRoKGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFz
aWFuV2lkdGgoKSk7CisgICAgZm9udERlc2NyaXB0aW9uLnNldFZhcmlhbnRFYXN0QXNpYW5SdWJ5
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS52YXJpYW50RWFzdEFzaWFuUnVi
eSgpKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERl
c2NyaXB0aW9uKSk7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJ
bml0aWFsRm9udFZhcmlhbnRFYXN0QXNpYW4oU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikK
K2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFZhcmlhbnRF
YXN0QXNpYW4oU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gc3R5bGVSZXNvbHZlci5mb250RGVzY3JpcHRpb24oKTsKKyAgICBh
dXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQoRm9udFZhcmlhbnRF
YXN0QXNpYW5WYXJpYW50OjpOb3JtYWwpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJpYW50
RWFzdEFzaWFuV2lkdGgoRm9udFZhcmlhbnRFYXN0QXNpYW5XaWR0aDo6Tm9ybWFsKTsKICAgICBm
b250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblJ1YnkoRm9udFZhcmlhbnRFYXN0QXNp
YW5SdWJ5OjpOb3JtYWwpOwotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlw
dGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVGb250VmFyaWFudEVhc3RBc2lhbihTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNj
cmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgYXV0byB2
YXJpYW50RWFzdEFzaWFuID0gZXh0cmFjdEZvbnRWYXJpYW50RWFzdEFzaWFuKHZhbHVlKTsKICAg
ICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhblZhcmlhbnQodmFyaWFudEVhc3RB
c2lhbi52YXJpYW50KTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0VmFyaWFudEVhc3RBc2lhbldp
ZHRoKHZhcmlhbnRFYXN0QXNpYW4ud2lkdGgpOwogICAgIGZvbnREZXNjcmlwdGlvbi5zZXRWYXJp
YW50RWFzdEFzaWFuUnVieSh2YXJpYW50RWFzdEFzaWFuLnJ1YnkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgYnVp
bGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwog
fQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXpl
KFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJD
dXN0b206OmFwcGx5SW5pdGlhbEZvbnRTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUo
KS0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgZmxvYXQgc2l6ZSA9IFN0eWxlOjpmb250U2l6ZUZv
cktleXdvcmQoQ1NTVmFsdWVNZWRpdW0sIGZvbnREZXNjcmlwdGlvbi51c2VGaXhlZERlZmF1bHRT
aXplKCksIHN0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7CisgICAgYXV0byBmb250RGVzY3JpcHRp
b24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmbG9hdCBz
aXplID0gU3R5bGU6OmZvbnRTaXplRm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZm9udERlc2Ny
aXB0aW9uLnVzZUZpeGVkRGVmYXVsdFNpemUoKSwgYnVpbGRlclN0YXRlLmRvY3VtZW50KCkpOwog
CiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAKICAgICBmb250RGVzY3JpcHRp
b24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRpZmllcihDU1NWYWx1ZU1lZGl1bSk7Ci0gICAgc3R5
bGVSZXNvbHZlci5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgc2l6ZSk7CisgICAg
YnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRT
aXplKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5oZXJpdEZvbnRTaXplKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxk
ZXJTdGF0ZSkKIHsKLSAgICBjb25zdCBhdXRvJiBwYXJlbnRGb250RGVzY3JpcHRpb24gPSBzdHls
ZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmZvbnREZXNjcmlwdGlvbigpOworICAgIGNvbnN0IGF1
dG8mIHBhcmVudEZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmZv
bnREZXNjcmlwdGlvbigpOwogICAgIGZsb2F0IHNpemUgPSBwYXJlbnRGb250RGVzY3JpcHRpb24u
c3BlY2lmaWVkU2l6ZSgpOwogCiAgICAgaWYgKHNpemUgPCAwKQogICAgICAgICByZXR1cm47CiAK
LSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERl
c2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5
bGUoKS5mb250RGVzY3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNp
emUocGFyZW50Rm9udERlc2NyaXB0aW9uLmtleXdvcmRTaXplKCkpOwotICAgIHN0eWxlUmVzb2x2
ZXIuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9uLCBzaXplKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250U2l6ZShmb250RGVzY3JpcHRpb24sIHNpemUpOworICAgIGJ1aWxkZXJT
dGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0KIAog
Ly8gV2hlbiB0aGUgQ1NTIGtleXdvcmQgImxhcmdlciIgaXMgdXNlZCwgdGhpcyBmdW5jdGlvbiB3
aWxsIGF0dGVtcHQgdG8gbWF0Y2ggd2l0aGluIHRoZSBrZXl3b3JkCkBAIC0xNTI3LDE1ICsxNTI3
LDE1IEBAIGlubGluZSBmbG9hdCBTdHlsZUJ1aWxkZXJDdXN0b206OnNtYWxsZXJGb250U2l6ZShm
bG9hdCBzaXplKQogICAgIHJldHVybiBzaXplIC8gMS4yZjsKIH0KIAotaW5saW5lIGZsb2F0IFN0
eWxlQnVpbGRlckN1c3RvbTo6ZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyKQoraW5saW5lIGZsb2F0IFN0eWxlQnVpbGRlckN1c3RvbTo6
ZGV0ZXJtaW5lUnVieVRleHRTaXplTXVsdGlwbGllcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUpCiB7Ci0gICAgaWYgKHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+cnVieVBvc2l0aW9u
KCkgIT0gUnVieVBvc2l0aW9uOjpJbnRlckNoYXJhY3RlcikKKyAgICBpZiAoYnVpbGRlclN0YXRl
LnN0eWxlKCkucnVieVBvc2l0aW9uKCkgIT0gUnVieVBvc2l0aW9uOjpJbnRlckNoYXJhY3RlcikK
ICAgICAgICAgcmV0dXJuIDAuNWY7CiAKICAgICAvLyBGSVhNRTogVGhpcyBoYWNrIGlzIHRvIGVu
c3VyZSB0b25lIG1hcmtzIGFyZSB0aGUgc2FtZSBzaXplIGFzCiAgICAgLy8gdGhlIGJvcG9tb2Zv
LiBUaGlzIGNvZGUgd2lsbCBnbyBhd2F5IGlmIHdlIG1ha2UgYSBzcGVjaWFsIHJlbmRlcmVyCiAg
ICAgLy8gZm9yIHRoZSB0b25lIG1hcmtzIGV2ZW50dWFsbHkuCi0gICAgaWYgKGF1dG8qIGVsZW1l
bnQgPSBzdHlsZVJlc29sdmVyLnN0YXRlKCkuZWxlbWVudCgpKSB7CisgICAgaWYgKGF1dG8qIGVs
ZW1lbnQgPSBidWlsZGVyU3RhdGUuZWxlbWVudCgpKSB7CiAgICAgICAgIGZvciAoYXV0byYgYW5j
ZXN0b3IgOiBhbmNlc3RvcnNPZlR5cGU8SFRNTEVsZW1lbnQ+KCplbGVtZW50KSkgewogICAgICAg
ICAgICAgaWYgKGFuY2VzdG9yLmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpydFRhZykpCiAgICAgICAg
ICAgICAgICAgcmV0dXJuIDEuMGY7CkBAIC0xNTQ0LDQyICsxNTQ0LDM4IEBAIGlubGluZSBmbG9h
dCBTdHlsZUJ1aWxkZXJDdXN0b206OmRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoU3R5
bGVSZXNvbHZlciYKICAgICByZXR1cm4gMC4yNWY7CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbml0aWFsRm9udFN0eWxlKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVz
b2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEZvbnRT
dHlsZShTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgYXV0byBmb250
RGVzY3JpcHRpb24gPSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpOworICAgIGF1dG8g
Zm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpOwogICAgIGZv
bnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoRm9udENhc2NhZGVEZXNjcmlwdGlvbjo6aW5pdGlhbEl0
YWxpYygpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhGb250Q2FzY2Fk
ZURlc2NyaXB0aW9uOjppbml0aWFsRm9udFN0eWxlQXhpcygpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsKIH0K
IAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRGb250U3R5bGUo
U3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlJbmhlcml0Rm9udFN0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJT
dGF0ZSkKIHsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7Ci0gICAgZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhzdHlsZVJlc29sdmVy
LnBhcmVudEZvbnREZXNjcmlwdGlvbigpLml0YWxpYygpKTsKLSAgICBmb250RGVzY3JpcHRpb24u
c2V0Rm9udFN0eWxlQXhpcyhzdHlsZVJlc29sdmVyLnBhcmVudEZvbnREZXNjcmlwdGlvbigpLmZv
bnRTdHlsZUF4aXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTsKKyAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxk
ZXJTdGF0ZS5mb250RGVzY3JpcHRpb24oKTsKKyAgICBmb250RGVzY3JpcHRpb24uc2V0SXRhbGlj
KGJ1aWxkZXJTdGF0ZS5wYXJlbnRGb250RGVzY3JpcHRpb24oKS5pdGFsaWMoKSk7CisgICAgZm9u
dERlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMoYnVpbGRlclN0YXRlLnBhcmVudEZvbnREZXNj
cmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNj
cmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHls
ZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVS
ZXNvbHZlciwgQ1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udFN0eWxlKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwg
Q1NTVmFsdWUmIHZhbHVlKQogewogICAgIGF1dG8mIGZvbnRTdHlsZVZhbHVlID0gZG93bmNhc3Q8
Q1NTRm9udFN0eWxlVmFsdWU+KHZhbHVlKTsKLSAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0
eWxlUmVzb2x2ZXIuZm9udERlc2NyaXB0aW9uKCk7CisgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBidWlsZGVyU3RhdGUuZm9udERlc2NyaXB0aW9uKCk7CiAgICAgZm9udERlc2NyaXB0aW9uLnNl
dEl0YWxpYyhTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6OmNvbnZlcnRGb250U3R5bGVGcm9tVmFsdWUo
Zm9udFN0eWxlVmFsdWUpKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhm
b250U3R5bGVWYWx1ZS5mb250U3R5bGVWYWx1ZS0+dmFsdWVJRCgpID09IENTU1ZhbHVlSXRhbGlj
ID8gRm9udFN0eWxlQXhpczo6aXRhbCA6IEZvbnRTdHlsZUF4aXM6OnNsbnQpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7Cisg
ICAgYnVpbGRlclN0YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlv
bikpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250
U2l6ZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVGb250U2l6ZShTdHlsZTo6QnVp
bGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBhdXRvIGZv
bnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+Zm9udERlc2NyaXB0aW9uKCk7
CisgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5mb250RGVz
Y3JpcHRpb24oKTsKICAgICBmb250RGVzY3JpcHRpb24uc2V0S2V5d29yZFNpemVGcm9tSWRlbnRp
ZmllcihDU1NWYWx1ZUludmFsaWQpOwogCi0gICAgZmxvYXQgcGFyZW50U2l6ZSA9IDA7Ci0gICAg
Ym9vbCBwYXJlbnRJc0Fic29sdXRlU2l6ZSA9IGZhbHNlOwotICAgIGlmIChhdXRvKiBwYXJlbnRT
dHlsZSA9IHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkgewotICAgICAgICBwYXJlbnRTaXpl
ID0gcGFyZW50U3R5bGUtPmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKLSAgICAg
ICAgcGFyZW50SXNBYnNvbHV0ZVNpemUgPSBwYXJlbnRTdHlsZS0+Zm9udERlc2NyaXB0aW9uKCku
aXNBYnNvbHV0ZVNpemUoKTsKLSAgICB9CisgICAgZmxvYXQgcGFyZW50U2l6ZSA9IGJ1aWxkZXJT
dGF0ZS5wYXJlbnRTdHlsZSgpLmZvbnREZXNjcmlwdGlvbigpLnNwZWNpZmllZFNpemUoKTsKKyAg
ICBib29sIHBhcmVudElzQWJzb2x1dGVTaXplID0gYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCku
Zm9udERlc2NyaXB0aW9uKCkuaXNBYnNvbHV0ZVNpemUoKTsKIAogICAgIGF1dG8mIHByaW1pdGl2
ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKTsKICAgICBmbG9hdCBz
aXplOwpAQCAtMTU5Niw3ICsxNTkyLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9t
OjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAg
ICAgY2FzZSBDU1NWYWx1ZVhMYXJnZToKICAgICAgICAgY2FzZSBDU1NWYWx1ZVh4TGFyZ2U6CiAg
ICAgICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRYeHhMYXJnZToKLSAgICAgICAgICAgIHNpemUgPSBT
dHlsZTo6Zm9udFNpemVGb3JLZXl3b3JkKGlkZW50LCBmb250RGVzY3JpcHRpb24udXNlRml4ZWRE
ZWZhdWx0U2l6ZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkpOworICAgICAgICAgICAgc2l6
ZSA9IFN0eWxlOjpmb250U2l6ZUZvcktleXdvcmQoaWRlbnQsIGZvbnREZXNjcmlwdGlvbi51c2VG
aXhlZERlZmF1bHRTaXplKCksIGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKTsKICAgICAgICAgICAg
IGZvbnREZXNjcmlwdGlvbi5zZXRLZXl3b3JkU2l6ZUZyb21JZGVudGlmaWVyKGlkZW50KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENTU1ZhbHVlTGFyZ2VyOgpAQCAtMTYwNiw3
ICsxNjAyLDcgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9u
dFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICAgICAgICAgIHNpemUgPSBz
bWFsbGVyRm9udFNpemUocGFyZW50U2l6ZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
Y2FzZSBDU1NWYWx1ZVdlYmtpdFJ1YnlUZXh0OgotICAgICAgICAgICAgc2l6ZSA9IGRldGVybWlu
ZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoc3R5bGVSZXNvbHZlcikgKiBwYXJlbnRTaXplOworICAg
ICAgICAgICAgc2l6ZSA9IGRldGVybWluZVJ1YnlUZXh0U2l6ZU11bHRpcGxpZXIoYnVpbGRlclN0
YXRlKSAqIHBhcmVudFNpemU7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoK
ICAgICAgICAgICAgIHJldHVybjsKQEAgLTE2MTQsMTMgKzE2MTAsMTMgQEAgaW5saW5lIHZvaWQg
U3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5
bGVSZXNvbHZlciwKICAgICB9IGVsc2UgewogICAgICAgICBmb250RGVzY3JpcHRpb24uc2V0SXNB
YnNvbHV0ZVNpemUocGFyZW50SXNBYnNvbHV0ZVNpemUgfHwgIShwcmltaXRpdmVWYWx1ZS5pc1Bl
cmNlbnRhZ2UoKSB8fCBwcmltaXRpdmVWYWx1ZS5pc0ZvbnRSZWxhdGl2ZUxlbmd0aCgpKSk7CiAg
ICAgICAgIGlmIChwcmltaXRpdmVWYWx1ZS5pc0xlbmd0aCgpKSB7Ci0gICAgICAgICAgICBzaXpl
ID0gcHJpbWl0aXZlVmFsdWUuY29tcHV0ZUxlbmd0aDxmbG9hdD4oQ1NTVG9MZW5ndGhDb252ZXJz
aW9uRGF0YShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCksIHN0eWxlUmVzb2x2ZXIucm9vdEVs
ZW1lbnRTdHlsZSgpLCBzdHlsZVJlc29sdmVyLmRvY3VtZW50KCkucmVuZGVyVmlldygpLCAxLjBm
LCB0cnVlKSk7Ci0gICAgICAgICAgICBzdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0Rm9udFNpemVI
YXNWaWV3cG9ydFVuaXRzKHByaW1pdGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3Ro
KCkpOworICAgICAgICAgICAgc2l6ZSA9IHByaW1pdGl2ZVZhbHVlLmNvbXB1dGVMZW5ndGg8Zmxv
YXQ+KENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEoJmJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgp
LCAmYnVpbGRlclN0YXRlLnJvb3RFbGVtZW50U3R5bGUoKSwgYnVpbGRlclN0YXRlLmRvY3VtZW50
KCkucmVuZGVyVmlldygpLCAxLjBmLCB0cnVlKSk7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUu
c3R5bGVSZXNvbHZlcigpLnN0YXRlKCkuc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKHByaW1p
dGl2ZVZhbHVlLmlzVmlld3BvcnRQZXJjZW50YWdlTGVuZ3RoKCkpOwogICAgICAgICB9IGVsc2Ug
aWYgKHByaW1pdGl2ZVZhbHVlLmlzUGVyY2VudGFnZSgpKQogICAgICAgICAgICAgc2l6ZSA9IChw
cmltaXRpdmVWYWx1ZS5mbG9hdFZhbHVlKCkgKiBwYXJlbnRTaXplKSAvIDEwMC4wZjsKICAgICAg
ICAgZWxzZSBpZiAocHJpbWl0aXZlVmFsdWUuaXNDYWxjdWxhdGVkUGVyY2VudGFnZVdpdGhMZW5n
dGgoKSkgewotICAgICAgICAgICAgY29uc3QgYXV0byYgY29udmVyc2lvbkRhdGEgPSBzdHlsZVJl
c29sdmVyLnN0YXRlKCkuY3NzVG9MZW5ndGhDb252ZXJzaW9uRGF0YSgpOwotICAgICAgICAgICAg
Q1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSBwYXJlbnRDb252ZXJzaW9uRGF0YSB7IHN0eWxlUmVz
b2x2ZXIucGFyZW50U3R5bGUoKSwgY29udmVyc2lvbkRhdGEucm9vdFN0eWxlKCksIHN0eWxlUmVz
b2x2ZXIuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCksIDEuMGYsIHRydWUgfTsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGNvbnZlcnNpb25EYXRhID0gYnVpbGRlclN0YXRlLmNzc1RvTGVuZ3RoQ29u
dmVyc2lvbkRhdGEoKTsKKyAgICAgICAgICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgcGFy
ZW50Q29udmVyc2lvbkRhdGEgeyAmYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCksIGNvbnZlcnNp
b25EYXRhLnJvb3RTdHlsZSgpLCBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCks
IDEuMGYsIHRydWUgfTsKICAgICAgICAgICAgIHNpemUgPSBwcmltaXRpdmVWYWx1ZS5jc3NDYWxj
VmFsdWUoKS0+Y3JlYXRlQ2FsY3VsYXRpb25WYWx1ZShwYXJlbnRDb252ZXJzaW9uRGF0YSktPmV2
YWx1YXRlKHBhcmVudFNpemUpOwogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTE2MjksMjUgKzE2MjUsMjUgQEAgaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlRm9udFNpemUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwKICAgICBpZiAo
c2l6ZSA8IDApCiAgICAgICAgIHJldHVybjsKIAotICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udFNp
emUoZm9udERlc2NyaXB0aW9uLCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXpl
KSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVz
Y3JpcHRpb24pKTsKKyAgICBidWlsZGVyU3RhdGUuc2V0Rm9udFNpemUoZm9udERlc2NyaXB0aW9u
LCBzdGQ6Om1pbihtYXhpbXVtQWxsb3dlZEZvbnRTaXplLCBzaXplKSk7CisgICAgYnVpbGRlclN0
YXRlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpOwogfQogCi1p
bmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUFy
ZWFzKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUFyZWFzKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSkKIHsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVk
R3JpZEFyZWEoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkQXJlYVJvd0NvdW50KFJlbmRlclN0eWxlOjpp
bml0aWFsTmFtZWRHcmlkQXJlYUNvdW50KCkpOwotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0TmFtZWRHcmlkQXJlYUNvbHVtbkNvdW50KFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlk
QXJlYUNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5hbWVkR3JpZEFyZWEo
UmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChSZW5kZXJTdHlsZTo6aW5pdGlhbE5hbWVk
R3JpZEFyZWFDb3VudCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRB
cmVhQ29sdW1uQ291bnQoUmVuZGVyU3R5bGU6OmluaXRpYWxOYW1lZEdyaWRBcmVhQ291bnQoKSk7
CiB9CiAKLWlubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRl
bXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0
eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlQXJlYXMoU3R5bGU6OkJ1
aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+
c2V0TmFtZWRHcmlkQXJlYShzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPm5hbWVkR3JpZEFy
ZWEoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhUm93Q291
bnQoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhUm93Q291bnQoKSk7
Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQo
c3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5uYW1lZEdyaWRBcmVhQ29sdW1uQ291bnQoKSk7
CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQXJlYShidWlsZGVyU3RhdGUu
cGFyZW50U3R5bGUoKS5uYW1lZEdyaWRBcmVhKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldE5hbWVkR3JpZEFyZWFSb3dDb3VudChidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5uYW1l
ZEdyaWRBcmVhUm93Q291bnQoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRH
cmlkQXJlYUNvbHVtbkNvdW50KGJ1aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm5hbWVkR3JpZEFy
ZWFDb2x1bW5Db3VudCgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwg
Q1NTVmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZh
bHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBD
U1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgaWYgKGlzPENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkp
IHsKICAgICAgICAgQVNTRVJUKGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSkudmFs
dWVJRCgpID09IENTU1ZhbHVlTm9uZSk7CkBAIC0xNjU3LDEwOCArMTY1MywxMDggQEAgaW5saW5l
IHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQXJlYXMoU3R5
bGVSZXNvbHZlciYgc3R5bGUKICAgICBhdXRvJiBncmlkVGVtcGxhdGVBcmVhc1ZhbHVlID0gZG93
bmNhc3Q8Q1NTR3JpZFRlbXBsYXRlQXJlYXNWYWx1ZT4odmFsdWUpOwogICAgIGNvbnN0IE5hbWVk
R3JpZEFyZWFNYXAmIG5ld05hbWVkR3JpZEFyZWFzID0gZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5n
cmlkQXJlYU1hcCgpOwogCi0gICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkQ29sdW1uTGlu
ZXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCktPm5hbWVkR3JpZENvbHVtbkxpbmVzKCk7Ci0gICAg
TmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlkUm93TGluZXMgPSBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPm5hbWVkR3JpZFJvd0xpbmVzKCk7CisgICAgTmFtZWRHcmlkTGluZXNNYXAgbmFtZWRHcmlk
Q29sdW1uTGluZXMgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5uYW1lZEdyaWRDb2x1bW5MaW5lcygp
OworICAgIE5hbWVkR3JpZExpbmVzTWFwIG5hbWVkR3JpZFJvd0xpbmVzID0gYnVpbGRlclN0YXRl
LnN0eWxlKCkubmFtZWRHcmlkUm93TGluZXMoKTsKICAgICBTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEobmV3TmFtZWRHcmlkQXJl
YXMsIG5hbWVkR3JpZENvbHVtbkxpbmVzLCBGb3JDb2x1bW5zKTsKICAgICBTdHlsZUJ1aWxkZXJD
b252ZXJ0ZXI6OmNyZWF0ZUltcGxpY2l0TmFtZWRHcmlkTGluZXNGcm9tR3JpZEFyZWEobmV3TmFt
ZWRHcmlkQXJlYXMsIG5hbWVkR3JpZFJvd0xpbmVzLCBGb3JSb3dzKTsKLSAgICBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKG5hbWVkR3JpZENvbHVtbkxpbmVz
KTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZFJvd0xpbmVzKG5hbWVk
R3JpZFJvd0xpbmVzKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1
bW5MaW5lcyhuYW1lZEdyaWRDb2x1bW5MaW5lcyk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0TmFtZWRHcmlkUm93TGluZXMobmFtZWRHcmlkUm93TGluZXMpOwogCi0gICAgc3R5bGVSZXNv
bHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVhKGdyaWRUZW1wbGF0ZUFyZWFzVmFsdWUuZ3Jp
ZEFyZWFNYXAoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROYW1lZEdyaWRBcmVh
Um93Q291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsKLSAgICBzdHlsZVJl
c29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZEFyZWFDb2x1bW5Db3VudChncmlkVGVtcGxhdGVB
cmVhc1ZhbHVlLmNvbHVtbkNvdW50KCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldE5h
bWVkR3JpZEFyZWEoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5ncmlkQXJlYU1hcCgpKTsKKyAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRBcmVhUm93Q291bnQoZ3JpZFRlbXBsYXRl
QXJlYXNWYWx1ZS5yb3dDb3VudCgpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1l
ZEdyaWRBcmVhQ29sdW1uQ291bnQoZ3JpZFRlbXBsYXRlQXJlYXNWYWx1ZS5jb2x1bW5Db3VudCgp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseUluaXRpYWxHcmlk
VGVtcGxhdGVDb2x1bW5zKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5
bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5
bGUoKS0+c2V0R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQ29sdW1ucygpKTsK
LSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKFJlbmRl
clN0eWxlOjppbml0aWFsTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZl
ci5zdHlsZSgpLT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoUmVuZGVyU3R5bGU6Omlu
aXRpYWxPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0R3JpZENvbHVtbnMoUmVuZGVyU3R5bGU6OmluaXRpYWxHcmlkQ29sdW1ucygpKTsK
KyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJT
dHlsZTo6aW5pdGlhbE5hbWVkR3JpZENvbHVtbkxpbmVzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLnNldE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlh
bE9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVC
dWlsZGVyQ3VzdG9tOjphcHBseUluaGVyaXRHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlUmVzb2x2
ZXImIHN0eWxlUmVzb2x2ZXIpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5
SW5oZXJpdEdyaWRUZW1wbGF0ZUNvbHVtbnMoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0
YXRlKQogewotICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0R3JpZENvbHVtbnMoc3R5bGVS
ZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5ncmlkQ29sdW1ucygpKTsKLSAgICBzdHlsZVJlc29sdmVy
LnN0eWxlKCktPnNldE5hbWVkR3JpZENvbHVtbkxpbmVzKHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5
bGUoKS0+bmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgp
LT5zZXRPcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT5vcmRlcmVkTmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0
eWxlKCkuc2V0R3JpZENvbHVtbnMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuZ3JpZENvbHVt
bnMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0TmFtZWRHcmlkQ29sdW1uTGluZXMo
YnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkubmFtZWRHcmlkQ29sdW1uTGluZXMoKSk7CisgICAg
YnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3JpZENvbHVtbkxpbmVzKGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLm9yZGVyZWROYW1lZEdyaWRDb2x1bW5MaW5lcygpKTsKIH0K
IAogI2RlZmluZSBTRVRfVFJBQ0tTX0RBVEEodHJhY2tzRGF0YSwgc3R5bGUsIFRyYWNrVHlwZSkg
XAotICAgIHN0eWxlLT5zZXRHcmlkIyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX3RyYWNrU2l6
ZXMpOyBcCi0gICAgc3R5bGUtPnNldE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NE
YXRhLm1fbmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5bGUtPnNldE9yZGVyZWROYW1lZEdyaWQj
I1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0YS5tX29yZGVyZWROYW1lZEdyaWRMaW5lcyk7IFwK
LSAgICBzdHlsZS0+c2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjcyh0cmFja3NEYXRhLm1f
YXV0b1JlcGVhdFRyYWNrU2l6ZXMpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRvUmVwZWF0IyNU
cmFja1R5cGUjI3NJbnNlcnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlv
blBvaW50KTsgXAotICAgIHN0eWxlLT5zZXRBdXRvUmVwZWF0TmFtZWRHcmlkIyNUcmFja1R5cGUj
I0xpbmVzKHRyYWNrc0RhdGEubV9hdXRvUmVwZWF0TmFtZWRHcmlkTGluZXMpOyBcCi0gICAgc3R5
bGUtPnNldEF1dG9SZXBlYXRPcmRlcmVkTmFtZWRHcmlkIyNUcmFja1R5cGUjI0xpbmVzKHRyYWNr
c0RhdGEubV9hdXRvUmVwZWF0T3JkZXJlZE5hbWVkR3JpZExpbmVzKTsgXAotICAgIHN0eWxlLT5z
ZXRHcmlkQXV0b1JlcGVhdCMjVHJhY2tUeXBlIyNzVHlwZSh0cmFja3NEYXRhLm1fYXV0b1JlcGVh
dFR5cGUpOyBcCi0gICAgc3R5bGUtPnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3NJbnNl
cnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50KTsKLQotaW5s
aW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlR3JpZFRlbXBsYXRlQ29sdW1u
cyhTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCisgICAgc3R5
bGUuc2V0R3JpZCMjVHJhY2tUeXBlIyNzKHRyYWNrc0RhdGEubV90cmFja1NpemVzKTsgXAorICAg
IHN0eWxlLnNldE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fbmFtZWRH
cmlkTGluZXMpOyBcCisgICAgc3R5bGUuc2V0T3JkZXJlZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNM
aW5lcyh0cmFja3NEYXRhLm1fb3JkZXJlZE5hbWVkR3JpZExpbmVzKTsgXAorICAgIHN0eWxlLnNl
dEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3ModHJhY2tzRGF0YS5tX2F1dG9SZXBlYXRUcmFj
a1NpemVzKTsgXAorICAgIHN0eWxlLnNldEdyaWRBdXRvUmVwZWF0IyNUcmFja1R5cGUjI3NJbnNl
cnRpb25Qb2ludCh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdEluc2VydGlvblBvaW50KTsgXAorICAg
IHN0eWxlLnNldEF1dG9SZXBlYXROYW1lZEdyaWQjI1RyYWNrVHlwZSMjTGluZXModHJhY2tzRGF0
YS5tX2F1dG9SZXBlYXROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRBdXRvUmVwZWF0
T3JkZXJlZE5hbWVkR3JpZCMjVHJhY2tUeXBlIyNMaW5lcyh0cmFja3NEYXRhLm1fYXV0b1JlcGVh
dE9yZGVyZWROYW1lZEdyaWRMaW5lcyk7IFwKKyAgICBzdHlsZS5zZXRHcmlkQXV0b1JlcGVhdCMj
VHJhY2tUeXBlIyNzVHlwZSh0cmFja3NEYXRhLm1fYXV0b1JlcGVhdFR5cGUpOyBcCisgICAgc3R5
bGUuc2V0R3JpZEF1dG9SZXBlYXQjI1RyYWNrVHlwZSMjc0luc2VydGlvblBvaW50KHRyYWNrc0Rh
dGEubV9hdXRvUmVwZWF0SW5zZXJ0aW9uUG9pbnQpOworCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVDb2x1bW5zKFN0eWxlOjpCdWlsZGVyU3Rh
dGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIFN0eWxlQnVpbGRlckNv
bnZlcnRlcjo6VHJhY2tzRGF0YSB0cmFja3NEYXRhOwotICAgIGlmICghU3R5bGVCdWlsZGVyQ29u
dmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVlLCB0cmFja3NEYXRhLCBzdHlsZVJlc29s
dmVyKSkKKyAgICBpZiAoIVN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y3JlYXRlR3JpZFRyYWNrTGlz
dCh2YWx1ZSwgdHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGNvbnN0IE5hbWVkR3JpZEFyZWFNYXAmIG5hbWVkR3JpZEFyZWFzID0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT5uYW1lZEdyaWRBcmVhKCk7CisgICAgY29uc3QgTmFtZWRHcmlkQXJlYU1hcCYgbmFt
ZWRHcmlkQXJlYXMgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS5uYW1lZEdyaWRBcmVhKCk7CiAgICAg
aWYgKCFuYW1lZEdyaWRBcmVhcy5pc0VtcHR5KCkpCiAgICAgICAgIFN0eWxlQnVpbGRlckNvbnZl
cnRlcjo6Y3JlYXRlSW1wbGljaXROYW1lZEdyaWRMaW5lc0Zyb21HcmlkQXJlYShuYW1lZEdyaWRB
cmVhcywgdHJhY2tzRGF0YS5tX25hbWVkR3JpZExpbmVzLCBGb3JDb2x1bW5zKTsKIAotICAgIFNF
VF9UUkFDS1NfREFUQSh0cmFja3NEYXRhLCBzdHlsZVJlc29sdmVyLnN0eWxlKCksIENvbHVtbik7
CisgICAgU0VUX1RSQUNLU19EQVRBKHRyYWNrc0RhdGEsIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLCBD
b2x1bW4pOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlh
bEdyaWRUZW1wbGF0ZVJvd3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2
b2lkIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsR3JpZFRlbXBsYXRlUm93cyhTdHls
ZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRHcmlkUm93cyhSZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRSb3dzKCkpOwotICAgIHN0
eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoUmVuZGVyU3R5bGU6Omlu
aXRpYWxOYW1lZEdyaWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNl
dE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhSZW5kZXJTdHlsZTo6aW5pdGlhbE9yZGVyZWROYW1l
ZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRHcmlkUm93cyhS
ZW5kZXJTdHlsZTo6aW5pdGlhbEdyaWRSb3dzKCkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LnNldE5hbWVkR3JpZFJvd0xpbmVzKFJlbmRlclN0eWxlOjppbml0aWFsTmFtZWRHcmlkUm93TGlu
ZXMoKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0T3JkZXJlZE5hbWVkR3JpZFJvd0xp
bmVzKFJlbmRlclN0eWxlOjppbml0aWFsT3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwogfQog
Ci1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJpdEdyaWRUZW1wbGF0
ZVJvd3MoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcikKK2lubGluZSB2b2lkIFN0eWxlQnVp
bGRlckN1c3RvbTo6YXBwbHlJbmhlcml0R3JpZFRlbXBsYXRlUm93cyhTdHlsZTo6QnVpbGRlclN0
YXRlJiBidWlsZGVyU3RhdGUpCiB7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRHcmlk
Um93cyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPmdyaWRSb3dzKCkpOwotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0TmFtZWRHcmlkUm93TGluZXMoc3R5bGVSZXNvbHZlci5wYXJl
bnRTdHlsZSgpLT5uYW1lZEdyaWRSb3dMaW5lcygpKTsKLSAgICBzdHlsZVJlc29sdmVyLnN0eWxl
KCktPnNldE9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcyhzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxl
KCktPm9yZGVyZWROYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5bGUo
KS5zZXRHcmlkUm93cyhidWlsZGVyU3RhdGUucGFyZW50U3R5bGUoKS5ncmlkUm93cygpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXROYW1lZEdyaWRSb3dMaW5lcyhidWlsZGVyU3RhdGUu
cGFyZW50U3R5bGUoKS5uYW1lZEdyaWRSb3dMaW5lcygpKTsKKyAgICBidWlsZGVyU3RhdGUuc3R5
bGUoKS5zZXRPcmRlcmVkTmFtZWRHcmlkUm93TGluZXMoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxl
KCkub3JkZXJlZE5hbWVkR3JpZFJvd0xpbmVzKCkpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1
aWxkZXJDdXN0b206OmFwcGx5VmFsdWVHcmlkVGVtcGxhdGVSb3dzKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK2lubGluZSB2b2lkIFN0eWxlQnVpbGRlckN1
c3RvbTo6YXBwbHlWYWx1ZUdyaWRUZW1wbGF0ZVJvd3MoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVp
bGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFsdWUpCiB7CiAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVy
OjpUcmFja3NEYXRhIHRyYWNrc0RhdGE7Ci0gICAgaWYgKCFTdHlsZUJ1aWxkZXJDb252ZXJ0ZXI6
OmNyZWF0ZUdyaWRUcmFja0xpc3QodmFsdWUsIHRyYWNrc0RhdGEsIHN0eWxlUmVzb2x2ZXIpKQor
ICAgIGlmICghU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjcmVhdGVHcmlkVHJhY2tMaXN0KHZhbHVl
LCB0cmFja3NEYXRhLCBidWlsZGVyU3RhdGUpKQogICAgICAgICByZXR1cm47Ci0gICAgY29uc3Qg
TmFtZWRHcmlkQXJlYU1hcCYgbmFtZWRHcmlkQXJlYXMgPSBzdHlsZVJlc29sdmVyLnN0eWxlKCkt
Pm5hbWVkR3JpZEFyZWEoKTsKKyAgICBjb25zdCBOYW1lZEdyaWRBcmVhTWFwJiBuYW1lZEdyaWRB
cmVhcyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLm5hbWVkR3JpZEFyZWEoKTsKICAgICBpZiAoIW5h
bWVkR3JpZEFyZWFzLmlzRW1wdHkoKSkKICAgICAgICAgU3R5bGVCdWlsZGVyQ29udmVydGVyOjpj
cmVhdGVJbXBsaWNpdE5hbWVkR3JpZExpbmVzRnJvbUdyaWRBcmVhKG5hbWVkR3JpZEFyZWFzLCB0
cmFja3NEYXRhLm1fbmFtZWRHcmlkTGluZXMsIEZvclJvd3MpOwogCi0gICAgU0VUX1RSQUNLU19E
QVRBKHRyYWNrc0RhdGEsIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKSwgUm93KTsKKyAgICBTRVRfVFJB
Q0tTX0RBVEEodHJhY2tzRGF0YSwgYnVpbGRlclN0YXRlLnN0eWxlKCksIFJvdyk7CiB9CiAKLXZv
aWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlQWx0KFN0eWxlUmVzb2x2ZXImIHN0eWxl
UmVzb2x2ZXIsIENTU1ZhbHVlJiB2YWx1ZSkKK3ZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQWx0KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZh
bHVlKQogewogICAgIGF1dG8mIHByaW1pdGl2ZVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZl
VmFsdWU+KHZhbHVlKTsKICAgICBpZiAocHJpbWl0aXZlVmFsdWUuaXNTdHJpbmcoKSkKLSAgICAg
ICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50QWx0VGV4dChwcmltaXRpdmVWYWx1
ZS5zdHJpbmdWYWx1ZSgpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0Q29udGVu
dEFsdFRleHQocHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSk7CiAgICAgZWxzZSBpZiAocHJp
bWl0aXZlVmFsdWUuaXNBdHRyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IENhbiBhIG5hbWVzcGFj
ZSBiZSBzcGVjaWZpZWQgZm9yIGFuIGF0dHIoZm9vKT8KLSAgICAgICAgaWYgKHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCi0gICAgICAgICAgICBz
dHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFVuaXF1ZSgpOworICAgICAgICBpZiAoYnVpbGRlclN0
YXRlLnN0eWxlKCkuc3R5bGVUeXBlKCkgPT0gUHNldWRvSWQ6Ok5vbmUpCisgICAgICAgICAgICBi
dWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRVbmlxdWUoKTsKICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KHN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSkt
PnNldFVuaXF1ZSgpOworICAgICAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJTdHlsZSY+KGJ1aWxk
ZXJTdGF0ZS5wYXJlbnRTdHlsZSgpKS5zZXRVbmlxdWUoKTsKIAogICAgICAgICBRdWFsaWZpZWRO
YW1lIGF0dHIobnVsbEF0b20oKSwgcHJpbWl0aXZlVmFsdWUuc3RyaW5nVmFsdWUoKSwgbnVsbEF0
b20oKSk7Ci0gICAgICAgIGNvbnN0IEF0b21TdHJpbmcmIHZhbHVlID0gc3R5bGVSZXNvbHZlci5l
bGVtZW50KCktPmdldEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAgc3R5bGVSZXNvbHZlci5zdHls
ZSgpLT5zZXRDb250ZW50QWx0VGV4dCh2YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFs
dWUpOworICAgICAgICBjb25zdCBBdG9tU3RyaW5nJiB2YWx1ZSA9IGJ1aWxkZXJTdGF0ZS5lbGVt
ZW50KCkgPyBidWlsZGVyU3RhdGUuZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoYXR0cikgOiBudWxs
QXRvbSgpOworICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRDb250ZW50QWx0VGV4dCh2
YWx1ZS5pc051bGwoKSA/IGVtcHR5QXRvbSgpIDogdmFsdWUpOwogCiAgICAgICAgIC8vIFJlZ2lz
dGVyIHRoZSBmYWN0IHRoYXQgdGhlIGF0dHJpYnV0ZSB2YWx1ZSBhZmZlY3RzIHRoZSBzdHlsZS4K
LSAgICAgICAgc3R5bGVSZXNvbHZlci5ydWxlU2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lz
dGVyQ29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKKyAgICAgICAgYnVpbGRlclN0
YXRlLnN0eWxlUmVzb2x2ZXIoKS5ydWxlU2V0cygpLm11dGFibGVGZWF0dXJlcygpLnJlZ2lzdGVy
Q29udGVudEF0dHJpYnV0ZShhdHRyLmxvY2FsTmFtZSgpKTsKICAgICB9IGVsc2UKLSAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRDb250ZW50QWx0VGV4dChlbXB0eUF0b20oKSk7Cisg
ICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldENvbnRlbnRBbHRUZXh0KGVtcHR5QXRvbSgp
KTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENo
YW5nZShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVXaWxsQ2hhbmdlKFN0eWxlOjpC
dWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlKQogewogICAgIGlmIChp
czxDU1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpKSB7CiAgICAgICAgIEFTU0VSVChkb3duY2FzdDxD
U1NQcmltaXRpdmVWYWx1ZT4odmFsdWUpLnZhbHVlSUQoKSA9PSBDU1NWYWx1ZUF1dG8pOwotICAg
ICAgICBzdHlsZVJlc29sdmVyLnN0eWxlKCktPnNldFdpbGxDaGFuZ2UobnVsbHB0cik7CisgICAg
ICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldFdpbGxDaGFuZ2UobnVsbHB0cik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKQEAgLTE3ODAsNTUgKzE3NzYsNTUgQEAgaW5saW5lIHZvaWQgU3R5
bGVCdWlsZGVyQ3VzdG9tOjphcHBseVZhbHVlV2lsbENoYW5nZShTdHlsZVJlc29sdmVyJiBzdHls
ZVJlc29sdmUKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIHN0eWxl
UmVzb2x2ZXIuc3R5bGUoKS0+c2V0V2lsbENoYW5nZShXVEZNb3ZlKHdpbGxDaGFuZ2UpKTsKKyAg
ICBidWlsZGVyU3RhdGUuc3R5bGUoKS5zZXRXaWxsQ2hhbmdlKFdURk1vdmUod2lsbENoYW5nZSkp
OwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VX
aWR0aChTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxp
bmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VXaWR0aChTdHlsZTo6
QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKLSAgICBzdHls
ZVJlc29sdmVyLnN0eWxlKCktPnNldFN0cm9rZVdpZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6
Y29udmVydExlbmd0aChzdHlsZVJlc29sdmVyLCB2YWx1ZSkpOwotICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0SGFzRXhwbGljaXRseVNldFN0cm9rZVdpZHRoKHRydWUpOworICAgIGJ1aWxk
ZXJTdGF0ZS5zdHlsZSgpLnNldFN0cm9rZVdpZHRoKFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29u
dmVydExlbmd0aChidWlsZGVyU3RhdGUsIHZhbHVlKSk7CisgICAgYnVpbGRlclN0YXRlLnN0eWxl
KCkuc2V0SGFzRXhwbGljaXRseVNldFN0cm9rZVdpZHRoKHRydWUpOwogfQogCi1pbmxpbmUgdm9p
ZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZVJlc29sdmVy
JiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVTdHJva2VDb2xvcihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWls
ZGVyU3RhdGUsIENTU1ZhbHVlJiB2YWx1ZSkKIHsKICAgICBhdXRvJiBwcmltaXRpdmVWYWx1ZSA9
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPih2YWx1ZSk7Ci0gICAgaWYgKHN0eWxlUmVzb2x2
ZXIuYXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCkpCi0gICAgICAgIHN0eWxlUmVzb2x2ZXIu
c3R5bGUoKS0+c2V0U3Ryb2tlQ29sb3Ioc3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVW
YWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8gZmFsc2UpKTsKLSAgICBp
ZiAoc3R5bGVSZXNvbHZlci5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKCkpCi0gICAg
ICAgIHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+c2V0VmlzaXRlZExpbmtTdHJva2VDb2xvcihzdHls
ZVJlc29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1pdGl2ZVZhbHVlLCAvKiBmb3JW
aXNpdGVkTGluayAqLyB0cnVlKSk7Ci0gICAgc3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXRIYXNF
eHBsaWNpdGx5U2V0U3Ryb2tlQ29sb3IodHJ1ZSk7CisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5hcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSkKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCku
c2V0U3Ryb2tlQ29sb3IoYnVpbGRlclN0YXRlLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKHByaW1p
dGl2ZVZhbHVlLCAvKiBmb3JWaXNpdGVkTGluayAqLyBmYWxzZSkpOworICAgIGlmIChidWlsZGVy
U3RhdGUuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpKQorICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRWaXNpdGVkTGlua1N0cm9rZUNvbG9yKGJ1aWxkZXJTdGF0ZS5jb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShwcmltaXRpdmVWYWx1ZSwgLyogZm9yVmlzaXRlZExpbmsgKi8g
dHJ1ZSkpOworICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEhhc0V4cGxpY2l0bHlTZXRTdHJv
a2VDb2xvcih0cnVlKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eUluaXRpYWxDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25z
dCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5pdGlhbEN1
c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NT
UmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5nJiBu
YW1lKQogewogICAgIGlmIChyZWdpc3RlcmVkICYmIHJlZ2lzdGVyZWQtPmluaXRpYWxWYWx1ZSgp
KSB7CiAgICAgICAgIGF1dG8gaW5pdGlhbFZhbHVlID0gcmVnaXN0ZXJlZC0+aW5pdGlhbFZhbHVl
Q29weSgpOwotICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwg
cmVnaXN0ZXJlZCwgKmluaXRpYWxWYWx1ZSk7CisgICAgICAgIGFwcGx5VmFsdWVDdXN0b21Qcm9w
ZXJ0eShidWlsZGVyU3RhdGUsIHJlZ2lzdGVyZWQsICppbml0aWFsVmFsdWUpOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCiAgICAgYXV0byBpbnZhbGlkID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1
ZTo6Y3JlYXRlVW5yZXNvbHZlZChuYW1lLCBDU1NWYWx1ZUludmFsaWQpOwotICAgIGFwcGx5VmFs
dWVDdXN0b21Qcm9wZXJ0eShzdHlsZVJlc29sdmVyLCByZWdpc3RlcmVkLCBpbnZhbGlkLmdldCgp
KTsKKyAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVk
LCBpbnZhbGlkLmdldCgpKTsKIH0KIAotaW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3VzdG9tOjph
cHBseUluaGVyaXRDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBj
b25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUpCitpbmxpbmUgdm9pZCBTdHlsZUJ1aWxkZXJDdXN0b206OmFwcGx5SW5oZXJp
dEN1c3RvbVByb3BlcnR5KFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3Qg
Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5KiByZWdpc3RlcmVkLCBjb25zdCBBdG9tU3RyaW5n
JiBuYW1lKQogewotICAgIGF1dG8qIHBhcmVudFZhbHVlID0gc3R5bGVSZXNvbHZlci5wYXJlbnRT
dHlsZSgpID8gc3R5bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpLT5pbmhlcml0ZWRDdXN0b21Qcm9w
ZXJ0aWVzKCkuZ2V0KG5hbWUpIDogbnVsbHB0cjsKKyAgICBhdXRvKiBwYXJlbnRWYWx1ZSA9IGJ1
aWxkZXJTdGF0ZS5wYXJlbnRTdHlsZSgpLmluaGVyaXRlZEN1c3RvbVByb3BlcnRpZXMoKS5nZXQo
bmFtZSk7CiAgICAgaWYgKHBhcmVudFZhbHVlICYmICEocmVnaXN0ZXJlZCAmJiAhcmVnaXN0ZXJl
ZC0+aW5oZXJpdHMpKQotICAgICAgICBhcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNv
bHZlciwgcmVnaXN0ZXJlZCwgKnBhcmVudFZhbHVlKTsKKyAgICAgICAgYXBwbHlWYWx1ZUN1c3Rv
bVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgKnBhcmVudFZhbHVlKTsKICAgICBl
bHNlCi0gICAgICAgIGFwcGx5SW5pdGlhbEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJl
Z2lzdGVyZWQsIG5hbWUpOworICAgICAgICBhcHBseUluaXRpYWxDdXN0b21Qcm9wZXJ0eShidWls
ZGVyU3RhdGUsIHJlZ2lzdGVyZWQsIG5hbWUpOwogfQogCi1pbmxpbmUgdm9pZCBTdHlsZUJ1aWxk
ZXJDdXN0b206OmFwcGx5VmFsdWVDdXN0b21Qcm9wZXJ0eShTdHlsZVJlc29sdmVyJiBzdHlsZVJl
c29sdmVyLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUmIHZhbHVlKQoraW5saW5lIHZvaWQgU3R5bGVCdWlsZGVyQ3Vz
dG9tOjphcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRl
clN0YXRlLCBjb25zdCBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIHJlZ2lzdGVyZWQsIENT
U0N1c3RvbVByb3BlcnR5VmFsdWUmIHZhbHVlKQogewogICAgIEFTU0VSVCh2YWx1ZS5pc1Jlc29s
dmVkKCkpOwogICAgIGNvbnN0IGF1dG8mIG5hbWUgPSB2YWx1ZS5uYW1lKCk7CiAKICAgICBpZiAo
IXJlZ2lzdGVyZWQgfHwgcmVnaXN0ZXJlZC0+aW5oZXJpdHMpCi0gICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+c2V0SW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtlUmVm
KHZhbHVlKSk7CisgICAgICAgIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLnNldEluaGVyaXRlZEN1c3Rv
bVByb3BlcnR5VmFsdWUobmFtZSwgbWFrZVJlZih2YWx1ZSkpOwogICAgIGVsc2UKLSAgICAgICAg
c3R5bGVSZXNvbHZlci5zdHlsZSgpLT5zZXROb25Jbmhlcml0ZWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KG5hbWUsIG1ha2VSZWYodmFsdWUpKTsKKyAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlKCkuc2V0
Tm9uSW5oZXJpdGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShuYW1lLCBtYWtlUmVmKHZhbHVlKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNw
cAppbmRleCBmNmM3ZmZhMGI4MC4uZGM5YTc1MTZkMGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVS
ZXNvbHZlci5jcHAKQEAgLTk4LDYgKzk4LDcgQEAKICNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZElt
YWdlLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZUZvckRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiU3R5bGVTaGVldENvbnRlbnRzLmgiCiAj
aW5jbHVkZSAiVHJhbnNmb3JtRnVuY3Rpb25zLmgiCkBAIC0xNDMsNyArMTQ0LDYgQEAgU3R5bGVS
ZXNvbHZlcjo6U3R5bGVSZXNvbHZlcihEb2N1bWVudCYgZG9jdW1lbnQpCiAjaWYgRU5BQkxFKENT
U19ERVZJQ0VfQURBUFRBVElPTikKICAgICAsIG1fdmlld3BvcnRTdHlsZVJlc29sdmVyKFZpZXdw
b3J0U3R5bGVSZXNvbHZlcjo6Y3JlYXRlKCZkb2N1bWVudCkpCiAjZW5kaWYKLSAgICAsIG1fc3R5
bGVNYXAodGhpcykKICAgICAsIG1fbWF0Y2hBdXRob3JBbmRVc2VyU3R5bGVzKG1fZG9jdW1lbnQu
c2V0dGluZ3MoKS5hdXRob3JBbmRVc2VyU3R5bGVzRW5hYmxlZCgpKQogewogICAgIEVsZW1lbnQq
IHJvb3QgPSBtX2RvY3VtZW50LmRvY3VtZW50RWxlbWVudCgpOwpAQCAtMjQ0LDcgKzI0NCw2IEBA
IFN0eWxlUmVzb2x2ZXI6OlN0YXRlOjpTdGF0ZShjb25zdCBFbGVtZW50JiBlbGVtZW50LCBjb25z
dCBSZW5kZXJTdHlsZSogcGFyZW50U3R5CiAgICAgOiBtX2VsZW1lbnQoJmVsZW1lbnQpCiAgICAg
LCBtX3BhcmVudFN0eWxlKHBhcmVudFN0eWxlKQogICAgICwgbV9zZWxlY3RvckZpbHRlcihzZWxl
Y3RvckZpbHRlcikKLSAgICAsIG1fZWxlbWVudExpbmtTdGF0ZShlbGVtZW50LmRvY3VtZW50KCku
dmlzaXRlZExpbmtTdGF0ZSgpLmRldGVybWluZUxpbmtTdGF0ZShlbGVtZW50KSkKIHsKICAgICBi
b29sIHJlc2V0U3R5bGVJbmhlcml0YW5jZSA9IGhhc1NoYWRvd1Jvb3RQYXJlbnQoZWxlbWVudCkg
JiYgZG93bmNhc3Q8U2hhZG93Um9vdD4oZWxlbWVudC5wYXJlbnROb2RlKCkpLT5yZXNldFN0eWxl
SW5oZXJpdGFuY2UoKTsKICAgICBpZiAocmVzZXRTdHlsZUluaGVyaXRhbmNlKQpAQCAtMzA4LDcg
KzMwNyw3IEBAIEVsZW1lbnRTdHlsZSBTdHlsZVJlc29sdmVyOjpzdHlsZUZvckVsZW1lbnQoY29u
c3QgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyCiAKICAgICBpZiAoZWxlbWVudC5pc0xp
bmsoKSkgewogICAgICAgICBzdHlsZS5zZXRJc0xpbmsodHJ1ZSk7Ci0gICAgICAgIEluc2lkZUxp
bmsgbGlua1N0YXRlID0gc3RhdGUuZWxlbWVudExpbmtTdGF0ZSgpOworICAgICAgICBJbnNpZGVM
aW5rIGxpbmtTdGF0ZSA9IGRvY3VtZW50KCkudmlzaXRlZExpbmtTdGF0ZSgpLmRldGVybWluZUxp
bmtTdGF0ZShlbGVtZW50KTsKICAgICAgICAgaWYgKGxpbmtTdGF0ZSAhPSBJbnNpZGVMaW5rOjpO
b3RJbnNpZGUpIHsKICAgICAgICAgICAgIGJvb2wgZm9yY2VWaXNpdGVkID0gSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpmb3JjZVBzZXVkb1N0YXRlKGVsZW1lbnQsIENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzc1Zpc2l0ZWQpOwogICAgICAgICAgICAgaWYgKGZvcmNlVmlzaXRlZCkKQEAgLTM2OSw3
ICszNjgsNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0
eWxlRm9yS2V5ZnJhbWUoY29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3Bl
cnRpZXMoZmlyc3RDU1NQcm9wZXJ0eSwgbGFzdEhpZ2hQcmlvcml0eVByb3BlcnR5KTsKIAogICAg
IC8vIElmIG91ciBmb250IGdvdCBkaXJ0aWVkLCB1cGRhdGUgaXQgbm93LgotICAgIHVwZGF0ZUZv
bnQoKTsKKyAgICB1cGRhdGVGb250KGNhc2NhZGUpOwogCiAgICAgLy8gTm93IHJlc29sdmUgcmVt
YWluaW5nIGN1c3RvbSBwcm9wZXJ0aWVzIGFuZCB0aGUgcmVzdCwgaW4gYW55IG9yZGVyCiAgICAg
Y2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAgLTM3Nyw3ICszNzYsNyBAQCBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFN0eWxlUmVzb2x2ZXI6OnN0eWxlRm9yS2V5ZnJhbWUo
Y29uc3QgUmVuZGVyU3R5bGUqCiAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoZmlyc3RMb3dQ
cmlvcml0eVByb3BlcnR5LCBsYXN0Q1NTUHJvcGVydHkpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQg
Z290IGRpcnRpZWQgYnkgb25lIG9mIHRoZSBub24tZXNzZW50aWFsIGZvbnQgcHJvcHMsIHVwZGF0
ZSBpdCBhIHNlY29uZCB0aW1lLgotICAgIHVwZGF0ZUZvbnQoKTsKKyAgICB1cGRhdGVGb250KGNh
c2NhZGUpOwogCiAgICAgY2FzY2FkZS5hcHBseURlZmVycmVkUHJvcGVydGllcygpOwogCkBAIC01
NjksNyArNTY4LDcgQEAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBTdHlsZVJlc29sdmVy
OjpzdHlsZUZvclBhZ2UoaW50IHBhZ2VJbmRleCkKICAgICBjYXNjYWRlLmFwcGx5UHJvcGVydGll
cyhmaXJzdENTU1Byb3BlcnR5LCBsYXN0SGlnaFByaW9yaXR5UHJvcGVydHkpOwogCiAgICAgLy8g
SWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgp
OworICAgIHVwZGF0ZUZvbnQoY2FzY2FkZSk7CiAKICAgICAvLyBOb3cgcmVzb2x2ZSByZW1haW5p
bmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBpbiBhbnkgb3JkZXIKICAgICBjYXNj
YWRlLmFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwpAQCAtMTE1NiwxMiArMTE1NSwxMiBAQCBzdGF0
aWMgdm9pZCBjaGVja0Zvck9yaWVudGF0aW9uQ2hhbmdlKFJlbmRlclN0eWxlJiBzdHlsZSkKICAg
ICBzdHlsZS5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShuZXdGb250RGVzY3JpcHRpb24pKTsK
IH0KIAotdm9pZCBTdHlsZVJlc29sdmVyOjp1cGRhdGVGb250KCkKK3ZvaWQgU3R5bGVSZXNvbHZl
cjo6dXBkYXRlRm9udChTdHlsZTo6UHJvcGVydHlDYXNjYWRlJiBjYXNjYWRlKQogewotICAgIGlm
ICghbV9zdGF0ZS5mb250RGlydHkoKSkKKyAgICBhdXRvJiBzdHlsZSA9ICptX3N0YXRlLnN0eWxl
KCk7CisgICAgaWYgKCFjYXNjYWRlLmJ1aWxkZXJTdGF0ZSgpLmZvbnREaXJ0eSgpICYmIHN0eWxl
LmZvbnRDYXNjYWRlKCkuZm9udHMoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgc3R5
bGUgPSAqbV9zdGF0ZS5zdHlsZSgpOwogI2lmIEVOQUJMRShURVhUX0FVVE9TSVpJTkcpCiAgICAg
Y2hlY2tGb3JUZXh0U2l6ZUFkanVzdChzdHlsZSk7CiAjZW5kaWYKQEAgLTExNzEsNyArMTE3MCw4
IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6dXBkYXRlRm9udCgpCiAgICAgc3R5bGUuZm9udENhc2Nh
ZGUoKS51cGRhdGUoJmRvY3VtZW50KCkuZm9udFNlbGVjdG9yKCkpOwogICAgIGlmIChtX3N0YXRl
LmZvbnRTaXplSGFzVmlld3BvcnRVbml0cygpKQogICAgICAgICBzdHlsZS5zZXRIYXNWaWV3cG9y
dFVuaXRzKHRydWUpOwotICAgIG1fc3RhdGUuc2V0Rm9udERpcnR5KGZhbHNlKTsKKworICAgIGNh
c2NhZGUuYnVpbGRlclN0YXRlKCkuY2xlYXJGb250RGlydHkoKTsKIH0KIAogVmVjdG9yPFJlZlB0
cjxTdHlsZVJ1bGU+PiBTdHlsZVJlc29sdmVyOjpzdHlsZVJ1bGVzRm9yRWxlbWVudChjb25zdCBF
bGVtZW50KiBlbGVtZW50LCB1bnNpZ25lZCBydWxlc1RvSW5jbHVkZSkKQEAgLTEzMzgsNyArMTMz
OCw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVydGllcyhjb25zdCBN
YXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIGNhc2NhZGUuYXBwbHlQcm9w
ZXJ0aWVzKGZpcnN0Q1NTUHJvcGVydHksIGxhc3RIaWdoUHJpb3JpdHlQcm9wZXJ0eSk7CiAKICAg
ICAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQsIHVwZGF0ZSBpdCBub3cuCi0gICAgICAg
IHVwZGF0ZUZvbnQoKTsKKyAgICAgICAgdXBkYXRlRm9udChjYXNjYWRlKTsKIAogICAgICAgICAv
LyBOb3cgcmVzb2x2ZSByZW1haW5pbmcgY3VzdG9tIHByb3BlcnRpZXMgYW5kIHRoZSByZXN0LCBp
biBhbnkgb3JkZXIKICAgICAgICAgY2FzY2FkZS5hcHBseUN1c3RvbVByb3BlcnRpZXMoKTsKQEAg
LTEzNjUsNyArMTM2NSw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlNYXRjaGVkUHJvcGVy
dGllcyhjb25zdCBNYXRjaFJlc3VsdCYgbWF0Y2hSZXN1bHQsIGNvbnN0CiAgICAgICAgIHJldHVy
biBhcHBseU1hdGNoZWRQcm9wZXJ0aWVzKG1hdGNoUmVzdWx0LCBlbGVtZW50LCBEb05vdFVzZU1h
dGNoZWRQcm9wZXJ0aWVzQ2FjaGUpOwogCiAgICAgLy8gSWYgb3VyIGZvbnQgZ290IGRpcnRpZWQs
IHVwZGF0ZSBpdCBub3cuCi0gICAgdXBkYXRlRm9udCgpOworICAgIHVwZGF0ZUZvbnQoY2FzY2Fk
ZSk7CiAKICAgICAvLyBJZiB0aGUgZm9udCBjaGFuZ2VkLCB3ZSBjYW4ndCB1c2UgdGhlIG1hdGNo
ZWQgcHJvcGVydGllcyBjYWNoZS4gU3RhcnQgb3Zlci4KICAgICBpZiAoY2FjaGVJdGVtICYmIGNh
Y2hlSXRlbS0+cmVuZGVyU3R5bGUtPmZvbnREZXNjcmlwdGlvbigpICE9IHN0YXRlLnN0eWxlKCkt
PmZvbnREZXNjcmlwdGlvbigpKQpAQCAtMTM4MSw3ICsxMzgxLDcgQEAgdm9pZCBTdHlsZVJlc29s
dmVyOjphcHBseU1hdGNoZWRQcm9wZXJ0aWVzKGNvbnN0IE1hdGNoUmVzdWx0JiBtYXRjaFJlc3Vs
dCwgY29uc3QKICAgICAvLyBzbyB0byBwcmVzZXJ2ZSBiZWhhdmlvciwgd2UgcXVldWUgdGhlbSB1
cCBkdXJpbmcgY2FzY2FkZSBhbmQgZmx1c2ggaGVyZS4KICAgICBjYXNjYWRlLmFwcGx5RGVmZXJy
ZWRQcm9wZXJ0aWVzKCk7CiAKLSAgICBBU1NFUlQoIXN0YXRlLmZvbnREaXJ0eSgpKTsKKyAgICBB
U1NFUlQoIWNhc2NhZGUuYnVpbGRlclN0YXRlKCkuZm9udERpcnR5KCkpOwogCiAgICAgaWYgKGNh
Y2hlSXRlbSB8fCAhY2FjaGVIYXNoKQogICAgICAgICByZXR1cm47CkBAIC0xNDAyLDEwICsxNDAy
LDExIEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6YXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENT
U1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlKiB2YWx1CiB7CiAgICAgaWYgKCF2YWx1ZSkKICAgICAg
ICAgcmV0dXJuOworCiAgICAgTWF0Y2hSZXN1bHQgbWF0Y2hSZXN1bHQ7CiAgICAgU3R5bGU6OlBy
b3BlcnR5Q2FzY2FkZSBjYXNjYWRlKCp0aGlzLCBtYXRjaFJlc3VsdCwgeyB9KTsKLSAgICBpZiAo
dmFsdWUpCi0gICAgICAgIGNhc2NhZGUuYXBwbHlQcm9wZXJ0eShpZCwgKnZhbHVlKTsKKyAgICBj
YXNjYWRlLmFwcGx5UHJvcGVydHkoaWQsICp2YWx1ZSk7CisgICAgdXBkYXRlRm9udChjYXNjYWRl
KTsKIH0KIAogLy8gU1ZHIGhhbmRsZXMgem9vbWluZyBpbiBhIGRpZmZlcmVudCB3YXkgY29tcGFy
ZWQgdG8gQ1NTLiBUaGUgd2hvbGUgZG9jdW1lbnQgaXMgc2NhbGVkIGluc3RlYWQKQEAgLTE1MTYs
NyArMTUxNyw3IEBAIHZvaWQgU3R5bGVSZXNvbHZlcjo6aW5pdGlhbGl6ZUZvbnRTdHlsZSgpCiAg
ICAgZm9udERlc2NyaXB0aW9uLnNldEtleXdvcmRTaXplRnJvbUlkZW50aWZpZXIoQ1NTVmFsdWVN
ZWRpdW0pOwogICAgIHNldEZvbnRTaXplKGZvbnREZXNjcmlwdGlvbiwgU3R5bGU6OmZvbnRTaXpl
Rm9yS2V5d29yZChDU1NWYWx1ZU1lZGl1bSwgZmFsc2UsIGRvY3VtZW50KCkpKTsKICAgICBmb250
RGVzY3JpcHRpb24uc2V0U2hvdWxkQWxsb3dVc2VySW5zdGFsbGVkRm9udHMoc2V0dGluZ3MoKS5z
aG91bGRBbGxvd1VzZXJJbnN0YWxsZWRGb250cygpID8gQWxsb3dVc2VySW5zdGFsbGVkRm9udHM6
OlllcyA6IEFsbG93VXNlckluc3RhbGxlZEZvbnRzOjpObyk7Ci0gICAgc2V0Rm9udERlc2NyaXB0
aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CisgICAgc3R5bGUoKS0+c2V0Rm9udERlc2Ny
aXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7CiB9CiAKIHZvaWQgU3R5bGVSZXNvbHZl
cjo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBm
bG9hdCBzaXplKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKaW5kZXggNTdjOThhMTUyYTUu
LjgyMmZhOTRkMTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZl
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmgKQEAgLTI4LDcgKzI4
LDYgQEAKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgogI2luY2x1ZGUgIkluc3Bl
Y3RvckNTU09NV3JhcHBlcnMuaCIKICNpbmNsdWRlICJNZWRpYVF1ZXJ5RXZhbHVhdG9yLmgiCi0j
aW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJSdWxlU2V0LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyLmgiCkBAIC04NSw2
ICs4NCwxMCBAQCBjbGFzcyBTVkdTVkdFbGVtZW50OwogY2xhc3MgVmlld3BvcnRTdHlsZVJlc29s
dmVyOwogc3RydWN0IFJlc291cmNlTG9hZGVyT3B0aW9uczsKIAorbmFtZXNwYWNlIFN0eWxlIHsK
K2NsYXNzIFByb3BlcnR5Q2FzY2FkZTsKK30KKwogLy8gTWF0Y2hPbmx5VXNlckFnZW50UnVsZXMg
aXMgdXNlZCBpbiBtZWRpYSBxdWVyaWVzLCB3aGVyZSByZWxhdGl2ZSB1bml0cwogLy8gYXJlIGlu
dGVycHJldGVkIGFjY29yZGluZyB0byB0aGUgZG9jdW1lbnQgcm9vdCBlbGVtZW50IHN0eWxlLCBh
bmQgc3R5bGVkIG9ubHkKIC8vIGZyb20gdGhlIFVzZXIgQWdlbnQgU3R5bGVzaGVldCBydWxlcy4K
QEAgLTE2MCw3ICsxNjMsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBhcHBseVByb3BlcnR5VG9TdHls
ZShDU1NQcm9wZXJ0eUlELCBDU1NWYWx1ZSosIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4p
OwogICAgIHZvaWQgYXBwbHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5SUQsIENT
U1ZhbHVlKik7CiAKLSAgICB2b2lkIHVwZGF0ZUZvbnQoKTsKKyAgICB2b2lkIHVwZGF0ZUZvbnQo
U3R5bGU6OlByb3BlcnR5Q2FzY2FkZSYpOwogICAgIHZvaWQgaW5pdGlhbGl6ZUZvbnRTdHlsZSgp
OwogCiAgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2NyaXB0aW9uJiwgZmxvYXQg
c2l6ZSk7CkBAIC0yNDMsMTUgKzI0Niw2IEBAIHB1YmxpYzoKICAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUqIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsgfQogICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogcm9vdEVsZW1lbnRTdHlsZSgpIGNvbnN0IHsgcmV0dXJu
IG1fcm9vdEVsZW1lbnRTdHlsZTsgfQogCi0gICAgICAgIEluc2lkZUxpbmsgZWxlbWVudExpbmtT
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudExpbmtTdGF0ZTsgfQotCi0gICAgICAgIHZv
aWQgc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5
UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSA9IGlzQXBwbHk7IH0KLSAgICAgICAgdm9pZCBzZXRBcHBs
eVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGJvb2wgaXNBcHBseSkgeyBtX2FwcGx5UHJvcGVy
dHlUb1Zpc2l0ZWRMaW5rU3R5bGUgPSBpc0FwcGx5OyB9Ci0gICAgICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9SZWd1
bGFyU3R5bGU7IH0KLSAgICAgICAgYm9vbCBhcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlOyB9Ci0K
LSAgICAgICAgdm9pZCBzZXRGb250RGlydHkoYm9vbCBpc0RpcnR5KSB7IG1fZm9udERpcnR5ID0g
aXNEaXJ0eTsgfQotICAgICAgICBib29sIGZvbnREaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fZm9u
dERpcnR5OyB9CiAgICAgICAgIHZvaWQgc2V0Rm9udFNpemVIYXNWaWV3cG9ydFVuaXRzKGJvb2wg
aGFzVmlld3BvcnRVbml0cykgeyBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0cyA9IGhhc1ZpZXdw
b3J0VW5pdHM7IH0KICAgICAgICAgYm9vbCBmb250U2l6ZUhhc1ZpZXdwb3J0VW5pdHMoKSBjb25z
dCB7IHJldHVybiBtX2ZvbnRTaXplSGFzVmlld3BvcnRVbml0czsgfQogCkBAIC0yNjEsMjMgKzI1
NSwxMCBAQCBwdWJsaWM6CiAgICAgICAgIEZpbGxMYXllciBiYWNrZ3JvdW5kRGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmFja2dyb3VuZERhdGE7IH0KICAgICAgICAgY29uc3QgQ29sb3ImIGJhY2tn
cm91bmRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYmFja2dyb3VuZENvbG9yOyB9CiAKLSAgICAg
ICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uKCkgeyByZXR1
cm4gbV9zdHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgY29uc3QgRm9udENhc2Nh
ZGVEZXNjcmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRT
dHlsZS0+Zm9udERlc2NyaXB0aW9uKCk7IH0KLSAgICAgICAgdm9pZCBzZXRGb250RGVzY3JpcHRp
b24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlvbikgeyBtX2ZvbnREaXJ0
eSB8PSBtX3N0eWxlLT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24p
KTsgfQotICAgICAgICB2b2lkIHNldFpvb20oZmxvYXQgZikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0
eWxlLT5zZXRab29tKGYpOyB9Ci0gICAgICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShmbG9hdCBm
KSB7IG1fZm9udERpcnR5IHw9IG1fc3R5bGUtPnNldEVmZmVjdGl2ZVpvb20oZik7IH0KLSAgICAg
ICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2ZvbnRE
aXJ0eSB8PSBtX3N0eWxlLT5zZXRXcml0aW5nTW9kZSh3cml0aW5nTW9kZSk7IH0KLSAgICAgICAg
dm9pZCBzZXRUZXh0T3JpZW50YXRpb24oVGV4dE9yaWVudGF0aW9uIHRleHRPcmllbnRhdGlvbikg
eyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLT5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0
aW9uKTsgfQotCiAgICAgICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QgeyByZXR1cm4g
bV9lbGVtZW50ICYmIG1fZWxlbWVudC0+aXNTVkdFbGVtZW50KCk7IH0KIAogICAgICAgICBjb25z
dCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkg
Y29uc3QgeyByZXR1cm4gbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CiAKLSAgICAgICAg
U3R5bGU6OkNhc2NhZGVMZXZlbCBjYXNjYWRlTGV2ZWwoKSBjb25zdCB7IHJldHVybiBtX2Nhc2Nh
ZGVMZXZlbDsgfQotICAgICAgICB2b2lkIHNldENhc2NhZGVMZXZlbChTdHlsZTo6Q2FzY2FkZUxl
dmVsIGxldmVsKSB7IG1fY2FzY2FkZUxldmVsID0gbGV2ZWw7IH0KLSAgICAgICAgU3R5bGU6OlNj
b3BlT3JkaW5hbCBzdHlsZVNjb3BlT3JkaW5hbCgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVTY29w
ZU9yZGluYWw7IH0KLSAgICAgICAgdm9pZCBzZXRTdHlsZVNjb3BlT3JkaW5hbChTdHlsZTo6U2Nv
cGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKSB7IG1fc3R5bGVTY29wZU9yZGluYWwgPSBzdHls
ZVNjb3BlT3JkaW5hbDsgfQotCiAgICAgICAgIGNvbnN0IFNlbGVjdG9yRmlsdGVyKiBzZWxlY3Rv
ckZpbHRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0b3JGaWx0ZXI7IH0KICAgICAgICAgCiAg
ICAgcHJpdmF0ZToKQEAgLTI5NywxNCArMjc4LDYgQEAgcHVibGljOgogCiAgICAgICAgIENTU1Rv
TGVuZ3RoQ29udmVyc2lvbkRhdGEgbV9jc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOwogCi0gICAg
ICAgIFN0eWxlOjpTY29wZU9yZGluYWwgbV9zdHlsZVNjb3BlT3JkaW5hbCB7IFN0eWxlOjpTY29w
ZU9yZGluYWw6OkVsZW1lbnQgfTsKLQotICAgICAgICBJbnNpZGVMaW5rIG1fZWxlbWVudExpbmtT
dGF0ZSB7IEluc2lkZUxpbms6Ok5vdEluc2lkZSB9OwotICAgICAgICBTdHlsZTo6Q2FzY2FkZUxl
dmVsIG1fY2FzY2FkZUxldmVsIHsgU3R5bGU6OkNhc2NhZGVMZXZlbDo6VXNlckFnZW50IH07Ci0K
LSAgICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSB7IHRydWUgfTsKLSAg
ICAgICAgYm9vbCBtX2FwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUgeyBmYWxzZSB9Owot
ICAgICAgICBib29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKICAgICAgICAgYm9vbCBtX2ZvbnRT
aXplSGFzVmlld3BvcnRVbml0cyB7IGZhbHNlIH07CiAgICAgICAgIGJvb2wgbV9oYXNVQUFwcGVh
cmFuY2UgeyBmYWxzZSB9OwogICAgIH07CkBAIC0zMTQsMTggKzI4Nyw3IEBAIHB1YmxpYzoKIAog
ICAgIFJlZlB0cjxTdHlsZUltYWdlPiBzdHlsZUltYWdlKENTU1ZhbHVlJik7CiAKLSAgICBib29s
IGFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUuYXBw
bHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKCk7IH0KLSAgICBib29sIGFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlLmFwcGx5UHJvcGVydHlUb1Zp
c2l0ZWRMaW5rU3R5bGUoKTsgfQotCi0gICAgQ1NTVG9TdHlsZU1hcCogc3R5bGVNYXAoKSB7IHJl
dHVybiAmbV9zdHlsZU1hcDsgfQogICAgIEluc3BlY3RvckNTU09NV3JhcHBlcnMmIGluc3BlY3Rv
ckNTU09NV3JhcHBlcnMoKSB7IHJldHVybiBtX2luc3BlY3RvckNTU09NV3JhcHBlcnM7IH0KLSAg
ICBjb25zdCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVy
biBtX3N0YXRlLmZvbnREZXNjcmlwdGlvbigpOyB9Ci0gICAgY29uc3QgRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9zdGF0ZS5wYXJlbnRG
b250RGVzY3JpcHRpb24oKTsgfQotICAgIHZvaWQgc2V0Rm9udERlc2NyaXB0aW9uKEZvbnRDYXNj
YWRlRGVzY3JpcHRpb24mJiBmb250RGVzY3JpcHRpb24pIHsgbV9zdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTsgfQotICAgIHZvaWQgc2V0Wm9vbShmbG9h
dCBmKSB7IG1fc3RhdGUuc2V0Wm9vbShmKTsgfQotICAgIHZvaWQgc2V0RWZmZWN0aXZlWm9vbShm
bG9hdCBmKSB7IG1fc3RhdGUuc2V0RWZmZWN0aXZlWm9vbShmKTsgfQotICAgIHZvaWQgc2V0V3Jp
dGluZ01vZGUoV3JpdGluZ01vZGUgd3JpdGluZ01vZGUpIHsgbV9zdGF0ZS5zZXRXcml0aW5nTW9k
ZSh3cml0aW5nTW9kZSk7IH0KLSAgICB2b2lkIHNldFRleHRPcmllbnRhdGlvbihUZXh0T3JpZW50
YXRpb24gdGV4dE9yaWVudGF0aW9uKSB7IG1fc3RhdGUuc2V0VGV4dE9yaWVudGF0aW9uKHRleHRP
cmllbnRhdGlvbik7IH0KIAogICAgIGJvb2wgYWRqdXN0UmVuZGVyU3R5bGVGb3JUZXh0QXV0b3Np
emluZyhSZW5kZXJTdHlsZSYsIGNvbnN0IEVsZW1lbnQmKTsKIApAQCAtMzgwLDcgKzM0Miw2IEBA
IHByaXZhdGU6CiAgICAgUmVmUHRyPFZpZXdwb3J0U3R5bGVSZXNvbHZlcj4gbV92aWV3cG9ydFN0
eWxlUmVzb2x2ZXI7CiAjZW5kaWYKIAotICAgIENTU1RvU3R5bGVNYXAgbV9zdHlsZU1hcDsKICAg
ICBJbnNwZWN0b3JDU1NPTVdyYXBwZXJzIG1faW5zcGVjdG9yQ1NTT01XcmFwcGVyczsKIAogICAg
IFN0YXRlIG1fc3RhdGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3Au
cGwgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKaW5kZXggYmVkYjgyNGVhMGMuLmIx
ZjIyN2QxNzA3IDEwMDc1NQotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvbWFrZXByb3AucGwKKysr
IGIvU291cmNlL1dlYkNvcmUvY3NzL21ha2Vwcm9wLnBsCkBAIC01NzksMjEgKzU3OSwyMSBAQCBz
dWIgZ2V0QXV0b0dldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHls
ZSA9IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5oYXNBdXRvIiAuIGdldE5h
bWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLmhh
c0F1dG8iIC4gZ2V0TmFtZUZvck1ldGhvZHMoJG5hbWUpIC4gIigpIjsKIH0KIAogc3ViIGdldEF1
dG9TZXR0ZXIgewogICBteSAkbmFtZSA9IHNoaWZ0OwogICBteSAkcmVuZGVyU3R5bGUgPSBzaGlm
dDsKIAotICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi0+c2V0SGFzQXV0byIgLiBnZXROYW1lRm9y
TWV0aG9kcygkbmFtZSkgLiAiKCkiOworICByZXR1cm4gJHJlbmRlclN0eWxlIC4gIi5zZXRIYXNB
dXRvIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKSAuICIoKSI7CiB9CiAKIHN1YiBnZXRWaXNp
dGVkTGlua1NldHRlciB7CiAgIG15ICRuYW1lID0gc2hpZnQ7CiAgIG15ICRyZW5kZXJTdHlsZSA9
IHNoaWZ0OwogCi0gIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLT5zZXRWaXNpdGVkTGluayIgLiBn
ZXROYW1lRm9yTWV0aG9kcygkbmFtZSk7CisgIHJldHVybiAkcmVuZGVyU3R5bGUgLiAiLnNldFZp
c2l0ZWRMaW5rIiAuIGdldE5hbWVGb3JNZXRob2RzKCRuYW1lKTsKIH0KIAogc3ViIGdldENsZWFy
RnVuY3Rpb24gewpAQCAtNjk5LDcgKzY5OSw3IEBAIHN1YiBjb2xvckZyb21QcmltaXRpdmVWYWx1
ZSB7CiAgIG15ICRwcmltaXRpdmVWYWx1ZSA9IHNoaWZ0OwogICBteSAkZm9yVmlzaXRlZExpbmsg
PSBAXyA/IHNoaWZ0IDogTk9UX0ZPUl9WSVNJVEVEX0xJTks7CiAKLSAgcmV0dXJuICJzdHlsZVJl
c29sdmVyLmNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCIgLiAkcHJpbWl0aXZlVmFsdWUgLiAiLCAv
KiBmb3JWaXNpdGVkTGluayAqLyAiIC4gKCRmb3JWaXNpdGVkTGluayA/ICJ0cnVlIiA6ICJmYWxz
ZSIpIC4gIikiOworICByZXR1cm4gImJ1aWxkZXJTdGF0ZS5jb2xvckZyb21QcmltaXRpdmVWYWx1
ZSgiIC4gJHByaW1pdGl2ZVZhbHVlIC4gIiwgLyogZm9yVmlzaXRlZExpbmsgKi8gIiAuICgkZm9y
VmlzaXRlZExpbmsgPyAidHJ1ZSIgOiAiZmFsc2UiKSAuICIpIjsKIH0KIAogdXNlIGNvbnN0YW50
IHsKQEAgLTcxMywxMiArNzEzLDEyIEBAIHN1YiBnZW5lcmF0ZUNvbG9yVmFsdWVTZXR0ZXIgewog
ICBteSAkaW5kZW50ID0gc2hpZnQ7CiAgIG15ICR2YWx1ZUlzUHJpbWl0aXZlID0gQF8gPyBzaGlm
dCA6IFZBTFVFX0lTX0NPTE9SOwogCi0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxl
KCkiOwotICBteSAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlmIChzdHlsZVJlc29sdmVy
LmFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSgpKVxuIjsKLSAgbXkgJHNldFZhbHVlID0gJHN0
eWxlIC4gIi0+IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJz
ZXR0ZXIifTsKKyAgbXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKKyAgbXkgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlU
b1JlZ3VsYXJTdHlsZSgpKVxuIjsKKyAgbXkgJHNldFZhbHVlID0gJHN0eWxlIC4gIi4iIC4gJHBy
b3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAk
Y29sb3IgPSAkdmFsdWVJc1ByaW1pdGl2ZSA/IGNvbG9yRnJvbVByaW1pdGl2ZVZhbHVlKCR2YWx1
ZSkgOiAkdmFsdWU7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICIgLiAkc2V0
VmFsdWUgLiAiKCIgLiAkY29sb3IgLiAiKTtcbiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiaWYgKHN0eWxlUmVzb2x2ZXIuYXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgp
KVxuIjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLmFw
cGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSlcbiI7CiAgICRjb2xvciA9ICR2YWx1ZUlz
UHJpbWl0aXZlID8gY29sb3JGcm9tUHJpbWl0aXZlVmFsdWUoJHZhbHVlLCBGT1JfVklTSVRFRF9M
SU5LKSA6ICR2YWx1ZTsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdl
dFZpc2l0ZWRMaW5rU2V0dGVyKCRuYW1lLCAkc3R5bGUpIC4gIigiIC4gJGNvbG9yIC4gIik7XG4i
OwogCkBAIC03MzEsNyArNzMxLDcgQEAgc3ViIGhhbmRsZUN1cnJlbnRDb2xvclZhbHVlIHsKICAg
bXkgJGluZGVudCA9IHNoaWZ0OwogCiAgIG15ICRjb2RlID0gJGluZGVudCAuICJpZiAoIiAuICRw
cmltaXRpdmVWYWx1ZSAuICIudmFsdWVJRCgpID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKSB7XG4i
OwotICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICBhcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRu
YW1lfSAuICIoc3R5bGVSZXNvbHZlcik7XG4iOworICAkY29kZSAuPSAkaW5kZW50IC4gIiAgICBh
cHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAg
ICRjb2RlIC49ICRpbmRlbnQgLiAiICAgIHJldHVybjtcbiI7CiAgICRjb2RlIC49ICRpbmRlbnQg
LiAifVxuIjsKICAgcmV0dXJuICRjb2RlOwpAQCAtNzQyLDcgKzc0Miw3IEBAIHN1YiBnZW5lcmF0
ZUFuaW1hdGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNo
aWZ0OwogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRp
bmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IHN0eWxlUmVzb2x2ZXIuc3R5bGUoKS0+IiAu
IGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAuICIoKTtcbiI7
CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiQW5pbWF0aW9uTGlzdCYgbGlzdCA9IGJ1
aWxkZXJTdGF0ZS5zdHlsZSgpLiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01l
dGhvZCgkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImlm
IChsaXN0LmlzRW1wdHkoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkpO1xuIjsKICAgbXkgJHNldHRlciA9ICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzZXR0ZXIifTsKQEAgLTc2
Miw4ICs3NjIsOCBAQCBzdWIgZ2VuZXJhdGVBbmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNl
dHRlciB7CiAgIG15ICRpbmRlbnQgPSBzaGlmdDsKIAogICBteSAkc2V0dGVyQ29udGVudCA9ICIi
OwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8mIGxpc3QgPSBzdHlsZVJlc29s
dmVyLnN0eWxlKCktPiIgLiBnZXRFbnN1cmVBbmltYXRpb25zT3JUcmFuc2l0aW9uc01ldGhvZCgk
bmFtZSkgLiAiKCk7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIHBh
cmVudExpc3QgPSBzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCktPiIgLiBnZXRBbmltYXRpb25z
T3JUcmFuc2l0aW9uc01ldGhvZCgkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImF1dG8mIGxpc3QgPSBidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gZ2V0RW5z
dXJlQW5pbWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBwYXJlbnRMaXN0ID0gYnVpbGRlclN0YXRl
LnBhcmVudFN0eWxlKCkuIiAuIGdldEFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1l
KSAuICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGkgPSAw
LCBwYXJlbnRTaXplID0gcGFyZW50TGlzdCA/IHBhcmVudExpc3QtPnNpemUoKSA6IDA7XG4iOwog
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgaSA8IHBhcmVudFNpemUgJiYg
cGFyZW50TGlzdC0+YW5pbWF0aW9uKGkpLiIgLiBnZXRUZXN0RnVuY3Rpb24oJG5hbWUpIC4gIigp
OyArK2kpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGlmIChsaXN0
LnNpemUoKSA8PSBpKVxuIjsKQEAgLTc4NiwyMCArNzg2LDIwIEBAIHN1YiBnZW5lcmF0ZUFuaW1h
dGlvblByb3BlcnR5VmFsdWVTZXR0ZXIgewogICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkg
JHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJBbmlt
YXRpb25MaXN0JiBsaXN0ID0gc3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4gZ2V0RW5zdXJlQW5p
bWF0aW9uc09yVHJhbnNpdGlvbnNNZXRob2QoJG5hbWUpIC4gIigpO1xuIjsKKyAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICJBbmltYXRpb25MaXN0JiBsaXN0ID0gYnVpbGRlclN0YXRlLnN0
eWxlKCkuIiAuIGdldEVuc3VyZUFuaW1hdGlvbnNPclRyYW5zaXRpb25zTWV0aG9kKCRuYW1lKSAu
ICIoKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic2l6ZV90IGNoaWxkSW5k
ZXggPSAwO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoaXM8Q1NTVmFs
dWVMaXN0Pih2YWx1ZSkpIHtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IC8qIFdhbGsgZWFjaCB2YWx1ZSBhbmQgcHV0IGl0IGludG8gYW4gYW5pbWF0aW9uLCBjcmVhdGlu
ZyBuZXcgYW5pbWF0aW9ucyBhcyBuZWVkZWQuICovXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBmb3IgKGF1dG8mIGN1cnJlbnRWYWx1ZSA6IGRvd25jYXN0PENTU1ZhbHVl
TGlzdD4odmFsdWUpKSB7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAg
ICAgaWYgKGNoaWxkSW5kZXggPD0gbGlzdC5zaXplKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1hdGlvbjo6Y3JlYXRlKCkp
O1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHN0eWxlUmVzb2x2
ZXIuc3R5bGVNYXAoKS0+IiAuIGdldEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlz
dC5hbmltYXRpb24oY2hpbGRJbmRleCksIGN1cnJlbnRWYWx1ZSk7XG4iOworICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdl
dEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRl
eCksIGN1cnJlbnRWYWx1ZSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgKytjaGlsZEluZGV4O1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgfVxuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKICAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKGxpc3QuaXNFbXB0eSgpKVxuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIGxpc3QuYXBwZW5kKEFuaW1h
dGlvbjo6Y3JlYXRlKCkpO1xuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
c3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4gZ2V0QW5pbWF0aW9uTWFwZnVuY3Rpb24oJG5h
bWUpIC4gIihsaXN0LmFuaW1hdGlvbihjaGlsZEluZGV4KSwgdmFsdWUpO1xuIjsKKyAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdl
dEFuaW1hdGlvbk1hcGZ1bmN0aW9uKCRuYW1lKSAuICIobGlzdC5hbmltYXRpb24oY2hpbGRJbmRl
eCksIHZhbHVlKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGNoaWxk
SW5kZXggPSAxO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAk
c2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAoIDsgY2hpbGRJbmRleCA8IGxpc3Quc2l6
ZSgpOyArK2NoaWxkSW5kZXgpIHtcbiI7CkBAIC04MjIsMTEgKzgyMiwxMSBAQCBzdWIgZ2VuZXJh
dGVGaWxsTGF5ZXJQcm9wZXJ0eUluaXRpYWxWYWx1ZVNldHRlciB7CiAKICAgbXkgJHNldHRlckNv
bnRlbnQgPSAiIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIvLyBDaGVjayBmb3Ig
KHNpbmdsZS1sYXllcikgbm8tb3AgYmVmb3JlIGNsZWFyaW5nIGFueXRoaW5nLlxuIjsKLSAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvJiBsYXllcnMgPSBzdHlsZVJlc29sdmVyLnN0
eWxlKCktPiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOworICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gImF1dG8mIGxheWVycyA9IGJ1aWxkZXJTdGF0ZS5zdHlsZSgp
LiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7XG4iOwogICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImlmICghbGF5ZXJzLm5leHQoKSAmJiAoIWxheWVycy4iIC4gJHRlc3RG
dW5jdGlvbiAuICIoKSB8fCBsYXllcnMuIiAuICRnZXR0ZXIgLiAiKCkgPT0gJGluaXRpYWwpKVxu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgcmV0dXJuO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gIlxuIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRv
KiBjaGlsZCA9ICZzdHlsZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1
bmN0aW9uKCRuYW1lKSAuICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAi
YXV0byogY2hpbGQgPSAmYnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29y
RnVuY3Rpb24oJG5hbWUpIC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICJjaGlsZC0+IiAuICRzZXR0ZXIgLiAiKCIgLiAkaW5pdGlhbCAuICIpO1xuIjsKICAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJmb3IgKGNoaWxkID0gY2hpbGQtPm5leHQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHQoKSlcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAiICAgIGNoaWxkLT4iIC4gJGNsZWFyRnVuY3Rpb24gLiAiKCk7XG4iOwpAQCAtODQ1LDEyICs4
NDUsMTIgQEAgc3ViIGdlbmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIg
ewogCiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRl
bnQgLiAiLy8gQ2hlY2sgZm9yIG5vLW9wIGJlZm9yZSBjb3B5aW5nIGFueXRoaW5nLlxuIjsKLSAg
JHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoc3R5bGVSZXNvbHZlci5wYXJlbnRTdHls
ZSgpLT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4iKCkgPT0gc3R5bGVSZXNvbHZlci5z
dHlsZSgpLT4iIC4gZ2V0TGF5ZXJzRnVuY3Rpb24oJG5hbWUpIC4gIigpKVxuIjsKKyAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICJpZiAoYnVpbGRlclN0YXRlLnBhcmVudFN0eWxlKCkuIiAu
IGdldExheWVyc0Z1bmN0aW9uKCRuYW1lKSAuIigpID09IGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLiIg
LiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCkpXG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICByZXR1cm47XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAiXG4iOwot
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImF1dG8qIGNoaWxkID0gJnN0eWxlUmVzb2x2
ZXIuc3R5bGUoKS0+IiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUpIC4gIigpO1xu
IjsKKyAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZidWlsZGVy
U3RhdGUuc3R5bGUoKS4iIC4gZ2V0TGF5ZXJzQWNjZXNzb3JGdW5jdGlvbigkbmFtZSkgLiAiKCk7
XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIkZpbGxMYXllciogcHJldmlvdXND
aGlsZCA9IG51bGxwdHI7XG4iOwotICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gImZvciAo
YXV0byogcGFyZW50ID0gJnN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKS0+IiAuIGdldExheWVy
c0Z1bmN0aW9uKCRuYW1lKSAuICIoKTsgcGFyZW50ICYmIHBhcmVudC0+IiAuICR0ZXN0RnVuY3Rp
b24gLiAiKCk7IHBhcmVudCA9IHBhcmVudC0+bmV4dCgpKSB7XG4iOworICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gImZvciAoYXV0byogcGFyZW50ID0gJmJ1aWxkZXJTdGF0ZS5wYXJlbnRT
dHlsZSgpLiIgLiBnZXRMYXllcnNGdW5jdGlvbigkbmFtZSkgLiAiKCk7IHBhcmVudCAmJiBwYXJl
bnQtPiIgLiAkdGVzdEZ1bmN0aW9uIC4gIigpOyBwYXJlbnQgPSBwYXJlbnQtPm5leHQoKSkge1xu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgaWYgKCFjaGlsZCkge1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHByZXZpb3VzQ2hpbGQtPnNl
dE5leHQobWFrZVVuaXF1ZTxGaWxsTGF5ZXI+KCIgLiBnZXRGaWxsTGF5ZXJUeXBlKCRuYW1lKSAu
ICIpKTtcbiI7CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBjaGlsZCA9
IHByZXZpb3VzQ2hpbGQtPm5leHQoKTtcbiI7CkBAIC04NzIsNyArODcyLDcgQEAgc3ViIGdlbmVy
YXRlRmlsbExheWVyUHJvcGVydHlWYWx1ZVNldHRlciB7CiAgIG15ICRDU1NQcm9wZXJ0eUlkID0g
IkNTU1Byb3BlcnR5IiAuICRuYW1lVG9JZHskbmFtZX07CiAKICAgbXkgJHNldHRlckNvbnRlbnQg
PSAiIjsKLSAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJhdXRvKiBjaGlsZCA9ICZzdHls
ZVJlc29sdmVyLnN0eWxlKCktPiIgLiBnZXRMYXllcnNBY2Nlc3NvckZ1bmN0aW9uKCRuYW1lKSAu
ICIoKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiYXV0byogY2hpbGQgPSAm
YnVpbGRlclN0YXRlLnN0eWxlKCkuIiAuIGdldExheWVyc0FjY2Vzc29yRnVuY3Rpb24oJG5hbWUp
IC4gIigpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJGaWxsTGF5ZXIqIHBy
ZXZpb3VzQ2hpbGQgPSBudWxscHRyO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAu
ICJpZiAoaXM8Q1NTVmFsdWVMaXN0Pih2YWx1ZSkgJiYgIWlzPENTU0ltYWdlU2V0VmFsdWU+KHZh
bHVlKSkge1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgLy8gV2FsayBl
YWNoIHZhbHVlIGFuZCBwdXQgaXQgaW50byBhIGxheWVyLCBjcmVhdGluZyBuZXcgbGF5ZXJzIGFz
IG5lZWRlZC5cbiI7CkBAIC04ODEsMTIgKzg4MSwxMiBAQCBzdWIgZ2VuZXJhdGVGaWxsTGF5ZXJQ
cm9wZXJ0eVZhbHVlU2V0dGVyIHsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAg
ICAgICAgICBwcmV2aW91c0NoaWxkLT5zZXROZXh0KG1ha2VVbmlxdWU8RmlsbExheWVyPigiIC4g
Z2V0RmlsbExheWVyVHlwZSgkbmFtZSkgLiAiKSk7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICAgICAgICAgIGNoaWxkID0gcHJldmlvdXNDaGlsZC0+bmV4dCgpO1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIH1cbiI7Ci0gICRzZXR0ZXJD
b250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBzdHlsZVJlc29sdmVyLnN0eWxlTWFwKCktPiIg
LiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFtZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAu
ICIsICpjaGlsZCwgaXRlbSk7XG4iOworICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICAgICAgYnVpbGRlclN0YXRlLnN0eWxlTWFwKCkuIiAuIGdldEZpbGxMYXllck1hcGZ1bmN0aW9u
KCRuYW1lKSAuICIoIiAuICRDU1NQcm9wZXJ0eUlkIC4gIiwgKmNoaWxkLCBpdGVtKTtcbiI7CiAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgICAgICBwcmV2aW91c0NoaWxkID0gY2hp
bGQ7XG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY2hpbGQgPSBj
aGlsZC0+bmV4dCgpO1xuIjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxu
IjsKICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9IGVsc2Uge1xuIjsKLSAgJHNldHRl
ckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgc3R5bGVSZXNvbHZlci5zdHlsZU1hcCgpLT4iIC4g
Z2V0RmlsbExheWVyTWFwZnVuY3Rpb24oJG5hbWUpIC4gIigiIC4gJENTU1Byb3BlcnR5SWQgLiAi
LCAqY2hpbGQsIHZhbHVlKTtcbiI7CisgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAg
IGJ1aWxkZXJTdGF0ZS5zdHlsZU1hcCgpLiIgLiBnZXRGaWxsTGF5ZXJNYXBmdW5jdGlvbigkbmFt
ZSkgLiAiKCIgLiAkQ1NTUHJvcGVydHlJZCAuICIsICpjaGlsZCwgdmFsdWUpO1xuIjsKICAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgY2hpbGQgPSBjaGlsZC0+bmV4dCgpO1xuIjsK
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJ9XG4iOwogICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gImZvciAoOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dCgpKVxuIjsKQEAg
LTkwMiw3ICs5MDIsNyBAQCBzdWIgZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudAogCiAgIG15ICRp
c1NWRyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsi
c3ZnIn07CiAgIG15ICRzZXR0ZXIgPSAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25z
eyRuYW1lfXsic2V0dGVyIn07Ci0gIHJldHVybiAic3R5bGVSZXNvbHZlci5zdHlsZSgpLT4iIC4g
ICgkaXNTVkcgPyAiYWNjZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2
YWx1ZSAuICIpIjsKKyAgcmV0dXJuICJidWlsZGVyU3RhdGUuc3R5bGUoKS4iIC4gICgkaXNTVkcg
PyAiYWNjZXNzU1ZHU3R5bGUoKS4iIDogIiIpIC4gJHNldHRlciAuICIoIiAuICR2YWx1ZSAuICIp
IjsKIH0KIAogc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVlU2V0dGVyIHsKQEAgLTkxMyw5ICs5MTMs
OSBAQCBzdWIgZ2VuZXJhdGVJbml0aWFsVmFsdWVTZXR0ZXIgewogICBteSAkaW5pdGlhbCA9ICRw
cm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJpbml0aWFsIn07CiAgIG15
ICRpc1NWRyA9IGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsic3ZnIn07CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49
ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0g
LiAiKFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpXG4iOworICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5SW5pdGlhbCIgLiAkbmFtZVRvSWR7JG5hbWV9
IC4gIihTdHlsZTo6QnVpbGRlclN0YXRlJiBidWlsZGVyU3RhdGUpXG4iOwogICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gIntcbiI7Ci0gIG15ICRzdHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0
eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0eWxlKCkiOwogICBpZiAoZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJhdXRvLWZ1bmN0
aW9ucyJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgIiAuIGdldEF1
dG9TZXR0ZXIoJG5hbWUsICRzdHlsZSkgLiAiO1xuIjsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxpbmstY29sb3It
c3VwcG9ydCJ9KSB7CkBAIC05MjQsOSArOTI0LDkgQEAgc3ViIGdlbmVyYXRlSW5pdGlhbFZhbHVl
U2V0dGVyIHsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJhbmltYXRhYmxlIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSBnZW5l
cmF0ZUFuaW1hdGlvblByb3BlcnR5SW5pdGlhbFZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4g
IiAgICAiKTsKICAgfSBlbHNpZiAoZXhpc3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9w
dGlvbnN7JG5hbWV9eyJmb250LXByb3BlcnR5In0pIHsKLSAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IHN0eWxlUmVzb2x2ZXIuZm9udERl
c2NyaXB0aW9uKCk7XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGF1
dG8gZm9udERlc2NyaXB0aW9uID0gYnVpbGRlclN0YXRlLmZvbnREZXNjcmlwdGlvbigpO1xuIjsK
ICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAu
ICRzZXR0ZXIgLiAiKEZvbnRDYXNjYWRlRGVzY3JpcHRpb246OiIgLiAkaW5pdGlhbCAuICIoKSk7
XG4iOwotICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIu
c2V0Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3Jp
cHRpb24oV1RGTW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgIH0gZWxzaWYgKGV4aXN0cyAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZmlsbC1sYXllci1wcm9w
ZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVGaWxsTGF5ZXJQcm9wZXJ0
eUluaXRpYWxWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgIH0gZWxzZSB7
CkBAIC05NDMsMTEgKzk0MywxMSBAQCBzdWIgZ2VuZXJhdGVJbmhlcml0VmFsdWVTZXR0ZXIgewog
ICBteSAkaW5kZW50ID0gc2hpZnQ7CiAKICAgbXkgJHNldHRlckNvbnRlbnQgPSAiIjsKLSAgJHNl
dHRlckNvbnRlbnQgLj0gJGluZGVudCAuICJzdGF0aWMgdm9pZCBhcHBseUluaGVyaXQiIC4gJG5h
bWVUb0lkeyRuYW1lfSAuICIoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcilcbiI7CisgICRz
ZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAic3RhdGljIHZvaWQgYXBwbHlJbmhlcml0IiAuICRu
YW1lVG9JZHskbmFtZX0gLiAiKFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSlcbiI7
CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAie1xuIjsKICAgbXkgJGlzU1ZHID0gZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJzdmcifTsKLSAg
bXkgJHBhcmVudFN0eWxlID0gInN0eWxlUmVzb2x2ZXIucGFyZW50U3R5bGUoKSI7Ci0gIG15ICRz
dHlsZSA9ICJzdHlsZVJlc29sdmVyLnN0eWxlKCkiOworICBteSAkcGFyZW50U3R5bGUgPSAiYnVp
bGRlclN0YXRlLnBhcmVudFN0eWxlKCkiOworICBteSAkc3R5bGUgPSAiYnVpbGRlclN0YXRlLnN0
eWxlKCkiOwogICBteSAkZ2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17ImdldHRlciJ9OwogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVC
dWlsZGVyT3B0aW9uc3skbmFtZX17InNldHRlciJ9OwogICBteSAkZGlkQ2FsbFNldFZhbHVlID0g
MDsKQEAgLTk1NywxMCArOTU3LDEwIEBAIHN1YiBnZW5lcmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7
CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgICAgIHJldHVybjtcbiI7CiAg
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgfVxuIjsKICAgfSBlbHNpZiAoZXhp
c3RzICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJ2aXNpdGVkLWxp
bmstY29sb3Itc3VwcG9ydCJ9KSB7Ci0gICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIg
ICAgQ29sb3IgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+IiAuICRnZXR0ZXIgLiAiKCk7
XG4iOworICAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIENvbG9yIGNvbG9yID0g
IiAuICRwYXJlbnRTdHlsZSAuICIuIiAuICRnZXR0ZXIgLiAiKCk7XG4iOwogICAgIGlmICghZXhp
c3RzKCRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJuby1kZWZhdWx0
LWNvbG9yIn0pKSB7CiAgICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBpZiAo
IWNvbG9yLmlzVmFsaWQoKSlcbiI7Ci0gICAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4g
IiAgICAgICAgY29sb3IgPSAiIC4gJHBhcmVudFN0eWxlIC4gIi0+Y29sb3IoKTtcbiI7CisgICAg
ICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICAgICAgY29sb3IgPSAiIC4gJHBhcmVu
dFN0eWxlIC4gIi5jb2xvcigpO1xuIjsKICAgICB9CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2Vu
ZXJhdGVDb2xvclZhbHVlU2V0dGVyKCRuYW1lLCAiY29sb3IiLCAkaW5kZW50IC4gIiAgICAiKTsK
ICAgICAkZGlkQ2FsbFNldFZhbHVlID0gMTsKQEAgLTk2OCwxNiArOTY4LDE2IEBAIHN1YiBnZW5l
cmF0ZUluaGVyaXRWYWx1ZVNldHRlciB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJhdGVB
bmltYXRpb25Qcm9wZXJ0eUluaGVyaXRWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAg
Iik7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVy
dGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0g
ICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24g
PSBzdHlsZVJlc29sdmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKLSAgICAkc2V0dGVyQ29udGVu
dCAuPSAkaW5kZW50IC4gIiAgICBmb250RGVzY3JpcHRpb24uIiAuICRzZXR0ZXIgLiAiKHN0eWxl
UmVzb2x2ZXIucGFyZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBzdHlsZVJlc29sdmVyLnNldEZv
bnREZXNjcmlwdGlvbihXVEZNb3ZlKGZvbnREZXNjcmlwdGlvbikpO1xuIjsKKyAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJT
dGF0ZS5mb250RGVzY3JpcHRpb24oKTtcbiI7CisgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVu
dCAuICIgICAgZm9udERlc2NyaXB0aW9uLiIgLiAkc2V0dGVyIC4gIihidWlsZGVyU3RhdGUucGFy
ZW50Rm9udERlc2NyaXB0aW9uKCkuIiAuICRnZXR0ZXIgLiAiKCkpO1xuIjsKKyAgICAkc2V0dGVy
Q29udGVudCAuPSAkaW5kZW50IC4gIiAgICBidWlsZGVyU3RhdGUuc2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAx
OwogICB9IGVsc2lmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9uc3sk
bmFtZX17ImZpbGwtbGF5ZXItcHJvcGVydHkifSkgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdl
bmVyYXRlRmlsbExheWVyUHJvcGVydHlJbmhlcml0VmFsdWVTZXR0ZXIoJG5hbWUsICRpbmRlbnQg
LiAiICAgICIpOwogICAgICRkaWRDYWxsU2V0VmFsdWUgPSAxOwogICB9CiAgIGlmICghJGRpZENh
bGxTZXRWYWx1ZSkgewotICAgIG15ICRpbmhlcml0ZWRWYWx1ZSA9ICRwYXJlbnRTdHlsZSAuICIt
PiIgLiAoJGlzU1ZHID8gInN2Z1N0eWxlKCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKKyAg
ICBteSAkaW5oZXJpdGVkVmFsdWUgPSAkcGFyZW50U3R5bGUgLiAiLiIgLiAoJGlzU1ZHID8gInN2
Z1N0eWxlKCkuIiA6ICIiKSAuICAkZ2V0dGVyIC4gIigpIjsKICAgICAkc2V0dGVyQ29udGVudCAu
PSAkaW5kZW50IC4gIiAgICAiIC4gZ2VuZXJhdGVTZXRWYWx1ZVN0YXRlbWVudCgkbmFtZSwgImZv
cndhcmRJbmhlcml0ZWRWYWx1ZSgiIC4gJGluaGVyaXRlZFZhbHVlIC4gIikiKSAuICI7XG4iOwog
ICB9CiAgICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAifVxuIjsKQEAgLTk5MCwyMCArOTkw
LDIwIEBAIHN1YiBnZW5lcmF0ZVZhbHVlU2V0dGVyIHsKICAgbXkgJGluZGVudCA9IHNoaWZ0Owog
CiAgIG15ICRzZXR0ZXJDb250ZW50ID0gIiI7Ci0gICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQg
LiAic3RhdGljIHZvaWQgYXBwbHlWYWx1ZSIgLiAkbmFtZVRvSWR7JG5hbWV9IC4gIihTdHlsZVJl
c29sdmVyJiBzdHlsZVJlc29sdmVyLCBDU1NWYWx1ZSYgdmFsdWUpXG4iOworICAkc2V0dGVyQ29u
dGVudCAuPSAkaW5kZW50IC4gInN0YXRpYyB2b2lkIGFwcGx5VmFsdWUiIC4gJG5hbWVUb0lkeyRu
YW1lfSAuICIoU3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlLCBDU1NWYWx1ZSYgdmFs
dWUpXG4iOwogICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIntcbiI7CiAgIG15ICRjb252
ZXJ0ZWRWYWx1ZTsKICAgaWYgKGV4aXN0cygkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRp
b25zeyRuYW1lfXsiY29udmVydGVyIn0pKSB7Ci0gICAgJGNvbnZlcnRlZFZhbHVlID0gIlN0eWxl
QnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJP
cHRpb25zeyRuYW1lfXsiY29udmVydGVyIn0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKSI7Cisg
ICAgJGNvbnZlcnRlZFZhbHVlID0gIlN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydCIgLiAk
cHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiY29udmVydGVyIn0gLiAi
KGJ1aWxkZXJTdGF0ZSwgdmFsdWUpIjsKICAgfSBlbHNpZiAoZXhpc3RzKCRwcm9wZXJ0aWVzV2l0
aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSkpIHsK
LSAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAgICBhdXRvIGNvbnZlcnRlZFZhbHVl
ID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAuICRwcm9wZXJ0aWVzV2l0aFN0eWxl
QnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1jb252ZXJ0ZXIifSAuICIoc3R5bGVS
ZXNvbHZlciwgdmFsdWUpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50IC4gIiAg
ICBhdXRvIGNvbnZlcnRlZFZhbHVlID0gU3R5bGVCdWlsZGVyQ29udmVydGVyOjpjb252ZXJ0IiAu
ICRwcm9wZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJjb25kaXRpb25hbC1j
b252ZXJ0ZXIifSAuICIoYnVpbGRlclN0YXRlLCB2YWx1ZSk7XG4iOwogICAgICRjb252ZXJ0ZWRW
YWx1ZSA9ICJXVEZNb3ZlKGNvbnZlcnRlZFZhbHVlLnZhbHVlKCkpIjsKICAgfSBlbHNlIHsKICAg
ICAkY29udmVydGVkVmFsdWUgPSAiZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKSI7
CiAgIH0KIAogICBteSAkc2V0dGVyID0gJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0aW9u
c3skbmFtZX17InNldHRlciJ9OwotICBteSAkc3R5bGUgPSAic3R5bGVSZXNvbHZlci5zdHlsZSgp
IjsKKyAgbXkgJHN0eWxlID0gImJ1aWxkZXJTdGF0ZS5zdHlsZSgpIjsKICAgbXkgJGRpZENhbGxT
ZXRWYWx1ZSA9IDA7CiAgIGlmIChleGlzdHMgJHByb3BlcnRpZXNXaXRoU3R5bGVCdWlsZGVyT3B0
aW9uc3skbmFtZX17ImF1dG8tZnVuY3Rpb25zIn0pIHsKICAgICAkc2V0dGVyQ29udGVudCAuPSAk
aW5kZW50IC4gIiAgICBpZiAoZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlKS52YWx1
ZUlEKCkgPT0gQ1NTVmFsdWVBdXRvKSB7XG4iOwpAQCAtMTAyMiw5ICsxMDIyLDkgQEAgc3ViIGdl
bmVyYXRlVmFsdWVTZXR0ZXIgewogICAgICRzZXR0ZXJDb250ZW50IC49IGdlbmVyYXRlQW5pbWF0
aW9uUHJvcGVydHlWYWx1ZVNldHRlcigkbmFtZSwgJGluZGVudCAuICIgICAgIik7CiAgICAgJGRp
ZENhbGxTZXRWYWx1ZSA9IDE7CiAgIH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHls
ZUJ1aWxkZXJPcHRpb25zeyRuYW1lfXsiZm9udC1wcm9wZXJ0eSJ9KSB7Ci0gICAgJHNldHRlckNv
bnRlbnQgLj0gJGluZGVudCAuICIgICAgYXV0byBmb250RGVzY3JpcHRpb24gPSBzdHlsZVJlc29s
dmVyLmZvbnREZXNjcmlwdGlvbigpO1xuIjsKKyAgICAkc2V0dGVyQ29udGVudCAuPSAkaW5kZW50
IC4gIiAgICBhdXRvIGZvbnREZXNjcmlwdGlvbiA9IGJ1aWxkZXJTdGF0ZS5mb250RGVzY3JpcHRp
b24oKTtcbiI7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gJGluZGVudCAuICIgICAgZm9udERlc2Ny
aXB0aW9uLiIgLiAkc2V0dGVyIC4gIigiIC4gJGNvbnZlcnRlZFZhbHVlIC4gIik7XG4iOwotICAg
ICRzZXR0ZXJDb250ZW50IC49ICRpbmRlbnQgLiAiICAgIHN0eWxlUmVzb2x2ZXIuc2V0Rm9udERl
c2NyaXB0aW9uKFdURk1vdmUoZm9udERlc2NyaXB0aW9uKSk7XG4iOworICAgICRzZXR0ZXJDb250
ZW50IC49ICRpbmRlbnQgLiAiICAgIGJ1aWxkZXJTdGF0ZS5zZXRGb250RGVzY3JpcHRpb24oV1RG
TW92ZShmb250RGVzY3JpcHRpb24pKTtcbiI7CiAgICAgJGRpZENhbGxTZXRWYWx1ZSA9IDE7CiAg
IH0gZWxzaWYgKGV4aXN0cyAkcHJvcGVydGllc1dpdGhTdHlsZUJ1aWxkZXJPcHRpb25zeyRuYW1l
fXsiZmlsbC1sYXllci1wcm9wZXJ0eSJ9KSB7CiAgICAgJHNldHRlckNvbnRlbnQgLj0gZ2VuZXJh
dGVGaWxsTGF5ZXJQcm9wZXJ0eVZhbHVlU2V0dGVyKCRuYW1lLCAkaW5kZW50IC4gIiAgICAiKTsK
QEAgLTEwNTIsMTAgKzEwNTIsMTAgQEAgcHJpbnQgU1RZTEVCVUlMREVSIDw8ICJFT0YiOwogI2lu
Y2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0
eS5oIgogI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVCdWlsZGVyU3Rh
dGUuaCIKICNpbmNsdWRlICJTdHlsZUJ1aWxkZXJDb252ZXJ0ZXIuaCIKICNpbmNsdWRlICJTdHls
ZUJ1aWxkZXJDdXN0b20uaCIKICNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0j
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEw
ODMsNyArMTA4Myw3IEBAIGZvcmVhY2ggbXkgJG5hbWUgKEBuYW1lcykgewogcHJpbnQgU1RZTEVC
VUlMREVSIDw8ICJFT0YiOwogfTsKIAotdm9pZCBTdHlsZUJ1aWxkZXI6OmFwcGx5UHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgQ1NT
VmFsdWUmIHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0luaGVyaXQsIGNvbnN0IENTU1Jl
Z2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKK3ZvaWQgU3R5bGVCdWlsZGVyOjph
cHBseVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlOjpCdWlsZGVyU3RhdGUm
IGJ1aWxkZXJTdGF0ZSwgQ1NTVmFsdWUmIHZhbHVlLCBib29sIGlzSW5pdGlhbCwgYm9vbCBpc0lu
aGVyaXQsIGNvbnN0IENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eSogcmVnaXN0ZXJlZCkKIHsK
ICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CiAgICAgY2FzZSBDU1NQcm9wZXJ0eUludmFsaWQ6CkBA
IC0xMDkxLDExICsxMDkxLDExIEBAIHZvaWQgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KENT
U1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzCiAgICAgY2FzZSBD
U1NQcm9wZXJ0eUN1c3RvbTogewogICAgICAgICBhdXRvJiBjdXN0b21Qcm9wZXJ0eSA9IGRvd25j
YXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKTsKICAgICAgICAgaWYgKGlzSW5pdGlh
bCkKLSAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJv
cGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJlZCwgY3VzdG9tUHJvcGVydHkubmFtZSgpKTsK
KyAgICAgICAgICAgIFN0eWxlQnVpbGRlckN1c3RvbTo6YXBwbHlJbml0aWFsQ3VzdG9tUHJvcGVy
dHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9wZXJ0eS5uYW1lKCkpOwogICAg
ICAgICBlbHNlIGlmIChpc0luaGVyaXQpCi0gICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206
OmFwcGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KHN0eWxlUmVzb2x2ZXIsIHJlZ2lzdGVyZWQsIGN1
c3RvbVByb3BlcnR5Lm5hbWUoKSk7CisgICAgICAgICAgICBTdHlsZUJ1aWxkZXJDdXN0b206OmFw
cGx5SW5oZXJpdEN1c3RvbVByb3BlcnR5KGJ1aWxkZXJTdGF0ZSwgcmVnaXN0ZXJlZCwgY3VzdG9t
UHJvcGVydHkubmFtZSgpKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgU3R5bGVCdWlsZGVy
Q3VzdG9tOjphcHBseVZhbHVlQ3VzdG9tUHJvcGVydHkoc3R5bGVSZXNvbHZlciwgcmVnaXN0ZXJl
ZCwgY3VzdG9tUHJvcGVydHkpOworICAgICAgICAgICAgU3R5bGVCdWlsZGVyQ3VzdG9tOjphcHBs
eVZhbHVlQ3VzdG9tUHJvcGVydHkoYnVpbGRlclN0YXRlLCByZWdpc3RlcmVkLCBjdXN0b21Qcm9w
ZXJ0eSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIEVPRgpAQCAtMTEwNywxMSArMTEwNywxMSBA
QCBmb3JlYWNoIG15ICRuYW1lIChAbmFtZXMpIHsKICAgICBwcmludCBTVFlMRUJVSUxERVIgIiAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7XG4iOwogICB9IGVsc2lmICghZXhpc3RzICRwcm9w
ZXJ0aWVzV2l0aFN0eWxlQnVpbGRlck9wdGlvbnN7JG5hbWV9eyJza2lwLWJ1aWxkZXIifSkgewog
ICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICBpZiAoaXNJbml0aWFsKVxuIjsKLSAgICBw
cmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAgICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRu
YW1lLCAiSW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAi
KHN0eWxlUmVzb2x2ZXIpO1xuIjsKKyAgICBwcmludCBTVFlMRUJVSUxERVIgIiAgICAgICAgICAg
ICIgLiBnZXRTY29wZUZvckZ1bmN0aW9uKCRuYW1lLCAiSW5pdGlhbCIpIC4gIjo6YXBwbHlJbml0
aWFsIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKGJ1aWxkZXJTdGF0ZSk7XG4iOwogICAgIHByaW50
IFNUWUxFQlVJTERFUiAiICAgICAgICBlbHNlIGlmIChpc0luaGVyaXQpXG4iOwotICAgIHByaW50
IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAuIGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUs
ICJJbmhlcml0IikgLiAiOjphcHBseUluaGVyaXQiIC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoc3R5
bGVSZXNvbHZlcik7XG4iOworICAgIHByaW50IFNUWUxFQlVJTERFUiAiICAgICAgICAgICAgIiAu
IGdldFNjb3BlRm9yRnVuY3Rpb24oJG5hbWUsICJJbmhlcml0IikgLiAiOjphcHBseUluaGVyaXQi
IC4gJG5hbWVUb0lkeyRuYW1lfSAuICIoYnVpbGRlclN0YXRlKTtcbiI7CiAgICAgcHJpbnQgU1RZ
TEVCVUlMREVSICIgICAgICAgIGVsc2VcbiI7Ci0gICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAg
ICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5jdGlvbigkbmFtZSwgIlZhbHVlIikgLiAiOjphcHBs
eVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0gLiAiKHN0eWxlUmVzb2x2ZXIsIHZhbHVlKTtcbiI7
CisgICAgcHJpbnQgU1RZTEVCVUlMREVSICIgICAgICAgICAgICAiIC4gZ2V0U2NvcGVGb3JGdW5j
dGlvbigkbmFtZSwgIlZhbHVlIikgLiAiOjphcHBseVZhbHVlIiAuICRuYW1lVG9JZHskbmFtZX0g
LiAiKGJ1aWxkZXJTdGF0ZSwgdmFsdWUpO1xuIjsKICAgfQogICBwcmludCBTVFlMRUJVSUxERVIg
IiAgICAgICAgYnJlYWs7XG4iOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL3Bh
cnNlci9DU1NQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
Y3BwCmluZGV4IDFmOTMxYmIwMDY4Li4zOWI5ZjY1MzY3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9w
YXJzZXIvQ1NTUGFyc2VyLmNwcApAQCAtMTc3LDEwICsxNzcsMTAgQEAgdm9pZCBDU1NQYXJzZXI6
OnBhcnNlRGVjbGFyYXRpb25Gb3JJbnNwZWN0b3IoY29uc3QgQ1NTUGFyc2VyQ29udGV4dCYgY29u
dGV4dCwgY28KICAgICBDU1NQYXJzZXJJbXBsOjpwYXJzZURlY2xhcmF0aW9uTGlzdEZvckluc3Bl
Y3RvcihzdHJpbmcsIGNvbnRleHQsIG9ic2VydmVyKTsKIH0KIAotUmVmUHRyPENTU1ZhbHVlPiBD
U1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQg
cHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIFN0eWxlOjpQcm9wZXJ0eUNhc2NhZGUmIGNh
c2NhZGUpCitSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhWYXJpYWJs
ZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSUQsIGNvbnN0IENTU1ZhbHVlJiB2YWx1ZSwg
U3R5bGU6OkJ1aWxkZXJTdGF0ZSYgYnVpbGRlclN0YXRlKQogewogICAgIEFTU0VSVCgocHJvcElE
ID09IENTU1Byb3BlcnR5Q3VzdG9tICYmIHZhbHVlLmlzQ3VzdG9tUHJvcGVydHlWYWx1ZSgpKSB8
fCAocHJvcElEICE9IENTU1Byb3BlcnR5Q3VzdG9tICYmICF2YWx1ZS5pc0N1c3RvbVByb3BlcnR5
VmFsdWUoKSkpOwotICAgIGF1dG8mIHN0eWxlID0gKmNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLnN0
eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUuc3R5bGUoKTsKICAgICBhdXRv
IGRpcmVjdGlvbiA9IHN0eWxlLmRpcmVjdGlvbigpOwogICAgIGF1dG8gd3JpdGluZ01vZGUgPSBz
dHlsZS53cml0aW5nTW9kZSgpOwogCkBAIC0xOTMsNyArMTkzLDcgQEAgUmVmUHRyPENTU1ZhbHVl
PiBDU1NQYXJzZXI6OnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5
SUQgcHJvcEkKICAgICAgICAgICAgIHNob3J0aGFuZElEID0gQ1NTUHJvcGVydHk6OnJlc29sdmVE
aXJlY3Rpb25Bd2FyZVByb3BlcnR5KHNob3J0aGFuZElELCBkaXJlY3Rpb24sIHdyaXRpbmdNb2Rl
KTsKICAgICAgICAgQ1NTVmFyaWFibGVSZWZlcmVuY2VWYWx1ZSogc2hvcnRoYW5kVmFsdWUgPSBw
ZW5kaW5nU3Vic3RpdHV0aW9uLnNob3J0aGFuZFZhbHVlKCk7CiAKLSAgICAgICAgYXV0byByZXNv
bHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNj
YWRlKTsKKyAgICAgICAgYXV0byByZXNvbHZlZERhdGEgPSBzaG9ydGhhbmRWYWx1ZS0+cmVzb2x2
ZVZhcmlhYmxlUmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVk
RGF0YSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICBWZWN0b3I8Q1NTUGFy
c2VyVG9rZW4+IHJlc29sdmVkVG9rZW5zID0gcmVzb2x2ZWREYXRhLT50b2tlbnMoKTsKQEAgLTIx
Miw3ICsyMTIsNyBAQCBSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWx1ZVdpdGhW
YXJpYWJsZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCBwcm9wSQogCiAgICAgaWYgKHZhbHVlLmlz
VmFyaWFibGVSZWZlcmVuY2VWYWx1ZSgpKSB7CiAgICAgICAgIGNvbnN0IENTU1ZhcmlhYmxlUmVm
ZXJlbmNlVmFsdWUmIHZhbHVlV2l0aFJlZmVyZW5jZXMgPSBkb3duY2FzdDxDU1NWYXJpYWJsZVJl
ZmVyZW5jZVZhbHVlPih2YWx1ZSk7Ci0gICAgICAgIGF1dG8gcmVzb2x2ZWREYXRhID0gdmFsdWVX
aXRoUmVmZXJlbmNlcy5yZXNvbHZlVmFyaWFibGVSZWZlcmVuY2VzKGNhc2NhZGUpOworICAgICAg
ICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxl
UmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogICAgICAgICBpZiAoIXJlc29sdmVkRGF0YSkKICAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJz
ZXI6OnBhcnNlU2luZ2xlVmFsdWUocHJvcElELCByZXNvbHZlZERhdGEtPnRva2VucygpLCBtX2Nv
bnRleHQpOwpAQCAtMjIyLDkgKzIyMiw5IEBAIFJlZlB0cjxDU1NWYWx1ZT4gQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9wZXJ0eUlEIHByb3BJCiAgICAg
Y29uc3QgYXV0byYgdmFsdWVXaXRoUmVmZXJlbmNlcyA9IFdURjo6Z2V0PFJlZjxDU1NWYXJpYWJs
ZVJlZmVyZW5jZVZhbHVlPj4oY3VzdG9tUHJvcFZhbHVlLnZhbHVlKCkpLmdldCgpOwogCiAgICAg
YXV0byYgbmFtZSA9IGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KHZhbHVlKS5uYW1l
KCk7Ci0gICAgYXV0byogcmVnaXN0ZXJlZCA9IGNhc2NhZGUuc3R5bGVSZXNvbHZlcigpLmRvY3Vt
ZW50KCkuZ2V0Q1NTUmVnaXN0ZXJlZEN1c3RvbVByb3BlcnR5U2V0KCkuZ2V0KG5hbWUpOworICAg
IGF1dG8qIHJlZ2lzdGVyZWQgPSBidWlsZGVyU3RhdGUuZG9jdW1lbnQoKS5nZXRDU1NSZWdpc3Rl
cmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7CiAgICAgYXV0byYgc3ludGF4ID0gcmVn
aXN0ZXJlZCA/IHJlZ2lzdGVyZWQtPnN5bnRheCA6ICIqIjsKLSAgICBhdXRvIHJlc29sdmVkRGF0
YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZhcmlhYmxlUmVmZXJlbmNlcyhjYXNjYWRl
KTsKKyAgICBhdXRvIHJlc29sdmVkRGF0YSA9IHZhbHVlV2l0aFJlZmVyZW5jZXMucmVzb2x2ZVZh
cmlhYmxlUmVmZXJlbmNlcyhidWlsZGVyU3RhdGUpOwogCiAgICAgaWYgKCFyZXNvbHZlZERhdGEp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtMjM0LDkgKzIzNCw5IEBAIFJlZlB0cjxDU1NW
YWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhDU1NQcm9w
ZXJ0eUlEIHByb3BJCiAgICAgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJzZWRDdXN0b21Q
cm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKHN5bnRheCwgZmFsc2UsIGRlcGVuZGVuY2llcywgcmVz
b2x2ZWREYXRhLT50b2tlbnMoKSwgbV9jb250ZXh0KTsKIAogICAgIGZvciAoYXV0byBpZCA6IGRl
cGVuZGVuY2llcykKLSAgICAgICAgY2FzY2FkZS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKKyAg
ICAgICAgYnVpbGRlclN0YXRlLmNhc2NhZGUoKS5hcHBseVByb3BlcnRpZXMoaWQsIGlkKTsKIAot
ICAgIHJldHVybiBDU1NQcm9wZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFs
dWUobmFtZSwgc3ludGF4LCByZXNvbHZlZERhdGEtPnRva2VucygpLCBjYXNjYWRlLnN0eWxlUmVz
b2x2ZXIoKSwgbV9jb250ZXh0KTsKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUsIHN5bnRheCwgcmVzb2x2ZWREYXRhLT50b2tl
bnMoKSwgYnVpbGRlclN0YXRlLCBtX2NvbnRleHQpOwogfQogCiBzdGQ6OnVuaXF1ZV9wdHI8VmVj
dG9yPGRvdWJsZT4+IENTU1BhcnNlcjo6cGFyc2VLZXlmcmFtZUtleUxpc3QoY29uc3QgU3RyaW5n
JiBzZWxlY3RvcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5oCmluZGV4IGQyNjk1
NTE0ZTFlLi41Y2YzNjBhNDk0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5o
CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFN0eWxlU2hlZXRDb250ZW50czsKIGNsYXNzIFJlbmRl
clN0eWxlOwogCiBuYW1lc3BhY2UgU3R5bGUgewotY2xhc3MgUHJvcGVydHlDYXNjYWRlOworY2xh
c3MgQnVpbGRlclN0YXRlOwogfQogCiBjbGFzcyBDU1NQYXJzZXIgewpAQCAtODEsNyArODEsNyBA
QCBwdWJsaWM6CiAKICAgICB2b2lkIHBhcnNlU2VsZWN0b3IoY29uc3QgU3RyaW5nJiwgQ1NTU2Vs
ZWN0b3JMaXN0Jik7CiAKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlVmFsdWVXaXRoVmFyaWFi
bGVSZWZlcmVuY2VzKENTU1Byb3BlcnR5SUQsIGNvbnN0IENTU1ZhbHVlJiwgU3R5bGU6OlByb3Bl
cnR5Q2FzY2FkZSYpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VWYWx1ZVdpdGhWYXJpYWJs
ZVJlZmVyZW5jZXMoQ1NTUHJvcGVydHlJRCwgY29uc3QgQ1NTVmFsdWUmLCBTdHlsZTo6QnVpbGRl
clN0YXRlJik7CiAKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VDb2xvcihjb25zdCBTdHJpbmcmLCBi
b29sIHN0cmljdCA9IGZhbHNlKTsKICAgICBzdGF0aWMgQ29sb3IgcGFyc2VTeXN0ZW1Db2xvcihj
b25zdCBTdHJpbmcmLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Kik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Byb3BlcnR5UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuY3BwCmluZGV4IGY1MDk4ZTMwOWQ4Li4y
Mjk1NzgzNTMxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9w
ZXJ0eVBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0
eVBhcnNlci5jcHAKQEAgLTY3LDYgKzY3LDcgQEAKICNpbmNsdWRlICJIYXNoVG9vbHMuaCIKIC8v
IEZJWE1FLU5FV1BBUlNFUjogUmVwbGFjZSBQYWlyIGFuZCBSZWN0IHdpdGggYWN0dWFsIENTU1Zh
bHVlIHN1YmNsYXNzZXMgKENTU1ZhbHVlUGFpciBhbmQgQ1NTUXVhZFZhbHVlKS4KICNpbmNsdWRl
ICJQYWlyLmgiCisjaW5jbHVkZSAiUHJvcGVydHlDYXNjYWRlLmgiCiAjaW5jbHVkZSAiUmVjdC5o
IgogI2luY2x1ZGUgIlJlbmRlclRoZW1lLmgiCiAjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oIgpAQCAtNzUsNyArNzYsNiBAQAogI2luY2x1ZGUgIlN0eWxlQnVpbGRlckNvbnZlcnRl
ci5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKICNpbmNsdWRlICJTdHls
ZVByb3BlcnR5U2hvcnRoYW5kRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5o
IgogI2luY2x1ZGUgPGJpdHNldD4KICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvU3RyaW5nQnVpbGRlci5oPgpAQCAtMjk3LDEwICsyOTcsMTAgQEAgYm9vbCBDU1NQcm9wZXJ0
eVBhcnNlcjo6Y2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBz
eW50YXgsIGMKICAgICByZXR1cm4gcGFyc2VyLmNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZh
bHVlKHN5bnRheCk7CiB9CiAKLVJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBDU1NQcm9w
ZXJ0eVBhcnNlcjo6cGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgdG9r
ZW5zLCBjb25zdCBTdHlsZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyLCBjb25zdCBDU1NQYXJzZXJD
b250ZXh0JiBjb250ZXh0KQorUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IENTU1Byb3Bl
cnR5UGFyc2VyOjpwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5h
bWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiB0b2tl
bnMsIGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSwgY29uc3QgQ1NTUGFy
c2VyQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBDU1NQcm9wZXJ0eVBhcnNlciBwYXJzZXIodG9r
ZW5zLCBjb250ZXh0LCBudWxscHRyLCBmYWxzZSk7Ci0gICAgUmVmUHRyPENTU0N1c3RvbVByb3Bl
cnR5VmFsdWU+IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5h
bWUsIHN5bnRheCwgc3R5bGVSZXNvbHZlcik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5
VmFsdWU+IHZhbHVlID0gcGFyc2VyLnBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKG5hbWUs
IHN5bnRheCwgYnVpbGRlclN0YXRlKTsKICAgICBpZiAoIXZhbHVlIHx8ICFwYXJzZXIubV9yYW5n
ZS5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gdmFsdWU7CkBA
IC00Mjk1LDEzICs0Mjk1LDEzIEBAIHZvaWQgQ1NTUHJvcGVydHlQYXJzZXI6OmNvbGxlY3RQYXJz
ZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluCiAgICAgfQogfQog
Ci1SZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNl
VHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5n
JiBzeW50YXgsIGNvbnN0IFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCitSZWZQdHI8Q1NT
Q3VzdG9tUHJvcGVydHlWYWx1ZT4gQ1NTUHJvcGVydHlQYXJzZXI6OnBhcnNlVHlwZWRDdXN0b21Q
cm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiBzeW50YXgsIGNv
bnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmIGJ1aWxkZXJTdGF0ZSkKIHsKICAgICBpZiAoc3ludGF4
ICE9ICIqIikgewogICAgICAgICBtX3JhbmdlLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAgICAgICAg
IGF1dG8gcHJpbWl0aXZlVmFsID0gY29uc3VtZVdpZHRoT3JIZWlnaHQobV9yYW5nZSwgbV9jb250
ZXh0KTsKICAgICAgICAgaWYgKHByaW1pdGl2ZVZhbCAmJiBwcmltaXRpdmVWYWwtPmlzUHJpbWl0
aXZlVmFsdWUoKSAmJiBkb3duY2FzdDxDU1NQcmltaXRpdmVWYWx1ZT4oKnByaW1pdGl2ZVZhbCku
aXNMZW5ndGgoKSkgewotICAgICAgICAgICAgYXV0byBsZW5ndGggPSBTdHlsZUJ1aWxkZXJDb252
ZXJ0ZXI6OmNvbnZlcnRMZW5ndGgoc3R5bGVSZXNvbHZlciwgKnByaW1pdGl2ZVZhbCk7CisgICAg
ICAgICAgICBhdXRvIGxlbmd0aCA9IFN0eWxlQnVpbGRlckNvbnZlcnRlcjo6Y29udmVydExlbmd0
aChidWlsZGVyU3RhdGUsICpwcmltaXRpdmVWYWwpOwogICAgICAgICAgICAgaWYgKCFsZW5ndGgu
aXNDYWxjdWxhdGVkKCkgJiYgIWxlbmd0aC5pc1VuZGVmaW5lZCgpKQogICAgICAgICAgICAgICAg
IHJldHVybiBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlOjpjcmVhdGVTeW50YXhMZW5ndGgobmFtZSwg
V1RGTW92ZShsZW5ndGgpKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNl
ci9DU1NQcm9wZXJ0eVBhcnNlci5oCmluZGV4IDU2NTIwZDk1YjZlLi5jNjdjMjAyMDUwOSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQcm9wZXJ0eVBhcnNlci5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUHJvcGVydHlQYXJzZXIuaApAQCAtMzIs
NyArMzIsMTAgQEAgY2xhc3MgQ1NTUHJvcGVydHk7CiBjbGFzcyBDU1NWYWx1ZTsKIGNsYXNzIFN0
eWxlUHJvcGVydHlTaG9ydGhhbmQ7CiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHM7Ci1jbGFzcyBT
dHlsZVJlc29sdmVyOworCituYW1lc3BhY2UgU3R5bGUgeworY2xhc3MgQnVpbGRlclN0YXRlOwor
fQogICAgIAogLy8gSW5wdXRzOiBQcm9wZXJ0eUlELCBpc0ltcG9ydGFudCBib29sLCBDU1NQYXJz
ZXJUb2tlblJhbmdlLgogLy8gT3V0cHV0czogVmVjdG9yIG9mIENTU1Byb3BlcnRpZXMKQEAgLTQ3
LDcgKzUwLDcgQEAgcHVibGljOgogICAgIC8vIFBhcnNlcyBhIG5vbi1zaG9ydGhhbmQgQ1NTIHBy
b3BlcnR5CiAgICAgc3RhdGljIFJlZlB0cjxDU1NWYWx1ZT4gcGFyc2VTaW5nbGVWYWx1ZShDU1NQ
cm9wZXJ0eUlELCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3QgQ1NTUGFyc2VyQ29u
dGV4dCYpOwogICAgIHN0YXRpYyBib29sIGNhblBhcnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVl
KGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJUb2tlblJhbmdlJiwgY29uc3Qg
Q1NTUGFyc2VyQ29udGV4dCYpOwotICAgIHN0YXRpYyBSZWZQdHI8Q1NTQ3VzdG9tUHJvcGVydHlW
YWx1ZT4gcGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBuYW1lLCBj
b25zdCBTdHJpbmcmIHN5bnRheCwgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYsIGNvbnN0IFN0
eWxlUmVzb2x2ZXImLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZlB0
cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJvcGVydHlWYWx1ZShj
b25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25zdCBDU1NQYXJzZXJU
b2tlblJhbmdlJiwgY29uc3QgU3R5bGU6OkJ1aWxkZXJTdGF0ZSYsIGNvbnN0IENTU1BhcnNlckNv
bnRleHQmKTsKICAgICBzdGF0aWMgdm9pZCBjb2xsZWN0UGFyc2VkQ3VzdG9tUHJvcGVydHlWYWx1
ZURlcGVuZGVuY2llcyhjb25zdCBTdHJpbmcmIHN5bnRheCwgYm9vbCBpc1Jvb3QsIEhhc2hTZXQ8
Q1NTUHJvcGVydHlJRD4mIGRlcGVuZGVuY2llcywgY29uc3QgQ1NTUGFyc2VyVG9rZW5SYW5nZSYs
IGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKIAogcHJpdmF0ZToKQEAgLTU4LDcgKzYxLDcgQEAg
cHJpdmF0ZToKICAgICBib29sIGNvbnN1bWVDU1NXaWRlS2V5d29yZChDU1NQcm9wZXJ0eUlELCBi
b29sIGltcG9ydGFudCk7CiAgICAgUmVmUHRyPENTU1ZhbHVlPiBwYXJzZVNpbmdsZVZhbHVlKENT
U1Byb3BlcnR5SUQsIENTU1Byb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUludmFsaWQpOwogICAgIGJv
b2wgY2FuUGFyc2VUeXBlZEN1c3RvbVByb3BlcnR5VmFsdWUoY29uc3QgU3RyaW5nJiBzeW50YXgp
OwotICAgIFJlZlB0cjxDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlPiBwYXJzZVR5cGVkQ3VzdG9tUHJv
cGVydHlWYWx1ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgc3ludGF4LCBjb25z
dCBTdHlsZVJlc29sdmVyJik7CisgICAgUmVmUHRyPENTU0N1c3RvbVByb3BlcnR5VmFsdWU+IHBh
cnNlVHlwZWRDdXN0b21Qcm9wZXJ0eVZhbHVlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3Ry
aW5nJiBzeW50YXgsIGNvbnN0IFN0eWxlOjpCdWlsZGVyU3RhdGUmKTsKICAgICB2b2lkIGNvbGxl
Y3RQYXJzZWRDdXN0b21Qcm9wZXJ0eVZhbHVlRGVwZW5kZW5jaWVzKGNvbnN0IFN0cmluZyYgc3lu
dGF4LCBib29sIGlzUm9vdCwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgZGVwZW5kZW5jaWVzKTsK
IAogICAgIGJvb2wgaW5RdWlya3NNb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jb250ZXh0Lm1vZGUg
PT0gSFRNTFF1aXJrc01vZGU7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0NhbnZhc1JlbmRlcmluZ0NvbnRleHQyRC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCmluZGV4IDk1YjdiMWM1NWY5Li5hZGMw
MzYxOWZjYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJELmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52
YXNSZW5kZXJpbmdDb250ZXh0MkQuY3BwCkBAIC0xNzYsMTMgKzE3Niw3IEBAIHZvaWQgQ2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEOjpzZXRGb250KGNvbnN0IFN0cmluZyYgbmV3Rm9udCkKICAgICBz
dHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRT
dHlsZSwgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U3R5
bGUpLmdldCgpKTsKICAgICBzdHlsZVJlc29sdmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHls
ZShDU1NQcm9wZXJ0eUZvbnRWYXJpYW50Q2FwcywgcGFyc2VkU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250VmFyaWFudENhcHMpLmdldCgpKTsKICAgICBzdHlsZVJlc29s
dmVyLmFwcGx5UHJvcGVydHlUb0N1cnJlbnRTdHlsZShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsIHBh
cnNlZFN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Rm9udFdlaWdodCkuZ2V0
KCkpOwotCi0gICAgLy8gQXMgZGVzY3JpYmVkIGluIEJVRzY2MjkxLCBzZXR0aW5nIGZvbnQtc2l6
ZSBhbmQgbGluZS1oZWlnaHQgb24gYSBmb250IG1heSBlbnRhaWwgYSBDU1NQcmltaXRpdmVWYWx1
ZTo6Y29tcHV0ZUxlbmd0aERvdWJsZSBjYWxsLAotICAgIC8vIHdoaWNoIGFzc3VtZXMgdGhlIGZv
bnRNZXRyaWNzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSBhZmZlY3RlZCBmb250LCBvdGhlcndpc2Ug
YSBjcmFzaCBvY2N1cnMgKHNlZSBodHRwOi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC85NjEy
MikuCi0gICAgLy8gVGhlIHVwZGF0ZUZvbnQoKSBjYWxscyBiZWxvdyB1cGRhdGUgdGhlIGZvbnRN
ZXRyaWNzIGFuZCBlbnN1cmUgdGhlIHByb3BlciBzZXR0aW5nIG9mIGZvbnQtc2l6ZSBhbmQgbGlu
ZS1oZWlnaHQuCi0gICAgc3R5bGVSZXNvbHZlci51cGRhdGVGb250KCk7CiAgICAgc3R5bGVSZXNv
bHZlci5hcHBseVByb3BlcnR5VG9DdXJyZW50U3R5bGUoQ1NTUHJvcGVydHlGb250U2l6ZSwgcGFy
c2VkU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkuZ2V0KCkp
OwotICAgIHN0eWxlUmVzb2x2ZXIudXBkYXRlRm9udCgpOwogICAgIHN0eWxlUmVzb2x2ZXIuYXBw
bHlQcm9wZXJ0eVRvQ3VycmVudFN0eWxlKENTU1Byb3BlcnR5TGluZUhlaWdodCwgcGFyc2VkU3R5
bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0KS5nZXQoKSk7CiAK
ICAgICBtb2RpZmlhYmxlU3RhdGUoKS5mb250LmluaXRpYWxpemUoZG9jdW1lbnQuZm9udFNlbGVj
dG9yKCksICpzdHlsZVJlc29sdmVyLnN0eWxlKCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKaW5kZXggMzM1MTNkZjRmODMu
LjczODhkOWZjN2MyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0dyYXBoaWNzQ29udGV4dC5jcHAKQEAgLTExMzMsNyArMTEzMyw3IEBAIEZsb2F0UmVjdCBH
cmFwaGljc0NvbnRleHQ6OmNvbXB1dGVMaW5lQm91bmRzQW5kQW50aWFsaWFzaW5nTW9kZUZvclRl
eHQoY29uc3QgRmxvCiAgICAgcmV0dXJuIEZsb2F0UmVjdChvcmlnaW4sIEZsb2F0U2l6ZShyZWN0
LndpZHRoKCksIHRoaWNrbmVzcykpOwogfQogCi12b2lkIEdyYXBoaWNzQ29udGV4dDo6YXBwbHlT
dGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYgc3RhdGUpCit2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6YnVpbGRlclN0YXRlKGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiBzdGF0ZSkKIHsK
ICAgICBzZXRQbGF0Zm9ybVNoYWRvdyhzdGF0ZS5zaGFkb3dPZmZzZXQsIHN0YXRlLnNoYWRvd0Js
dXIsIHN0YXRlLnNoYWRvd0NvbG9yKTsKICAgICBzZXRQbGF0Zm9ybVN0cm9rZVRoaWNrbmVzcyhz
dGF0ZS5zdHJva2VUaGlja25lc3MpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAppbmRleCAxM2Y1YTJmNTVkYi4uMDg3OTE0NWIxM2Mg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29u
dGV4dC5oCkBAIC00MDIsNyArNDAyLDcgQEAgcHVibGljOgogICAgIHZvaWQgZHJhd0VtcGhhc2lz
TWFya3MoY29uc3QgRm9udENhc2NhZGUmLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgQXRvbVN0cmlu
ZyYgbWFyaywgY29uc3QgRmxvYXRQb2ludCYsIHVuc2lnbmVkIGZyb20gPSAwLCBPcHRpb25hbDx1
bnNpZ25lZD4gdG8gPSBXVEY6Om51bGxvcHQpOwogICAgIHZvaWQgZHJhd0JpZGlUZXh0KGNvbnN0
IEZvbnRDYXNjYWRlJiwgY29uc3QgVGV4dFJ1biYsIGNvbnN0IEZsb2F0UG9pbnQmLCBGb250Q2Fz
Y2FkZTo6Q3VzdG9tRm9udE5vdFJlYWR5QWN0aW9uID0gRm9udENhc2NhZGU6OkRvTm90UGFpbnRJ
ZkZvbnROb3RSZWFkeSk7CiAKLSAgICB2b2lkIGFwcGx5U3RhdGUoY29uc3QgR3JhcGhpY3NDb250
ZXh0U3RhdGUmKTsKKyAgICB2b2lkIGJ1aWxkZXJTdGF0ZShjb25zdCBHcmFwaGljc0NvbnRleHRT
dGF0ZSYpOwogCiAgICAgZW51bSBSb3VuZGluZ01vZGUgewogICAgICAgICBSb3VuZEFsbFNpZGVz
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZGlzcGxheWxp
c3RzL0Rpc3BsYXlMaXN0SXRlbXMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKaW5kZXggY2YzY2Y5MjkzMGMuLmZiNzNh
Njc4MzNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9kaXNw
bGF5bGlzdHMvRGlzcGxheUxpc3RJdGVtcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Rpc3BsYXlsaXN0cy9EaXNwbGF5TGlzdEl0ZW1zLmgKQEAgLTMxNiw3ICszMTYs
NyBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFjY3VtdWxhdGUoR3JhcGhpY3NDb250ZXh0U3RhdGUm
KSBjb25zdDsKIAotICAgIHN0YXRpYyB2b2lkIGFwcGx5U3RhdGUoR3JhcGhpY3NDb250ZXh0Jiwg
Y29uc3QgR3JhcGhpY3NDb250ZXh0U3RhdGUmLCBHcmFwaGljc0NvbnRleHRTdGF0ZTo6U3RhdGVD
aGFuZ2VGbGFncyk7CisgICAgc3RhdGljIHZvaWQgYnVpbGRlclN0YXRlKEdyYXBoaWNzQ29udGV4
dCYsIGNvbnN0IEdyYXBoaWNzQ29udGV4dFN0YXRlJiwgR3JhcGhpY3NDb250ZXh0U3RhdGU6OlN0
YXRlQ2hhbmdlRmxhZ3MpOwogCiAgICAgc3RhdGljIHZvaWQgZHVtcFN0YXRlQ2hhbmdlcyhXVEY6
OlRleHRTdHJlYW0mLCBjb25zdCBHcmFwaGljc0NvbnRleHRTdGF0ZSYsIEdyYXBoaWNzQ29udGV4
dFN0YXRlOjpTdGF0ZUNoYW5nZUZsYWdzKTsKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9DYXNjYWRlTGV2ZWwuaCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2Nh
ZGVMZXZlbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5hMmUzMmE4
NzE1YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL0Nhc2NhZGVMZXZl
bC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAq
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1
ZGUgPHd0Zi9PcHRpb25TZXQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworbmFtZXNwYWNlIFN0
eWxlIHsKKworZW51bSBjbGFzcyBDYXNjYWRlTGV2ZWwgOiB1aW50OF90IHsKKyAgICBVc2VyQWdl
bnQgICA9IDEgPDwgMCwKKyAgICBVc2VyICAgICAgICA9IDEgPDwgMSwKKyAgICBBdXRob3IgICAg
ICA9IDEgPDwgMgorfTsKKworc3RhdGljIGNvbnN0ZXhwciBPcHRpb25TZXQ8Q2FzY2FkZUxldmVs
PiBhbGxDYXNjYWRlTGV2ZWxzKCkgeyByZXR1cm4geyBDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwg
Q2FzY2FkZUxldmVsOjpVc2VyLCBDYXNjYWRlTGV2ZWw6OkF1dGhvciB9OyB9CisKK30KK30KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1Byb3BlcnR5Q2FzY2FkZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCmluZGV4IGE0Mzk4MTEyMzVhLi4z
ZThiYzljZDhkOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNj
YWRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuY3BwCkBA
IC0xNzQsOSArMTc0LDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRDdWVTdHlsZVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQpCiAjZW5kaWYKIAogUHJvcGVydHlDYXNjYWRlOjpQcm9wZXJ0
eUNhc2NhZGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgY29uc3QgTWF0Y2hSZXN1bHQm
IG1hdGNoUmVzdWx0LCBPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzLCBJbmNs
dWRlZFByb3BlcnRpZXMgaW5jbHVkZWRQcm9wZXJ0aWVzKQotICAgIDogbV9zdHlsZVJlc29sdmVy
KHN0eWxlUmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KG1hdGNoUmVzdWx0KQorICAgIDog
bV9tYXRjaFJlc3VsdChtYXRjaFJlc3VsdCkKICAgICAsIG1faW5jbHVkZWRQcm9wZXJ0aWVzKGlu
Y2x1ZGVkUHJvcGVydGllcykKKyAgICAsIG1fYnVpbGRlclN0YXRlKHN0ZDo6aW5fcGxhY2UsICp0
aGlzLCBzdHlsZVJlc29sdmVyKQogewogICAgIC8vIERpcmVjdGlvbmFsIHByb3BlcnRpZXMgKCot
YmVmb3JlL2FmdGVyKSBhcmUgYWxpYXNlcyB0aGF0IGRlcGVuZCBvbiB0aGUgVGV4dERpcmVjdGlv
biBhbmQgV3JpdGluZ01vZGUuCiAgICAgLy8gVGhlc2UgbXVzdCBiZSByZXNvbHZlZCBiZWZvcmUg
d2UgY2FuIGJlZ2luIGJ1aWxkaW5nIHRoZSBwcm9wZXJ0eSBjYXNjYWRlLgpAQCAtMTg2LDggKzE4
Niw3IEBAIFByb3BlcnR5Q2FzY2FkZTo6UHJvcGVydHlDYXNjYWRlKFN0eWxlUmVzb2x2ZXImIHN0
eWxlUmVzb2x2ZXIsIGNvbnN0IE1hdGNoUmVzdWx0CiB9CiAKIFByb3BlcnR5Q2FzY2FkZTo6UHJv
cGVydHlDYXNjYWRlKGNvbnN0IFByb3BlcnR5Q2FzY2FkZSYgcGFyZW50LCBPcHRpb25TZXQ8Q2Fz
Y2FkZUxldmVsPiBjYXNjYWRlTGV2ZWxzKQotICAgIDogbV9zdHlsZVJlc29sdmVyKHBhcmVudC5t
X3N0eWxlUmVzb2x2ZXIpCi0gICAgLCBtX21hdGNoUmVzdWx0KHBhcmVudC5tX21hdGNoUmVzdWx0
KQorICAgIDogIG1fbWF0Y2hSZXN1bHQocGFyZW50Lm1fbWF0Y2hSZXN1bHQpCiAgICAgLCBtX2lu
Y2x1ZGVkUHJvcGVydGllcyhwYXJlbnQubV9pbmNsdWRlZFByb3BlcnRpZXMpCiAgICAgLCBtX2Rp
cmVjdGlvbihwYXJlbnQubV9kaXJlY3Rpb24pCiAgICAgLCBtX3dyaXRpbmdNb2RlKHBhcmVudC5t
X3dyaXRpbmdNb2RlKQpAQCAtNDAzLDE5ICs0MDIsMTkgQEAgaW5saW5lIHZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseVByb3BlcnRpZXNJbXBsKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFzdFBy
b3AKICAgICAgICAgYXV0byYgcHJvcGVydHkgPSBtX3Byb3BlcnRpZXNbcHJvcGVydHlJRF07CiAK
ICAgICAgICAgaWYgKHRyYWNrQ3ljbGVzID09IEN1c3RvbVByb3BlcnR5Q3ljbGVUcmFja2luZzo6
RW5hYmxlZCkgewotICAgICAgICAgICAgaWYgKFVOTElLRUxZKG1fYXBwbHlTdGF0ZS5pblByb2dy
ZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkpKSB7CisgICAgICAgICAgICBpZiAoVU5MSUtF
TFkoYnVpbGRlclN0YXRlKCkubV9pblByb2dyZXNzUHJvcGVydGllcy5nZXQocHJvcGVydHlJRCkp
KSB7CiAgICAgICAgICAgICAgICAgLy8gV2UgYXJlIGluIGEgY3ljbGUgKGVnLiBzZXR0aW5nIGZv
bnQgc2l6ZSB1c2luZyByZWdpc3RlcmVkIGN1c3RvbSBwcm9wZXJ0eSB2YWx1ZSBjb250YWluaW5n
IGVtKS4KICAgICAgICAgICAgICAgICAvLyBTbyB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4K
LSAgICAgICAgICAgICAgICBtX2FwcGx5U3RhdGUuYXBwbGllZFByb3BlcnRpZXMuc2V0KHByb3Bl
cnR5SUQpOworICAgICAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZSgpLm1fYXBwbGllZFByb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQpOwogICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvcGVydHkgaXMg
aW4gYSBjeWNsZSwgYW5kIG9ubHkgdGhlIHJvb3Qgb2YgdGhlIGNhbGwgc3RhY2sgd2lsbCBoYXZl
IGZpcnN0UHJvcGVydHkgIT0gbGFzdFByb3BlcnR5LgogICAgICAgICAgICAgICAgIEFTU0VSVChm
aXJzdFByb3BlcnR5ID09IGxhc3RQcm9wZXJ0eSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5pblByb2dyZXNzUHJv
cGVydGllcy5zZXQocHJvcGVydHlJRCk7CisgICAgICAgICAgICBhdXRvJiBidWlsZGVyU3RhdGUg
PSAqbV9idWlsZGVyU3RhdGU7CisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9pblByb2dyZXNz
UHJvcGVydGllcy5zZXQocHJvcGVydHlJRCk7CiAgICAgICAgICAgICBhcHBseVByb3BlcnR5KHBy
b3BlcnR5KTsKLSAgICAgICAgICAgIG1fYXBwbHlTdGF0ZS5hcHBsaWVkUHJvcGVydGllcy5zZXQo
cHJvcGVydHlJRCk7Ci0gICAgICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVzc1Byb3BlcnRp
ZXMuc2V0KHByb3BlcnR5SUQsIGZhbHNlKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2Fw
cGxpZWRQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlEKTsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0
ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVzLnNldChwcm9wZXJ0eUlELCBmYWxzZSk7CiAgICAgICAg
ICAgICBjb250aW51ZTsKICAgICAgICAgfQogCkBAIC00MzIsMzEgKzQzMSwzMiBAQCB2b2lkIFBy
b3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCkKIAogdm9pZCBQcm9wZXJ0eUNh
c2NhZGU6OmFwcGx5Q3VzdG9tUHJvcGVydHkoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGlm
IChtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMuY29udGFpbnMobmFtZSkgfHwg
IW1fY3VzdG9tUHJvcGVydGllcy5jb250YWlucyhuYW1lKSkKKyAgICBhdXRvJiBidWlsZGVyU3Rh
dGUgPSAqbV9idWlsZGVyU3RhdGU7CisgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2FwcGxpZWRDdXN0
b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpIHx8ICFtX2N1c3RvbVByb3BlcnRpZXMuY29udGFp
bnMobmFtZSkpCiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dG8gcHJvcGVydHkgPSBjdXN0b21Q
cm9wZXJ0eShuYW1lKTsKLSAgICBib29sIGluQ3ljbGUgPSBtX2FwcGx5U3RhdGUuaW5Qcm9ncmVz
c1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CisgICAgYm9vbCBpbkN5Y2xlID0gYnVp
bGRlclN0YXRlLm1faW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20uY29udGFpbnMobmFtZSk7CiAK
ICAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0LCBT
ZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JDaGVja2VyOjpNYXRjaFZpc2l0ZWQg
fSkgewogICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVlW2luZGV4XSkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2VsZWN0b3JDaGVja2VyOjpNYXRjaERl
ZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5bGUoKS0+aW5zaWRlTGluaygpID09
IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYgKGluZGV4ICE9IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5zdHlsZSgpLmluc2lkZUxpbmsoKSA9
PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAg
ICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJv
cGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3RvbVByb3BlcnR5VmFsdWU+KCpwcm9w
ZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKIAogICAgICAgICBpZiAoaW5DeWNsZSkgewotICAgICAg
ICAgICAgbV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmFkZChuYW1lKTsgLy8g
TWFrZSBzdXJlIHdlIGRvIG5vdCB0cnkgdG8gYXBwbHkgdGhpcyBwcm9wZXJ0eSBhZ2FpbiB3aGls
ZSByZXNvbHZpbmcgaXQuCisgICAgICAgICAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9t
UHJvcGVydGllcy5hZGQobmFtZSk7IC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgdHJ5IHRvIGFwcGx5
IHRoaXMgcHJvcGVydHkgYWdhaW4gd2hpbGUgcmVzb2x2aW5nIGl0LgogICAgICAgICAgICAgdmFs
dWVUb0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlV2l0aElEKG5hbWUsIENT
U1ZhbHVlSW52YWxpZCk7CiAgICAgICAgIH0KIAotICAgICAgICBtX2FwcGx5U3RhdGUuaW5Qcm9n
cmVzc1Byb3BlcnRpZXNDdXN0b20uYWRkKG5hbWUpOworICAgICAgICBidWlsZGVyU3RhdGUubV9p
blByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5hZGQobmFtZSk7CiAKICAgICAgICAgaWYgKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8UmVmPENTU1ZhcmlhYmxlUmVmZXJlbmNlVmFsdWU+Pih2YWx1ZVRv
QXBwbHktPnZhbHVlKCkpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHBhcnNlZFZh
bHVlID0gcmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3BlcnR5Q3VzdG9tLCB2YWx1ZVRvQXBw
bHkuZ2V0KCkpOwogCi0gICAgICAgICAgICBpZiAobV9hcHBseVN0YXRlLmFwcGxpZWRDdXN0b21Q
cm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQorICAgICAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5t
X2FwcGxpZWRDdXN0b21Qcm9wZXJ0aWVzLmNvbnRhaW5zKG5hbWUpKQogICAgICAgICAgICAgICAg
IHJldHVybjsgLy8gVGhlcmUgd2FzIGEgY3ljbGUgYW5kIHRoZSB2YWx1ZSB3YXMgcmVzZXQsIHNv
IGJhaWwuCiAKICAgICAgICAgICAgIGlmICghcGFyc2VkVmFsdWUpCkBAIC00NjUsMzIgKzQ2NSwy
MCBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlDdXN0b21Qcm9wZXJ0eShjb25zdCBTdHJp
bmcmIG5hbWUpCiAgICAgICAgICAgICB2YWx1ZVRvQXBwbHkgPSBkb3duY2FzdDxDU1NDdXN0b21Q
cm9wZXJ0eVZhbHVlPigqcGFyc2VkVmFsdWUpOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKG1f
YXBwbHlTdGF0ZS5pblByb2dyZXNzUHJvcGVydGllc0N1c3RvbS5jb250YWlucyhuYW1lKSkgewot
ICAgICAgICAgICAgaWYgKGluZGV4ID09IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0KSB7
Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0
eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5z
dGF0ZSgpLnNldEFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoZmFsc2UpOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpZiAoaW5kZXggPT0gU2VsZWN0b3JDaGVja2VyOjpNYXRj
aExpbmspIHsKLSAgICAgICAgICAgICAgICBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKS5zZXRBcHBs
eVByb3BlcnR5VG9SZWd1bGFyU3R5bGUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgbV9zdHlsZVJl
c29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtTdHlsZShmYWxzZSk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChpbmRleCA9PSBTZWxlY3RvckNoZWNr
ZXI6Ok1hdGNoVmlzaXRlZCkgewotICAgICAgICAgICAgICAgIG1fc3R5bGVSZXNvbHZlci5zdGF0
ZSgpLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZShmYWxzZSk7Ci0gICAgICAgICAgICAg
ICAgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc2V0QXBwbHlQcm9wZXJ0eVRvVmlzaXRlZExpbmtT
dHlsZSh0cnVlKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgaWYgKGJ1aWxkZXJTdGF0ZS5tX2lu
UHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9tLmNvbnRhaW5zKG5hbWUpKSB7CisgICAgICAgICAgICBi
dWlsZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBpbmRleDsKICAgICAgICAgICAgIGFwcGx5UHJvcGVy
dHkoQ1NTUHJvcGVydHlDdXN0b20sIHZhbHVlVG9BcHBseS5nZXQoKSwgaW5kZXgpOwogICAgICAg
ICB9CiAgICAgfQogCi0gICAgbV9hcHBseVN0YXRlLmluUHJvZ3Jlc3NQcm9wZXJ0aWVzQ3VzdG9t
LnJlbW92ZShuYW1lKTsKLSAgICBtX2FwcGx5U3RhdGUuYXBwbGllZEN1c3RvbVByb3BlcnRpZXMu
YWRkKG5hbWUpOworICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IFNlbGVjdG9yQ2hlY2tl
cjo6TWF0Y2hEZWZhdWx0OworICAgIGJ1aWxkZXJTdGF0ZS5tX2luUHJvZ3Jlc3NQcm9wZXJ0aWVz
Q3VzdG9tLnJlbW92ZShuYW1lKTsKKyAgICBidWlsZGVyU3RhdGUubV9hcHBsaWVkQ3VzdG9tUHJv
cGVydGllcy5hZGQobmFtZSk7CiAKICAgICBmb3IgKGF1dG8gaW5kZXggOiB7IFNlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0LCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluaywgU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWQgfSkgewogICAgICAgICBpZiAoIXByb3BlcnR5LmNzc1ZhbHVl
W2luZGV4XSkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoaW5kZXggIT0gU2Vs
ZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQgJiYgbV9zdHlsZVJlc29sdmVyLnN0YXRlKCkuc3R5
bGUoKS0+aW5zaWRlTGluaygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgaWYg
KGluZGV4ICE9IFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hEZWZhdWx0ICYmIGJ1aWxkZXJTdGF0ZS5z
dHlsZSgpLmluc2lkZUxpbmsoKSA9PSBJbnNpZGVMaW5rOjpOb3RJbnNpZGUpCiAgICAgICAgICAg
ICBjb250aW51ZTsKIAogICAgICAgICBSZWY8Q1NTQ3VzdG9tUHJvcGVydHlWYWx1ZT4gdmFsdWVU
b0FwcGx5ID0gQ1NTQ3VzdG9tUHJvcGVydHlWYWx1ZTo6Y3JlYXRlKGRvd25jYXN0PENTU0N1c3Rv
bVByb3BlcnR5VmFsdWU+KCpwcm9wZXJ0eS5jc3NWYWx1ZVtpbmRleF0pKTsKQEAgLTUyOCwzMyAr
NTE2LDI2IEBAIGNvbnN0IFByb3BlcnR5Q2FzY2FkZSogUHJvcGVydHlDYXNjYWRlOjpwcm9wZXJ0
eUNhc2NhZGVGb3JSb2xsYmFjayhDYXNjYWRlTGV2ZWwKIAogaW5saW5lIHZvaWQgUHJvcGVydHlD
YXNjYWRlOjphcHBseVByb3BlcnR5KGNvbnN0IFByb3BlcnR5JiBwcm9wZXJ0eSkKIHsKLSAgICBT
dHlsZVJlc29sdmVyOjpTdGF0ZSYgc3RhdGUgPSBtX3N0eWxlUmVzb2x2ZXIuc3RhdGUoKTsKLSAg
ICBzdGF0ZS5zZXRDYXNjYWRlTGV2ZWwocHJvcGVydHkubGV2ZWwpOwotICAgIHN0YXRlLnNldFN0
eWxlU2NvcGVPcmRpbmFsKHByb3BlcnR5LnN0eWxlU2NvcGVPcmRpbmFsKTsKLQotICAgIGlmIChw
cm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdF0pIHsKLSAgICAg
ICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0eWxlKHRydWUpOwotICAgICAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKLSAgICAgICAg
YXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hl
Y2tlcjo6TWF0Y2hEZWZhdWx0XSwgU2VsZWN0b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwotICAg
IH0KKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3RhdGU7CisgICAgYnVpbGRl
clN0YXRlLm1fY2FzY2FkZUxldmVsID0gcHJvcGVydHkubGV2ZWw7CisgICAgYnVpbGRlclN0YXRl
Lm1fc3R5bGVTY29wZU9yZGluYWwgPSBwcm9wZXJ0eS5zdHlsZVNjb3BlT3JkaW5hbDsKKworICAg
IGF1dG8gYXBwbHlXaXRoTGlua01hdGNoID0gWyZdKFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNo
TWFzayBsaW5rTWF0Y2gpIHsKKyAgICAgICAgaWYgKHByb3BlcnR5LmNzc1ZhbHVlW2xpbmtNYXRj
aF0pIHsKKyAgICAgICAgICAgIGJ1aWxkZXJTdGF0ZS5tX2xpbmtNYXRjaCA9IGxpbmtNYXRjaDsK
KyAgICAgICAgICAgIGFwcGx5UHJvcGVydHkocHJvcGVydHkuaWQsICpwcm9wZXJ0eS5jc3NWYWx1
ZVtsaW5rTWF0Y2hdLCBsaW5rTWF0Y2gpOworICAgICAgICB9CisgICAgfTsKIAotICAgIGlmIChz
dGF0ZS5zdHlsZSgpLT5pbnNpZGVMaW5rKCkgPT0gSW5zaWRlTGluazo6Tm90SW5zaWRlKQotICAg
ICAgICByZXR1cm47CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0
Y2hEZWZhdWx0KTsKIAotICAgIGlmIChwcm9wZXJ0eS5jc3NWYWx1ZVtTZWxlY3RvckNoZWNrZXI6
Ok1hdGNoTGlua10pIHsKLSAgICAgICAgc3RhdGUuc2V0QXBwbHlQcm9wZXJ0eVRvUmVndWxhclN0
eWxlKHRydWUpOwotICAgICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0
eWxlKGZhbHNlKTsKLSAgICAgICAgYXBwbHlQcm9wZXJ0eShwcm9wZXJ0eS5pZCwgKnByb3BlcnR5
LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hMaW5rXSwgU2VsZWN0b3JDaGVja2VyOjpN
YXRjaExpbmspOwotICAgIH0KKyAgICBpZiAoYnVpbGRlclN0YXRlLnN0eWxlKCkuaW5zaWRlTGlu
aygpID09IEluc2lkZUxpbms6Ok5vdEluc2lkZSkKKyAgICAgICAgcmV0dXJuOwogCi0gICAgaWYg
KHByb3BlcnR5LmNzc1ZhbHVlW1NlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkXSkgewotICAg
ICAgICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoZmFsc2UpOwotICAgICAg
ICBzdGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKHRydWUpOwotICAgICAg
ICBhcHBseVByb3BlcnR5KHByb3BlcnR5LmlkLCAqcHJvcGVydHkuY3NzVmFsdWVbU2VsZWN0b3JD
aGVja2VyOjpNYXRjaFZpc2l0ZWRdLCBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZCk7Ci0g
ICAgfQorICAgIGFwcGx5V2l0aExpbmtNYXRjaChTZWxlY3RvckNoZWNrZXI6Ok1hdGNoTGluayk7
CisgICAgYXBwbHlXaXRoTGlua01hdGNoKFNlbGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkKTsK
IAotICAgIHN0YXRlLnNldEFwcGx5UHJvcGVydHlUb1JlZ3VsYXJTdHlsZSh0cnVlKTsKLSAgICBz
dGF0ZS5zZXRBcHBseVByb3BlcnR5VG9WaXNpdGVkTGlua1N0eWxlKGZhbHNlKTsKKyAgICBidWls
ZGVyU3RhdGUubV9saW5rTWF0Y2ggPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoRGVmYXVsdDsKIH0K
IAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OmFwcGx5UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCwg
Q1NTVmFsdWUmIHZhbHVlLCBTZWxlY3RvckNoZWNrZXI6OkxpbmtNYXRjaE1hc2sgbGlua01hdGNo
TWFzaykKQEAgLTU2OSw2ICs1NTAsOCBAQCB2b2lkIFByb3BlcnR5Q2FzY2FkZTo6YXBwbHlQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUsIFNlbGVjdG9yQwogICAgICAg
ICByZXR1cm4gYXBwbHlQcm9wZXJ0eShuZXdJZCwgdmFsdWVUb0FwcGx5LmdldCgpLCBsaW5rTWF0
Y2hNYXNrKTsKICAgICB9CiAKKyAgICBhdXRvJiBidWlsZGVyU3RhdGUgPSAqbV9idWlsZGVyU3Rh
dGU7CisKICAgICBDU1NDdXN0b21Qcm9wZXJ0eVZhbHVlKiBjdXN0b21Qcm9wZXJ0eVZhbHVlID0g
bnVsbHB0cjsKICAgICBDU1NWYWx1ZUlEIGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9IENTU1ZhbHVl
SW52YWxpZDsKICAgICBDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHkqIGN1c3RvbVByb3BlcnR5
UmVnaXN0ZXJlZCA9IG51bGxwdHI7CkBAIC01NzksMTggKzU2MiwxNyBAQCB2b2lkIFByb3BlcnR5
Q2FzY2FkZTo6YXBwbHlQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIGlkLCBDU1NWYWx1ZSYgdmFsdWUs
IFNlbGVjdG9yQwogICAgICAgICBpZiAoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxDU1NWYWx1ZUlE
PihjdXN0b21Qcm9wZXJ0eVZhbHVlLT52YWx1ZSgpKSkKICAgICAgICAgICAgIGN1c3RvbVByb3Bl
cnR5VmFsdWVJRCA9IFdURjo6Z2V0PENTU1ZhbHVlSUQ+KGN1c3RvbVByb3BlcnR5VmFsdWUtPnZh
bHVlKCkpOwogICAgICAgICBhdXRvJiBuYW1lID0gY3VzdG9tUHJvcGVydHlWYWx1ZS0+bmFtZSgp
OwotICAgICAgICBjdXN0b21Qcm9wZXJ0eVJlZ2lzdGVyZWQgPSBtX3N0eWxlUmVzb2x2ZXIuZG9j
dW1lbnQoKS5nZXRDU1NSZWdpc3RlcmVkQ3VzdG9tUHJvcGVydHlTZXQoKS5nZXQobmFtZSk7Cisg
ICAgICAgIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCA9IGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgp
LmdldENTU1JlZ2lzdGVyZWRDdXN0b21Qcm9wZXJ0eVNldCgpLmdldChuYW1lKTsKICAgICB9CiAK
LSAgICBhdXRvJiBzdGF0ZSA9IG1fc3R5bGVSZXNvbHZlci5zdGF0ZSgpOwotICAgIGJvb2wgaXNJ
bmhlcml0ID0gc3RhdGUucGFyZW50U3R5bGUoKSA/IHZhbHVlVG9BcHBseS0+aXNJbmhlcml0ZWRW
YWx1ZSgpIHx8IGN1c3RvbVByb3BlcnR5VmFsdWVJRCA9PSBDU1NWYWx1ZUluaGVyaXQgOiBmYWxz
ZTsKLSAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBseS0+aXNJbml0aWFsVmFsdWUoKSB8
fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJbml0aWFsIHx8ICghc3RhdGUucGFy
ZW50U3R5bGUoKSAmJiAodmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9t
UHJvcGVydHlWYWx1ZUlEID09IENTU1ZhbHVlSW5oZXJpdCkpOworICAgIGJvb2wgaXNJbmhlcml0
ID0gdmFsdWVUb0FwcGx5LT5pc0luaGVyaXRlZFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlWYWx1
ZUlEID09IENTU1ZhbHVlSW5oZXJpdDsKKyAgICBib29sIGlzSW5pdGlhbCA9IHZhbHVlVG9BcHBs
eS0+aXNJbml0aWFsVmFsdWUoKSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVJ
bml0aWFsOwogCiAgICAgYm9vbCBpc1Vuc2V0ID0gdmFsdWVUb0FwcGx5LT5pc1Vuc2V0VmFsdWUo
KSB8fCBjdXN0b21Qcm9wZXJ0eVZhbHVlSUQgPT0gQ1NTVmFsdWVVbnNldDsKICAgICBib29sIGlz
UmV2ZXJ0ID0gdmFsdWVUb0FwcGx5LT5pc1JldmVydFZhbHVlKCkgfHwgY3VzdG9tUHJvcGVydHlW
YWx1ZUlEID09IENTU1ZhbHVlUmV2ZXJ0OwogCiAgICAgaWYgKGlzUmV2ZXJ0KSB7Ci0gICAgICAg
IGlmIChhdXRvKiByb2xsYmFjayA9IHByb3BlcnR5Q2FzY2FkZUZvclJvbGxiYWNrKHN0YXRlLmNh
c2NhZGVMZXZlbCgpKSkgeworICAgICAgICBpZiAoYXV0byogcm9sbGJhY2sgPSBwcm9wZXJ0eUNh
c2NhZGVGb3JSb2xsYmFjayhidWlsZGVyU3RhdGUubV9jYXNjYWRlTGV2ZWwpKSB7CiAgICAgICAg
ICAgICAvLyBXaXRoIHRoZSByb2xsYmFjayBjYXNjYWRlIGJ1aWx0LCB3ZSBuZWVkIHRvIG9idGFp
biB0aGUgcHJvcGVydHkgYW5kIGFwcGx5IGl0LiBJZiB0aGUgcHJvcGVydHkgaXMKICAgICAgICAg
ICAgIC8vIG5vdCBwcmVzZW50LCB0aGVuIHdlIGJlaGF2ZSBsaWtlICJ1bnNldC4iIE90aGVyd2lz
ZSB3ZSBhcHBseSB0aGUgcHJvcGVydHkgaW5zdGVhZCBvZgogICAgICAgICAgICAgLy8gb3VyIG93
bi4KQEAgLTYyMSwyOSArNjAzLDI5IEBAIHZvaWQgUHJvcGVydHlDYXNjYWRlOjphcHBseVByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgaWQsIENTU1ZhbHVlJiB2YWx1ZSwgU2VsZWN0b3JDCiAKICAgICBB
U1NFUlQoIWlzSW5oZXJpdCB8fCAhaXNJbml0aWFsKTsgLy8gaXNJbmhlcml0IC0+ICFpc0luaXRp
YWwgJiYgaXNJbml0aWFsIC0+ICFpc0luaGVyaXQKIAotICAgIGlmICghc3RhdGUuYXBwbHlQcm9w
ZXJ0eVRvUmVndWxhclN0eWxlKCkgJiYgKCFzdGF0ZS5hcHBseVByb3BlcnR5VG9WaXNpdGVkTGlu
a1N0eWxlKCkgfHwgIWlzVmFsaWRWaXNpdGVkTGlua1Byb3BlcnR5KGlkKSkpIHsKKyAgICBpZiAo
YnVpbGRlclN0YXRlLmFwcGx5UHJvcGVydHlUb1Zpc2l0ZWRMaW5rU3R5bGUoKSAmJiAhaXNWYWxp
ZFZpc2l0ZWRMaW5rUHJvcGVydHkoaWQpKSB7CiAgICAgICAgIC8vIExpbWl0IHRoZSBwcm9wZXJ0
aWVzIHRoYXQgY2FuIGJlIGFwcGxpZWQgdG8gb25seSB0aGUgb25lcyBob25vcmVkIGJ5IDp2aXNp
dGVkLgogICAgICAgICByZXR1cm47CiAgICAgfQogCiAgICAgaWYgKGlzSW5oZXJpdCAmJiAhQ1NT
UHJvcGVydHk6OmlzSW5oZXJpdGVkUHJvcGVydHkoaWQpKQotICAgICAgICBzdGF0ZS5zdHlsZSgp
LT5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOworICAgICAgICBidWlsZGVy
U3RhdGUuc3R5bGUoKS5zZXRIYXNFeHBsaWNpdGx5SW5oZXJpdGVkUHJvcGVydGllcygpOwogCiAj
aWYgRU5BQkxFKENTU19QQUlOVElOR19BUEkpCiAgICAgaWYgKGlzPENTU1BhaW50SW1hZ2VWYWx1
ZT4odmFsdWVUb0FwcGx5KSkgewogICAgICAgICBhdXRvJiBuYW1lID0gZG93bmNhc3Q8Q1NTUGFp
bnRJbWFnZVZhbHVlPih2YWx1ZVRvQXBwbHkuZ2V0KCkpLm5hbWUoKTsKLSAgICAgICAgaWYgKGF1
dG8qIHBhaW50V29ya2xldCA9IG1fc3R5bGVSZXNvbHZlci5kb2N1bWVudCgpLnBhaW50V29ya2xl
dEdsb2JhbFNjb3BlRm9yTmFtZShuYW1lKSkgeworICAgICAgICBpZiAoYXV0byogcGFpbnRXb3Jr
bGV0ID0gY29uc3RfY2FzdDxEb2N1bWVudCY+KGJ1aWxkZXJTdGF0ZS5kb2N1bWVudCgpKS5wYWlu
dFdvcmtsZXRHbG9iYWxTY29wZUZvck5hbWUobmFtZSkpIHsKICAgICAgICAgICAgIGF1dG8gbG9j
a2VyID0gaG9sZExvY2socGFpbnRXb3JrbGV0LT5wYWludERlZmluaXRpb25Mb2NrKCkpOwogICAg
ICAgICAgICAgaWYgKGF1dG8qIHJlZ2lzdHJhdGlvbiA9IHBhaW50V29ya2xldC0+cGFpbnREZWZp
bml0aW9uTWFwKCkuZ2V0KG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBwcm9w
ZXJ0eSA6IHJlZ2lzdHJhdGlvbi0+aW5wdXRQcm9wZXJ0aWVzKQotICAgICAgICAgICAgICAgICAg
ICBzdGF0ZS5zdHlsZSgpLT5hZGRDdXN0b21QYWludFdhdGNoUHJvcGVydHkocHJvcGVydHkpOwor
ICAgICAgICAgICAgICAgICAgICBidWlsZGVyU3RhdGUuc3R5bGUoKS5hZGRDdXN0b21QYWludFdh
dGNoUHJvcGVydHkocHJvcGVydHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQog
I2VuZGlmCiAKICAgICAvLyBVc2UgdGhlIGdlbmVyYXRlZCBTdHlsZUJ1aWxkZXIuCi0gICAgU3R5
bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBtX3N0eWxlUmVzb2x2ZXIsIHZhbHVlVG9BcHBs
eS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0ZXJlZCk7
CisgICAgU3R5bGVCdWlsZGVyOjphcHBseVByb3BlcnR5KGlkLCBidWlsZGVyU3RhdGUsIHZhbHVl
VG9BcHBseS5nZXQoKSwgaXNJbml0aWFsLCBpc0luaGVyaXQsIGN1c3RvbVByb3BlcnR5UmVnaXN0
ZXJlZCk7CiB9CiAKIFJlZjxDU1NWYWx1ZT4gUHJvcGVydHlDYXNjYWRlOjpyZXNvbHZlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBDU1NWYWx1ZSYgdmFsdWUpCkBAIC02NTMsNyArNjM1
LDcgQEAgUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJgogICAgIAogICAgIGF1dG8gdmFyaWFibGVWYWx1
ZSA9IHJlc29sdmVkVmFyaWFibGVWYWx1ZShwcm9wZXJ0eUlELCB2YWx1ZSk7CiAgICAgLy8gSWYg
dGhlIGNhc2NhZGUgaGFzIGFscmVhZHkgYXBwbGllZCB0aGlzIGlkLCB0aGVuIHdlIGRldGVjdGVk
IGEgY3ljbGUsIGFuZCB0aGlzIHZhbHVlIHNob3VsZCBiZSB1bnNldC4KLSAgICBpZiAoIXZhcmlh
YmxlVmFsdWUgfHwgbV9hcHBseVN0YXRlLmFwcGxpZWRQcm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlE
KSkgeworICAgIGlmICghdmFyaWFibGVWYWx1ZSB8fCBidWlsZGVyU3RhdGUoKS5tX2FwcGxpZWRQ
cm9wZXJ0aWVzLmdldChwcm9wZXJ0eUlEKSkgewogICAgICAgICBpZiAoQ1NTUHJvcGVydHk6Omlz
SW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCiAgICAgICAgICAgICByZXR1cm4gQ1NTVmFs
dWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJbmhlcml0ZWRWYWx1ZSgpOwogICAgICAgICByZXR1
cm4gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVFeHBsaWNpdEluaXRpYWxWYWx1ZSgp
OwpAQCAtNjY0LDEzICs2NDYsMTMgQEAgUmVmPENTU1ZhbHVlPiBQcm9wZXJ0eUNhc2NhZGU6OnJl
c29sdmVWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIENTU1ZhbHVlJgogCiBSZWZQdHI8
Q1NTVmFsdWU+IFByb3BlcnR5Q2FzY2FkZTo6cmVzb2x2ZWRWYXJpYWJsZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElELCBjb25zdCBDU1NWYWx1ZSYgdmFsdWUpCiB7Ci0gICAgQ1NTUGFyc2VyIHBh
cnNlcihtX3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIHBhcnNlci5wYXJz
ZVZhbHVlV2l0aFZhcmlhYmxlUmVmZXJlbmNlcyhwcm9wSUQsIHZhbHVlLCAqdGhpcyk7CisgICAg
Q1NTUGFyc2VyIHBhcnNlcihidWlsZGVyU3RhdGUoKS5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4g
cGFyc2VyLnBhcnNlVmFsdWVXaXRoVmFyaWFibGVSZWZlcmVuY2VzKHByb3BJRCwgdmFsdWUsIGJ1
aWxkZXJTdGF0ZSgpKTsKIH0KIAogdm9pZCBQcm9wZXJ0eUNhc2NhZGU6OnJlc29sdmVEaXJlY3Rp
b25BbmRXcml0aW5nTW9kZSgpCiB7Ci0gICAgYXV0byYgc3R5bGUgPSAqbV9zdHlsZVJlc29sdmVy
LnN0eWxlKCk7CisgICAgYXV0byYgc3R5bGUgPSBidWlsZGVyU3RhdGUoKS5zdHlsZSgpOwogCiAg
ICAgbV9kaXJlY3Rpb24gPSBzdHlsZS5kaXJlY3Rpb24oKTsKICAgICBtX3dyaXRpbmdNb2RlID0g
c3R5bGUud3JpdGluZ01vZGUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1By
b3BlcnR5Q2FzY2FkZS5oIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvUHJvcGVydHlDYXNjYWRlLmgK
aW5kZXggNDJjNTA4NWEzOWIuLjlmNTVjZmZiYzU1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9Qcm9wZXJ0eUNhc2NhZGUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9Qcm9w
ZXJ0eUNhc2NhZGUuaApAQCAtMjUsOSArMjUsMTAgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNpbmNs
dWRlICJDYXNjYWRlTGV2ZWwuaCIKICNpbmNsdWRlICJFbGVtZW50UnVsZUNvbGxlY3Rvci5oIgor
I2luY2x1ZGUgIlN0eWxlQnVpbGRlclN0YXRlLmgiCiAjaW5jbHVkZSA8Yml0c2V0PgotI2luY2x1
ZGUgPHd0Zi9CaXRtYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zNSwxNCArMzYs
NiBAQCBjbGFzcyBTdHlsZVJlc29sdmVyOwogCiBuYW1lc3BhY2UgU3R5bGUgewogCi1lbnVtIGNs
YXNzIENhc2NhZGVMZXZlbCA6IHVpbnQ4X3QgewotICAgIFVzZXJBZ2VudCAgID0gMSA8PCAwLAot
ICAgIFVzZXIgICAgICAgID0gMSA8PCAxLAotICAgIEF1dGhvciAgICAgID0gMSA8PCAyCi19Owot
Ci1zdGF0aWMgY29uc3RleHByIE9wdGlvblNldDxDYXNjYWRlTGV2ZWw+IGFsbENhc2NhZGVMZXZl
bHMoKSB7IHJldHVybiB7IFN0eWxlOjpDYXNjYWRlTGV2ZWw6OlVzZXJBZ2VudCwgU3R5bGU6OkNh
c2NhZGVMZXZlbDo6VXNlciwgU3R5bGU6OkNhc2NhZGVMZXZlbDo6QXV0aG9yIH07IH0KLQogY2xh
c3MgUHJvcGVydHlDYXNjYWRlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1Ymxp
YzoKQEAgLTUyLDggKzQ1LDYgQEAgcHVibGljOgogCiAgICAgflByb3BlcnR5Q2FzY2FkZSgpOwog
Ci0gICAgU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlcigpIHsgcmV0dXJuIG1fc3R5bGVSZXNv
bHZlcjsgfQotCiAgICAgc3RydWN0IFByb3BlcnR5IHsKICAgICAgICAgQ1NTUHJvcGVydHlJRCBp
ZDsKICAgICAgICAgQ2FzY2FkZUxldmVsIGxldmVsOwpAQCAtNjksMTIgKzYwLDEyIEBAIHB1Ymxp
YzoKIAogICAgIHZvaWQgYXBwbHlQcm9wZXJ0aWVzKGludCBmaXJzdFByb3BlcnR5LCBpbnQgbGFz
dFByb3BlcnR5KTsKICAgICB2b2lkIGFwcGx5RGVmZXJyZWRQcm9wZXJ0aWVzKCk7Ci0KICAgICB2
b2lkIGFwcGx5Q3VzdG9tUHJvcGVydGllcygpOwogICAgIHZvaWQgYXBwbHlDdXN0b21Qcm9wZXJ0
eShjb25zdCBTdHJpbmcmIG5hbWUpOwotCiAgICAgdm9pZCBhcHBseVByb3BlcnR5KENTU1Byb3Bl
cnR5SUQsIENTU1ZhbHVlJiwgU2VsZWN0b3JDaGVja2VyOjpMaW5rTWF0Y2hNYXNrID0gU2VsZWN0
b3JDaGVja2VyOjpNYXRjaERlZmF1bHQpOwogCisgICAgQnVpbGRlclN0YXRlJiBidWlsZGVyU3Rh
dGUoKSB7IHJldHVybiAqbV9idWlsZGVyU3RhdGU7IH0KKwogcHJpdmF0ZToKICAgICB2b2lkIGJ1
aWxkQ2FzY2FkZShPcHRpb25TZXQ8Q2FzY2FkZUxldmVsPik7CiAgICAgYm9vbCBhZGROb3JtYWxN
YXRjaGVzKENhc2NhZGVMZXZlbCk7CkBAIC05NywxMSArODgsOSBAQCBwcml2YXRlOgogCiAgICAg
dm9pZCByZXNvbHZlRGlyZWN0aW9uQW5kV3JpdGluZ01vZGUoKTsKIAotICAgIFN0eWxlUmVzb2x2
ZXImIG1fc3R5bGVSZXNvbHZlcjsKLQogICAgIGNvbnN0IE1hdGNoUmVzdWx0JiBtX21hdGNoUmVz
dWx0OwogICAgIGNvbnN0IEluY2x1ZGVkUHJvcGVydGllcyBtX2luY2x1ZGVkUHJvcGVydGllczsK
LSAgICAKKwogICAgIFRleHREaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAgV3JpdGluZ01vZGUg
bV93cml0aW5nTW9kZTsKIApAQCAtMTExLDE5ICsxMDAsMTAgQEAgcHJpdmF0ZToKICAgICBWZWN0
b3I8UHJvcGVydHksIDg+IG1fZGVmZXJyZWRQcm9wZXJ0aWVzOwogICAgIEhhc2hNYXA8QXRvbVN0
cmluZywgUHJvcGVydHk+IG1fY3VzdG9tUHJvcGVydGllczsKIAotICAgIC8vIFN0YXRlIHRvIHVz
ZSB3aGVuIGFwcGx5aW5nIHByb3BlcnRpZXMsIHRvIGtlZXAgdHJhY2sgb2Ygd2hpY2ggY3VzdG9t
IGFuZCBoaWdoLXByaW9yaXR5Ci0gICAgLy8gcHJvcGVydGllcyBoYXZlIGJlZW4gcmVzb2x2ZWQu
Ci0gICAgc3RydWN0IEFwcGx5U3RhdGUgewotICAgICAgICBCaXRtYXA8bnVtQ1NTUHJvcGVydGll
cz4gYXBwbGllZFByb3BlcnRpZXMgPSB7IH07Ci0gICAgICAgIEhhc2hTZXQ8U3RyaW5nPiBhcHBs
aWVkQ3VzdG9tUHJvcGVydGllcyA9IHsgfTsKLSAgICAgICAgQml0bWFwPG51bUNTU1Byb3BlcnRp
ZXM+IGluUHJvZ3Jlc3NQcm9wZXJ0aWVzID0geyB9OwotICAgICAgICBIYXNoU2V0PFN0cmluZz4g
aW5Qcm9ncmVzc1Byb3BlcnRpZXNDdXN0b20gPSB7IH07Ci0gICAgfTsKLQotICAgIEFwcGx5U3Rh
dGUgbV9hcHBseVN0YXRlOwotCiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0IFByb3BlcnR5Q2Fz
Y2FkZT4gbV9hdXRob3JSb2xsYmFja0Nhc2NhZGU7CiAgICAgc3RkOjp1bmlxdWVfcHRyPGNvbnN0
IFByb3BlcnR5Q2FzY2FkZT4gbV91c2VyUm9sbGJhY2tDYXNjYWRlOworCisgICAgT3B0aW9uYWw8
QnVpbGRlclN0YXRlPiBtX2J1aWxkZXJTdGF0ZTsKIH07CiAKIGlubGluZSBib29sIFByb3BlcnR5
Q2FzY2FkZTo6aGFzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBpZCkgY29uc3QKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMC4uMTg0MWQyN2NkZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUJ1aWxkZXJTdGF0ZS5jcHAKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdHlsZUJ1aWxkZXJTdGF0ZS5o
IgorCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Citu
YW1lc3BhY2UgU3R5bGUgeworCitCdWlsZGVyU3RhdGU6OkJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNh
c2NhZGUmIGNhc2NhZGUsIFN0eWxlUmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIpCisgICAgOiBtX2Nh
c2NhZGUoY2FzY2FkZSkKKyAgICAsIG1fc3R5bGVNYXAoKnRoaXMpCisgICAgLCBtX2Nzc1RvTGVu
Z3RoQ29udmVyc2lvbkRhdGEoc3R5bGVSZXNvbHZlci5zdGF0ZSgpLmNzc1RvTGVuZ3RoQ29udmVy
c2lvbkRhdGEoKSkKKyAgICAsIG1fc3R5bGVSZXNvbHZlcihzdHlsZVJlc29sdmVyKQorICAgICwg
bV9zdHlsZSgqc3R5bGVSZXNvbHZlci5zdHlsZSgpKQorICAgICwgbV9wYXJlbnRTdHlsZSgqc3R5
bGVSZXNvbHZlci5wYXJlbnRTdHlsZSgpKQorICAgICwgbV9yb290RWxlbWVudFN0eWxlKHN0eWxl
UmVzb2x2ZXIucm9vdEVsZW1lbnRTdHlsZSgpID8gKnN0eWxlUmVzb2x2ZXIucm9vdEVsZW1lbnRT
dHlsZSgpIDogUmVuZGVyU3R5bGU6OmRlZmF1bHRTdHlsZSgpKQorICAgICwgbV9kb2N1bWVudCht
X3N0eWxlUmVzb2x2ZXIuZG9jdW1lbnQoKSkKKyAgICAsIG1fZWxlbWVudChtX3N0eWxlUmVzb2x2
ZXIuZWxlbWVudCgpKQoreworICAgIEFTU0VSVChzdHlsZVJlc29sdmVyLnN0eWxlKCkpOworICAg
IEFTU0VSVChzdHlsZVJlc29sdmVyLnBhcmVudFN0eWxlKCkpOworfQorCitib29sIEJ1aWxkZXJT
dGF0ZTo6dXNlU1ZHWm9vbVJ1bGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29s
dmVyLnVzZVNWR1pvb21SdWxlcygpOworfQorCitib29sIEJ1aWxkZXJTdGF0ZTo6dXNlU1ZHWm9v
bVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9zdHlsZVJlc29sdmVyLnVz
ZVNWR1pvb21SdWxlc0Zvckxlbmd0aCgpOworfQorCitSZWZQdHI8U3R5bGVJbWFnZT4gQnVpbGRl
clN0YXRlOjpjcmVhdGVTdHlsZUltYWdlKENTU1ZhbHVlJiB2YWx1ZSkKK3sKKyAgICByZXR1cm4g
bV9zdHlsZVJlc29sdmVyLnN0eWxlSW1hZ2UodmFsdWUpOworfQorCitib29sIEJ1aWxkZXJTdGF0
ZTo6Y3JlYXRlRmlsdGVyT3BlcmF0aW9ucyhjb25zdCBDU1NWYWx1ZSYgdmFsdWUsIEZpbHRlck9w
ZXJhdGlvbnMmIG91dE9wZXJhdGlvbnMpCit7CisgICAgcmV0dXJuIG1fc3R5bGVSZXNvbHZlci5j
cmVhdGVGaWx0ZXJPcGVyYXRpb25zKHZhbHVlLCBvdXRPcGVyYXRpb25zKTsKK30KKworQ29sb3Ig
QnVpbGRlclN0YXRlOjpjb2xvckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVW
YWx1ZSYgdmFsdWUsIGJvb2wgZm9yVmlzaXRlZExpbmspIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
c3R5bGVSZXNvbHZlci5jb2xvckZyb21QcmltaXRpdmVWYWx1ZSh2YWx1ZSwgZm9yVmlzaXRlZExp
bmspOworfQorCit2b2lkIEJ1aWxkZXJTdGF0ZTo6c2V0Rm9udFNpemUoRm9udENhc2NhZGVEZXNj
cmlwdGlvbiYgZGVzY3JpcHRpb24sIGZsb2F0IHNpemUpCit7CisgICAgbV9zdHlsZVJlc29sdmVy
LnNldEZvbnRTaXplKGRlc2NyaXB0aW9uLCBzaXplKTsKK30KKworfQorfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQnVpbGRlclN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAuLmYyNzM4MTQwMTIxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
c3R5bGUvU3R5bGVCdWlsZGVyU3RhdGUuaApAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICog
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YS5oIgor
I2luY2x1ZGUgIkNTU1RvU3R5bGVNYXAuaCIKKyNpbmNsdWRlICJDYXNjYWRlTGV2ZWwuaCIKKyNp
bmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlNlbGVjdG9yQ2hlY2tlci5oIgorI2lu
Y2x1ZGUgPHd0Zi9CaXRtYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBTdHls
ZUltYWdlOworY2xhc3MgU3R5bGVSZXNvbHZlcjsKKworbmFtZXNwYWNlIFN0eWxlIHsKKworY2xh
c3MgUHJvcGVydHlDYXNjYWRlOworCitjbGFzcyBCdWlsZGVyU3RhdGUgeworcHVibGljOgorICAg
IEJ1aWxkZXJTdGF0ZShQcm9wZXJ0eUNhc2NhZGUmLCBTdHlsZVJlc29sdmVyJik7CisKKyAgICBQ
cm9wZXJ0eUNhc2NhZGUmIGNhc2NhZGUoKSB7IHJldHVybiBtX2Nhc2NhZGU7IH0KKyAgICBTdHls
ZVJlc29sdmVyJiBzdHlsZVJlc29sdmVyKCkgeyByZXR1cm4gbV9zdHlsZVJlc29sdmVyOyB9CisK
KyAgICBSZW5kZXJTdHlsZSYgc3R5bGUoKSB7IHJldHVybiBtX3N0eWxlOyB9CisgICAgY29uc3Qg
UmVuZGVyU3R5bGUmIHBhcmVudFN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9wYXJlbnRTdHlsZTsg
fQorICAgIGNvbnN0IFJlbmRlclN0eWxlJiByb290RWxlbWVudFN0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9yb290RWxlbWVudFN0eWxlOyB9CisKKyAgICBjb25zdCBEb2N1bWVudCYgZG9jdW1lbnQo
KSBjb25zdCB7IHJldHVybiBtX2RvY3VtZW50LmdldCgpOyB9CisgICAgY29uc3QgRWxlbWVudCog
ZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudC5nZXQoKTsgfQorCisgICAgdm9pZCBz
ZXRGb250RGVzY3JpcHRpb24oRm9udENhc2NhZGVEZXNjcmlwdGlvbiYmIGZvbnREZXNjcmlwdGlv
bikgeyBtX2ZvbnREaXJ0eSB8PSBtX3N0eWxlLnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGZv
bnREZXNjcmlwdGlvbikpOyB9CisgICAgdm9pZCBzZXRGb250U2l6ZShGb250Q2FzY2FkZURlc2Ny
aXB0aW9uJiwgZmxvYXQgc2l6ZSk7CisgICAgdm9pZCBzZXRab29tKGZsb2F0IGYpIHsgbV9mb250
RGlydHkgfD0gbV9zdHlsZS5zZXRab29tKGYpOyB9CisgICAgdm9pZCBzZXRFZmZlY3RpdmVab29t
KGZsb2F0IGYpIHsgbV9mb250RGlydHkgfD0gbV9zdHlsZS5zZXRFZmZlY3RpdmVab29tKGYpOyB9
CisgICAgdm9pZCBzZXRXcml0aW5nTW9kZShXcml0aW5nTW9kZSB3cml0aW5nTW9kZSkgeyBtX2Zv
bnREaXJ0eSB8PSBtX3N0eWxlLnNldFdyaXRpbmdNb2RlKHdyaXRpbmdNb2RlKTsgfQorICAgIHZv
aWQgc2V0VGV4dE9yaWVudGF0aW9uKFRleHRPcmllbnRhdGlvbiB0ZXh0T3JpZW50YXRpb24pIHsg
bV9mb250RGlydHkgfD0gbV9zdHlsZS5zZXRUZXh0T3JpZW50YXRpb24odGV4dE9yaWVudGF0aW9u
KTsgfQorCisgICAgYm9vbCBmb250RGlydHkoKSBjb25zdCB7IHJldHVybiBtX2ZvbnREaXJ0eTsg
fQorICAgIHZvaWQgc2V0Rm9udERpcnR5KCkgeyBtX2ZvbnREaXJ0eSA9IHRydWU7IH0KKyAgICB2
b2lkIGNsZWFyRm9udERpcnR5KCkgeyBtX2ZvbnREaXJ0eSA9IGZhbHNlOyB9CisKKyAgICBjb25z
dCBGb250Q2FzY2FkZURlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0
eWxlLmZvbnREZXNjcmlwdGlvbigpOyB9CisgICAgY29uc3QgRm9udENhc2NhZGVEZXNjcmlwdGlv
biYgcGFyZW50Rm9udERlc2NyaXB0aW9uKCkgeyByZXR1cm4gbV9wYXJlbnRTdHlsZS5mb250RGVz
Y3JpcHRpb24oKTsgfQorCisgICAgLy8gRklYTUU6IFRoZXNlIGFyZSBtdXR1YWxseSBleGNsdXNp
dmUsIGNsZWFuIHVwIHRoZSBjb2RlIHRvIHRha2UgdGhhdCBpbnRvIGFjY291bnQuCisgICAgYm9v
bCBhcHBseVByb3BlcnR5VG9SZWd1bGFyU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2xpbmtNYXRj
aCAhPSBTZWxlY3RvckNoZWNrZXI6Ok1hdGNoVmlzaXRlZDsgfQorICAgIGJvb2wgYXBwbHlQcm9w
ZXJ0eVRvVmlzaXRlZExpbmtTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlua01hdGNoID09IFNl
bGVjdG9yQ2hlY2tlcjo6TWF0Y2hWaXNpdGVkOyB9CisKKyAgICBib29sIHVzZVNWR1pvb21SdWxl
cygpIGNvbnN0OworICAgIGJvb2wgdXNlU1ZHWm9vbVJ1bGVzRm9yTGVuZ3RoKCkgY29uc3Q7Cisg
ICAgU2NvcGVPcmRpbmFsIHN0eWxlU2NvcGVPcmRpbmFsKCkgY29uc3QgeyByZXR1cm4gbV9zdHls
ZVNjb3BlT3JkaW5hbDsgfQorCisgICAgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyZWF0ZVN0eWxlSW1h
Z2UoQ1NTVmFsdWUmKTsKKyAgICBib29sIGNyZWF0ZUZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NT
VmFsdWUmLCBGaWx0ZXJPcGVyYXRpb25zJiBvdXRPcGVyYXRpb25zKTsKKyAgICBDb2xvciBjb2xv
ckZyb21QcmltaXRpdmVWYWx1ZShjb25zdCBDU1NQcmltaXRpdmVWYWx1ZSYsIGJvb2wgZm9yVmlz
aXRlZExpbmsgPSBmYWxzZSkgY29uc3Q7CisKKyAgICBjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNp
b25EYXRhJiBjc3NUb0xlbmd0aENvbnZlcnNpb25EYXRhKCkgY29uc3QgeyByZXR1cm4gbV9jc3NU
b0xlbmd0aENvbnZlcnNpb25EYXRhOyB9CisgICAgQ1NTVG9TdHlsZU1hcCYgc3R5bGVNYXAoKSB7
IHJldHVybiBtX3N0eWxlTWFwOyB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb3Bl
cnR5Q2FzY2FkZTsKKworICAgIFByb3BlcnR5Q2FzY2FkZSYgbV9jYXNjYWRlOworCisgICAgQ1NT
VG9TdHlsZU1hcCBtX3N0eWxlTWFwOworICAgIENTU1RvTGVuZ3RoQ29udmVyc2lvbkRhdGEgbV9j
c3NUb0xlbmd0aENvbnZlcnNpb25EYXRhOworCisgICAgLy8gRklYTUU6IFJlbW92ZS4KKyAgICBT
dHlsZVJlc29sdmVyJiBtX3N0eWxlUmVzb2x2ZXI7CisKKyAgICBSZW5kZXJTdHlsZSYgbV9zdHls
ZTsKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgbV9wYXJlbnRTdHlsZTsKKyAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgbV9yb290RWxlbWVudFN0eWxlOworCisgICAgUmVmPGNvbnN0IERvY3VtZW50PiBt
X2RvY3VtZW50OworICAgIFJlZlB0cjxjb25zdCBFbGVtZW50PiBtX2VsZW1lbnQ7CisKKyAgICBC
aXRtYXA8bnVtQ1NTUHJvcGVydGllcz4gbV9hcHBsaWVkUHJvcGVydGllczsKKyAgICBIYXNoU2V0
PFN0cmluZz4gbV9hcHBsaWVkQ3VzdG9tUHJvcGVydGllczsKKyAgICBCaXRtYXA8bnVtQ1NTUHJv
cGVydGllcz4gbV9pblByb2dyZXNzUHJvcGVydGllczsKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9p
blByb2dyZXNzUHJvcGVydGllc0N1c3RvbTsKKworICAgIENhc2NhZGVMZXZlbCBtX2Nhc2NhZGVM
ZXZlbCB7IH07CisgICAgU2NvcGVPcmRpbmFsIG1fc3R5bGVTY29wZU9yZGluYWwgeyB9OworICAg
IFNlbGVjdG9yQ2hlY2tlcjo6TGlua01hdGNoTWFzayBtX2xpbmtNYXRjaCB7IH07CisKKyAgICBi
b29sIG1fZm9udERpcnR5IHsgZmFsc2UgfTsKK307CisKK30KK30K
</data>

          </attachment>
      

    </bug>

</bugzilla>