<?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>190716</bug_id>
          
          <creation_ts>2018-10-18 09:00:48 -0700</creation_ts>
          <short_desc>[LFC][IFC] Remove the previous version of inline content handling.</short_desc>
          <delta_ts>2018-10-19 09:52:27 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1470548</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-18 09:00:48 -0700</bug_when>
    <thetext>ssia.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470549</commentid>
    <comment_count>1</comment_count>
      <attachid>352695</attachid>
    <who name="alan">zalan</who>
    <bug_when>2018-10-18 09:02:33 -0700</bug_when>
    <thetext>Created attachment 352695
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470889</commentid>
    <comment_count>2</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2018-10-19 09:51:50 -0700</bug_when>
    <thetext>Committed r237289: &lt;https://trac.webkit.org/changeset/237289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1470890</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-10-19 09:52:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/45407763&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>352695</attachid>
            <date>2018-10-18 09:02:33 -0700</date>
            <delta_ts>2018-10-19 08:44:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>90016</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA0YTk1NzA3MGUzYi4uZDlmMWQwNjRjYzEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzNSBAQAorMjAxOC0xMC0xOCAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgor
CisgICAgICAgIFtMRkNdW0lGQ10gUmVtb3ZlIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mIGlubGlu
ZSBjb250ZW50IGhhbmRsaW5nLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTkwNzE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2o6CisgICAgICAgICogbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OmFyZUVzc2VudGlhbGx5RXF1YWwpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpvdXRwdXRNaXNtYXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlvbklmTmVl
ZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6b3V0cHV0TWlzbWF0Y2hpbmdDb21wbGV4
TGluZUluZm9ybWF0aW9uSWZOZWVkZWQpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdTdGF0ZS5oOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJ
bmxpbmVGb3JtYXR0aW5nU3RhdGU6OmlubGluZUNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmFkZExheW91dFJ1bnMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nU3RhdGU6OmxheW91dFJ1
bnMgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3Rl
eHQvVGV4dFV0aWwuY3BwOiBSZW5hbWVkIGZyb20gU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0VXRpbC5jcHAuCisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRleHRVdGlsOjpUZXh0VXRpbCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRl
eHRVdGlsOjp3aWR0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRleHRVdGls
OjpoeXBoZW5Qb3NpdGlvbkJlZm9yZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OlRleHRVdGlsOjp0ZXh0V2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpU
ZXh0VXRpbDo6Zml4ZWRQaXRjaFdpZHRoIGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0L1RleHRVdGlsLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRVdGlsLmguCisgICAgICAgICog
bGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9SdW5zLmg6IFJlbW92ZWQuCisgICAg
ICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9UZXh0Q29udGVudFByb3Zp
ZGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0
bGF5b3V0L1RleHRDb250ZW50UHJvdmlkZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L3NpbXBsZS9TaW1wbGVMaW5lQnJlYWtlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9z
aW1wbGUvU2ltcGxlTGluZUJyZWFrZXIuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L3NpbXBsZS9TaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmNw
cDogUmVtb3ZlZC4KKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0
L3NpbXBsZS9TaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmg6IFJlbW92ZWQuCisKIDIwMTgtMTAtMTgg
IFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIEFk
ZCBnZW5lcmljIGlubGluZSBjb250ZW50IGhhbmRsaW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCBiYjM5
YzZmYThmZS4uYmJkYmMzMzYyNTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC0xMjU2LDEwICsxMjU2LDcg
QEAgbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lSW52YWxpZGF0aW9uLmNwcAogbGF5b3V0
L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJyZWFrZXIuY3BwCiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVSdW5Qcm92aWRlci5jcHAKIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0xp
bmUuY3BwCi1sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRDb250ZW50UHJv
dmlkZXIuY3BwCi1sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRVdGlsLmNw
cAotbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dGxheW91dC9zaW1wbGUvU2ltcGxlVGV4dFJ1
bkdlbmVyYXRvci5jcHAKLWxheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvc2ltcGxl
L1NpbXBsZUxpbmVCcmVha2VyLmNwcAorbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4dC9UZXh0
VXRpbC5jcHAKIGxheW91dC9sYXlvdXR0cmVlL0xheW91dEJsb2NrQ29udGFpbmVyLmNwcAogbGF5
b3V0L2xheW91dHRyZWUvTGF5b3V0Qm94LmNwcAogbGF5b3V0L2xheW91dHRyZWUvTGF5b3V0Q29u
dGFpbmVyLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qCmluZGV4IGU2OGIxZjQ4N2RiLi5mODE0OGVkMjZlNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTg3MSw4ICs1
ODcxLDYgQEAKIAkJMTFDQjI3ODcyMDNCQTU3MDAwNEExREM5IC8qIFJlbmRlclRyZWVCdWlsZGVy
RnVsbFNjcmVlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZW5kZXJUcmVlQnVpbGRlckZ1bGxTY3JlZW4u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTFFMDY3RUIxRTYyNDYxMzAwMTYyRDE2
IC8qIFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxMUUwNjdFRDFFNjI0NkU1MDAxNjJEMTYgLyogU2ltcGxlTGluZUxh
eW91dENvdmVyYWdlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxp
bmVMYXlvdXRDb3ZlcmFnZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkxMUVBNTdG
QjIwRkZBRkI2MDAzMTFFQkIgLyogU2ltcGxlVGV4dFJ1bkdlbmVyYXRvci5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMTFFQTU3RkMyMEZGQUZCNzAwMzExRUJCIC8q
IFNpbXBsZVRleHRSdW5HZW5lcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2ltcGxlVGV4dFJ1bkdlbmVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxMUZGMDJENTIwQkEzQzgxMDA4M0YyNUIgLyogVmVyaWZpY2F0aW9uLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFZlcmlmaWNhdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTEyRjc1QTlBODZFQTAzREFGMjRCNzk3MSAvKiBJU09Qcm90ZWN0aW9uU3lzdGVtU3BlY2lmaWNI
ZWFkZXJCb3guaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSVNPUHJvdGVjdGlv
blN5c3RlbVNwZWNpZmljSGVhZGVyQm94Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0MDBEN0E3MTcxMzZFQTcwMDc3Q0UwNSAvKiBTY3JpcHRXcmFwcGFibGVJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjcmlwdFdyYXBwYWJsZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwNjcsOCArOTA2NSw2IEBACiAJCTZGN0NB
M0M1MjA4QzI5NTYwMDJGMjlBQiAvKiBMYXlvdXRDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IExheW91dENvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RjdD
QTNDODIwOEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNkY3Q0EzQzkyMDhDMkIyRTAwMkYyOUFCIC8qIElubGluZUZvcm1hdHRpbmdDb250
ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkY4MzA0QzkyMEZCQTVFMTAwNEFENUQxIC8q
IFNpbXBsZUxpbmVCcmVha2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNpbXBsZUxpbmVCcmVh
a2VyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkY4MzA0Q0EyMEZCQTVFMTAw
NEFENUQxIC8qIFNpbXBsZUxpbmVCcmVha2VyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNpbXBsZUxpbmVC
cmVha2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZGOTk1QTA5MUE3MDcwRTYw
MEE3MzVGNCAvKiBXZWJHTFF1ZXJ5LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTFF1
ZXJ5LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5OTVBMEExQTcwNzBFNjAw
QTczNUY0IC8qIFdlYkdMU2FtcGxlci5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xT
YW1wbGVyLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkY5OTVBMEIxQTcwNzBF
NjAwQTczNUY0IC8qIFdlYkdMU3luYy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xT
eW5jLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTkwOTcsOSArOTA5Myw2IEBA
CiAJCTZGQjExQjU5MjE3ODNGQ0YwMEUyQTU3NCAvKiBUZXh0VXRpbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBUZXh0VXRpbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2RkIxMUI1QjIxNzgzRkNGMDBFMkE1NzQgLyogVGV4dFV0aWwuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFV0aWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2RkJCODYwNTIwQjQ2NEI2MDBEQUQ5MzggLyogRm9ybWF0dGluZ0NvbnRl
eHRHZW9tZXRyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGb3JtYXR0aW5nQ29udGV4dEdlb21l
dHJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNkZDRDE5QzEyMEY5NzI3QTAw
RkQ0NTI5IC8qIFRleHRDb250ZW50UHJvdmlkZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGV4dENvbnRl
bnRQcm92aWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk2RkNEMTlDNzIwRjk3
MjdEMDBGRDQ1MjkgLyogVGV4dENvbnRlbnRQcm92aWRlci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBUZXh0Q29udGVudFByb3ZpZGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
NkZDRjk3NTIyMEYwMkIzNTAwMjE0OTYwIC8qIFJ1bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUnVucy5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDgg
LyogSW5saW5lTGluZUJyZWFrZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5saW5lTGluZUJyZWFrZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFrZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lTGluZUJyZWFrZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkZFN0NGQTAyMTc3RUVGMTAwNUIxNTczIC8qIElubGluZUl0
ZW0uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5saW5lSXRlbS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTYwMjcsMTEgKzE2MDIwLDcgQEAKIAkJMTE1Q0ZB
OUEyMDhCQzE0MDAwMUU2OTkxIC8qIGlubGluZWZvcm1hdHRpbmcgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMzQyAv
KiBJbmxpbmVSdW4uaCAqLywKLQkJCQk2RjIxOUQ3NjIxNzhEMzcxMDBCQjAzM0MgLyogTGluZS5j
cHAgKi8sCi0JCQkJNkZFMTk4MTMyMTc4Mzk3QjAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2Vy
LmNwcCAqLywKLQkJCQk2RkUxOTgxNTIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFr
ZXIuaCAqLywKLQkJCQk2RkU3RERERDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dGxheW91dCAqLywK
KwkJCQk2RkU3RERERDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dCAqLywKIAkJCQk2RjdDQTNDOTIw
OEMyQjJFMDAyRjI5QUIgLyogSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwICovLAogCQkJCTZG
N0NBM0M4MjA4QzJCMkUwMDJGMjlBQiAvKiBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oICovLAog
CQkJCTExNUNGQTdEMjA4QjhFMTAwMDFFNjk5MSAvKiBJbmxpbmVGb3JtYXR0aW5nU3RhdGUuY3Bw
ICovLApAQCAtMTYwMzksOCArMTYwMjgsMTIgQEAKIAkJCQkxMTIzQUZERDIwOUFCQkJBMDA3MzZB
Q0MgLyogSW5saW5lSW52YWxpZGF0aW9uLmNwcCAqLywKIAkJCQkxMTIzQUZEQzIwOUFCQkJBMDA3
MzZBQ0MgLyogSW5saW5lSW52YWxpZGF0aW9uLmggKi8sCiAJCQkJNkZFN0NGQTAyMTc3RUVGMTAw
NUIxNTczIC8qIElubGluZUl0ZW0uaCAqLywKKwkJCQk2RkUxOTgxMzIxNzgzOTdCMDA0NDZGMDgg
LyogSW5saW5lTGluZUJyZWFrZXIuY3BwICovLAorCQkJCTZGRTE5ODE1MjE3ODM5N0MwMDQ0NkYw
OCAvKiBJbmxpbmVMaW5lQnJlYWtlci5oICovLAorCQkJCTZGMjE5RDc0MjE3OEQzNzEwMEJCMDMz
QyAvKiBJbmxpbmVSdW4uaCAqLywKIAkJCQk2RjUyMTdDNjIxNzdGNUE2MDA2NTgzQkIgLyogSW5s
aW5lUnVuUHJvdmlkZXIuY3BwICovLAogCQkJCTZGNTIxN0M0MjE3N0Y1QTYwMDY1ODNCQiAvKiBJ
bmxpbmVSdW5Qcm92aWRlci5oICovLAorCQkJCTZGMjE5RDc2MjE3OEQzNzEwMEJCMDMzQyAvKiBM
aW5lLmNwcCAqLywKIAkJCSk7CiAJCQlwYXRoID0gaW5saW5lZm9ybWF0dGluZzsKIAkJCXNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0xOTg4MiwxNyArMTk4NzUsNiBAQAogCQkJdGFiV2lkdGgg
PSA0OwogCQkJdXNlc1RhYnMgPSAwOwogCQl9OwotCQk2RjEzQTEyMzIwRjk5NDlDMDAxQzAyNUEg
Lyogc2ltcGxlICovID0gewotCQkJaXNhID0gUEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJ
CQk2RjgzMDRDOTIwRkJBNUUxMDA0QUQ1RDEgLyogU2ltcGxlTGluZUJyZWFrZXIuY3BwICovLAot
CQkJCTZGODMwNENBMjBGQkE1RTEwMDRBRDVEMSAvKiBTaW1wbGVMaW5lQnJlYWtlci5oICovLAot
CQkJCTExRUE1N0ZCMjBGRkFGQjYwMDMxMUVCQiAvKiBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmNw
cCAqLywKLQkJCQkxMUVBNTdGQzIwRkZBRkI3MDAzMTFFQkIgLyogU2ltcGxlVGV4dFJ1bkdlbmVy
YXRvci5oICovLAotCQkJKTsKLQkJCXBhdGggPSBzaW1wbGU7Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQk2RkNGQzA1NTIxMkRBQ0MyMDA3Njk1RDIgLyogZmxvYXRzICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTE5OTA4LDE3ICsxOTg5
MCwxMyBAQAogCQkJcGF0aCA9IGZsb2F0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJ
CX07Ci0JCTZGRTdEREREMjBFQzZFOEIwMDhCNUI0RSAvKiB0ZXh0bGF5b3V0ICovID0geworCQk2
RkU3RERERDIwRUM2RThCMDA4QjVCNEUgLyogdGV4dCAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCiAJCQkJNkZCMTFCNUIyMTc4M0ZDRjAwRTJBNTc0IC8qIFRleHRV
dGlsLmNwcCAqLywKIAkJCQk2RkIxMUI1OTIxNzgzRkNGMDBFMkE1NzQgLyogVGV4dFV0aWwuaCAq
LywKLQkJCQk2RjEzQTEyMzIwRjk5NDlDMDAxQzAyNUEgLyogc2ltcGxlICovLAotCQkJCTZGQ0Y5
NzUyMjBGMDJCMzUwMDIxNDk2MCAvKiBSdW5zLmggKi8sCi0JCQkJNkZDRDE5QzcyMEY5NzI3RDAw
RkQ0NTI5IC8qIFRleHRDb250ZW50UHJvdmlkZXIuY3BwICovLAotCQkJCTZGQ0QxOUMxMjBGOTcy
N0EwMEZENDUyOSAvKiBUZXh0Q29udGVudFByb3ZpZGVyLmggKi8sCiAJCQkpOwotCQkJcGF0aCA9
IHRleHRsYXlvdXQ7CisJCQlwYXRoID0gdGV4dDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CiAJCTcxMDI1RUMxMUY5OUYwOTYwMDRBMjUwQyAvKiBhbmltYXRpb24gKi8gPSB7CkBA
IC0yODc3Myw2ICsyODc1MSw4IEBACiAJCQkJMTEzMTBDRjgyMEJBNEE2QTAwNjVBOEQwIC8qIElu
bGluZUludmFsaWRhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNkZFN0NGQTIyMTc3RUVGMjAw
NUIxNTczIC8qIElubGluZUl0ZW0uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRTc4OTE2MTEyMEQ2
MDgwMDYwRUNFNSAvKiBJbmxpbmVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNkZFMTk4
MTcyMTc4Mzk3QzAwNDQ2RjA4IC8qIElubGluZUxpbmVCcmVha2VyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk2RjIxOUQ3NzIxNzhEMzcyMDBCQjAzM0MgLyogSW5saW5lUnVuLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2RjUyMTdDNzIxNzdGNUE3MDA2NTgzQkIgLyogSW5saW5lUnVuUHJvdmlkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUFBNEMzQTc3MEIyQjE2NzkwMDIzMzRBMiAvKiBJbmxpbmVTdHls
ZVNoZWV0T3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRUE0ODVBMDk3RDkzMDIwMDk0QzlF
NCAvKiBJbmxpbmVUZXh0Qm94LmggaW4gSGVhZGVycyAqLywKQEAgLTI5NDMxLDcgKzI5NDExLDYg
QEAKIAkJCQlBODRFQkQ4MzBDQjhDOTc3MDAwNzk2MDkgLyogSlNTdHlsZVNoZWV0TGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTcxRjIxODkxREE1N0M1NDAwNUM5RUZEIC8qIEpTU3VidGxlQ3J5
cHRvLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjAxMTEwODBBQjc3NDA1MDBEQjBFNjggLyogSlNT
VkdBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNkZCMTFCNUMyMTc4M0ZEMDAwRTJBNTc0
IC8qIFRleHRVdGlsLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNEQ5MTI5MjEzQ0E5NTFFMDBEMjE5
MTUgLyogSlNTVkdBbHRHbHlwaERlZkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTVF
QzkyMEQ5NzIzRkYwMDYzRDQ5QSAvKiBKU1NWR0FsdEdseXBoRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjREOTEyOTYxM0NBOTU2MTAwRDIxOTE1IC8qIEpTU1ZHQWx0R2x5cGhJdGVtRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDA4MCw3ICszMDA1OSw2IEBACiAJCQkJQTg4REQ0
ODcwQjQ2MjlBMzAwQzAyOTkwIC8qIFBhdGhUcmF2ZXJzYWxTdGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMkQ1MDAyRkMxQjU2RDc5OTAwMjBBQUY3IC8qIFBhdGhVdGlsaXRpZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4RkE2RTVEMEU0Q0ZERUQwMEQ1Q0Y0OSAvKiBQYXR0ZXJuLmggaW4gSGVh
ZGVycyAqLywKLQkJCQk2RkUxOTgxNzIxNzgzOTdDMDA0NDZGMDggLyogSW5saW5lTGluZUJyZWFr
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUIyMjI3OTcxMEQwMEJGMjIwMDcxQjc4MiAvKiBQYXR0
ZXJuQXR0cmlidXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE2NzdFMDgyMTNFMDI0QzAwQTA4
QzM0IC8qIFBheWVyRXJyb3JGaWVsZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTFBOEE2NDNBMUQx
OUZDNTMwMEQwRTAwRiAvKiBQYXltZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwMzg0LDcgKzMw
MzYyLDYgQEAKIAkJCQlBMTBCQjU4NTE0ODRFM0E3MDBCMkU4N0EgLyogUmVuZGVyU1ZHUmVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4Q0QxMkQ5Q0E0QjAwMDQ0MjM0IC8qIFJlbmRlclNW
R1Jlc291cmNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3MDhDRjEyRDlDQTRCMDAwNDQyMzQg
LyogUmVuZGVyU1ZHUmVzb3VyY2VDbGlwcGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQk2RjIxOUQ3
NzIxNzhEMzcyMDBCQjAzM0MgLyogSW5saW5lUnVuLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MzY3
MDhEMTEyRDlDQTRCMDAwNDQyMzQgLyogUmVuZGVyU1ZHUmVzb3VyY2VDb250YWluZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTQzNjcwOEQzMTJEOUNBNEIwMDA0NDIzNCAvKiBSZW5kZXJTVkdSZXNv
dXJjZUZpbHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDM2NzA4RDUxMkQ5Q0E0QjAwMDQ0MjM0
IC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyUHJpbWl0aXZlLmggaW4gSGVhZGVycyAqLywKQEAg
LTMxMTQ3LDYgKzMxMTI0LDcgQEAKIAkJCQkyOUZBRjRCNjE5NUFCMDg5MDBBNTIyREMgLyogVGV4
dFVuZG9JbnNlcnRpb25NYXJrdXBNYWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5ODc3MEYxMTI0
MkM1MzUwMDIyMjZCQSAvKiBUZXh0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDRDlEODI3NjFD
N0FFNTM1MDA2RkYwNjYgLyogVGV4dHVyZUNhY2hlQ1YuaCBpbiBIZWFkZXJzICovLAorCQkJCTZG
QjExQjVDMjE3ODNGRDAwMEUyQTU3NCAvKiBUZXh0VXRpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkNFNjU4RkYwRUE5MjQ4QTAwN0U0NTMzIC8qIFRoZW1lLmggaW4gSGVhZGVycyAqLywKIAkJCQkz
MTBENzE5NjFCMzM1QzlFMDA5QzdCNzMgLyogVGhlbWVDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDRDOTkxOUYwRjNEMjEwRTAwNTg2NjcwIC8qIFRoZW1lSU9TLmggaW4gSGVhZGVycyAqLywK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9WZXJpZmljYXRpb24uY3BwIGIvU291
cmNlL1dlYkNvcmUvbGF5b3V0L1ZlcmlmaWNhdGlvbi5jcHAKaW5kZXggNWNiYzhjZmViYzAuLjE4
MGQyNDg0NGEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvVmVyaWZpY2F0aW9uLmNwcApAQCAtNDAs
NiArNDAsMTQgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBMYXlvdXQgewogCitz
dGF0aWMgYm9vbCBhcmVFc3NlbnRpYWxseUVxdWFsKGZsb2F0IGEsIExheW91dFVuaXQgYikKK3sK
KyAgICBpZiAoYSA9PSBiLnRvRmxvYXQoKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gOjphYnMoYSAtIGIudG9GbG9hdCgpKSA8PSA0ICogTGF5b3V0VW5pdDo6ZXBzaWxvbigp
OworfQorCiBzdGF0aWMgYm9vbCBvdXRwdXRNaXNtYXRjaGluZ1NpbXBsZUxpbmVJbmZvcm1hdGlv
bklmTmVlZGVkKFRleHRTdHJlYW0mIHN0cmVhbSwgY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0
Q29udGV4dCwgY29uc3QgUmVuZGVyQmxvY2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5l
ciYgaW5saW5lRm9ybWF0dGluZ1Jvb3QpCiB7CiAgICAgYXV0byogbGluZUxheW91dERhdGEgPSBi
bG9ja0Zsb3cuc2ltcGxlTGluZUxheW91dCgpOwpAQCAtNDgsMTIgKzU2LDEyIEBAIHN0YXRpYyBi
b29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0
cmVhbSYgc3RyZWFtLCBjCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAotICAgIGF1dG8m
IGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGNvbnN0X2Nhc3Q8TGF5b3V0Q29udGV4dCY+KGxheW91
dENvbnRleHQpLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290
KTsKKyAgICBhdXRvJiBpbmxpbmVGb3JtYXR0aW5nU3RhdGUgPSBsYXlvdXRDb250ZXh0LmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGlubGluZUZvcm1hdHRpbmdSb290KTsKICAgICBBU1NFUlQo
aXM8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpKTsKLSAgICBh
dXRvJiBsYXlvdXRSdW5zID0gZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVG
b3JtYXR0aW5nU3RhdGUpLmxheW91dFJ1bnMoKTsKKyAgICBhdXRvJiBpbmxpbmVSdW5MaXN0ID0g
ZG93bmNhc3Q8SW5saW5lRm9ybWF0dGluZ1N0YXRlPihpbmxpbmVGb3JtYXR0aW5nU3RhdGUpLmlu
bGluZVJ1bnMoKTsKIAotICAgIGlmIChsYXlvdXRSdW5zLnNpemUoKSAhPSBsaW5lTGF5b3V0RGF0
YS0+cnVuQ291bnQoKSkgewotICAgICAgICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nIG51bWJlciBv
ZiBydW5zOiBzaW1wbGUgcnVucygiIDw8IGxpbmVMYXlvdXREYXRhLT5ydW5Db3VudCgpIDw8ICIp
IGxheW91dCBydW5zKCIgPDwgbGF5b3V0UnVucy5zaXplKCkgPDwgIikiOworICAgIGlmIChpbmxp
bmVSdW5MaXN0LnNpemUoKSAhPSBsaW5lTGF5b3V0RGF0YS0+cnVuQ291bnQoKSkgeworICAgICAg
ICBzdHJlYW0gPDwgIk1pc21hdGNoaW5nIG51bWJlciBvZiBydW5zOiBzaW1wbGUgcnVucygiIDw8
IGxpbmVMYXlvdXREYXRhLT5ydW5Db3VudCgpIDw8ICIpIGlubGluZSBydW5zKCIgPDwgaW5saW5l
UnVuTGlzdC5zaXplKCkgPDwgIikiOwogICAgICAgICBzdHJlYW0ubmV4dExpbmUoKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtNjEsMTIgKzY5LDE1IEBAIHN0YXRpYyBib29sIG91
dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9ybWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYg
c3RyZWFtLCBjCiAgICAgYXV0byBtaXNtYXRjaGVkID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGxpbmVMYXlvdXREYXRhLT5ydW5Db3VudCgpOyArK2kpIHsKICAgICAgICAg
YXV0byYgc2ltcGxlUnVuID0gbGluZUxheW91dERhdGEtPnJ1bkF0KGkpOwotICAgICAgICBhdXRv
JiBsYXlvdXRSdW4gPSBsYXlvdXRSdW5zW2ldOworICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBp
bmxpbmVSdW5MaXN0W2ldOwogCi0gICAgICAgIGlmIChzaW1wbGVSdW4uc3RhcnQgPT0gbGF5b3V0
UnVuLnN0YXJ0KCkgJiYgc2ltcGxlUnVuLmVuZCA9PSBsYXlvdXRSdW4uZW5kKCkgJiYgc2ltcGxl
UnVuLmxvZ2ljYWxMZWZ0ID09IGxheW91dFJ1bi5sZWZ0KCkgJiYgc2ltcGxlUnVuLmxvZ2ljYWxS
aWdodCA9PSBsYXlvdXRSdW4ucmlnaHQoKSkKKyAgICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBh
cmVFc3NlbnRpYWxseUVxdWFsKHNpbXBsZVJ1bi5sb2dpY2FsTGVmdCwgaW5saW5lUnVuLmxvZ2lj
YWxMZWZ0KCkpICYmIGFyZUVzc2VudGlhbGx5RXF1YWwoc2ltcGxlUnVuLmxvZ2ljYWxSaWdodCwg
aW5saW5lUnVuLmxvZ2ljYWxSaWdodCgpKTsKKyAgICAgICAgaWYgKG1hdGNoaW5nUnVucykKKyAg
ICAgICAgICAgIG1hdGNoaW5nUnVucyA9IChzaW1wbGVSdW4uc3RhcnQgPT0gaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPnBvc2l0aW9uKCkgJiYgc2ltcGxlUnVuLmVuZCA9PSAoaW5saW5lUnVuLnRl
eHRDb250ZXh0KCktPnBvc2l0aW9uKCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+bGVuZ3Ro
KCkpKTsKKyAgICAgICAgaWYgKG1hdGNoaW5nUnVucykKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBzaW1wbGVS
dW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBsZVJ1bi5s
b2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikgbGF5b3V0
IHJ1bigiIDw8IGxheW91dFJ1bi5zdGFydCgpIDw8ICIsICIgPDwgbGF5b3V0UnVuLmVuZCgpIDw8
ICIpICgiIDw8IGxheW91dFJ1bi5sZWZ0KCkgPDwgIiwgIiA8PCBsYXlvdXRSdW4ucmlnaHQoKSA8
PCAiKSI7CisgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHNpbXBsZSBydW4oIiA8PCBz
aW1wbGVSdW4uc3RhcnQgPDwgIiwgIiA8PCBzaW1wbGVSdW4uZW5kIDw8ICIpICgiIDw8IHNpbXBs
ZVJ1bi5sb2dpY2FsTGVmdCA8PCAiLCAiIDw8IHNpbXBsZVJ1bi5sb2dpY2FsUmlnaHQgPDwgIikg
bGF5b3V0IHJ1bigiIDw8IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5wb3NpdGlvbigpIDw8ICIs
ICIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnBvc2l0aW9uKCkgKyBpbmxpbmVSdW4udGV4
dENvbnRleHQoKS0+bGVuZ3RoKCkgPDwgIikgKCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkg
PDwgIiwgIiA8PCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkgPDwgIikiOwogICAgICAgICBzdHJl
YW0ubmV4dExpbmUoKTsKICAgICAgICAgbWlzbWF0Y2hlZCA9IHRydWU7CiAgICAgfQpAQCAtNzUs
MzIgKzg2LDQ1IEBAIHN0YXRpYyBib29sIG91dHB1dE1pc21hdGNoaW5nU2ltcGxlTGluZUluZm9y
bWF0aW9uSWZOZWVkZWQoVGV4dFN0cmVhbSYgc3RyZWFtLCBjCiAKIHN0YXRpYyBib29sIG91dHB1
dE1pc21hdGNoaW5nQ29tcGxleExpbmVJbmZvcm1hdGlvbklmTmVlZGVkKFRleHRTdHJlYW0mIHN0
cmVhbSwgY29uc3QgTGF5b3V0Q29udGV4dCYgbGF5b3V0Q29udGV4dCwgY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBibG9ja0Zsb3csIGNvbnN0IENvbnRhaW5lciYgaW5saW5lRm9ybWF0dGluZ1Jvb3Qp
CiB7Ci0gICAgYXV0byYgaW5saW5lRm9ybWF0dGluZ1N0YXRlID0gY29uc3RfY2FzdDxMYXlvdXRD
b250ZXh0Jj4obGF5b3V0Q29udGV4dCkuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5l
Rm9ybWF0dGluZ1Jvb3QpOworICAgIGF1dG8mIGlubGluZUZvcm1hdHRpbmdTdGF0ZSA9IGxheW91
dENvbnRleHQuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoaW5saW5lRm9ybWF0dGluZ1Jvb3Qp
OwogICAgIEFTU0VSVChpczxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1hdHRpbmdT
dGF0ZSkpOwotICAgIGF1dG8mIGxheW91dFJ1bnMgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5n
U3RhdGU+KGlubGluZUZvcm1hdHRpbmdTdGF0ZSkubGF5b3V0UnVucygpOworICAgIGF1dG8mIGlu
bGluZVJ1bkxpc3QgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5nU3RhdGU+KGlubGluZUZvcm1h
dHRpbmdTdGF0ZSkuaW5saW5lUnVucygpOwogCiAgICAgYXV0byBtaXNtYXRjaGVkID0gZmFsc2U7
Ci0gICAgdW5zaWduZWQgbGF5b3V0UnVuSW5kZXggPSAwOworICAgIHVuc2lnbmVkIHJ1bkluZGV4
ID0gMDsKICAgICBmb3IgKGF1dG8qIHJvb3RMaW5lID0gYmxvY2tGbG93LmZpcnN0Um9vdEJveCgp
OyByb290TGluZTsgcm9vdExpbmUgPSByb290TGluZS0+bmV4dFJvb3RCb3goKSkgewogICAgICAg
ICBmb3IgKGF1dG8qIGxpbmVCb3ggPSByb290TGluZS0+Zmlyc3RDaGlsZCgpOyBsaW5lQm94OyBs
aW5lQm94ID0gbGluZUJveC0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWlzPElu
bGluZVRleHRCb3g+KGxpbmVCb3gpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBpZiAobGF5b3V0UnVuSW5kZXggPj0gbGF5b3V0UnVucy5zaXplKCkpIHsKKyAgICAg
ICAgICAgIGlmIChydW5JbmRleCA+PSBpbmxpbmVSdW5MaXN0LnNpemUoKSkgewogICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiA8c3Bhbj5mb29iYXI8L3NwYW4+Zm9vYmFyIGdlbmVyYXRlcyAyIGlu
bGluZSB0ZXh0IGJveGVzIHdoaWxlIHdlIG9ubHkgZ2VuZXJhdGUgb25lIGxheW91dCBydW4gKHdo
aWNoIGlzIG11Y2ggYmV0dGVyLCBzaW5jZSBpdCBlbmFibGVzIHVzIHRvIGRvIGtlcm5pbmcgYWNy
b3NzIGlubGluZSBlbGVtZW50cykuCi0gICAgICAgICAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRj
aGluZyBudW1iZXIgb2YgcnVuczogbGF5b3V0IHJ1bnMoIiA8PCBsYXlvdXRSdW5zLnNpemUoKSA8
PCAiKSI7CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8ICJNaXNtYXRjaGluZyBudW1iZXIgb2Yg
cnVuczogaW5saW5lIHJ1bnMoIiA8PCBpbmxpbmVSdW5MaXN0LnNpemUoKSA8PCAiKSI7CiAgICAg
ICAgICAgICAgICAgc3RyZWFtLm5leHRMaW5lKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8mIGxheW91dFJ1biA9IGxheW91
dFJ1bnNbbGF5b3V0UnVuSW5kZXhdOwotICAgICAgICAgICAgYXV0byYgaW5saW5lVGV4dEJveCA9
IGRvd25jYXN0PElubGluZVRleHRCb3g+KCpsaW5lQm94KTsKLSAgICAgICAgICAgIGlmIChpbmxp
bmVUZXh0Qm94LnN0YXJ0KCkgPT0gbGF5b3V0UnVuLnN0YXJ0KCkgJiYgaW5saW5lVGV4dEJveC5l
bmQoKSA9PSBsYXlvdXRSdW4uZW5kKCkgJiYgaW5saW5lVGV4dEJveC5sb2dpY2FsTGVmdCgpID09
IGxheW91dFJ1bi5sZWZ0KCkgJiYgaW5saW5lVGV4dEJveC5sb2dpY2FsUmlnaHQoKSA9PSBsYXlv
dXRSdW4ucmlnaHQoKSkgewotICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6
IHNpbXBsZSBydW4oIiA8PCBpbmxpbmVUZXh0Qm94LnN0YXJ0KCkgPDwgIiwgIiA8PCBpbmxpbmVU
ZXh0Qm94LmVuZCgpIDw8ICIpICgiIDw8IGlubGluZVRleHRCb3gubG9naWNhbExlZnQoKSA8PCAi
LCAiIDw8IGlubGluZVRleHRCb3gubG9naWNhbFJpZ2h0KCkgPDwgIikgbGF5b3V0IHJ1bigiIDw8
IGxheW91dFJ1bi5zdGFydCgpIDw8ICIsICIgPDwgbGF5b3V0UnVuLmVuZCgpIDw8ICIpICgiIDw8
IGxheW91dFJ1bi5sZWZ0KCkgPDwgIiwgIiA8PCBsYXlvdXRSdW4ucmlnaHQoKSA8PCAiKSI7Cisg
ICAgICAgICAgICBhdXRvJiBpbmxpbmVSdW4gPSBpbmxpbmVSdW5MaXN0W3J1bkluZGV4XTsKKyAg
ICAgICAgICAgIGF1dG8qIGlubGluZVRleHRCb3ggPSBpczxJbmxpbmVUZXh0Qm94PihsaW5lQm94
KSA/IGRvd25jYXN0PElubGluZVRleHRCb3g+KGxpbmVCb3gpIDogbnVsbHB0cjsKKworICAgICAg
ICAgICAgYXV0byBtYXRjaGluZ1J1bnMgPSBhcmVFc3NlbnRpYWxseUVxdWFsKGxpbmVCb3gtPmxv
Z2ljYWxMZWZ0KCksIGlubGluZVJ1bi5sb2dpY2FsTGVmdCgpKSAmJiBhcmVFc3NlbnRpYWxseUVx
dWFsKGxpbmVCb3gtPmxvZ2ljYWxSaWdodCgpLCBpbmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkpOwor
ICAgICAgICAgICAgaWYgKG1hdGNoaW5nUnVucyAmJiBpbmxpbmVUZXh0Qm94KSB7CisgICAgICAg
ICAgICAgICAgQVNTRVJUKGlubGluZVJ1bi50ZXh0Q29udGV4dCgpKTsKKyAgICAgICAgICAgICAg
ICBtYXRjaGluZ1J1bnMgPSBpbmxpbmVUZXh0Qm94LT5zdGFydCgpID09IGlubGluZVJ1bi50ZXh0
Q29udGV4dCgpLT5wb3NpdGlvbigpICYmIGlubGluZVRleHRCb3gtPmVuZCgpICsgMSA9PSAoaW5s
aW5lUnVuLnRleHRDb250ZXh0KCktPnBvc2l0aW9uKCkgKyBpbmxpbmVSdW4udGV4dENvbnRleHQo
KS0+bGVuZ3RoKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIW1hdGNoaW5n
UnVucykgeworICAgICAgICAgICAgICAgIHN0cmVhbSA8PCAiTWlzbWF0Y2hpbmc6IHJ1biAiOwor
CisgICAgICAgICAgICAgICAgaWYgKGlubGluZVRleHRCb3gpCisgICAgICAgICAgICAgICAgICAg
IHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lVGV4dEJveC0+c3RhcnQoKSA8PCAiLCAiIDw8IGlubGlu
ZVRleHRCb3gtPmVuZCgpICsgMSA8PCAiKSI7CisgICAgICAgICAgICAgICAgc3RyZWFtIDw8ICIg
KCIgPDwgbGluZUJveC0+bG9naWNhbExlZnQoKSA8PCAiLCAiIDw8IGxpbmVCb3gtPmxvZ2ljYWxS
aWdodCgpIDw8ICIpICI7CisKKyAgICAgICAgICAgICAgICBzdHJlYW0gPDwgImxheW91dCBydW4g
IjsKKyAgICAgICAgICAgICAgICBpZiAoaW5saW5lUnVuLnRleHRDb250ZXh0KCkpCisgICAgICAg
ICAgICAgICAgICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lUnVuLnRleHRDb250ZXh0KCktPnBv
c2l0aW9uKCkgPDwgIiwgIiA8PCBpbmxpbmVSdW4udGV4dENvbnRleHQoKS0+cG9zaXRpb24oKSAr
IGlubGluZVJ1bi50ZXh0Q29udGV4dCgpLT5sZW5ndGgoKSA8PCAiKSAiOworICAgICAgICAgICAg
ICAgIHN0cmVhbSA8PCAiKCIgPDwgaW5saW5lUnVuLmxvZ2ljYWxMZWZ0KCkgPDwgIiwgIiA8PCBp
bmxpbmVSdW4ubG9naWNhbFJpZ2h0KCkgPDwgIikiOwogICAgICAgICAgICAgICAgIHN0cmVhbS5u
ZXh0TGluZSgpOwogICAgICAgICAgICAgICAgIG1pc21hdGNoZWQgPSB0cnVlOwogICAgICAgICAg
ICAgfQotICAgICAgICAgICAgKytsYXlvdXRSdW5JbmRleDsKKyAgICAgICAgICAgICsrcnVuSW5k
ZXg7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIG1pc21hdGNoZWQ7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
U3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZv
cm1hdHRpbmdTdGF0ZS5oCmluZGV4IGRjNmM5ZTgwYjhiLi44NmNjN2UzODg1NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ1N0YXRlLmgKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJGb3JtYXR0
aW5nU3RhdGUuaCIKICNpbmNsdWRlICJJbmxpbmVJdGVtLmgiCiAjaW5jbHVkZSAiSW5saW5lUnVu
LmgiCi0jaW5jbHVkZSAiUnVucy5oIgogI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2MuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNDQsMTcgKzQzLDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IH5JbmxpbmVGb3JtYXR0aW5nU3RhdGUoKTsKIAogICAgIElubGluZUNvbnRlbnQmIGlubGluZUNv
bnRlbnQoKSB7IHJldHVybiBtX2lubGluZUNvbnRlbnQ7IH0KLSAgICAvLyBUaGlzIGlzIHRlbXBv
cmFyeS4gV2UgbmVlZCB0byBjb25zdHJ1Y3QgYSBkaXNwbGF5IHRyZWUgY29udGV4dCBmb3IgaW5s
aW5lcy4KLSAgICB2b2lkIGFkZExheW91dFJ1bnMoVmVjdG9yPExheW91dFJ1bj4mJiBsYXlvdXRS
dW5zKSB7IG1fbGF5b3V0UnVucyA9IFdURk1vdmUobGF5b3V0UnVucyk7IH0KLSAgICBjb25zdCBW
ZWN0b3I8TGF5b3V0UnVuPiYgbGF5b3V0UnVucygpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0UnVu
czsgfQotCiAgICAgLy8gVGVtcAogICAgIElubGluZVJ1bnMmIGlubGluZVJ1bnMoKSB7IHJldHVy
biBtX2lubGluZVJ1bnM7IH0KICAgICB2b2lkIGFwcGVuZElubGluZVJ1bihJbmxpbmVSdW4gaW5s
aW5lUnVuKSB7IG1faW5saW5lUnVucy5hcHBlbmQoaW5saW5lUnVuKTsgfQogCiBwcml2YXRlOgog
ICAgIElubGluZUNvbnRlbnQgbV9pbmxpbmVDb250ZW50OwotICAgIFZlY3RvcjxMYXlvdXRSdW4+
IG1fbGF5b3V0UnVuczsKICAgICBJbmxpbmVSdW5zIG1faW5saW5lUnVuczsKIH07CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQv
VGV4dFV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4
dC9UZXh0VXRpbC5jcHAKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIFNvdXJjZS9X
ZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4dFV0aWwuY3BwCnJl
bmFtZSB0byBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0L1RleHRV
dGlsLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvdGV4dGxheW91dC9UZXh0VXRpbC5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvdGV4dC9UZXh0VXRpbC5oCnNpbWlsYXJpdHkgaW5kZXggMTAwJQpyZW5hbWUgZnJv
bSBTb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRV
dGlsLmgKcmVuYW1lIHRvIFNvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3Rl
eHQvVGV4dFV0aWwuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvdGV4dGxheW91dC9SdW5zLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy90ZXh0bGF5b3V0L1J1bnMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOWE0YzFmMjQyYmEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvUnVucy5oCisrKyAvZGV2L251bGwKQEAgLTEsMjI5
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
Ci0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgot
ICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRf
Rk9STUFUVElOR19DT05URVhUKQotCi0jaW5jbHVkZSAiVGV4dEZsYWdzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi11c2luZyBDb250ZW50UG9zaXRpb24g
PSB1bnNpZ25lZDsKLXVzaW5nIEl0ZW1Qb3NpdGlvbiA9IHVuc2lnbmVkOwotCi1zdHJ1Y3QgVGV4
dFJ1biB7Ci1wdWJsaWM6Ci0gICAgZW51bSBjbGFzcyBUeXBlIHsKLSAgICAgICAgV2hpdGVzcGFj
ZSwKLSAgICAgICAgTm9uV2hpdGVzcGFjZSwKLSAgICAgICAgU29mdExpbmVCcmVhaywKLSAgICAg
ICAgSGFyZExpbmVCcmVhaywKLSAgICAgICAgSW52YWxpZAotICAgIH07Ci0gICAgc3RhdGljIFRl
eHRSdW4gY3JlYXRlV2hpdGVzcGFjZVJ1bihDb250ZW50UG9zaXRpb24gc3RhcnQsIENvbnRlbnRQ
b3NpdGlvbiBlbmQsIGZsb2F0IHdpZHRoLCBib29sIGlzQ29sbGFwc2VkKTsKLSAgICBzdGF0aWMg
VGV4dFJ1biBjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKENvbnRlbnRQb3NpdGlvbiBzdGFydCwgQ29u
dGVudFBvc2l0aW9uIGVuZCwgZmxvYXQgd2lkdGgpOwotICAgIHN0YXRpYyBUZXh0UnVuIGNyZWF0
ZU5vbldoaXRlc3BhY2VSdW5XaXRoSHlwaGVuKENvbnRlbnRQb3NpdGlvbiBzdGFydCwgQ29udGVu
dFBvc2l0aW9uIGVuZCwgZmxvYXQgd2lkdGgpOwotICAgIHN0YXRpYyBUZXh0UnVuIGNyZWF0ZVNv
ZnRMaW5lQnJlYWtSdW4oQ29udGVudFBvc2l0aW9uKTsKLSAgICBzdGF0aWMgVGV4dFJ1biBjcmVh
dGVIYXJkTGluZUJyZWFrUnVuKENvbnRlbnRQb3NpdGlvbik7Ci0KLSAgICBUZXh0UnVuKCkgPSBk
ZWZhdWx0OwotICAgIFRleHRSdW4oQ29udGVudFBvc2l0aW9uIHN0YXJ0LCBDb250ZW50UG9zaXRp
b24gZW5kLCBUeXBlLCBmbG9hdCB3aWR0aCA9IDAsIGJvb2wgaXNDb2xsYXBzZWQgPSBmYWxzZSwg
Ym9vbCBoYXNIeXBoZW4gPSBmYWxzZSk7Ci0KLSAgICBDb250ZW50UG9zaXRpb24gc3RhcnQoKSBj
b25zdDsKLSAgICBDb250ZW50UG9zaXRpb24gZW5kKCkgY29uc3Q7Ci0gICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7Ci0KLSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0OwotCi0gICAgYm9vbCBpc1do
aXRlc3BhY2UoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6V2hpdGVzcGFjZTsgfQot
ICAgIGJvb2wgaXNOb25XaGl0ZXNwYWNlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6
Ok5vbldoaXRlc3BhY2U7IH0KLSAgICBib29sIGlzTGluZUJyZWFrKCkgY29uc3QgeyByZXR1cm4g
aXNTb2Z0TGluZUJyZWFrKCkgfHwgaXNIYXJkTGluZUJyZWFrKCk7IH0KLSAgICBib29sIGlzU29m
dExpbmVCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZSA9PSBUeXBlOjpTb2Z0TGluZUJyZWFr
OyB9Ci0gICAgYm9vbCBpc0hhcmRMaW5lQnJlYWsoKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
VHlwZTo6SGFyZExpbmVCcmVhazsgfQotICAgIGJvb2wgaXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJu
IG1fdHlwZSAhPSBUeXBlOjpJbnZhbGlkOyB9Ci0gICAgYm9vbCBpc0NvbGxhcHNlZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXNDb2xsYXBzZWQ7IH0KLSAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KLQotICAgIHZvaWQgc2V0SXNDb2xsYXBzZWQoYm9vbCBpc0NvbGxhcHNlZCkg
eyBtX2lzQ29sbGFwc2VkID0gaXNDb2xsYXBzZWQ7IH0KLSAgICBib29sIGhhc0h5cGhlbigpIGNv
bnN0IHsgcmV0dXJuIG1faGFzSHlwaGVuOyB9Ci0gICAgdm9pZCBzZXRXaWR0aChmbG9hdCB3aWR0
aCkgeyBtX3dpZHRoID0gd2lkdGg7IH0KLQotcHJpdmF0ZToKLSAgICBDb250ZW50UG9zaXRpb24g
bV9zdGFydCB7IDAgfTsKLSAgICBDb250ZW50UG9zaXRpb24gbV9lbmQgeyAwIH07Ci0gICAgVHlw
ZSBtX3R5cGUgeyBUeXBlOjpJbnZhbGlkIH07Ci0gICAgZmxvYXQgbV93aWR0aCB7IDAgfTsKLSAg
ICBib29sIG1faXNDb2xsYXBzZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNIeXBoZW4geyBm
YWxzZSB9OwotfTsKLQotc3RydWN0IExheW91dFJ1biB7Ci1wdWJsaWM6Ci0gICAgTGF5b3V0UnVu
KENvbnRlbnRQb3NpdGlvbiBzdGFydCwgQ29udGVudFBvc2l0aW9uIGVuZCwgZmxvYXQgbGVmdCwg
ZmxvYXQgcmlnaHQsIGJvb2wgaGFzSHlwaGVuKTsKLQotICAgIENvbnRlbnRQb3NpdGlvbiBzdGFy
dCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQ7IH0KLSAgICBDb250ZW50UG9zaXRpb24gZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KLSAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCB7IHJl
dHVybiBlbmQoKSAtIHN0YXJ0KCk7IH0KLQotICAgIGZsb2F0IGxlZnQoKSBjb25zdCB7IHJldHVy
biBtX2xlZnQ7IH0KLSAgICBmbG9hdCByaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmlnaHQ7IH0K
LSAgICBmbG9hdCB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIHJpZ2h0KCkgLSBsZWZ0KCk7IH0KLQot
ICAgIGJvb2wgaXNFbmRPZkxpbmUoKSBjb25zdCB7IHJldHVybiBtX2lzRW5kT2ZMaW5lOyB9Ci0K
LSAgICB2b2lkIHNldEVuZChDb250ZW50UG9zaXRpb24gZW5kKSB7IG1fZW5kID0gZW5kOyB9Ci0g
ICAgdm9pZCBzZXRMZWZ0KGZsb2F0IGxlZnQpIHsgbV9sZWZ0ID0gbGVmdDsgfQotICAgIHZvaWQg
c2V0UmlnaHQoZmxvYXQgcmlnaHQpIHsgbV9yaWdodCA9IHJpZ2h0OyB9Ci0gICAgdm9pZCBzZXRJ
c0VuZE9mTGluZSgpIHsgbV9pc0VuZE9mTGluZSA9IHRydWU7IH0KLQotICAgIHZvaWQgc2V0RXhw
YW5zaW9uKEV4cGFuc2lvbkJlaGF2aW9yLCBmbG9hdCBleHBhbnNpb24pOwotICAgIHZvaWQgc2V0
SGFzSHlwaGVuKCkgeyBtX2hhc0h5cGhlbiA9IHRydWU7IH0KLSAgICBib29sIGhhc0h5cGhlbigp
IGNvbnN0IHsgcmV0dXJuIG1faGFzSHlwaGVuOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29udGVudFBv
c2l0aW9uIG1fc3RhcnQgeyAwIH07Ci0gICAgQ29udGVudFBvc2l0aW9uIG1fZW5kIHsgMCB9Owot
ICAgIGZsb2F0IG1fbGVmdCB7IDAgfTsKLSAgICBmbG9hdCBtX3JpZ2h0IHsgMCB9OwotICAgIGJv
b2wgbV9pc0VuZE9mTGluZSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0h5cGhlbiB7IGZhbHNl
IH07Ci0gICAgZmxvYXQgbV9leHBhbnNpb24geyAwIH07Ci0gICAgRXhwYW5zaW9uQmVoYXZpb3Ig
bV9leHBhbnNpb25CZWhhdmlvciB7IEZvcmJpZExlYWRpbmdFeHBhbnNpb24gfCBGb3JiaWRUcmFp
bGluZ0V4cGFuc2lvbiB9OwotfTsKLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWNsYXNzIENvbnN0
VmVjdG9ySXRlcmF0b3IgewotcHVibGljOgotICAgIENvbnN0VmVjdG9ySXRlcmF0b3IoY29uc3Qg
VmVjdG9yPFQ+Jik7Ci0KLSAgICBjb25zdCBUKiBjdXJyZW50KCkgY29uc3Q7Ci0gICAgQ29uc3RW
ZWN0b3JJdGVyYXRvcjxUPiYgb3BlcmF0b3IrKygpOwotICAgIHZvaWQgcmVzZXQoKSB7IG1faW5k
ZXggPSAwOyB9Ci0KLXByaXZhdGU6Ci0gICAgY29uc3QgVmVjdG9yPFQ+JiBtX2NvbnRlbnQ7Ci0g
ICAgdW5zaWduZWQgbV9pbmRleCB7IDAgfTsKLX07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci1p
bmxpbmUgQ29uc3RWZWN0b3JJdGVyYXRvcjxUPjo6Q29uc3RWZWN0b3JJdGVyYXRvcihjb25zdCBW
ZWN0b3I8VD4mIGNvbnRlbnQpCi0gICAgOiBtX2NvbnRlbnQoY29udGVudCkKLXsKLX0KLQotdGVt
cGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBjb25zdCBUKiBDb25zdFZlY3Rvckl0ZXJhdG9yPFQ+
OjpjdXJyZW50KCkgY29uc3QKLXsKLSAgICBpZiAobV9pbmRleCA9PSBtX2NvbnRlbnQuc2l6ZSgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gJm1fY29udGVudFttX2luZGV4
XTsKLX0KLQotdGVtcGxhdGU8dHlwZW5hbWUgVD4KLWlubGluZSBDb25zdFZlY3Rvckl0ZXJhdG9y
PFQ+JiBDb25zdFZlY3Rvckl0ZXJhdG9yPFQ+OjpvcGVyYXRvcisrKCkKLXsKLSAgICArK21faW5k
ZXg7Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgTGF5b3V0UnVuOjpMYXlvdXRSdW4o
Q29udGVudFBvc2l0aW9uIHN0YXJ0LCBDb250ZW50UG9zaXRpb24gZW5kLCBmbG9hdCBsZWZ0LCBm
bG9hdCByaWdodCwgYm9vbCBoYXNIeXBoZW4pCi0gICAgOiBtX3N0YXJ0KHN0YXJ0KQotICAgICwg
bV9lbmQoZW5kKQotICAgICwgbV9sZWZ0KGxlZnQpCi0gICAgLCBtX3JpZ2h0KHJpZ2h0KQotICAg
ICwgbV9oYXNIeXBoZW4oaGFzSHlwaGVuKQotewotfQotCi1pbmxpbmUgdm9pZCBMYXlvdXRSdW46
OnNldEV4cGFuc2lvbihFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciwgZmxvYXQg
ZXhwYW5zaW9uKQotewotICAgIG1fZXhwYW5zaW9uQmVoYXZpb3IgPSBleHBhbnNpb25CZWhhdmlv
cjsKLSAgICBtX2V4cGFuc2lvbiA9IGV4cGFuc2lvbjsKLX0KLQotaW5saW5lIFRleHRSdW4gVGV4
dFJ1bjo6Y3JlYXRlV2hpdGVzcGFjZVJ1bihDb250ZW50UG9zaXRpb24gc3RhcnQsIENvbnRlbnRQ
b3NpdGlvbiBlbmQsIGZsb2F0IHdpZHRoLCBib29sIGlzQ29sbGFwc2VkKQotewotICAgIHJldHVy
biB7IHN0YXJ0LCBlbmQsIFR5cGU6OldoaXRlc3BhY2UsIHdpZHRoLCBpc0NvbGxhcHNlZCB9Owot
fQotCi1pbmxpbmUgVGV4dFJ1biBUZXh0UnVuOjpjcmVhdGVOb25XaGl0ZXNwYWNlUnVuKENvbnRl
bnRQb3NpdGlvbiBzdGFydCwgQ29udGVudFBvc2l0aW9uIGVuZCwgZmxvYXQgd2lkdGgpCi17Ci0g
ICAgcmV0dXJuIHsgc3RhcnQsIGVuZCwgVHlwZTo6Tm9uV2hpdGVzcGFjZSwgd2lkdGggfTsKLX0K
LQotaW5saW5lIFRleHRSdW4gVGV4dFJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bldpdGhIeXBo
ZW4oQ29udGVudFBvc2l0aW9uIHN0YXJ0LCBDb250ZW50UG9zaXRpb24gZW5kLCBmbG9hdCB3aWR0
aCkKLXsKLSAgICByZXR1cm4geyBzdGFydCwgZW5kLCBUeXBlOjpOb25XaGl0ZXNwYWNlLCB3aWR0
aCwgZmFsc2UsIHRydWUgfTsKLX0KLQotaW5saW5lIFRleHRSdW4gVGV4dFJ1bjo6Y3JlYXRlU29m
dExpbmVCcmVha1J1bihDb250ZW50UG9zaXRpb24gcG9zaXRpb24pCi17Ci0gICAgcmV0dXJuIHsg
cG9zaXRpb24sIHBvc2l0aW9uICsgMSwgVHlwZTo6U29mdExpbmVCcmVhayB9OwotfQotCi1pbmxp
bmUgVGV4dFJ1biBUZXh0UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKENvbnRlbnRQb3NpdGlv
biBwb3NpdGlvbikKLXsKLSAgICByZXR1cm4geyBwb3NpdGlvbiwgcG9zaXRpb24sIFR5cGU6Okhh
cmRMaW5lQnJlYWsgfTsKLX0KLQotaW5saW5lIFRleHRSdW46OlRleHRSdW4oQ29udGVudFBvc2l0
aW9uIHN0YXJ0LCBDb250ZW50UG9zaXRpb24gZW5kLCBUeXBlIHR5cGUsIGZsb2F0IHdpZHRoLCBi
b29sIGlzQ29sbGFwc2VkLCBib29sIGhhc0h5cGhlbikKLSAgICA6IG1fc3RhcnQoc3RhcnQpCi0g
ICAgLCBtX2VuZChlbmQpCi0gICAgLCBtX3R5cGUodHlwZSkKLSAgICAsIG1fd2lkdGgod2lkdGgp
Ci0gICAgLCBtX2lzQ29sbGFwc2VkKGlzQ29sbGFwc2VkKQotICAgICwgbV9oYXNIeXBoZW4oaGFz
SHlwaGVuKQotewotfQotCi1pbmxpbmUgQ29udGVudFBvc2l0aW9uIFRleHRSdW46OnN0YXJ0KCkg
Y29uc3QKLXsKLSAgICBBU1NFUlQodHlwZSgpICE9IFR5cGU6OkludmFsaWQpOwotICAgIHJldHVy
biBtX3N0YXJ0OwotfQotCi1pbmxpbmUgQ29udGVudFBvc2l0aW9uIFRleHRSdW46OmVuZCgpIGNv
bnN0Ci17Ci0gICAgQVNTRVJUKHR5cGUoKSAhPSBUeXBlOjpJbnZhbGlkKTsKLSAgICByZXR1cm4g
bV9lbmQ7Ci19Ci0KLWlubGluZSB1bnNpZ25lZCBUZXh0UnVuOjpsZW5ndGgoKSBjb25zdAotewot
ICAgIEFTU0VSVCh0eXBlKCkgIT0gVHlwZTo6SW52YWxpZCk7Ci0gICAgcmV0dXJuIG1fZW5kIC0g
bV9zdGFydDsKLX0KLQotaW5saW5lIGZsb2F0IFRleHRSdW46OndpZHRoKCkgY29uc3QKLXsKLSAg
ICBBU1NFUlQodHlwZSgpICE9IFR5cGU6OkludmFsaWQpOwotICAgIHJldHVybiBtX3dpZHRoOwot
fQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4dENvbnRlbnRQcm92aWRlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRDb250ZW50UHJv
dmlkZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2IwZTdmOGQ5My4uMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4
dGxheW91dC9UZXh0Q29udGVudFByb3ZpZGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDI2MiAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgot
ICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAq
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRleHRD
b250ZW50UHJvdmlkZXIuaCIKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElOR19DT05URVhU
KQotCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJIeXBoZW5hdGlvbi5oIgot
I2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU2ltcGxlVGV4dFJ1bkdlbmVyYXRv
ci5oIgotI2luY2x1ZGUgPHd0Zi9Jc29NYWxsb2NJbmxpbmVzLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLW5hbWVzcGFjZSBMYXlvdXQgewotCi1XVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwo
VGV4dENvbnRlbnRQcm92aWRlcik7Ci0KLVRleHRDb250ZW50UHJvdmlkZXI6OlRleHRJdGVtOjpT
dHlsZTo6U3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKQotICAgIDogZm9udChzdHlsZS5m
b250Q2FzY2FkZSgpKQotICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxlLmNvbGxhcHNlV2hp
dGVTcGFjZSgpKQotICAgICwgaGFzS2VybmluZ09yTGlnYXR1cmVzKGZvbnQuZW5hYmxlS2Vybmlu
ZygpIHx8IGZvbnQucmVxdWlyZXNTaGFwaW5nKCkpCi0gICAgLCB3b3JkU3BhY2luZyhmb250Lndv
cmRTcGFjaW5nKCkpCi0gICAgLCB0YWJXaWR0aChjb2xsYXBzZVdoaXRlc3BhY2UgPyAwIDogc3R5
bGUudGFiU2l6ZSgpKQotICAgICwgcHJlc2VydmVOZXdsaW5lKHN0eWxlLnByZXNlcnZlTmV3bGlu
ZSgpKQotICAgICwgYnJlYWtOQlNQKHN0eWxlLmF1dG9XcmFwKCkgJiYgc3R5bGUubmJzcE1vZGUo
KSA9PSBOQlNQTW9kZTo6U3BhY2UpCi0gICAgLCBrZWVwQWxsV29yZHNGb3JDSksoc3R5bGUud29y
ZEJyZWFrKCkgPT0gV29yZEJyZWFrOjpLZWVwQWxsKQotICAgICwgbG9jYWxlKHN0eWxlLmxvY2Fs
ZSgpKQotewotfQotCi1UZXh0Q29udGVudFByb3ZpZGVyOjpUZXh0Q29udGVudFByb3ZpZGVyKCkK
LSAgICA6IG1fdGV4dENvbnRlbnRJdGVyYXRvcihtX3RleHRDb250ZW50KQotewotfQotCi1UZXh0
Q29udGVudFByb3ZpZGVyOjp+VGV4dENvbnRlbnRQcm92aWRlcigpCi17Ci19Ci0KLXZvaWQgVGV4
dENvbnRlbnRQcm92aWRlcjo6YXBwZW5kVGV4dChTdHJpbmcgdGV4dCwgY29uc3QgUmVuZGVyU3R5
bGUmIHN0eWxlLCBib29sIGNhblVzZVNpbXBsaWZpZWRNZWFzdXJlKQotewotICAgIEFTU0VSVCh0
ZXh0Lmxlbmd0aCgpKTsKLQotICAgIGF1dG8gc3RhcnQgPSBsZW5ndGgoKTsKLSAgICBhdXRvIGVu
ZCA9IHN0YXJ0ICsgdGV4dC5sZW5ndGgoKTsKLSAgICBtX3RleHRDb250ZW50LmFwcGVuZCh7IHRl
eHQsIHN0YXJ0LCBlbmQsIFRleHRJdGVtOjpTdHlsZShzdHlsZSksIGNhblVzZVNpbXBsaWZpZWRN
ZWFzdXJlIH0pOwotfQotCi12b2lkIFRleHRDb250ZW50UHJvdmlkZXI6OmFwcGVuZExpbmVCcmVh
aygpCi17Ci0gICAgbV9oYXJkTGluZUJyZWFrcy5hcHBlbmQobGVuZ3RoKCkpOwotfQotCi1zdGF0
aWMgYm9vbCBjb250YWlucyhDb250ZW50UG9zaXRpb24gcG9zaXRpb24sIGNvbnN0IFRleHRDb250
ZW50UHJvdmlkZXI6OlRleHRJdGVtJiB0ZXh0SXRlbSkKLXsKLSAgICByZXR1cm4gdGV4dEl0ZW0u
c3RhcnQgPD0gcG9zaXRpb24gJiYgcG9zaXRpb24gPCB0ZXh0SXRlbS5lbmQ7Ci19Ci0KLWNvbnN0
IFRleHRDb250ZW50UHJvdmlkZXI6OlRleHRJdGVtKiBUZXh0Q29udGVudFByb3ZpZGVyOjpmaW5k
VGV4dEl0ZW1TbG93KENvbnRlbnRQb3NpdGlvbiBwb3NpdGlvbikgY29uc3QKLXsKLSAgICAvLyBT
aW5jZSB0aGlzIGlzIGFuIGl0ZXJhdG9yIGxpa2UgY2xhc3MsIGNoZWNrIHRoZSBuZXh0IGl0ZW0g
Zmlyc3QgKGluc3RlYWQgb2Ygc3RhcnRpbmcgdGhlIHNlYXJjaCBmcm9tIHRoZSBiZWdpbm5pbmcp
LgotICAgIGlmIChhdXRvKiB0ZXh0SXRlbSA9ICgrK21fdGV4dENvbnRlbnRJdGVyYXRvcikuY3Vy
cmVudCgpKSB7Ci0gICAgICAgIGlmIChjb250YWlucyhwb3NpdGlvbiwgKnRleHRJdGVtKSkKLSAg
ICAgICAgICAgIHJldHVybiB0ZXh0SXRlbTsKLSAgICB9Ci0KLSAgICBtX3RleHRDb250ZW50SXRl
cmF0b3IucmVzZXQoKTsKLSAgICB3aGlsZSAoYXV0byogdGV4dEl0ZW0gPSBtX3RleHRDb250ZW50
SXRlcmF0b3IuY3VycmVudCgpKSB7Ci0gICAgICAgIGlmIChjb250YWlucyhwb3NpdGlvbiwgKnRl
eHRJdGVtKSkKLSAgICAgICAgICAgIHJldHVybiB0ZXh0SXRlbTsKLSAgICAgICAgKyttX3RleHRD
b250ZW50SXRlcmF0b3I7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIG51bGxwdHI7Ci19Ci0KLWZsb2F0IFRleHRDb250ZW50UHJvdmlkZXI6OndpZHRoKENv
bnRlbnRQb3NpdGlvbiBmcm9tLCBDb250ZW50UG9zaXRpb24gdG8sIGZsb2F0IHhQb3NpdGlvbikg
Y29uc3QKLXsKLSAgICBpZiAoZnJvbSA+PSB0bykgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgYXV0byBjb250ZW50TGVuZ3Ro
ID0gbGVuZ3RoKCk7Ci0gICAgaWYgKGZyb20gPj0gY29udGVudExlbmd0aCB8fCB0byA+IGNvbnRl
bnRMZW5ndGgpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIGZsb2F0IHdpZHRoID0gMDsKLSAgICBhdXRvIGxlbmd0aCA9IHRv
IC0gZnJvbTsKLSAgICBhdXRvKiB0ZXh0SXRlbSA9IG1fdGV4dENvbnRlbnRJdGVyYXRvci5jdXJy
ZW50KCk7Ci0gICAgYXV0byBzdGFydFBvc2l0aW9uID0gZnJvbSAtICh0ZXh0SXRlbSAmJiBjb250
YWlucyhmcm9tLCAqdGV4dEl0ZW0pID8gdGV4dEl0ZW0tPnN0YXJ0IDogZmluZFRleHRJdGVtU2xv
dyhmcm9tKS0+c3RhcnQpOwotCi0gICAgd2hpbGUgKGxlbmd0aCkgewotICAgICAgICB0ZXh0SXRl
bSA9IG1fdGV4dENvbnRlbnRJdGVyYXRvci5jdXJyZW50KCk7Ci0gICAgICAgIGlmICghdGV4dEl0
ZW0pIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGVuZFBvc2l0aW9uID0gc3RkOjptaW48SXRl
bVBvc2l0aW9uPihzdGFydFBvc2l0aW9uICsgbGVuZ3RoLCB0ZXh0SXRlbS0+dGV4dC5sZW5ndGgo
KSk7Ci0gICAgICAgIEFTU0VSVChlbmRQb3NpdGlvbiA+PSBzdGFydFBvc2l0aW9uKTsKLSAgICAg
ICAgYXV0byB0ZXh0V2lkdGggPSB0aGlzLT50ZXh0V2lkdGgoKnRleHRJdGVtLCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbiwgeFBvc2l0aW9uKTsKLQotICAgICAgICB4UG9zaXRpb24gKz0gdGV4
dFdpZHRoOwotICAgICAgICB3aWR0aCArPSB0ZXh0V2lkdGg7Ci0gICAgICAgIGxlbmd0aCAtPSAo
ZW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKTsKLQotICAgICAgICBzdGFydFBvc2l0aW9uID0g
MDsKLSAgICAgICAgaWYgKGxlbmd0aCkKLSAgICAgICAgICAgICsrbV90ZXh0Q29udGVudEl0ZXJh
dG9yOwotICAgIH0KLQotICAgIHJldHVybiB3aWR0aDsKLX0KLQotZmxvYXQgVGV4dENvbnRlbnRQ
cm92aWRlcjo6dGV4dFdpZHRoKGNvbnN0IFRleHRJdGVtJiB0ZXh0SXRlbSwgSXRlbVBvc2l0aW9u
IGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdAotewotICAgIGlm
IChmcm9tID4gdG8gfHwgdG8gPiB0ZXh0SXRlbS5lbmQgLSB0ZXh0SXRlbS5zdGFydCkgewotICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0g
ICAgYXV0byYgc3R5bGUgPSB0ZXh0SXRlbS5zdHlsZTsKLSAgICBhdXRvJiBmb250ID0gc3R5bGUu
Zm9udDsKLSAgICBpZiAoIWZvbnQuc2l6ZSgpIHx8IGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgaWYgKGZvbnQuaXNGaXhlZFBpdGNoKCkpCi0gICAgICAgIHJldHVybiBmaXhl
ZFBpdGNoV2lkdGgodGV4dEl0ZW0udGV4dCwgc3R5bGUsIGZyb20sIHRvLCB4UG9zaXRpb24pOwot
Ci0gICAgYXV0byBtZWFzdXJlV2l0aEVuZFNwYWNlID0gc3R5bGUuaGFzS2VybmluZ09yTGlnYXR1
cmVzICYmIHRvIDwgdGV4dEl0ZW0udGV4dC5sZW5ndGgoKSAmJiB0ZXh0SXRlbS50ZXh0W3RvXSA9
PSAnICc7Ci0gICAgaWYgKG1lYXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgICsrdG87Ci0gICAg
ZmxvYXQgd2lkdGggPSAwOwotICAgIGlmICh0ZXh0SXRlbS5jYW5Vc2VTaW1wbGlmaWVkTWVhc3Vy
ZSkKLSAgICAgICAgd2lkdGggPSBmb250LndpZHRoRm9yU2ltcGxlVGV4dChTdHJpbmdWaWV3KHRl
eHRJdGVtLnRleHQpLnN1YnN0cmluZyhmcm9tLCB0byAtIGZyb20pKTsKLSAgICBlbHNlICB7Ci0g
ICAgICAgIFdlYkNvcmU6OlRleHRSdW4gcnVuKFN0cmluZ1ZpZXcodGV4dEl0ZW0udGV4dCkuc3Vi
c3RyaW5nKGZyb20sIHRvIC0gZnJvbSksIHhQb3NpdGlvbik7Ci0gICAgICAgIGlmIChzdHlsZS50
YWJXaWR0aCkKLSAgICAgICAgICAgIHJ1bi5zZXRUYWJTaXplKHRydWUsIHN0eWxlLnRhYldpZHRo
KTsKLSAgICAgICAgd2lkdGggPSBmb250LndpZHRoKHJ1bik7Ci0gICAgfQotCi0gICAgaWYgKG1l
YXN1cmVXaXRoRW5kU3BhY2UpCi0gICAgICAgIHdpZHRoIC09IChmb250LnNwYWNlV2lkdGgoKSAr
IHN0eWxlLndvcmRTcGFjaW5nKTsKLQotICAgIHJldHVybiBzdGQ6Om1heDxmbG9hdD4oMCwgd2lk
dGgpOwotfQotCi1mbG9hdCBUZXh0Q29udGVudFByb3ZpZGVyOjpmaXhlZFBpdGNoV2lkdGgoU3Ry
aW5nIHRleHQsIGNvbnN0IFRleHRJdGVtOjpTdHlsZSYgc3R5bGUsIEl0ZW1Qb3NpdGlvbiBmcm9t
LCBJdGVtUG9zaXRpb24gdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3QKLXsKLSAgICBhdXRvIG1v
bm9zcGFjZUNoYXJhY3RlcldpZHRoID0gc3R5bGUuZm9udC5zcGFjZVdpZHRoKCk7Ci0gICAgZmxv
YXQgd2lkdGggPSAwOwotICAgIGZvciAoYXV0byBpID0gZnJvbTsgaSA8IHRvOyArK2kpIHsKLSAg
ICAgICAgYXV0byBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwotICAgICAgICBpZiAoY2hhcmFjdGVyID49
ICcgJyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJykKLSAgICAgICAgICAgIHdpZHRoICs9IG1vbm9zcGFj
ZUNoYXJhY3RlcldpZHRoOwotICAgICAgICBlbHNlIGlmIChjaGFyYWN0ZXIgPT0gJ1x0JykKLSAg
ICAgICAgICAgIHdpZHRoICs9IHN0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSA/IG1vbm9zcGFjZUNo
YXJhY3RlcldpZHRoIDogc3R5bGUuZm9udC50YWJXaWR0aChzdHlsZS50YWJXaWR0aCwgeFBvc2l0
aW9uICsgd2lkdGgpOwotCi0gICAgICAgIGlmIChpID4gZnJvbSAmJiAoY2hhcmFjdGVyID09ICcg
JyB8fCBjaGFyYWN0ZXIgPT0gJ1x0JyB8fCBjaGFyYWN0ZXIgPT0gJ1xuJykpCi0gICAgICAgICAg
ICB3aWR0aCArPSBzdHlsZS5mb250LndvcmRTcGFjaW5nKCk7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHdpZHRoOwotfQotCi1zdGQ6Om9wdGlvbmFsPENvbnRlbnRQb3NpdGlvbj4gVGV4dENvbnRlbnRQ
cm92aWRlcjo6aHlwaGVuUG9zaXRpb25CZWZvcmUoQ29udGVudFBvc2l0aW9uIGZyb20sIENvbnRl
bnRQb3NpdGlvbiB0bywgQ29udGVudFBvc2l0aW9uIGJlZm9yZSkgY29uc3QKLXsKLSAgICBhdXRv
IGNvbnRlbnRMZW5ndGggPSBsZW5ndGgoKTsKLSAgICBpZiAoYmVmb3JlID49IGNvbnRlbnRMZW5n
dGggfHwgYmVmb3JlIDwgZnJvbSB8fCBiZWZvcmUgPiB0bykgewotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICBhdXRvKiB0ZXh0
SXRlbSA9IG1fdGV4dENvbnRlbnRJdGVyYXRvci5jdXJyZW50KCk7Ci0gICAgaWYgKCF0ZXh0SXRl
bSB8fCAhY29udGFpbnMoYmVmb3JlLCAqdGV4dEl0ZW0pKQotICAgICAgICB0ZXh0SXRlbSA9IGZp
bmRUZXh0SXRlbVNsb3coYmVmb3JlKTsKLQotICAgIGF1dG8gZnJvbUl0ZW1Qb3NpdGlvbiA9IGZy
b20gLSB0ZXh0SXRlbS0+c3RhcnQ7Ci0gICAgYXV0byBzdHJpbmdGb3JIeXBoZW5Mb2NhdGlvbiA9
IFN0cmluZ1ZpZXcodGV4dEl0ZW0tPnRleHQpLnN1YnN0cmluZyhmcm9tSXRlbVBvc2l0aW9uLCB0
byAtIGZyb20pOwotCi0gICAgLy8gYWRqdXN0ZWRCZWZvcmUgLT4gQ29udGVudFBvc2l0aW9uIC0+
IEl0ZW1Qb3NpdGlvbiAtPiBydW4gcG9zaXRpb24uCi0gICAgYXV0byBhZGp1c3RlZEJlZm9yZSA9
IGJlZm9yZSAtIGZyb207Ci0gICAgYXV0byBoeXBoZW5Mb2NhdGlvbiA9IGxhc3RIeXBoZW5Mb2Nh
dGlvbihzdHJpbmdGb3JIeXBoZW5Mb2NhdGlvbiwgYWRqdXN0ZWRCZWZvcmUsIHRleHRJdGVtLT5z
dHlsZS5sb2NhbGUpOwotICAgIGlmICghaHlwaGVuTG9jYXRpb24pCi0gICAgICAgIHJldHVybiB7
IH07Ci0KLSAgICByZXR1cm4gZnJvbSArIGh5cGhlbkxvY2F0aW9uOwotfQotCi11bnNpZ25lZCBU
ZXh0Q29udGVudFByb3ZpZGVyOjpsZW5ndGgoKSBjb25zdAotewotICAgIGlmICghbV90ZXh0Q29u
dGVudC5zaXplKCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBtX3RleHRDb250ZW50
Lmxhc3QoKS5lbmQ7Ci19Ci0KLVRleHRDb250ZW50UHJvdmlkZXI6Okl0ZXJhdG9yIFRleHRDb250
ZW50UHJvdmlkZXI6Oml0ZXJhdG9yKCkKLXsKLSAgICAvLyBUT0RPOiBUaGlzIGlzIHdoZXJlIHdl
IGRlY2lkZSB3aGV0aGVyIHdlIG5lZWQgYSBzaW1wbGUgb3IgYSBtb3JlIGNvbXBsZXggcHJvdmlk
ZXIuCi0gICAgaWYgKCFtX3NpbXBsZVRleHRSdW5HZW5lcmF0b3IpCi0gICAgICAgIG1fc2ltcGxl
VGV4dFJ1bkdlbmVyYXRvciA9IHN0ZDo6bWFrZV91bmlxdWU8U2ltcGxlVGV4dFJ1bkdlbmVyYXRv
cj4oKnRoaXMpOwotICAgIGVsc2UKLSAgICAgICAgbV9zaW1wbGVUZXh0UnVuR2VuZXJhdG9yLT5y
ZXNldCgpOwotCi0gICAgbV9zaW1wbGVUZXh0UnVuR2VuZXJhdG9yLT5maW5kTmV4dFJ1bigpOwot
ICAgIHJldHVybiBJdGVyYXRvcigqdGhpcyk7Ci19Ci0KLVRleHRDb250ZW50UHJvdmlkZXI6OlRl
eHRSdW5MaXN0IFRleHRDb250ZW50UHJvdmlkZXI6OnRleHRSdW5zKCkKLXsKLSAgICBUZXh0UnVu
TGlzdCB0ZXh0UnVuTGlzdDsKLQotICAgIGF1dG8gdGV4dFJ1bkl0ZXJhdG9yID0gaXRlcmF0b3Io
KTsKLSAgICB3aGlsZSAoYXV0byB0ZXh0UnVtID0gdGV4dFJ1bkl0ZXJhdG9yLmN1cnJlbnQoKSkg
ewotICAgICAgICB0ZXh0UnVuTGlzdC5hcHBlbmQoKnRleHRSdW0pOwotICAgICAgICArK3RleHRS
dW5JdGVyYXRvcjsKLSAgICB9Ci0gICAgcmV0dXJuIHRleHRSdW5MaXN0OwotfQotCi12b2lkIFRl
eHRDb250ZW50UHJvdmlkZXI6OmZpbmROZXh0UnVuKCkKLXsKLSAgICBtX3NpbXBsZVRleHRSdW5H
ZW5lcmF0b3ItPmZpbmROZXh0UnVuKCk7Ci19Ci0KLXN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gVGV4
dENvbnRlbnRQcm92aWRlcjo6Y3VycmVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fc2ltcGxl
VGV4dFJ1bkdlbmVyYXRvci0+Y3VycmVudCgpOwotfQotCi19Ci19Ci0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvVGV4
dENvbnRlbnRQcm92aWRlci5oIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvdGV4dGxheW91dC9UZXh0Q29udGVudFByb3ZpZGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGExNmMzY2YyMTYzLi4wMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L1RleHRDb250ZW50UHJvdmlkZXIuaAor
KysgL2Rldi9udWxsCkBAIC0xLDEyNyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCi0gKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUwotICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UwotICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
Ci0gKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNl
Ci0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIlJ1
bnMuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRm9udENhc2NhZGU7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotbmFtZXNwYWNlIExh
eW91dCB7Ci0KLWNsYXNzIFNpbXBsZVRleHRSdW5HZW5lcmF0b3I7Ci0KLWNsYXNzIFRleHRDb250
ZW50UHJvdmlkZXIgewotICAgIFdURl9NQUtFX0lTT19BTExPQ0FURUQoVGV4dENvbnRlbnRQcm92
aWRlcik7Ci1wdWJsaWM6Ci0gICAgVGV4dENvbnRlbnRQcm92aWRlcigpOwotICAgIH5UZXh0Q29u
dGVudFByb3ZpZGVyKCk7Ci0KLSAgICB2b2lkIGFwcGVuZFRleHQoU3RyaW5nLCBjb25zdCBSZW5k
ZXJTdHlsZSYsIGJvb2wgY2FuVXNlU2ltcGxpZmllZE1lYXN1cmUpOwotICAgIHZvaWQgYXBwZW5k
TGluZUJyZWFrKCk7Ci0KLSAgICBzdHJ1Y3QgVGV4dEl0ZW0gewotICAgICAgICBzdHJ1Y3QgU3R5
bGUgewotICAgICAgICAgICAgZXhwbGljaXQgU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmKTsKLQot
ICAgICAgICAgICAgY29uc3QgRm9udENhc2NhZGUmIGZvbnQ7Ci0gICAgICAgICAgICBib29sIGNv
bGxhcHNlV2hpdGVzcGFjZSB7IGZhbHNlIH07Ci0gICAgICAgICAgICBib29sIGhhc0tlcm5pbmdP
ckxpZ2F0dXJlcyB7IGZhbHNlIH07Ci0gICAgICAgICAgICBmbG9hdCB3b3JkU3BhY2luZyB7IDAg
fTsKLSAgICAgICAgICAgIGZsb2F0IHRhYldpZHRoIHsgMCB9OwotICAgICAgICAgICAgYm9vbCBw
cmVzZXJ2ZU5ld2xpbmUgeyBmYWxzZSB9OwotICAgICAgICAgICAgYm9vbCBicmVha05CU1AgeyBm
YWxzZSB9OwotICAgICAgICAgICAgYm9vbCBrZWVwQWxsV29yZHNGb3JDSksgeyBmYWxzZSB9Owot
ICAgICAgICAgICAgQXRvbWljU3RyaW5nIGxvY2FsZTsKLSAgICAgICAgfTsKLQotICAgICAgICBj
b25zdCBTdHJpbmcgdGV4dDsKLSAgICAgICAgY29uc3QgQ29udGVudFBvc2l0aW9uIHN0YXJ0IHsg
MCB9OwotICAgICAgICBjb25zdCBDb250ZW50UG9zaXRpb24gZW5kIHsgMCB9OwotICAgICAgICBj
b25zdCBTdHlsZSBzdHlsZTsKLSAgICAgICAgY29uc3QgYm9vbCBjYW5Vc2VTaW1wbGlmaWVkTWVh
c3VyZSB7IGZhbHNlIH07Ci0gICAgfTsKLSAgICB1c2luZyBUZXh0Q29udGVudCA9IFZlY3RvcjxU
ZXh0SXRlbT47Ci0gICAgY29uc3QgVGV4dENvbnRlbnQmIHRleHRDb250ZW50KCkgY29uc3QgeyBy
ZXR1cm4gbV90ZXh0Q29udGVudDsgfQotCi0gICAgdXNpbmcgSGFyZExpbmVCcmVha3MgPSBWZWN0
b3I8Q29udGVudFBvc2l0aW9uPjsKLSAgICBjb25zdCBIYXJkTGluZUJyZWFrcyYgaGFyZExpbmVC
cmVha3MoKSBjb25zdCB7IHJldHVybiBtX2hhcmRMaW5lQnJlYWtzOyB9Ci0KLSAgICB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKLSAgICBmbG9hdCB3aWR0aChDb250ZW50UG9zaXRpb24gZnJvbSwg
Q29udGVudFBvc2l0aW9uIHRvLCBmbG9hdCB4UG9zaXRpb24pIGNvbnN0OwotICAgIHN0ZDo6b3B0
aW9uYWw8Q29udGVudFBvc2l0aW9uPiBoeXBoZW5Qb3NpdGlvbkJlZm9yZShDb250ZW50UG9zaXRp
b24gZnJvbSwgQ29udGVudFBvc2l0aW9uIHRvLCBDb250ZW50UG9zaXRpb24gYmVmb3JlKSBjb25z
dDsKLQotICAgIGNsYXNzIEl0ZXJhdG9yIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEl0ZXJhdG9y
JiBvcGVyYXRvcisrKCk7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gY3VycmVudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFByb3ZpZGVyLmN1cnJlbnQoKTsgfTsKLQotICAgIHBy
aXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBUZXh0Q29udGVudFByb3ZpZGVyOwotICAgICAg
ICBJdGVyYXRvcihUZXh0Q29udGVudFByb3ZpZGVyJik7Ci0KLSAgICAgICAgVGV4dENvbnRlbnRQ
cm92aWRlciYgbV9jb250ZW50UHJvdmlkZXI7Ci0gICAgfTsKLSAgICBJdGVyYXRvciBpdGVyYXRv
cigpOwotCi0gICAgdXNpbmcgVGV4dFJ1bkxpc3QgPSBWZWN0b3I8VGV4dFJ1bj47Ci0gICAgVGV4
dFJ1bkxpc3QgdGV4dFJ1bnMoKTsKLQotcHJpdmF0ZToKLSAgICBmcmllbmQgY2xhc3MgSXRlcmF0
b3I7Ci0KLSAgICBjb25zdCBUZXh0SXRlbSogZmluZFRleHRJdGVtU2xvdyhDb250ZW50UG9zaXRp
b24pIGNvbnN0OwotICAgIGZsb2F0IHRleHRXaWR0aChjb25zdCBUZXh0SXRlbSYsIEl0ZW1Qb3Np
dGlvbiBmcm9tLCBJdGVtUG9zaXRpb24gdG8sIGZsb2F0IHhQb3NpdGlvbikgY29uc3Q7Ci0gICAg
ZmxvYXQgZml4ZWRQaXRjaFdpZHRoKFN0cmluZywgY29uc3QgVGV4dEl0ZW06OlN0eWxlJiwgSXRl
bVBvc2l0aW9uIGZyb20sIEl0ZW1Qb3NpdGlvbiB0bywgZmxvYXQgeFBvc2l0aW9uKSBjb25zdDsK
LQotICAgIHZvaWQgZmluZE5leHRSdW4oKTsKLSAgICBzdGQ6Om9wdGlvbmFsPFRleHRSdW4+IGN1
cnJlbnQoKSBjb25zdDsKLQotICAgIFRleHRDb250ZW50IG1fdGV4dENvbnRlbnQ7Ci0gICAgbXV0
YWJsZSBDb25zdFZlY3Rvckl0ZXJhdG9yPFRleHRJdGVtPiBtX3RleHRDb250ZW50SXRlcmF0b3I7
Ci0gICAgSGFyZExpbmVCcmVha3MgbV9oYXJkTGluZUJyZWFrczsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2ltcGxlVGV4dFJ1bkdlbmVyYXRvcj4gbV9zaW1wbGVUZXh0UnVuR2VuZXJhdG9yOwotfTsK
LQotaW5saW5lIFRleHRDb250ZW50UHJvdmlkZXI6Okl0ZXJhdG9yOjpJdGVyYXRvcihUZXh0Q29u
dGVudFByb3ZpZGVyJiBjb250ZW50UHJvdmlkZXIpCi0gICAgOiBtX2NvbnRlbnRQcm92aWRlcihj
b250ZW50UHJvdmlkZXIpCi17Ci19Ci0KLWlubGluZSBUZXh0Q29udGVudFByb3ZpZGVyOjpJdGVy
YXRvciYgVGV4dENvbnRlbnRQcm92aWRlcjo6SXRlcmF0b3I6Om9wZXJhdG9yKysoKQotewotICAg
IG1fY29udGVudFByb3ZpZGVyLmZpbmROZXh0UnVuKCk7Ci0gICAgcmV0dXJuICp0aGlzOwotfQot
Ci19Ci19Ci0jZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL3RleHRsYXlvdXQvc2ltcGxlL1NpbXBsZUxpbmVCcmVha2VyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvc2ltcGxlL1NpbXBs
ZUxpbmVCcmVha2VyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTJhNzRlNzc0
MDYuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL3RleHRsYXlvdXQvc2ltcGxlL1NpbXBsZUxpbmVCcmVha2VyLmNwcAorKysgL2Rldi9udWxs
CkBAIC0xLDY3NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gKiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICogQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgotICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKLSAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwotICogSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KLSAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCi0gKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCi0gKiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIlNpbXBsZUxpbmVCcmVha2VyLmgiCi0KLSNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJ
TkdfQ09OVEVYVCkKLQotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiSHlwaGVu
YXRpb24uaCIKLSNpbmNsdWRlICJJbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5oIgotI2luY2x1ZGUg
IkxheW91dENvbnRleHQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlRl
eHRDb250ZW50UHJvdmlkZXIuaCIKLSNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci1uYW1lc3BhY2UgTGF5b3V0IHsKLQotV1RGX01BS0VfSVNP
X0FMTE9DQVRFRF9JTVBMKFNpbXBsZUxpbmVCcmVha2VyKTsKLQotc3RydWN0IFRleHRSdW5TcGxp
dFBhaXIgewotICAgIFRleHRSdW4gbGVmdDsKLSAgICBUZXh0UnVuIHJpZ2h0OwotfTsKLQotU2lt
cGxlTGluZUJyZWFrZXI6OlRleHRSdW5MaXN0OjpUZXh0UnVuTGlzdChjb25zdCBWZWN0b3I8VGV4
dFJ1bj4mIHRleHRSdW5zKQotICAgIDogbV90ZXh0UnVucyh0ZXh0UnVucykKLXsKLX0KLQotU2lt
cGxlTGluZUJyZWFrZXI6OkxpbmU6OkxpbmUoVmVjdG9yPExheW91dFJ1bj4mIGxheW91dFJ1bnMp
Ci0gICAgOiBtX2xheW91dFJ1bnMobGF5b3V0UnVucykKLSAgICAsIG1fZmlyc3RSdW5JbmRleCht
X2xheW91dFJ1bnMuc2l6ZSgpKQotewotfQotCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGFkanVz
dGVkRW5kUG9zaXRpb24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1bikKLXsKLSAgICBpZiAodGV4dFJ1
bi5pc0NvbGxhcHNlZCgpKQotICAgICAgICByZXR1cm4gdGV4dFJ1bi5zdGFydCgpICsgMTsKLSAg
ICByZXR1cm4gdGV4dFJ1bi5lbmQoKTsKLX0KLQotdm9pZCBTaW1wbGVMaW5lQnJlYWtlcjo6TGlu
ZTo6c2V0VGV4dEFsaWduKFRleHRBbGlnbk1vZGUgdGV4dEFsaWduKQotewotICAgIG1fc3R5bGUu
dGV4dEFsaWduID0gdGV4dEFsaWduOwotICAgIG1fY29sbGVjdEV4cGFuc2lvbk9wcG9ydHVuaXRp
ZXMgPSB0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeTsKLX0KLQotZmxvYXQgU2lt
cGxlTGluZUJyZWFrZXI6OkxpbmU6OmFkanVzdGVkTGVmdEZvclRleHRBbGlnbihUZXh0QWxpZ25N
b2RlIHRleHRBbGlnbikgY29uc3QKLXsKLSAgICBmbG9hdCByZW1haW5pbmdXaWR0aCA9IGF2YWls
YWJsZVdpZHRoKCk7Ci0gICAgZmxvYXQgbGVmdCA9IG1fbGVmdDsKLSAgICBzd2l0Y2ggKHRleHRB
bGlnbikgewotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6TGVmdDoKLSAgICBjYXNlIFRleHRBbGln
bk1vZGU6OldlYktpdExlZnQ6Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpTdGFydDoKLSAgICAg
ICAgcmV0dXJuIGxlZnQ7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpSaWdodDoKLSAgICBjYXNl
IFRleHRBbGlnbk1vZGU6OldlYktpdFJpZ2h0OgotICAgIGNhc2UgVGV4dEFsaWduTW9kZTo6RW5k
OgotICAgICAgICByZXR1cm4gbGVmdCArIHN0ZDo6bWF4PGZsb2F0PihyZW1haW5pbmdXaWR0aCwg
MCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpDZW50ZXI6Ci0gICAgY2FzZSBUZXh0QWxpZ25N
b2RlOjpXZWJLaXRDZW50ZXI6Ci0gICAgICAgIHJldHVybiBsZWZ0ICsgc3RkOjptYXg8ZmxvYXQ+
KHJlbWFpbmluZ1dpZHRoIC8gMiwgMCk7Ci0gICAgY2FzZSBUZXh0QWxpZ25Nb2RlOjpKdXN0aWZ5
OgotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBsZWZ0OwotfQotCi12b2lkIFNp
bXBsZUxpbmVCcmVha2VyOjpMaW5lOjpqdXN0aWZ5UnVucygpCi17Ci0gICAgYXV0byB3aWR0aFRv
RGlzdHJpYnV0ZSA9IGF2YWlsYWJsZVdpZHRoKCk7Ci0gICAgaWYgKHdpZHRoVG9EaXN0cmlidXRl
IDw9IDApCi0gICAgICAgIHJldHVybjsKLQotICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVu
aXRpZXMgPSAwOwotICAgIGZvciAoYXV0byYgZXhwYW5zaW9uRW50cnkgOiBtX2V4cGFuc2lvbk9w
cG9ydHVuaXR5TGlzdCkKLSAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdGllcyArPSBleHBhbnNp
b25FbnRyeS5jb3VudDsKLQotICAgIGlmICghZXhwYW5zaW9uT3Bwb3J0dW5pdGllcykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgYXV0byBleHBhbnNpb24gPSB3aWR0aFRvRGlzdHJpYnV0ZSAvIGV4
cGFuc2lvbk9wcG9ydHVuaXRpZXM7Ci0gICAgZmxvYXQgYWNjdW11bGF0ZWRFeHBhbnNpb24gPSAw
OwotICAgIHVuc2lnbmVkIHJ1bkluZGV4ID0gbV9maXJzdFJ1bkluZGV4OwotICAgIGZvciAoYXV0
byYgZXhwYW5zaW9uRW50cnkgOiBtX2V4cGFuc2lvbk9wcG9ydHVuaXR5TGlzdCkgewotICAgICAg
ICBpZiAocnVuSW5kZXggPj0gbV9sYXlvdXRSdW5zLnNpemUoKSkgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAg
ICAgYXV0byYgbGF5b3V0UnVuID0gbV9sYXlvdXRSdW5zLmF0KHJ1bkluZGV4KyspOwotICAgICAg
ICBhdXRvIGV4cGFuc2lvbkZvclJ1biA9IGV4cGFuc2lvbkVudHJ5LmNvdW50ICogZXhwYW5zaW9u
OwotCi0gICAgICAgIGxheW91dFJ1bi5zZXRFeHBhbnNpb24oZXhwYW5zaW9uRW50cnkuYmVoYXZp
b3IsIGV4cGFuc2lvbkZvclJ1bik7Ci0gICAgICAgIGxheW91dFJ1bi5zZXRMZWZ0KGxheW91dFJ1
bi5sZWZ0KCkgKyBhY2N1bXVsYXRlZEV4cGFuc2lvbik7Ci0gICAgICAgIGxheW91dFJ1bi5zZXRS
aWdodChsYXlvdXRSdW4ucmlnaHQoKSArIGFjY3VtdWxhdGVkRXhwYW5zaW9uICsgZXhwYW5zaW9u
Rm9yUnVuKTsKLSAgICAgICAgYWNjdW11bGF0ZWRFeHBhbnNpb24gKz0gZXhwYW5zaW9uRm9yUnVu
OwotICAgIH0KLX0KLQotdm9pZCBTaW1wbGVMaW5lQnJlYWtlcjo6TGluZTo6YWRqdXN0UnVuc0Zv
clRleHRBbGlnbihib29sIGxhc3RMaW5lKQotewotICAgIC8vIEZhbGxiYWNrIHRvIFRleHRBbGln
bk1vZGU6OkxlZnQgKFNUQVJUKSBhbGlnbm1lbnQgZm9yIG5vbi1jb2xsYXBzYWJsZSBjb250ZW50
IG9yIGZvciB0aGUgbGFzdCBsaW5lIGJlZm9yZSBhIGZvcmNlZCBicmVhay90aGUgZW5kIG9mIHRo
ZSBibG9jay4KLSAgICBhdXRvIHRleHRBbGlnbiA9IG1fc3R5bGUudGV4dEFsaWduOwotICAgIGlm
ICh0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlmeSAmJiAoIW1fc3R5bGUuY29sbGFw
c2VXaGl0ZXNwYWNlIHx8IGxhc3RMaW5lKSkKLSAgICAgICAgdGV4dEFsaWduID0gVGV4dEFsaWdu
TW9kZTo6TGVmdDsKLQotICAgIGlmICh0ZXh0QWxpZ24gPT0gVGV4dEFsaWduTW9kZTo6SnVzdGlm
eSkgewotICAgICAgICBqdXN0aWZ5UnVucygpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgYXV0byBhZGp1c3RlZExlZnQgPSBhZGp1c3RlZExlZnRGb3JUZXh0QWxpZ24odGV4dEFsaWdu
KTsKLSAgICBpZiAoYWRqdXN0ZWRMZWZ0ID09IG1fbGVmdCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgZm9yIChhdXRvIGkgPSBtX2ZpcnN0UnVuSW5kZXg7IGkgPCBtX2xheW91dFJ1bnMuc2l6ZSgp
OyArK2kpIHsKLSAgICAgICAgYXV0byYgbGF5b3V0UnVuID0gbV9sYXlvdXRSdW5zLmF0KGkpOwot
ICAgICAgICBsYXlvdXRSdW4uc2V0TGVmdChsYXlvdXRSdW4ubGVmdCgpICsgYWRqdXN0ZWRMZWZ0
KTsKLSAgICAgICAgbGF5b3V0UnVuLnNldFJpZ2h0KGxheW91dFJ1bi5yaWdodCgpICsgYWRqdXN0
ZWRMZWZ0KTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGV4cGFuc2lvbk9wcG9ydHVuaXR5KFRl
eHRSdW46OlR5cGUgY3VycmVudCwgVGV4dFJ1bjo6VHlwZSBwcmV2aW91cykKLXsKLSAgICByZXR1
cm4gY3VycmVudCA9PSBUZXh0UnVuOjpUeXBlOjpXaGl0ZXNwYWNlIHx8IChjdXJyZW50ID09IFRl
eHRSdW46OlR5cGU6Ok5vbldoaXRlc3BhY2UgJiYgcHJldmlvdXMgPT0gVGV4dFJ1bjo6VHlwZTo6
Tm9uV2hpdGVzcGFjZSk7Ci19Ci0KLXN0YXRpYyBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvcihib29sIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSkKLXsKLSAgICBFeHBhbnNpb25C
ZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAg
ZXhwYW5zaW9uQmVoYXZpb3IgfD0gaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5ID8gRm9yYmlkTGVh
ZGluZ0V4cGFuc2lvbiA6IEFsbG93TGVhZGluZ0V4cGFuc2lvbjsKLSAgICByZXR1cm4gZXhwYW5z
aW9uQmVoYXZpb3I7Ci19Ci0KLXZvaWQgU2ltcGxlTGluZUJyZWFrZXI6OkxpbmU6OmNvbGxlY3RF
eHBhbnNpb25PcHBvcnR1bml0aWVzKGNvbnN0IFRleHRSdW4mIHRleHRSdW4sIGJvb2wgdGV4dFJ1
bkNyZWF0ZXNOZXdMYXlvdXRSdW4pCi17Ci0gICAgaWYgKHRleHRSdW5DcmVhdGVzTmV3TGF5b3V0
UnVuKSB7Ci0gICAgICAgIC8vIENyZWF0ZSBhbiBlbnRyeSBmb3IgdGhpcyBuZXcgbGF5b3V0IHJ1
bi4KLSAgICAgICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUxpc3QuYXBwZW5kKHsgfSk7Ci0gICAg
fQotCi0gICAgaWYgKCF0ZXh0UnVuLmxlbmd0aCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBh
dXRvIGlzQXRFeHBhbnNpb25PcHBvcnR1bml0eSA9IGV4cGFuc2lvbk9wcG9ydHVuaXR5KHRleHRS
dW4udHlwZSgpLCBtX2xhc3RUZXh0UnVuID8gbV9sYXN0VGV4dFJ1bi0+dHlwZSgpIDogVGV4dFJ1
bjo6VHlwZTo6SW52YWxpZCk7Ci0gICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUxpc3QubGFzdCgp
LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3IoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5KTsK
LSAgICBpZiAoaXNBdEV4cGFuc2lvbk9wcG9ydHVuaXR5KQotICAgICAgICArK21fZXhwYW5zaW9u
T3Bwb3J0dW5pdHlMaXN0Lmxhc3QoKS5jb3VudDsKLQotICAgIGlmICh0ZXh0UnVuLmlzTm9uV2hp
dGVzcGFjZSgpKQotICAgICAgICBtX2xhc3ROb25XaGl0ZXNwYWNlRXhwYW5zaW9uT3BwcG9ydHVu
aXR5ID0gbV9leHBhbnNpb25PcHBvcnR1bml0eUxpc3QubGFzdCgpOwotfQotCi12b2lkIFNpbXBs
ZUxpbmVCcmVha2VyOjpMaW5lOjpjbG9zZUxhc3RSdW4oKQotewotICAgIGlmICghbV9sYXlvdXRS
dW5zLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9sYXlvdXRSdW5zLmxhc3QoKS5z
ZXRJc0VuZE9mTGluZSgpOwotCi0gICAgLy8gRm9yYmlkIHRyYWlsaW5nIGV4cGFuc2lvbiBmb3Ig
dGhlIGxhc3QgcnVuIG9uIGxpbmUuCi0gICAgaWYgKCFtX2NvbGxlY3RFeHBhbnNpb25PcHBvcnR1
bml0aWVzIHx8IG1fZXhwYW5zaW9uT3Bwb3J0dW5pdHlMaXN0LmlzRW1wdHkoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgYXV0byYgbGFzdEV4cGFuc2lvbkVudHJ5ID0gbV9leHBhbnNpb25PcHBv
cnR1bml0eUxpc3QubGFzdCgpOwotICAgIGF1dG8gZXhwYW5zaW9uQmVoYXZpb3IgPSBsYXN0RXhw
YW5zaW9uRW50cnkuYmVoYXZpb3I7Ci0gICAgLy8gUmVtb3ZlIGFsbG93IGFuZCBhZGQgZm9yYmlk
LgotICAgIGV4cGFuc2lvbkJlaGF2aW9yIF49IEFsbG93VHJhaWxpbmdFeHBhbnNpb247Ci0gICAg
ZXhwYW5zaW9uQmVoYXZpb3IgfD0gRm9yYmlkVHJhaWxpbmdFeHBhbnNpb247Ci0gICAgbGFzdEV4
cGFuc2lvbkVudHJ5LmJlaGF2aW9yID0gZXhwYW5zaW9uQmVoYXZpb3I7Ci19Ci0KLXZvaWQgU2lt
cGxlTGluZUJyZWFrZXI6OkxpbmU6OmFwcGVuZChjb25zdCBUZXh0UnVuJiB0ZXh0UnVuKQotewot
ICAgIGF1dG8gc3RhcnQgPSB0ZXh0UnVuLnN0YXJ0KCk7Ci0gICAgYXV0byBlbmQgPSBhZGp1c3Rl
ZEVuZFBvc2l0aW9uKHRleHRSdW4pOwotICAgIGF1dG8gcHJldmlvdXNMb2dpY2FsUmlnaHQgPSBt
X2xlZnQgKyBtX3J1bnNXaWR0aDsKLSAgICBib29sIHRleHRSdW5DcmVhdGVzTmV3TGF5b3V0UnVu
ID0gIW1fbGFzdFRleHRSdW4gfHwgbV9sYXN0VGV4dFJ1bi0+aXNDb2xsYXBzZWQoKTsKLQotICAg
IG1fcnVuc1dpZHRoICs9IHRleHRSdW4ud2lkdGgoKTsKLSAgICBpZiAodGV4dFJ1bi5pc05vbldo
aXRlc3BhY2UoKSkgewotICAgICAgICBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoID0gMDsKLSAg
ICAgICAgbV9sYXN0Tm9uV2hpdGVzcGFjZVRleHRSdW4gPSB0ZXh0UnVuOwotICAgIH0gZWxzZSBp
ZiAodGV4dFJ1bi5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VX
aWR0aCArPSB0ZXh0UnVuLndpZHRoKCk7Ci0KLSAgICBpZiAobV9jb2xsZWN0RXhwYW5zaW9uT3Bw
b3J0dW5pdGllcykKLSAgICAgICAgY29sbGVjdEV4cGFuc2lvbk9wcG9ydHVuaXRpZXModGV4dFJ1
biwgdGV4dFJ1bkNyZWF0ZXNOZXdMYXlvdXRSdW4pOwotCi0gICAgLy8gTmV3IGxpbmUgbmVlZHMg
bmV3IHJ1bi4KLSAgICBpZiAodGV4dFJ1bkNyZWF0ZXNOZXdMYXlvdXRSdW4pCi0gICAgICAgIG1f
bGF5b3V0UnVucy5hcHBlbmQoeyBzdGFydCwgZW5kLCBwcmV2aW91c0xvZ2ljYWxSaWdodCwgcHJl
dmlvdXNMb2dpY2FsUmlnaHQgKyB0ZXh0UnVuLndpZHRoKCksIHRleHRSdW4uaGFzSHlwaGVuKCkg
fSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGF1dG8mIGxhc3RSdW4gPSBtX2xheW91dFJ1bnMubGFz
dCgpOwotICAgICAgICBsYXN0UnVuLnNldEVuZChlbmQpOwotICAgICAgICBsYXN0UnVuLnNldFJp
Z2h0KGxhc3RSdW4ucmlnaHQoKSArIHRleHRSdW4ud2lkdGgoKSk7Ci0gICAgICAgIGlmICh0ZXh0
UnVuLmhhc0h5cGhlbigpKQotICAgICAgICAgICAgbGFzdFJ1bi5zZXRIYXNIeXBoZW4oKTsKLSAg
ICB9Ci0KLSAgICBtX2xhc3RUZXh0UnVuID0gdGV4dFJ1bjsKLX0KLQotdm9pZCBTaW1wbGVMaW5l
QnJlYWtlcjo6TGluZTo6Y29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKQotewotICAgIGlmICgh
bV9sYXN0VGV4dFJ1biB8fCAhbV9sYXN0VGV4dFJ1bi0+aXNXaGl0ZXNwYWNlKCkpCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9sYXN0Tm9uV2hpdGVzcGFjZVRleHRSdW4pIHsKLSAgICAg
ICAgLy8gVGhpcyBlc3NlbnRpYWxseSBiZWNvbWVzIGFuIGVtcHR5IGxpbmUuCi0gICAgICAgIHJl
c2V0KCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3J1bnNXaWR0aCAtPSBtX3Ry
YWlsaW5nV2hpdGVzcGFjZVdpZHRoOwotICAgIG1fbGFzdFRleHRSdW4gPSBtX2xhc3ROb25XaGl0
ZXNwYWNlVGV4dFJ1bjsKLQotICAgIHdoaWxlIChtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoKSB7
Ci0gICAgICAgIGF1dG8mIGxhc3RMYXlvdXRSdW4gPSBtX2xheW91dFJ1bnMubGFzdCgpOwotCi0g
ICAgICAgIGlmIChsYXN0TGF5b3V0UnVuLmVuZCgpIDw9IG1fbGFzdE5vbldoaXRlc3BhY2VUZXh0
UnVuLT5lbmQoKSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8vIEZ1bGwgcmVtb3Zl
LgotICAgICAgICBpZiAobGFzdExheW91dFJ1bi5zdGFydCgpID49IG1fbGFzdE5vbldoaXRlc3Bh
Y2VUZXh0UnVuLT5lbmQoKSkgewotICAgICAgICAgICAgbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0
aCAtPSBsYXN0TGF5b3V0UnVuLndpZHRoKCk7Ci0gICAgICAgICAgICBtX2xheW91dFJ1bnMucmVt
b3ZlTGFzdCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgLy8g
UGFydGlhbCByZW1vdmUuCi0gICAgICAgIGxhc3RMYXlvdXRSdW4uc2V0UmlnaHQobGFzdExheW91
dFJ1bi5yaWdodCgpIC0gbV90cmFpbGluZ1doaXRlc3BhY2VXaWR0aCk7Ci0gICAgICAgIGxhc3RM
YXlvdXRSdW4uc2V0RW5kKG1fbGFzdE5vbldoaXRlc3BhY2VUZXh0UnVuLT5lbmQoKSk7Ci0gICAg
ICAgIG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggPSAwOwotICAgIH0KLQotICAgIGlmIChtX2Nv
bGxlY3RFeHBhbnNpb25PcHBvcnR1bml0aWVzKSB7Ci0gICAgICAgIEFTU0VSVChtX2xhc3ROb25X
aGl0ZXNwYWNlRXhwYW5zaW9uT3BwcG9ydHVuaXR5KTsKLSAgICAgICAgQVNTRVJUKCFtX2V4cGFu
c2lvbk9wcG9ydHVuaXR5TGlzdC5pc0VtcHR5KCkpOwotICAgICAgICBtX2V4cGFuc2lvbk9wcG9y
dHVuaXR5TGlzdC5sYXN0KCkgPSAqbV9sYXN0Tm9uV2hpdGVzcGFjZUV4cGFuc2lvbk9wcHBvcnR1
bml0eTsKLSAgICB9Ci19Ci0KLXZvaWQgU2ltcGxlTGluZUJyZWFrZXI6OkxpbmU6OnJlc2V0KCkK
LXsKLSAgICBtX3J1bnNXaWR0aCA9IDA7Ci0gICAgbV9maXJzdFJ1bkluZGV4ID0gbV9sYXlvdXRS
dW5zLnNpemUoKTsKLSAgICBtX2F2YWlsYWJsZVdpZHRoID0gMDsKLSAgICBtX3RyYWlsaW5nV2hp
dGVzcGFjZVdpZHRoICA9IDA7Ci0gICAgbV9leHBhbnNpb25PcHBvcnR1bml0eUxpc3QuY2xlYXIo
KTsKLSAgICBtX2xhc3ROb25XaGl0ZXNwYWNlRXhwYW5zaW9uT3BwcG9ydHVuaXR5ID0geyB9Owot
ICAgIG1fbGFzdFRleHRSdW4gPSBzdGQ6Om51bGxvcHQ7Ci0gICAgbV9sYXN0Tm9uV2hpdGVzcGFj
ZVRleHRSdW4gPSBzdGQ6Om51bGxvcHQ7Ci19Ci0KLS8vIEZJWE1FOiBVc2UgdmFyaWFibGUgc3R5
bGUgYmFzZWQgb24gdGhlIGN1cnJlbnQgdGV4dCBydW4uCi1TaW1wbGVMaW5lQnJlYWtlcjo6U3R5
bGU6OlN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkKLSAgICA6IGZvbnQoc3R5bGUuZm9u
dENhc2NhZGUoKSkKLSAgICAsIHdyYXBMaW5lcyhzdHlsZS5hdXRvV3JhcCgpKQotICAgICwgYnJl
YWtBbnlXb3JkT25PdmVyZmxvdyhzdHlsZS53b3JkQnJlYWsoKSA9PSBXb3JkQnJlYWs6OkJyZWFr
QWxsICYmIHdyYXBMaW5lcykKLSAgICAsIGJyZWFrRmlyc3RXb3JkT25PdmVyZmxvdyhicmVha0Fu
eVdvcmRPbk92ZXJmbG93IHx8IChzdHlsZS5icmVha1dvcmRzKCkgJiYgKHdyYXBMaW5lcyB8fCBz
dHlsZS5wcmVzZXJ2ZU5ld2xpbmUoKSkpKQotICAgICwgY29sbGFwc2VXaGl0ZXNwYWNlKHN0eWxl
LmNvbGxhcHNlV2hpdGVTcGFjZSgpKQotICAgICwgcHJlV3JhcCh3cmFwTGluZXMgJiYgIWNvbGxh
cHNlV2hpdGVzcGFjZSkKLSAgICAsIHByZXNlcnZlTmV3bGluZShzdHlsZS5wcmVzZXJ2ZU5ld2xp
bmUoKSkKLSAgICAsIHRleHRBbGlnbihzdHlsZS50ZXh0QWxpZ24oKSkKLSAgICAsIHNob3VsZEh5
cGhlbmF0ZShzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuczo6QXV0byAmJiBjYW5IeXBoZW5hdGUo
c3R5bGUubG9jYWxlKCkpKQotICAgICwgaHlwaGVuU3RyaW5nV2lkdGgoc2hvdWxkSHlwaGVuYXRl
ID8gZm9udC53aWR0aChXZWJDb3JlOjpUZXh0UnVuKFN0cmluZyhzdHlsZS5oeXBoZW5TdHJpbmco
KSkpKSA6IDApCi0gICAgLCBoeXBoZW5MaW1pdEJlZm9yZShzdHlsZS5oeXBoZW5hdGlvbkxpbWl0
QmVmb3JlKCkgPCAwID8gMiA6IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRCZWZvcmUoKSkKLSAgICAs
IGh5cGhlbkxpbWl0QWZ0ZXIoc3R5bGUuaHlwaGVuYXRpb25MaW1pdEFmdGVyKCkgPCAwID8gMiA6
IHN0eWxlLmh5cGhlbmF0aW9uTGltaXRBZnRlcigpKQotICAgICwgbG9jYWxlKHN0eWxlLmxvY2Fs
ZSgpKQotewotICAgIGlmIChzdHlsZS5oeXBoZW5hdGlvbkxpbWl0TGluZXMoKSA+IC0xKQotICAg
ICAgICBoeXBoZW5MaW1pdExpbmVzID0gc3R5bGUuaHlwaGVuYXRpb25MaW1pdExpbmVzKCk7Ci19
Ci0KLVNpbXBsZUxpbmVCcmVha2VyOjpTaW1wbGVMaW5lQnJlYWtlcihjb25zdCBWZWN0b3I8VGV4
dFJ1bj4mIHRleHRSdW5zLCBjb25zdCBUZXh0Q29udGVudFByb3ZpZGVyJiBjb250ZW50UHJvdmlk
ZXIsIExpbmVDb25zdHJhaW50TGlzdCYmIGxpbmVDb25zdHJhaW50TGlzdCwgY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKQotICAgIDogbV9jb250ZW50UHJvdmlkZXIoY29udGVudFByb3ZpZGVyKQot
ICAgICwgbV9zdHlsZShzdHlsZSkKLSAgICAsIG1fdGV4dFJ1bkxpc3QodGV4dFJ1bnMpCi0gICAg
LCBtX2N1cnJlbnRMaW5lKG1fbGF5b3V0UnVucykKLSAgICAsIG1fbGluZUNvbnN0cmFpbnRMaXN0
KFdURk1vdmUobGluZUNvbnN0cmFpbnRMaXN0KSkKLSAgICAsIG1fbGluZUNvbnN0cmFpbnRJdGVy
YXRvcihtX2xpbmVDb25zdHJhaW50TGlzdCkKLXsKLSAgICBBU1NFUlQobV9saW5lQ29uc3RyYWlu
dExpc3Quc2l6ZSgpKTsKLSAgICAvLyBTaW5jZSB0aGUgaGVpZ2h0IG9mIHRoZSBjb250ZW50IGlz
IHVuZGVmaW5lZCwgdGhlIGxhc3QgdmVydGljYWwgcG9zaXRpb24gaW4gdGhlIGNvbnN0cmFpbnQg
bGlzdCBzaG91bGQgYWx3YXlzIGJlIGluZmluaXRlLgotICAgIEFTU0VSVCghbV9saW5lQ29uc3Ry
YWludExpc3QubGFzdCgpLnZlcnRpY2FsUG9zaXRpb24pOwotfQotCi1WZWN0b3I8TGF5b3V0UnVu
PiBTaW1wbGVMaW5lQnJlYWtlcjo6cnVucygpCi17Ci0gICAgd2hpbGUgKG1fdGV4dFJ1bkxpc3Qu
Y3VycmVudCgpKSB7Ci0gICAgICAgIGhhbmRsZUxpbmVTdGFydCgpOwotICAgICAgICBjcmVhdGVS
dW5zRm9yTGluZSgpOwotICAgICAgICBoYW5kbGVMaW5lRW5kKCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIG1fbGF5b3V0UnVuczsKLX0KLQotdm9pZCBTaW1wbGVMaW5lQnJlYWtlcjo6aGFuZGxlTGlu
ZUVuZCgpCi17Ci0gICAgYXV0byBsaW5lSGFzQ29udGVudCA9IG1fY3VycmVudExpbmUuaGFzQ29u
dGVudCgpOwotICAgIGlmIChsaW5lSGFzQ29udGVudCkgewotICAgICAgICBBU1NFUlQobV9sYXlv
dXRSdW5zLnNpemUoKSk7Ci0gICAgICAgICsrbV9udW1iZXJPZkxpbmVzOwotICAgICAgICBtX2N1
cnJlbnRMaW5lLmNsb3NlTGFzdFJ1bigpOwotCi0gICAgICAgIGF1dG8gbGFzdExpbmUgPSAhbV90
ZXh0UnVuTGlzdC5jdXJyZW50KCk7Ci0gICAgICAgIG1fY3VycmVudExpbmUuYWRqdXN0UnVuc0Zv
clRleHRBbGlnbihsYXN0TGluZSk7Ci0gICAgfQotICAgIC8vIENoZWNrIGlmIHdlIG5lZWQgdG8g
ZGlzYWJsZSBoeXBoZW5hdGlvbi4KLSAgICBpZiAobV9zdHlsZS5oeXBoZW5MaW1pdExpbmVzKSB7
Ci0gICAgICAgIGlmICghbGluZUhhc0NvbnRlbnQgfHwgKG1fbGF5b3V0UnVucy5zaXplKCkgJiYg
IW1fbGF5b3V0UnVucy5sYXN0KCkuaGFzSHlwaGVuKCkpKQotICAgICAgICAgICAgbV9udW1iZXJP
ZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbiA9IDA7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAg
ICsrbV9udW1iZXJPZlByZWNlZGluZ0xpbmVzV2l0aEh5cGhlbjsKLSAgICAgICAgbV9oeXBoZW5h
dGlvbklzRGlzYWJsZWQgPSBtX251bWJlck9mUHJlY2VkaW5nTGluZXNXaXRoSHlwaGVuID49ICpt
X3N0eWxlLmh5cGhlbkxpbWl0TGluZXM7Ci0gICAgfQotCi0gICAgbV9wcmV2aW91c0xpbmVIYXNO
b25Gb3JjZWRDb250ZW50ID0gbGluZUhhc0NvbnRlbnQgJiYgbV9jdXJyZW50TGluZS5hdmFpbGFi
bGVXaWR0aCgpID49IDA7Ci0gICAgbV9jdXJyZW50TGluZS5yZXNldCgpOwotfQotCi12b2lkIFNp
bXBsZUxpbmVCcmVha2VyOjpoYW5kbGVMaW5lU3RhcnQoKQotewotICAgIGF1dG8gbGluZUNvbnN0
cmFpbnQgPSB0aGlzLT5saW5lQ29uc3RyYWludCh2ZXJ0aWNhbFBvc2l0aW9uKCkpOwotICAgIG1f
Y3VycmVudExpbmUuc2V0TGVmdChsaW5lQ29uc3RyYWludC5sZWZ0KTsKLSAgICBtX2N1cnJlbnRM
aW5lLnNldFRleHRBbGlnbihtX3N0eWxlLnRleHRBbGlnbik7Ci0gICAgbV9jdXJyZW50TGluZS5z
ZXRDb2xsYXBzZVdoaXRlc3BhY2UobV9zdHlsZS5jb2xsYXBzZVdoaXRlc3BhY2UpOwotICAgIG1f
Y3VycmVudExpbmUuc2V0QXZhaWxhYmxlV2lkdGgobGluZUNvbnN0cmFpbnQucmlnaHQgLSBsaW5l
Q29uc3RyYWludC5sZWZ0KTsKLX0KLQotc3RhdGljIGJvb2wgaXNUZXh0QWxpZ25SaWdodChUZXh0
QWxpZ25Nb2RlIHRleHRBbGlnbikKLXsKLSAgICByZXR1cm4gdGV4dEFsaWduID09IFRleHRBbGln
bk1vZGU6OlJpZ2h0IHx8IHRleHRBbGlnbiA9PSBUZXh0QWxpZ25Nb2RlOjpXZWJLaXRSaWdodDsK
LX0KLQotdm9pZCBTaW1wbGVMaW5lQnJlYWtlcjo6Y3JlYXRlUnVuc0ZvckxpbmUoKQotewotICAg
IGNvbGxhcHNlTGVhZGluZ1doaXRlc3BhY2UoKTsKLQotICAgIHdoaWxlIChhdXRvIHRleHRSdW4g
PSBtX3RleHRSdW5MaXN0LmN1cnJlbnQoKSkgewotCi0gICAgICAgIGlmICghdGV4dFJ1bi0+aXNM
aW5lQnJlYWsoKSAmJiAoIXdyYXBDb250ZW50T25PdmVyZmxvdygpIHx8IG1fY3VycmVudExpbmUu
YXZhaWxhYmxlV2lkdGgoKSA+PSB0ZXh0UnVuLT53aWR0aCgpKSkgewotICAgICAgICAgICAgbV9j
dXJyZW50TGluZS5hcHBlbmQoKnRleHRSdW4pOwotICAgICAgICAgICAgKyttX3RleHRSdW5MaXN0
OwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBUaGlzIHJ1
biBpcyBlaXRoZXIgYSBsaW5lYnJlYWsgb3IgaXQgZG9lcyBub3QgZml0IHRoZSBjdXJyZW50IGxp
bmUuCi0gICAgICAgIGlmICh0ZXh0UnVuLT5pc0xpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICAv
LyBBZGQgdGhlIG5ldyBsaW5lIG9ubHkgaWYgdGhlcmUncyBub3RoaW5nIG9uIHRoZSBsaW5lLiAo
b3RoZXJ3aXNlIHRoZSBleHRyYSBuZXcgbGluZSBjaGFyYWN0ZXIgd291bGQgc2hvdyB1cCBhdCB0
aGUgZW5kIG9mIHRoZSBjb250ZW50LikKLSAgICAgICAgICAgIGlmICh0ZXh0UnVuLT5pc0hhcmRM
aW5lQnJlYWsoKSB8fCAhbV9jdXJyZW50TGluZS5oYXNDb250ZW50KCkpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoaXNUZXh0QWxpZ25SaWdodChtX3N0eWxlLnRleHRBbGlnbikpCi0gICAgICAgICAg
ICAgICAgICAgIG1fY3VycmVudExpbmUuY29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKLSAg
ICAgICAgICAgICAgICBtX2N1cnJlbnRMaW5lLmFwcGVuZCgqdGV4dFJ1bik7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICArK21fdGV4dFJ1bkxpc3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIE92ZXJmbG93IHdyYXBwaW5nIGJlaGF2aW91cjoKLSAgICAg
ICAgLy8gMS4gV2hpdGVzYXBjZSBjb2xsYXBzZSBvbjogd2hpdGVzcGFjZSBpcyBza2lwcGVkLiBK
dW1wIHRvIG5leHQgbGluZS4KLSAgICAgICAgLy8gMi4gV2hpdGVzcGFjZSBjb2xsYXBzZSBvZmY6
IHdoaXRlc3BhY2UgaXMgd3JhcHBlZC4KLSAgICAgICAgLy8gMy4gRmlyc3QsIG5vbi13aGl0ZXNw
YWNlIHJ1biBpcyBlaXRoZXIgd3JhcHBlZCBvciBrZXB0IG9uIHRoZSBsaW5lLiAoZGVwZW5kcyBv
biBvdmVyZmxvdy13cmFwKQotICAgICAgICAvLyA0LiBOb24td2hpdGVzcGFjZSBydW4gd2hlbiB0
aGVyZSdzIGFscmVhZHkgYW5vdGhlciBydW4gb24gdGhlIGxpbmUgZWl0aGVyIGdldHMgd3JhcHBl
ZCAod29yZC1icmVhazogYnJlYWstYWxsKSBvciBnZXRzIHB1c2hlZCB0byB0aGUgbmV4dCBsaW5l
LgotCi0gICAgICAgIC8vIFdoaXRlc3BhY2UgcnVuLgotICAgICAgICBpZiAodGV4dFJ1bi0+aXNX
aGl0ZXNwYWNlKCkpIHsKLSAgICAgICAgICAgIC8vIFByb2Nlc3MgY29sbGFwc2VkIHdoaXRlc3Bh
Y2UgYWdhaW4gZm9yIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgICAgICBpZiAodGV4dFJ1bi0+aXND
b2xsYXBzZWQoKSkKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIC8vIFRyeSB0
byBzcGxpdCB0aGUgd2hpdGVzcGFjZTsgbGVmdCBwYXJ0IHN0YXlzIG9uIHRoaXMgbGluZSwgcmln
aHQgaXMgcHVzaGVkIHRvIG5leHQgbGluZS4KLSAgICAgICAgICAgIGlmICghc3BsaXRUZXh0UnVu
KCp0ZXh0UnVuKSkKLSAgICAgICAgICAgICAgICArK21fdGV4dFJ1bkxpc3Q7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIE5vbi13aGl0ZXNwYWNlIHJ1bi4gKCFz
dHlsZS53cmFwTGluZXM6IGJ1ZzEzODEwMihwcmVzZXJ2ZSBleGlzdGluZyBiZWhhdmlvcikKLSAg
ICAgICAgaWYgKCgoIW1fY3VycmVudExpbmUuaGFzQ29udGVudCgpICYmIG1fc3R5bGUuYnJlYWtG
aXJzdFdvcmRPbk92ZXJmbG93KSB8fCBtX3N0eWxlLmJyZWFrQW55V29yZE9uT3ZlcmZsb3cpIHx8
ICFtX3N0eWxlLndyYXBMaW5lcykgewotICAgICAgICAgICAgLy8gVHJ5IHRvIHNwbGl0IHRoZSBy
dW47IGxlZnQgc2lkZSBzdGF5cyBvbiB0aGlzIGxpbmUsIHJpZ2h0IHNpZGUgaXMgcHVzaGVkIHRv
IG5leHQgbGluZS4KLSAgICAgICAgICAgIGlmICghc3BsaXRUZXh0UnVuKCp0ZXh0UnVuKSkKLSAg
ICAgICAgICAgICAgICArK21fdGV4dFJ1bkxpc3Q7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgfQotCi0gICAgICAgIEFTU0VSVCh0ZXh0UnVuLT5pc05vbldoaXRlc3BhY2UoKSk7Ci0gICAg
ICAgIC8vIEZpbmQgb3V0IGlmIHRoaXMgbm9uLXdoaXRlc3BhY2UgZnJhZ21lbnQgaGFzIGEgaHlw
aGVuIHdoZXJlIHdlIGNhbiBicmVhay4KLSAgICAgICAgaWYgKG1fc3R5bGUuc2hvdWxkSHlwaGVu
YXRlICYmICFtX2h5cGhlbmF0aW9uSXNEaXNhYmxlZCkgewotICAgICAgICAgICAgaWYgKCFzcGxp
dFRleHRSdW4oKnRleHRSdW4pKSB7Ci0gICAgICAgICAgICAgICAgKyttX3RleHRSdW5MaXN0Owot
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgLy8gTm9uLWJyZWFrYWJsZSBub24td2hpdGVzcGFjZSBmaXJzdCBydW4uIEFkZCBpdCB0byB0
aGUgY3VycmVudCBsaW5lLiAtaXQgb3ZlcmZsb3dzIHRob3VnaC4KLSAgICAgICAgaWYgKCFtX2N1
cnJlbnRMaW5lLmhhc0NvbnRlbnQoKSkgewotICAgICAgICAgICAgaGFuZGxlT3ZlcmZsb3duUnVu
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAvLyBOb24tYnJlYWth
YmxlIG5vbi13aGl0ZXNwYWNlIHJ1biB3aGVuIHRoZXJlJ3MgYWxyZWFkeSBjb250ZW50IG9uIHRo
ZSBsaW5lLiBQcm9jZXNzIGl0IG9uIHRoZSBuZXh0IGxpbmUuCi0gICAgICAgIGJyZWFrOwotICAg
IH0KLQotICAgIGNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7Ci19Ci0KLXZvaWQgU2ltcGxl
TGluZUJyZWFrZXI6OmhhbmRsZU92ZXJmbG93blJ1bigpCi17Ci0gICAgYXV0byB0ZXh0UnVuID0g
bV90ZXh0UnVuTGlzdC5jdXJyZW50KCk7Ci0gICAgQVNTRVJUKHRleHRSdW4pOwotCi0gICAgbV9j
dXJyZW50TGluZS5hcHBlbmQoKnRleHRSdW4pOwotICAgICsrbV90ZXh0UnVuTGlzdDsKLQotICAg
IC8vIElmIHRoZSBmb3JjZWQgcnVuIGlzIGZvbGxvd2VkIGJ5IGEgbGluZSBicmVhaywgd2UgbmVl
ZCB0byBwcm9jZXNzIGl0IG9uIHRoaXMgbGluZSwgb3RoZXJ3aXNlIHRoZSBuZXh0IGxpbmUgd291
bGQgc3RhcnQgd2l0aCBhIGxpbmUgYnJlYWsgKGRvdWJsZSBsaW5lIGJyZWFrKS4KLSAgICAvLyAi
Zm9vYmFybG9uZ3RleHQ8YnI+Zm9vYmFyIiBzaG91bGQgcHJvZHVjZQotICAgIC8vIGZvb2Jhcmxv
bmd0ZXh0Ci0gICAgLy8gZm9vYmFyCi0gICAgLy8gYW5kIG5vdAotICAgIC8vIGZvb2Jhcmxvbmd0
ZXh0Ci0gICAgLy8KLSAgICAvLyBmb29iYXIKLQotICAgIC8vIEZpcnN0IGNoZWNrIGZvciBjb2xs
YXBzYWJsZSB3aGl0ZXNwYWNlLgotICAgIHRleHRSdW4gPSBtX3RleHRSdW5MaXN0LmN1cnJlbnQo
KTsKLSAgICBpZiAoIXRleHRSdW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICh0ZXh0UnVu
LT5pc1doaXRlc3BhY2UoKSAmJiBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSkgewotICAgICAg
ICArK21fdGV4dFJ1bkxpc3Q7Ci0gICAgICAgIHRleHRSdW4gPSBtX3RleHRSdW5MaXN0LmN1cnJl
bnQoKTsKLSAgICAgICAgaWYgKCF0ZXh0UnVuKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGlmICh0ZXh0UnVuLT5pc0hhcmRMaW5lQnJlYWsoKSkgewotICAgICAgICAvLyA8YnI+
IGFsd2F5cyBwcm9kdWNlcyBhIHJ1bi4gKHJlcXVpcmVkIGJ5IHRlc3Rpbmcgb3V0cHV0KQotICAg
ICAgICBtX2N1cnJlbnRMaW5lLmFwcGVuZCgqdGV4dFJ1bik7Ci0gICAgICAgICsrbV90ZXh0UnVu
TGlzdDsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmICh0ZXh0UnVuLT5pc1NvZnRM
aW5lQnJlYWsoKSAmJiAhbV9zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUpCi0gICAgICAgICsrbV90ZXh0
UnVuTGlzdDsKLX0KLQotdm9pZCBTaW1wbGVMaW5lQnJlYWtlcjo6Y29sbGFwc2VMZWFkaW5nV2hp
dGVzcGFjZSgpCi17Ci0gICAgYXV0byB0ZXh0UnVuID0gbV90ZXh0UnVuTGlzdC5jdXJyZW50KCk7
Ci0gICAgaWYgKCF0ZXh0UnVuIHx8ICF0ZXh0UnVuLT5pc1doaXRlc3BhY2UoKSkKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gU3BlY2lhbCBvdmVyZmxvdyBwcmUtd3JhcCB3aGl0ZXNwYWNlL25l
d2xpbmUgaGFuZGxpbmcgZm9yIG92ZXJmbG93IHdoaXRlc3BhY2U6IHNraXAgdGhlIGxlYWRpbmcg
d2hpdGVzcGFjZS9uZXdsaW5lIChldmVuIHdoZW4gc3R5bGUgc2F5cyBub3QtY29sbGFwc2libGUp
Ci0gICAgLy8gaWYgd2UgbWFuYWdlZCB0byBwdXQgc29tZSBjb250ZW50IG9uIHRoZSBwcmV2aW91
cyBsaW5lLgotICAgIGlmIChtX3RleHRSdW5MaXN0LmlzQ3VycmVudE92ZXJyaWRkZW4oKSkgewot
ICAgICAgICBhdXRvIGNvbGxhcHNlV2hpdGVzcGFjZSA9IG1fc3R5bGUuY29sbGFwc2VXaGl0ZXNw
YWNlIHx8IG1fc3R5bGUucHJlV3JhcDsKLSAgICAgICAgaWYgKGNvbGxhcHNlV2hpdGVzcGFjZSAm
JiBtX3ByZXZpb3VzTGluZUhhc05vbkZvcmNlZENvbnRlbnQpIHsKLSAgICAgICAgICAgICsrbV90
ZXh0UnVuTGlzdDsKLSAgICAgICAgICAgIC8vIElmIGNvbGxhcHNpbmcgdGhlIHdoaXRlc3BhY2Ug
cHV0cyB1cyBvbiBhIG5ld2xpbmUsIHNraXAgdGhlIHNvZnQgbmV3bGluZSB0b28gYXMgd2UgYWxy
ZWFkeSB3cmFwcGVkIHRoZSBsaW5lLgotICAgICAgICAgICAgdGV4dFJ1biA9IG1fdGV4dFJ1bkxp
c3QuY3VycmVudCgpOwotICAgICAgICAgICAgLy8gPGJyPiBhbHdheXMgcHJvZHVjZXMgYSBydW4u
IChyZXF1aXJlZCBieSB0ZXN0aW5nIG91dHB1dCkuCi0gICAgICAgICAgICBpZiAoIXRleHRSdW4g
fHwgdGV4dFJ1bi0+aXNIYXJkTGluZUJyZWFrKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgYXV0byBjb2xsYXBzZVNvZnRMaW5lQnJlYWsgPSB0ZXh0UnVuLT5pc1NvZnRM
aW5lQnJlYWsoKSAmJiAoIW1fc3R5bGUucHJlc2VydmVOZXdsaW5lIHx8IG1fc3R5bGUucHJlV3Jh
cCk7Ci0gICAgICAgICAgICBpZiAoY29sbGFwc2VTb2Z0TGluZUJyZWFrKSB7Ci0gICAgICAgICAg
ICAgICAgKyttX3RleHRSdW5MaXN0OwotICAgICAgICAgICAgICAgIHRleHRSdW4gPSBtX3RleHRS
dW5MaXN0LmN1cnJlbnQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIENvbGxhcHNlIGxlYWRpbmcgd2hpdGVzcGFjZSBpZiB0aGUgc3R5bGUgc2F5cyBzby4KLSAg
ICBpZiAoIW1fc3R5bGUuY29sbGFwc2VXaGl0ZXNwYWNlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAoIXRleHRSdW4gfHwgIXRleHRSdW4tPmlzV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICArK21fdGV4dFJ1bkxpc3Q7Ci19Ci0KLXZvaWQgU2ltcGxlTGluZUJyZWFrZXI6
OmNvbGxhcHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCkKLXsKLSAgICBpZiAoIW1fY3VycmVudExpbmUu
aGFzVHJhaWxpbmdXaGl0ZXNwYWNlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFJlbW92
ZSBjb2xsYXBzZWQgd2hpdGVzcGFjZSwgb3Igbm9uLWNvbGxhcHNlZCBwcmUtd3JhcCB3aGl0ZXNw
YWNlLCB1bmxlc3MgaXQncyB0aGUgb25seSBjb250ZW50IG9uIHRoZSBsaW5lIC1zbyByZW1vdmlu
ZyB0aGUgd2hpdGVzYXBjZSB3b3VsZCBwcm9kdWNlIGFuIGVtcHR5IGxpbmUuCi0gICAgYm9vbCBj
b2xsYXBzZVdoaXRlc3BhY2UgPSBtX3N0eWxlLmNvbGxhcHNlV2hpdGVzcGFjZSB8fCBtX3N0eWxl
LnByZVdyYXA7Ci0gICAgaWYgKCFjb2xsYXBzZVdoaXRlc3BhY2UpCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIHByZS13cmFwPwotICAgIGlmIChtX2N1cnJlbnRMaW5lLmlzV2hpdGVzcGFjZU9u
bHkoKSAmJiBtX3N0eWxlLnByZVdyYXApCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fY3VycmVu
dExpbmUuY29sbGFwc2VUcmFpbGluZ1doaXRlc3BhY2UoKTsKLX0KLQotc3RkOjpvcHRpb25hbDxD
b250ZW50UG9zaXRpb24+IFNpbXBsZUxpbmVCcmVha2VyOjpoeXBoZW5Qb3NpdGlvbkJlZm9yZShj
b25zdCBUZXh0UnVuJiB0ZXh0UnVuLCBDb250ZW50UG9zaXRpb24gYmVmb3JlKSBjb25zdAotewot
ICAgIC8vIEVub3VnaCBjaGFyYWN0ZXJzIGJlZm9yZSB0aGUgc3BsaXQgcG9zaXRpb24/Ci0gICAg
aWYgKGJlZm9yZSA8PSB0ZXh0UnVuLnN0YXJ0KCkgKyBtX3N0eWxlLmh5cGhlbkxpbWl0QmVmb3Jl
KQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gQWRqdXN0IGJlZm9yZSB0byBhY2NvbW1v
ZGF0ZSB0aGUgbGltaXQtYWZ0ZXIgdmFsdWUgKHRoaXMgaXMgdGhlIGxhc3QgcG90ZW50aWFsIGh5
cGhlbiBsb2NhdGlvbikuCi0gICAgYmVmb3JlID0gc3RkOjptaW4oYmVmb3JlLCB0ZXh0UnVuLmVu
ZCgpIC0gbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyICsgMSk7Ci0KLSAgICBhdXRvIGh5cGhlbkxv
Y2F0aW9uID0gbV9jb250ZW50UHJvdmlkZXIuaHlwaGVuUG9zaXRpb25CZWZvcmUodGV4dFJ1bi5z
dGFydCgpLCB0ZXh0UnVuLmVuZCgpLCBiZWZvcmUpOwotICAgIGlmICghaHlwaGVuTG9jYXRpb24p
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBBU1NFUlQoaHlwaGVuTG9jYXRpb24gPj0gdGV4
dFJ1bi5zdGFydCgpICYmIGh5cGhlbkxvY2F0aW9uIDw9IHRleHRSdW4uZW5kKCkpOwotICAgIC8v
IENoZWNrIGlmIHRoZXJlIGFyZSBlbm91Z2ggY2hhcmFjdGVycyBiZWZvcmUgYW5kIGFmdGVyIHRo
ZSBoeXBoZW4uCi0gICAgaWYgKCpoeXBoZW5Mb2NhdGlvbiA8IHRleHRSdW4uc3RhcnQoKSArIG1f
c3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgfHwgbV9zdHlsZS5oeXBoZW5MaW1pdEFmdGVyID4gKHRl
eHRSdW4uZW5kKCkgLSAqaHlwaGVuTG9jYXRpb24pKQotICAgICAgICByZXR1cm4geyB9OwotCi0g
ICAgcmV0dXJuIGh5cGhlbkxvY2F0aW9uOwotfQotCi1zdGQ6Om9wdGlvbmFsPENvbnRlbnRQb3Np
dGlvbj4gU2ltcGxlTGluZUJyZWFrZXI6OmFkanVzdFNwbGl0UG9zaXRpb25XaXRoSHlwaGVuYXRp
b24oY29uc3QgVGV4dFJ1biYgdGV4dFJ1biwgQ29udGVudFBvc2l0aW9uIHNwbGl0UG9zaXRpb24s
IGZsb2F0IGxlZnRTaWRlV2lkdGgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKHRleHRSdW4uaXNOb25X
aGl0ZXNwYWNlKCkpOwotCi0gICAgLy8gVXNlIGh5cGhlbj8KLSAgICBpZiAoIW1fc3R5bGUuc2hv
dWxkSHlwaGVuYXRlIHx8IG1faHlwaGVuYXRpb25Jc0Rpc2FibGVkKQotICAgICAgICByZXR1cm4g
eyB9OwotCi0gICAgLy8gQ2hlY2sgaWYgdGhlcmUgYXJlIGVub3VnaCBjaGFyYWN0ZXJzIGluIHRo
ZSBydW4uCi0gICAgYXV0byBydW5MZW5ndGggPSB0ZXh0UnVuLmxlbmd0aCgpOwotICAgIGlmICht
X3N0eWxlLmh5cGhlbkxpbWl0QmVmb3JlID49IHJ1bkxlbmd0aCB8fCBtX3N0eWxlLmh5cGhlbkxp
bWl0QWZ0ZXIgPj0gcnVuTGVuZ3RoIHx8IG1fc3R5bGUuaHlwaGVuTGltaXRCZWZvcmUgKyBtX3N0
eWxlLmh5cGhlbkxpbWl0QWZ0ZXIgPiBydW5MZW5ndGgpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHdvcmthcm91bmQgZm9yIHdlYmtpdC5vcmcvYi8xNjk2
MTMuIFNlZSBtYXhQcmVmaXhXaWR0aCBjb21wdXRhdGlvbiBpbiB0cnlIeXBoZW5hdGluZygpLgot
ICAgIC8vIEl0IGRvZXMgbm90IHdvcmsgcHJvcGVybHkgd2l0aCBub24tY29sbGFwc2VkIGxlYWRp
bmcgdGFicyB3aGVuIGZvbnQgaXMgZW5sYXJnZWQuCi0gICAgYXV0byBhZGp1c3RlZEF2YWlsYWJs
ZVdpZHRoID0gbV9jdXJyZW50TGluZS5hdmFpbGFibGVXaWR0aCgpIC0gbV9zdHlsZS5oeXBoZW5T
dHJpbmdXaWR0aDsKLSAgICBpZiAobV9jdXJyZW50TGluZS5oYXNDb250ZW50KCkpCi0gICAgICAg
IGFkanVzdGVkQXZhaWxhYmxlV2lkdGggKz0gbV9zdHlsZS5mb250LnNwYWNlV2lkdGgoKTsKLQot
ICAgIGlmICghZW5vdWdoV2lkdGhGb3JIeXBoZW5hdGlvbihhZGp1c3RlZEF2YWlsYWJsZVdpZHRo
LCBtX3N0eWxlLmZvbnQucGl4ZWxTaXplKCkpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
Ly8gRmluZCB0aGUgc3BsaXQgcG9zaXRpb24gd2hlcmUgaHlwaGVuIHN1cmVseSBmaXRzICh3ZSBt
aWdodCBiZSBhYmxlIHRvIGZpdCB0aGUgaHlwaGVuIGF0IHRoZSBzcGxpdCBwb3NpdGlvbikuCi0g
ICAgYXV0byBsZWZ0ID0gdGV4dFJ1bi5zdGFydCgpOwotICAgIGF1dG8gcmlnaHQgPSBzcGxpdFBv
c2l0aW9uOwotICAgIHdoaWxlIChsZWZ0U2lkZVdpZHRoICsgbV9zdHlsZS5oeXBoZW5TdHJpbmdX
aWR0aCA+IG1fY3VycmVudExpbmUuYXZhaWxhYmxlV2lkdGgoKSkgewotICAgICAgICBpZiAoLS1y
aWdodCA8PSBsZWZ0KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsgLy8gTm8gc3BhY2UgZm9yIGh5
cGhlbi4KLSAgICAgICAgLy8gRklYTUU6IGZvciBjb3JyZWN0bmVzcyAoa2VybmluZykgd2Ugc2hv
dWxkIGluc3RlYWQgbWVhc3VyZSB0aGUgbGVmdCBzaWRlLgotICAgICAgICBsZWZ0U2lkZVdpZHRo
IC09IG1fY29udGVudFByb3ZpZGVyLndpZHRoKHJpZ2h0LCByaWdodCArIDEsIDApOwotICAgIH0K
LQotICAgIC8vIEZpbmQgb3V0IGlmIHRoZXJlJ3MgYW4gYWN0dWFsIGh5cGhlbiBvcHBvcnRpbml0
eSBhdCB0aGlzIHBvc2l0aW9uIChvciBiZWZvcmUpLgotICAgIHJldHVybiBoeXBoZW5Qb3NpdGlv
bkJlZm9yZSh0ZXh0UnVuLCByaWdodCArIDEpOwotfQotCi1ib29sIFNpbXBsZUxpbmVCcmVha2Vy
OjpzcGxpdFRleHRSdW4oY29uc3QgVGV4dFJ1biYgdGV4dFJ1bikKLXsKLSAgICAvLyBTaW5nbGUg
Y2hhcmFjdGVyIGhhbmRsaW5nLgotICAgIGlmICh0ZXh0UnVuLnN0YXJ0KCkgKyAxID09IHRleHRS
dW4uZW5kKCkpIHsKLSAgICAgICAgLy8gS2VlcCBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIG9uIGVt
cHR5IGxpbmVzLgotICAgICAgICBpZiAoIW1fY3VycmVudExpbmUuaGFzQ29udGVudCgpKSB7Ci0g
ICAgICAgICAgICBtX2N1cnJlbnRMaW5lLmFwcGVuZCh0ZXh0UnVuKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICBtX3RleHRSdW5MaXN0Lm92ZXJyaWRlQ3Vy
cmVudCh0ZXh0UnVuKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgYXV0byBz
cGxpdFBhaXIgPSBzcGxpdCh0ZXh0UnVuLCBtX2N1cnJlbnRMaW5lLmF2YWlsYWJsZVdpZHRoKCkp
OwotICAgIG1fY3VycmVudExpbmUuYXBwZW5kKHNwbGl0UGFpci5sZWZ0KTsKLSAgICBtX3RleHRS
dW5MaXN0Lm92ZXJyaWRlQ3VycmVudChzcGxpdFBhaXIucmlnaHQpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1UZXh0UnVuU3BsaXRQYWlyIFNpbXBsZUxpbmVCcmVha2VyOjpzcGxpdChjb25zdCBU
ZXh0UnVuJiB0ZXh0UnVuLCBmbG9hdCBsZWZ0U2lkZU1heGltdW1XaWR0aCkgY29uc3QKLXsKLSAg
ICAvLyBQcmVzZXJ2ZSB0aGUgbGVmdCB3aWR0aCBmb3IgdGhlIGZpbmFsIHNwbGl0IHBvc2l0aW9u
IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byByZW1lYXN1cmUgdGhlIGxlZnQgc2lkZSBhZ2Fpbi4K
LSAgICBmbG9hdCBsZWZ0U2lkZVdpZHRoID0gMDsKLSAgICBhdXRvIGxlZnQgPSB0ZXh0UnVuLnN0
YXJ0KCk7Ci0KLSAgICAvLyBQYXRob2xvZ2ljYWwgY2FzZSBvZiAoZXh0cmVtZWx5KWxvbmcgc3Ry
aW5nIGFuZCBuYXJyb3cgbGluZXMuCi0gICAgLy8gQWRqdXN0IHRoZSByYW5nZSBzbyB0aGF0IHdl
IGNhbiBwaWNrIGEgcmVhc29uYWJsZSBtaWRwb2ludC4KLSAgICBhdXRvIGF2ZXJhZ2VDaGFyYWN0
ZXJXaWR0aCA9IHRleHRSdW4ud2lkdGgoKSAvIHRleHRSdW4ubGVuZ3RoKCk7Ci0gICAgYXV0byBy
aWdodCA9IHN0ZDo6bWluPHVuc2lnbmVkPihsZWZ0ICsgKDIgKiBsZWZ0U2lkZU1heGltdW1XaWR0
aCAvIGF2ZXJhZ2VDaGFyYWN0ZXJXaWR0aCksIHRleHRSdW4uZW5kKCkgLSAxKTsKLSAgICB3aGls
ZSAobGVmdCA8IHJpZ2h0KSB7Ci0gICAgICAgIGF1dG8gbWlkZGxlID0gKGxlZnQgKyByaWdodCkg
LyAyOwotICAgICAgICBhdXRvIHdpZHRoID0gbV9jb250ZW50UHJvdmlkZXIud2lkdGgodGV4dFJ1
bi5zdGFydCgpLCBtaWRkbGUgKyAxLCAwKTsKLSAgICAgICAgaWYgKHdpZHRoIDwgbGVmdFNpZGVN
YXhpbXVtV2lkdGgpIHsKLSAgICAgICAgICAgIGxlZnQgPSBtaWRkbGUgKyAxOwotICAgICAgICAg
ICAgbGVmdFNpZGVXaWR0aCA9IHdpZHRoOwotICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID4gbGVm
dFNpZGVNYXhpbXVtV2lkdGgpCi0gICAgICAgICAgICByaWdodCA9IG1pZGRsZTsKLSAgICAgICAg
ZWxzZSB7Ci0gICAgICAgICAgICByaWdodCA9IG1pZGRsZSArIDE7Ci0gICAgICAgICAgICBsZWZ0
U2lkZVdpZHRoID0gd2lkdGg7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIC8vIEtlZXAgYXQgbGVhc3Qgb25lIGNoYXJhY3RlciBvbiBlbXB0eSBsaW5lcy4KLSAg
ICBib29sIHNwbGl0SGFzSHlwZW4gPSBmYWxzZTsKLSAgICBsZWZ0ID0gdGV4dFJ1bi5zdGFydCgp
OwotICAgIGlmIChsZWZ0ID49IHJpZ2h0ICYmICFtX2N1cnJlbnRMaW5lLmhhc0NvbnRlbnQoKSkg
ewotICAgICAgICByaWdodCA9IGxlZnQgKyAxOwotICAgICAgICBsZWZ0U2lkZVdpZHRoID0gbV9j
b250ZW50UHJvdmlkZXIud2lkdGgobGVmdCwgcmlnaHQsIDApOwotICAgIH0gZWxzZSBpZiAodGV4
dFJ1bi5pc05vbldoaXRlc3BhY2UoKSkgewotICAgICAgICBpZiAoYXV0byBoeXBoZW5Qb3NpdGlv
biA9IGFkanVzdFNwbGl0UG9zaXRpb25XaXRoSHlwaGVuYXRpb24odGV4dFJ1biwgcmlnaHQsIGxl
ZnRTaWRlV2lkdGgpKSB7Ci0gICAgICAgICAgICBzcGxpdEhhc0h5cGVuID0gdHJ1ZTsKLSAgICAg
ICAgICAgIHJpZ2h0ID0gKmh5cGhlblBvc2l0aW9uOwotICAgICAgICAgICAgbGVmdFNpZGVXaWR0
aCA9IG1fY29udGVudFByb3ZpZGVyLndpZHRoKGxlZnQsIHJpZ2h0LCAwKSArIG1fc3R5bGUuaHlw
aGVuU3RyaW5nV2lkdGg7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBhdXRvIHJpZ2h0U2lkZVdp
ZHRoID0gbV9jb250ZW50UHJvdmlkZXIud2lkdGgocmlnaHQsIHRleHRSdW4uZW5kKCksIDApOwot
ICAgIGlmICh0ZXh0UnVuLmlzTm9uV2hpdGVzcGFjZSgpKQotICAgICAgICByZXR1cm4geyBzcGxp
dEhhc0h5cGVuID8gVGV4dFJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bldpdGhIeXBoZW4obGVm
dCwgcmlnaHQsIGxlZnRTaWRlV2lkdGgpIDogVGV4dFJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1
bihsZWZ0LCByaWdodCwgbGVmdFNpZGVXaWR0aCksCi0gICAgICAgICAgICBUZXh0UnVuOjpjcmVh
dGVOb25XaGl0ZXNwYWNlUnVuKHJpZ2h0LCB0ZXh0UnVuLmVuZCgpLCByaWdodFNpZGVXaWR0aCkg
fTsKLQotICAgIC8vIFdlIG5ldmVyIHNwbGl0IGNvbGxhcHNlZCB3aGl0ZXNwYWNlLgotICAgIEFT
U0VSVCh0ZXh0UnVuLmlzV2hpdGVzcGFjZSgpKTsKLSAgICBBU1NFUlQoIXRleHRSdW4uaXNDb2xs
YXBzZWQoKSk7Ci0gICAgcmV0dXJuIHsgVGV4dFJ1bjo6Y3JlYXRlV2hpdGVzcGFjZVJ1bihsZWZ0
LCByaWdodCwgbGVmdFNpZGVXaWR0aCwgZmFsc2UpLCBUZXh0UnVuOjpjcmVhdGVXaGl0ZXNwYWNl
UnVuKHJpZ2h0LCB0ZXh0UnVuLmVuZCgpLCByaWdodFNpZGVXaWR0aCwgZmFsc2UpIH07Ci19Ci0K
LVNpbXBsZUxpbmVCcmVha2VyOjpMaW5lQ29uc3RyYWludCBTaW1wbGVMaW5lQnJlYWtlcjo6bGlu
ZUNvbnN0cmFpbnQoZmxvYXQgdmVydGljYWxQb3NpdGlvbikKLXsKLSAgICBhdXRvKiBsaW5lQ29u
c3RyYWludCA9IG1fbGluZUNvbnN0cmFpbnRJdGVyYXRvci5jdXJyZW50KCk7Ci0gICAgaWYgKCFs
aW5lQ29uc3RyYWludCkgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICB3aGlsZSAobGluZUNvbnN0cmFpbnQtPnZlcnRpY2Fs
UG9zaXRpb24gJiYgdmVydGljYWxQb3NpdGlvbiA+ICpsaW5lQ29uc3RyYWludC0+dmVydGljYWxQ
b3NpdGlvbikgewotICAgICAgICBsaW5lQ29uc3RyYWludCA9ICgrK21fbGluZUNvbnN0cmFpbnRJ
dGVyYXRvcikuY3VycmVudCgpOwotICAgICAgICBpZiAoIWxpbmVDb25zdHJhaW50KSB7Ci0gICAg
ICAgICAgICAvLyBUaGUgdmVydGljYWwgcG9zaXRpb24gb2YgdGhlIGxhc3QgZW50cnkgaW4gdGhl
IGNvbnN0cmFpbnQgbGlzdCBpcyBzdXBwb3NlZCB0byBiZSBpbmZpbml0ZS4KLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAg
fQotICAgIH0KLQotICAgIHJldHVybiAqbGluZUNvbnN0cmFpbnQ7Ci19Ci0KLX0KLX0KLSNlbmRp
ZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvdGV4
dGxheW91dC9zaW1wbGUvU2ltcGxlTGluZUJyZWFrZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvc2ltcGxlL1NpbXBsZUxpbmVCcmVha2VyLmgK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDMxY2EyYzlhNDRkLi4wMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L3Np
bXBsZS9TaW1wbGVMaW5lQnJlYWtlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjAxICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgotICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lmIEVOQUJMRShMQVlPVVRfRk9STUFUVElO
R19DT05URVhUKQotCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLSNpbmNsdWRl
ICJSdW5zLmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotCi1uYW1lc3BhY2UgV2ViQ29y
ZSB7Ci0KLWNsYXNzIEZvbnRDYXNjYWRlOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLW5hbWVzcGFj
ZSBMYXlvdXQgewotCi1jbGFzcyBUZXh0Q29udGVudFByb3ZpZGVyOwotc3RydWN0IFRleHRSdW5T
cGxpdFBhaXI7Ci0KLWNsYXNzIFNpbXBsZUxpbmVCcmVha2VyIHsKLSAgICBXVEZfTUFLRV9JU09f
QUxMT0NBVEVEKFNpbXBsZUxpbmVCcmVha2VyKTsKLXB1YmxpYzoKLSAgICBzdHJ1Y3QgTGluZUNv
bnN0cmFpbnQgewotICAgICAgICAvLyB2ZXJ0aWNhbFBvc2l0aW9uIHNldHMgdGhlIGJvdHRvbSBl
ZGdlIGZvciB0aGlzIGNvbnN0cmFpbnQuIExhc3QgZW50cnkgaW4gdGhlIGxpc3QKLSAgICAgICAg
Ly8gc2hvdWxkIGFsd2F5cyBiZSBzdGQ6Om51bGxvcHQgaW5kaWNhdGluZyB0aGF0IGxlZnQvcmln
aHQgcGFpciBpcyBzZXQgZm9yIHRoZSByZXN0IG9mIHRoZSBsaW5lcwotICAgICAgICAvLyAoTm9y
bWFsbHkgdGhlcmUncyBvbmx5IG9uZSBlbnRyeSB3aXRoIHRoZSBsZWZ0L3JpZ2h0IGJsb2NrIGVk
Z2VzKS4KLSAgICAgICAgc3RkOjpvcHRpb25hbDxmbG9hdD4gdmVydGljYWxQb3NpdGlvbjsKLSAg
ICAgICAgZmxvYXQgbGVmdCB7IDAgfTsKLSAgICAgICAgZmxvYXQgcmlnaHQgeyAwIH07Ci0gICAg
fTsKLSAgICB1c2luZyBMaW5lQ29uc3RyYWludExpc3QgPSBWZWN0b3I8TGluZUNvbnN0cmFpbnQ+
OwotICAgIFNpbXBsZUxpbmVCcmVha2VyKGNvbnN0IFZlY3RvcjxUZXh0UnVuPiYsIGNvbnN0IFRl
eHRDb250ZW50UHJvdmlkZXImLCBMaW5lQ29uc3RyYWludExpc3QmJiwgY29uc3QgUmVuZGVyU3R5
bGUmKTsKLQotICAgIHZvaWQgc2V0TGluZUhlaWdodChmbG9hdCBsaW5lSGVpZ2h0KSB7IG1fbGlu
ZUhlaWdodCA9IGxpbmVIZWlnaHQ7IH0KLQotICAgIFZlY3RvcjxMYXlvdXRSdW4+IHJ1bnMoKTsK
LQotcHJpdmF0ZToKLSAgICBzdHJ1Y3QgU3R5bGUgewotICAgICAgICBleHBsaWNpdCBTdHlsZShj
b25zdCBSZW5kZXJTdHlsZSYpOwotCi0gICAgICAgIGNvbnN0IEZvbnRDYXNjYWRlJiBmb250Owot
ICAgICAgICBib29sIHdyYXBMaW5lcyB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgYnJlYWtBbnlX
b3JkT25PdmVyZmxvdyB7IGZhbHNlIH07Ci0gICAgICAgIGJvb2wgYnJlYWtGaXJzdFdvcmRPbk92
ZXJmbG93IHsgZmFsc2UgfTsKLSAgICAgICAgYm9vbCBjb2xsYXBzZVdoaXRlc3BhY2UgeyBmYWxz
ZSB9OwotICAgICAgICBib29sIHByZVdyYXAgeyBmYWxzZSB9OwotICAgICAgICBib29sIHByZXNl
cnZlTmV3bGluZSB7IGZhbHNlIH07Ci0gICAgICAgIFRleHRBbGlnbk1vZGUgdGV4dEFsaWduIHsg
VGV4dEFsaWduTW9kZTo6TGVmdCB9OwotICAgICAgICBib29sIHNob3VsZEh5cGhlbmF0ZTsKLSAg
ICAgICAgZmxvYXQgaHlwaGVuU3RyaW5nV2lkdGg7Ci0gICAgICAgIEl0ZW1Qb3NpdGlvbiBoeXBo
ZW5MaW1pdEJlZm9yZTsKLSAgICAgICAgSXRlbVBvc2l0aW9uIGh5cGhlbkxpbWl0QWZ0ZXI7Ci0g
ICAgICAgIEF0b21pY1N0cmluZyBsb2NhbGU7Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8dW5zaWdu
ZWQ+IGh5cGhlbkxpbWl0TGluZXM7Ci0gICAgfTsKLQotICAgIGNsYXNzIFRleHRSdW5MaXN0IHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFRleHRSdW5MaXN0KGNvbnN0IFZlY3RvcjxUZXh0UnVuPiYg
dGV4dFJ1bnMpOwotCi0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gY3VycmVudCgpIGNv
bnN0OwotICAgICAgICBUZXh0UnVuTGlzdCYgb3BlcmF0b3IrKygpOwotCi0gICAgICAgIHZvaWQg
b3ZlcnJpZGVDdXJyZW50KFRleHRSdW4gdGV4dFJ1bikgeyBtX292ZXJyaWRlVGV4dFJ1biA9IHRl
eHRSdW47IH0KLSAgICAgICAgYm9vbCBpc0N1cnJlbnRPdmVycmlkZGVuKCkgY29uc3QgeyByZXR1
cm4gbV9vdmVycmlkZVRleHRSdW4uaGFzX3ZhbHVlKCk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIGNvbnN0IFZlY3RvcjxUZXh0UnVuPiYgbV90ZXh0UnVuczsKLSAgICAgICAgdW5zaWduZWQg
bV9jdXJyZW50SW5kZXggeyAwIH07Ci0gICAgICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gbV9v
dmVycmlkZVRleHRSdW47Ci0gICAgfTsKLQotICAgIGNsYXNzIExpbmUgewotICAgIHB1YmxpYzoK
LSAgICAgICAgTGluZShWZWN0b3I8TGF5b3V0UnVuPiYgbGF5b3V0UnVucyk7Ci0KLSAgICAgICAg
dm9pZCBhcHBlbmQoY29uc3QgVGV4dFJ1biYpOwotICAgICAgICBmbG9hdCBhdmFpbGFibGVXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fYXZhaWxhYmxlV2lkdGggLSBtX3J1bnNXaWR0aDsgfQotICAg
ICAgICBib29sIGhhc0NvbnRlbnQoKSBjb25zdCB7IHJldHVybiBtX3J1bnNXaWR0aDsgfQotCi0g
ICAgICAgIHZvaWQgcmVzZXQoKTsKLSAgICAgICAgYm9vbCBoYXNUcmFpbGluZ1doaXRlc3BhY2Uo
KSBjb25zdCB7IHJldHVybiBtX3RyYWlsaW5nV2hpdGVzcGFjZVdpZHRoOyB9Ci0gICAgICAgIGJv
b2wgaXNXaGl0ZXNwYWNlT25seSgpIGNvbnN0IHsgcmV0dXJuIG1fcnVuc1dpZHRoID09IG1fdHJh
aWxpbmdXaGl0ZXNwYWNlV2lkdGg7IH0KLSAgICAgICAgdm9pZCBjb2xsYXBzZVRyYWlsaW5nV2hp
dGVzcGFjZSgpOwotCi0gICAgICAgIHZvaWQgc2V0QXZhaWxhYmxlV2lkdGgoZmxvYXQgYXZhaWxh
YmxlV2lkdGgpIHsgbV9hdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVdpZHRoOyB9Ci0gICAgICAg
IHZvaWQgc2V0TGVmdChmbG9hdCBsZWZ0KSB7IG1fbGVmdCA9IGxlZnQ7IH0KLSAgICAgICAgdm9p
ZCBzZXRUZXh0QWxpZ24oVGV4dEFsaWduTW9kZSk7Ci0gICAgICAgIHZvaWQgc2V0Q29sbGFwc2VX
aGl0ZXNwYWNlKGJvb2wgY29sbGFwc2VXaGl0ZXNwYWNlKSB7IG1fc3R5bGUuY29sbGFwc2VXaGl0
ZXNwYWNlID0gY29sbGFwc2VXaGl0ZXNwYWNlOyB9Ci0KLSAgICAgICAgdm9pZCBjbG9zZUxhc3RS
dW4oKTsKLSAgICAgICAgdm9pZCBhZGp1c3RSdW5zRm9yVGV4dEFsaWduKGJvb2wgbGFzdExpbmUp
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgc3RydWN0IFN0eWxlIHsKLSAgICAgICAgICAgIGJv
b2wgY29sbGFwc2VXaGl0ZXNwYWNlIHsgZmFsc2UgfTsKLSAgICAgICAgICAgIFRleHRBbGlnbk1v
ZGUgdGV4dEFsaWduIHsgVGV4dEFsaWduTW9kZTo6TGVmdCB9OwotICAgICAgICB9OwotCi0gICAg
ICAgIGZsb2F0IGFkanVzdGVkTGVmdEZvclRleHRBbGlnbihUZXh0QWxpZ25Nb2RlKSBjb25zdDsK
LSAgICAgICAgdm9pZCBqdXN0aWZ5UnVucygpOwotICAgICAgICB2b2lkIGNvbGxlY3RFeHBhbnNp
b25PcHBvcnR1bml0aWVzKGNvbnN0IFRleHRSdW4mLCBib29sIHRleHRSdW5DcmVhdGVzTmV3TGF5
b3V0UnVuKTsKLQotICAgICAgICBWZWN0b3I8TGF5b3V0UnVuPiYgbV9sYXlvdXRSdW5zOwotICAg
ICAgICBTdHlsZSBtX3N0eWxlOwotCi0gICAgICAgIGZsb2F0IG1fcnVuc1dpZHRoIHsgMCB9Owot
ICAgICAgICBmbG9hdCBtX2F2YWlsYWJsZVdpZHRoIHsgMCB9OwotICAgICAgICBmbG9hdCBtX2xl
ZnQgeyAwIH07Ci0gICAgICAgIGZsb2F0IG1fdHJhaWxpbmdXaGl0ZXNwYWNlV2lkdGggeyAwIH07
Ci0gICAgICAgIHVuc2lnbmVkIG1fZmlyc3RSdW5JbmRleCB7IDAgfTsKLSAgICAgICAgc3RkOjpv
cHRpb25hbDxUZXh0UnVuPiBtX2xhc3RUZXh0UnVuOwotICAgICAgICBzdGQ6Om9wdGlvbmFsPFRl
eHRSdW4+IG1fbGFzdE5vbldoaXRlc3BhY2VUZXh0UnVuOwotICAgICAgICBib29sIG1fY29sbGVj
dEV4cGFuc2lvbk9wcG9ydHVuaXRpZXMgeyBmYWxzZSB9OwotICAgICAgICBzdHJ1Y3QgRXhwYW5z
aW9uT3Bwb3J0dW5pdHkgewotICAgICAgICAgICAgdW5zaWduZWQgY291bnQgeyAwIH07Ci0gICAg
ICAgICAgICBFeHBhbnNpb25CZWhhdmlvciBiZWhhdmlvciB7IERlZmF1bHRFeHBhbnNpb24gfTsK
LSAgICAgICAgfTsKLSAgICAgICAgVmVjdG9yPEV4cGFuc2lvbk9wcG9ydHVuaXR5PiBtX2V4cGFu
c2lvbk9wcG9ydHVuaXR5TGlzdDsKLSAgICAgICAgc3RkOjpvcHRpb25hbDxFeHBhbnNpb25PcHBv
cnR1bml0eT4gbV9sYXN0Tm9uV2hpdGVzcGFjZUV4cGFuc2lvbk9wcHBvcnR1bml0eTsKLSAgICB9
OwotCi0gICAgdm9pZCBoYW5kbGVMaW5lU3RhcnQoKTsKLSAgICB2b2lkIGhhbmRsZUxpbmVFbmQo
KTsKLSAgICBib29sIHdyYXBDb250ZW50T25PdmVyZmxvdygpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGUud3JhcExpbmVzIHx8IG1fc3R5bGUuYnJlYWtGaXJzdFdvcmRPbk92ZXJmbG93IHx8IG1fc3R5
bGUuYnJlYWtBbnlXb3JkT25PdmVyZmxvdzsgfQotICAgIHZvaWQgY29sbGVjdFJ1bnMoKTsKLSAg
ICB2b2lkIGNyZWF0ZVJ1bnNGb3JMaW5lKCk7Ci0gICAgdm9pZCBoYW5kbGVPdmVyZmxvd25SdW4o
KTsKLSAgICB2b2lkIGNvbGxhcHNlTGVhZGluZ1doaXRlc3BhY2UoKTsKLSAgICB2b2lkIGNvbGxh
cHNlVHJhaWxpbmdXaGl0ZXNwYWNlKCk7Ci0gICAgYm9vbCBzcGxpdFRleHRSdW4oY29uc3QgVGV4
dFJ1biYpOwotICAgIFRleHRSdW5TcGxpdFBhaXIgc3BsaXQoY29uc3QgVGV4dFJ1biYsIGZsb2F0
IGxlZnRTaWRlTWF4aW11bVdpZHRoKSBjb25zdDsKLSAgICBzdGQ6Om9wdGlvbmFsPENvbnRlbnRQ
b3NpdGlvbj4gaHlwaGVuUG9zaXRpb25CZWZvcmUoY29uc3QgVGV4dFJ1biYsIENvbnRlbnRQb3Np
dGlvbiBiZWZvcmUpIGNvbnN0OwotICAgIHN0ZDo6b3B0aW9uYWw8Q29udGVudFBvc2l0aW9uPiBh
ZGp1c3RTcGxpdFBvc2l0aW9uV2l0aEh5cGhlbmF0aW9uKGNvbnN0IFRleHRSdW4mLCBDb250ZW50
UG9zaXRpb24gc3BsaXRQb3NpdGlvbiwgZmxvYXQgbGVmdFNpZGVXaWR0aCkgY29uc3Q7Ci0gICAg
TGluZUNvbnN0cmFpbnQgbGluZUNvbnN0cmFpbnQoZmxvYXQgdmVydGljYWxQb3NpdGlvbik7Ci0g
ICAgZmxvYXQgdmVydGljYWxQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fbnVtYmVyT2ZMaW5l
cyAqIG1fbGluZUhlaWdodDsgfQotCi0gICAgY29uc3QgVGV4dENvbnRlbnRQcm92aWRlciYgbV9j
b250ZW50UHJvdmlkZXI7Ci0gICAgY29uc3QgU3R5bGUgbV9zdHlsZTsKLQotICAgIFRleHRSdW5M
aXN0IG1fdGV4dFJ1bkxpc3Q7Ci0KLSAgICBWZWN0b3I8TGF5b3V0UnVuPiBtX2xheW91dFJ1bnM7
Ci0gICAgTGluZSBtX2N1cnJlbnRMaW5lOwotCi0gICAgTGluZUNvbnN0cmFpbnRMaXN0IG1fbGlu
ZUNvbnN0cmFpbnRMaXN0OwotICAgIENvbnN0VmVjdG9ySXRlcmF0b3I8TGluZUNvbnN0cmFpbnQ+
IG1fbGluZUNvbnN0cmFpbnRJdGVyYXRvcjsKLQotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZMaW5l
cyB7IDAgfTsKLSAgICBib29sIG1fcHJldmlvdXNMaW5lSGFzTm9uRm9yY2VkQ29udGVudCB7IGZh
bHNlIH07Ci0gICAgZmxvYXQgbV9saW5lSGVpZ2h0IHsgMCB9OwotICAgIGJvb2wgbV9oeXBoZW5h
dGlvbklzRGlzYWJsZWQgeyBmYWxzZSB9OwotICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZQcmVjZWRp
bmdMaW5lc1dpdGhIeXBoZW4geyAwIH07Ci19OwotCi1pbmxpbmUgc3RkOjpvcHRpb25hbDxUZXh0
UnVuPiBTaW1wbGVMaW5lQnJlYWtlcjo6VGV4dFJ1bkxpc3Q6OmN1cnJlbnQoKSBjb25zdAotewot
ICAgIGlmIChtX292ZXJyaWRlVGV4dFJ1bikKLSAgICAgICAgcmV0dXJuIG1fb3ZlcnJpZGVUZXh0
UnVuOwotCi0gICAgaWYgKG1fY3VycmVudEluZGV4IDwgbV90ZXh0UnVucy5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBtX3RleHRSdW5zW21fY3VycmVudEluZGV4XTsKLQotICAgIHJldHVybiB7IH07
Ci19Ci0KLWlubGluZSBTaW1wbGVMaW5lQnJlYWtlcjo6VGV4dFJ1bkxpc3QmIFNpbXBsZUxpbmVC
cmVha2VyOjpUZXh0UnVuTGlzdDo6b3BlcmF0b3IrKygpCi17Ci0gICAgbV9vdmVycmlkZVRleHRS
dW4gPSB7IH07Ci0gICAgKyttX2N1cnJlbnRJbmRleDsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0K
LX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvdGV4dGxheW91dC9zaW1wbGUvU2ltcGxlVGV4dFJ1bkdlbmVyYXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L3NpbXBsZS9T
aW1wbGVUZXh0UnVuR2VuZXJhdG9yLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NGZlNjYyMzJmOWEuLjAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL3RleHRsYXlvdXQvc2ltcGxlL1NpbXBsZVRleHRSdW5HZW5lcmF0b3IuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsMjEyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICogU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAqIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiU2ltcGxlVGV4dFJ1bkdlbmVyYXRvci5oIgotCi0jaWYgRU5B
QkxFKExBWU9VVF9GT1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJCcmVha0xpbmVzLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJUZXh0Q29udGVudFByb3ZpZGVy
LmgiCi0jaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KLQotbmFtZXNwYWNlIFdlYkNv
cmUgewotbmFtZXNwYWNlIExheW91dCB7Ci0KLVdURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChT
aW1wbGVUZXh0UnVuR2VuZXJhdG9yKTsKLQotU2ltcGxlVGV4dFJ1bkdlbmVyYXRvcjo6U2ltcGxl
VGV4dFJ1bkdlbmVyYXRvcihjb25zdCBUZXh0Q29udGVudFByb3ZpZGVyJiBjb250ZW50UHJvdmlk
ZXIpCi0gICAgOiBtX2NvbnRlbnRQcm92aWRlcihjb250ZW50UHJvdmlkZXIpCi0gICAgLCBtX3Rl
eHRJdGVyYXRvcihtX2NvbnRlbnRQcm92aWRlci50ZXh0Q29udGVudCgpKQotICAgICwgbV9oYXJk
TGluZUJyZWFrSXRlcmF0b3IoY29udGVudFByb3ZpZGVyLmhhcmRMaW5lQnJlYWtzKCkpCi17Ci19
Ci0KLXN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gU2ltcGxlVGV4dFJ1bkdlbmVyYXRvcjo6Y3VycmVu
dCgpIGNvbnN0Ci17Ci0gICAgLy8gQSBydW4gY2FuIGVpdGhlciBiZQotICAgIC8vIDEuIHdoaXRl
c3BhY2UgKGNvbGxhc3BlZCwgbm9uLWNvbGxhcHNlZCBtdWx0aSBvciBzaW5nbGUpCi0gICAgLy8g
Mi4gbm9uLXdoaXRlc3BhY2UKLSAgICAvLyAzLiBzb2Z0IGxpbmUgYnJlYWsKLSAgICAvLyA0LiBo
YXJkIGxpbmUgYnJlYWsKLSAgICAvLyA1LiBpbnZhbGlkCi0gICAgcmV0dXJuIG1fY3VycmVudFJ1
bjsKLX0KLQotdm9pZCBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yOjpyZXNldCgpCi17Ci0gICAgbV94
UG9zaXRpb24gPSAwOwotICAgIG1fY3VycmVudFJ1biA9IHsgfTsKLSAgICBtX2N1cnJlbnRQb3Np
dGlvbiA9IHsgfTsKLX0KLQotdm9pZCBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yOjpmaW5kTmV4dFJ1
bigpCi17Ci0gICAgLy8gRW5kIG9mIGNvbnRlbnQgLW5vdCBldmVuIHRyYWlsaW5nIGxpbmVicmVh
a3M/Ci0gICAgaWYgKG1fY3VycmVudFBvc2l0aW9uID09IG1fY29udGVudFByb3ZpZGVyLmxlbmd0
aCgpICYmICFtX2hhcmRMaW5lQnJlYWtJdGVyYXRvci5jdXJyZW50KCkpIHsKLSAgICAgICAgbV9j
dXJyZW50UnVuID0geyB9OwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gQ2hlY2sg
aWYgd2UgYXJlIGF0IGEgPGJyPi4KLSAgICB3aGlsZSAoYXV0byogaGFyZExpbmVCcmVhayA9IG1f
aGFyZExpbmVCcmVha0l0ZXJhdG9yLmN1cnJlbnQoKSkgewotICAgICAgICBpZiAobV9jdXJyZW50
UG9zaXRpb24gPCAqaGFyZExpbmVCcmVhaykKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp
ZiAobV9jdXJyZW50UG9zaXRpb24gPT0gKmhhcmRMaW5lQnJlYWspIHsKLSAgICAgICAgICAgICsr
bV9oYXJkTGluZUJyZWFrSXRlcmF0b3I7Ci0gICAgICAgICAgICBtX2N1cnJlbnRSdW4gPSBUZXh0
UnVuOjpjcmVhdGVIYXJkTGluZUJyZWFrUnVuKG1fY3VycmVudFBvc2l0aW9uKTsKLSAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICB9Ci0KLSAgICAvLyBTb2Z0IGxpbmVicmVhaz8KLSAgICBpZiAoaXNBdFNvZnRMaW5lQnJlYWso
KSkgewotICAgICAgICBtX2N1cnJlbnRSdW4gPSBUZXh0UnVuOjpjcmVhdGVTb2Z0TGluZUJyZWFr
UnVuKG1fY3VycmVudFBvc2l0aW9uKTsKLSAgICAgICAgKyttX2N1cnJlbnRQb3NpdGlvbjsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IG1fY3VycmVu
dFBvc2l0aW9uOwotICAgIGF1dG8gaXNXaGl0ZXNwYWNlQ29sbGFwc2VkID0gbW92ZVRvTmV4dE5v
bldoaXRlc3BhY2VQb3NpdGlvbigpOwotICAgIC8vIFdoaXRlc3BhY2U/Ci0gICAgaWYgKG1fY3Vy
cmVudFBvc2l0aW9uID4gc3RhcnRQb3NpdGlvbikgewotICAgICAgICBhdXRvIHdpZHRoID0gbV9j
b250ZW50UHJvdmlkZXIud2lkdGgoc3RhcnRQb3NpdGlvbiwgaXNXaGl0ZXNwYWNlQ29sbGFwc2Vk
ID8gc3RhcnRQb3NpdGlvbiArIDEgOiBtX2N1cnJlbnRQb3NpdGlvbiwgbV94UG9zaXRpb24pOwot
ICAgICAgICBtX2N1cnJlbnRSdW4gPSBUZXh0UnVuOjpjcmVhdGVXaGl0ZXNwYWNlUnVuKHN0YXJ0
UG9zaXRpb24sIG1fY3VycmVudFBvc2l0aW9uLCB3aWR0aCwgaXNXaGl0ZXNwYWNlQ29sbGFwc2Vk
KTsKLSAgICAgICAgbV94UG9zaXRpb24gKz0gd2lkdGg7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24oKTsKLSAgICAvLyBuZXh0QnJlYWth
YmxlUG9zaXRpb24gcmV0dXJucyB0aGUgc2FtZSBwb3NpdGlvbiBmb3IgY2VydGFpbiBjaGFyYWN0
ZXJzIHN1Y2ggYXMgaHlwaGVucy4gQ2FsbCBuZXh0IGFnYWluIHdpdGggbW9kaWZpZWQgcG9zaXRp
b24uCi0gICAgYXV0byBza2lwQ3VycmVudFBvc2l0aW9uID0gbV9jdXJyZW50UG9zaXRpb24gPT0g
c3RhcnRQb3NpdGlvbjsKLSAgICBpZiAoc2tpcEN1cnJlbnRQb3NpdGlvbikgewotICAgICAgICAr
K21fY3VycmVudFBvc2l0aW9uOwotICAgICAgICBtb3ZlVG9OZXh0QnJlYWthYmxlUG9zaXRpb24o
KTsKLSAgICB9Ci0gICAgYXV0byB3aWR0aCA9IG1fY29udGVudFByb3ZpZGVyLndpZHRoKHN0YXJ0
UG9zaXRpb24sIG1fY3VycmVudFBvc2l0aW9uLCBtX3hQb3NpdGlvbik7Ci0gICAgbV9jdXJyZW50
UnVuID0gVGV4dFJ1bjo6Y3JlYXRlTm9uV2hpdGVzcGFjZVJ1bihzdGFydFBvc2l0aW9uLCBtX2N1
cnJlbnRQb3NpdGlvbiwgd2lkdGgpOwotICAgIG1feFBvc2l0aW9uICs9IHdpZHRoOwotfQotCi12
b2lkIFNpbXBsZVRleHRSdW5HZW5lcmF0b3I6Om1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbigp
Ci17Ci0gICAgYXV0byBmaW5kTmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gWyZdKGNvbnN0IFRleHRD
b250ZW50UHJvdmlkZXI6OlRleHRJdGVtJiB0ZXh0SXRlbSwgSXRlbVBvc2l0aW9uIHN0YXJ0UG9z
aXRpb24pIHsKLSAgICAgICAgLy8gU3dhcCBpdGVyYXRvcidzIGNvbnRlbnQgaWYgd2UgYWR2YW5j
ZWQgdG8gYSBuZXcgc3RyaW5nLgotICAgICAgICBhdXRvIGl0ZXJhdG9yVGV4dCA9IG1fbGluZUJy
ZWFrSXRlcmF0b3Iuc3RyaW5nVmlldygpOwotICAgICAgICBpZiAoaXRlcmF0b3JUZXh0ICE9IHRl
eHRJdGVtLnRleHQpIHsKLSAgICAgICAgICAgIGF1dG8gdGV4dExlbmd0aCA9IGl0ZXJhdG9yVGV4
dC5sZW5ndGgoKTsKLSAgICAgICAgICAgIGF1dG8gbGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGgg
PiAwID8gaXRlcmF0b3JUZXh0W3RleHRMZW5ndGggLSAxXSA6IDA7Ci0gICAgICAgICAgICBhdXRv
IHNlY29uZFRvTGFzdENoYXJhY3RlciA9IHRleHRMZW5ndGggPiAxID8gaXRlcmF0b3JUZXh0W3Rl
eHRMZW5ndGggLSAyXSA6IDA7Ci0gICAgICAgICAgICBtX2xpbmVCcmVha0l0ZXJhdG9yLnNldFBy
aW9yQ29udGV4dChsYXN0Q2hhcmFjdGVyLCBzZWNvbmRUb0xhc3RDaGFyYWN0ZXIpOwotICAgICAg
ICAgICAgbV9saW5lQnJlYWtJdGVyYXRvci5yZXNldFN0cmluZ0FuZFJlbGVhc2VJdGVyYXRvcih0
ZXh0SXRlbS50ZXh0LCB0ZXh0SXRlbS5zdHlsZS5sb2NhbGUsIExpbmVCcmVha0l0ZXJhdG9yTW9k
ZTo6RGVmYXVsdCk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAodGV4dEl0ZW0uc3R5bGUua2Vl
cEFsbFdvcmRzRm9yQ0pLKSB7Ci0gICAgICAgICAgICBpZiAodGV4dEl0ZW0uc3R5bGUuYnJlYWtO
QlNQKQotICAgICAgICAgICAgICAgIHJldHVybiBuZXh0QnJlYWthYmxlUG9zaXRpb25LZWVwaW5n
QWxsV29yZHMobV9saW5lQnJlYWtJdGVyYXRvciwgc3RhcnRQb3NpdGlvbik7Ci0gICAgICAgICAg
ICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uS2VlcGluZ0FsbFdvcmRzSWdub3JpbmdOQlNQ
KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICB9Ci0KLSAgICAg
ICAgaWYgKG1fbGluZUJyZWFrSXRlcmF0b3IubW9kZSgpID09IExpbmVCcmVha0l0ZXJhdG9yTW9k
ZTo6RGVmYXVsdCkgewotICAgICAgICAgICAgaWYgKHRleHRJdGVtLnN0eWxlLmJyZWFrTkJTUCkK
LSAgICAgICAgICAgICAgICByZXR1cm4gV2ViQ29yZTo6bmV4dEJyZWFrYWJsZVBvc2l0aW9uKG1f
bGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICAgICAgcmV0dXJuIG5l
eHRCcmVha2FibGVQb3NpdGlvbklnbm9yaW5nTkJTUChtX2xpbmVCcmVha0l0ZXJhdG9yLCBzdGFy
dFBvc2l0aW9uKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0ZXh0SXRlbS5zdHlsZS5icmVh
a05CU1ApCi0gICAgICAgICAgICByZXR1cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uV2l0aG91dFNo
b3J0Y3V0KG1fbGluZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgICAgICByZXR1
cm4gbmV4dEJyZWFrYWJsZVBvc2l0aW9uSWdub3JpbmdOQlNQV2l0aG91dFNob3J0Y3V0KG1fbGlu
ZUJyZWFrSXRlcmF0b3IsIHN0YXJ0UG9zaXRpb24pOwotICAgIH07Ci0KLSAgICB3aGlsZSAoYXV0
byogdGV4dEl0ZW0gPSBtX3RleHRJdGVyYXRvci5jdXJyZW50KCkpIHsKLSAgICAgICAgYXV0byBj
dXJyZW50SXRlbVBvc2l0aW9uID0gbV9jdXJyZW50UG9zaXRpb24uaXRlbVBvc2l0aW9uKCk7Ci0g
ICAgICAgIGF1dG8gbmV4dEJyZWFrYWJsZVBvc2l0aW9uID0gZmluZE5leHRCcmVha2FibGVQb3Np
dGlvbigqdGV4dEl0ZW0sIGN1cnJlbnRJdGVtUG9zaXRpb24pOwotICAgICAgICBBU1NFUlQobmV4
dEJyZWFrYWJsZVBvc2l0aW9uID49IGN1cnJlbnRJdGVtUG9zaXRpb24pOwotICAgICAgICBtX2N1
cnJlbnRQb3NpdGlvbiArPSAobmV4dEJyZWFrYWJsZVBvc2l0aW9uIC0gY3VycmVudEl0ZW1Qb3Np
dGlvbik7Ci0gICAgICAgIC8vIElzIHRoZSBuZXh0IGJyZWFrYWJsZSBwb3NpdGlvbiBzdGlsbCBp
biB0aGlzIHRleHQ/Ci0gICAgICAgIGF1dG8gdGV4dEl0ZW1MZW5ndGggPSB0ZXh0SXRlbS0+ZW5k
IC0gdGV4dEl0ZW0tPnN0YXJ0OwotICAgICAgICBpZiAobV9jdXJyZW50UG9zaXRpb24uaXRlbVBv
c2l0aW9uKCkgPCB0ZXh0SXRlbUxlbmd0aCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAg
IC8vIEhhcmQgbGluZSBicmVhayBpbmJldHdlZW4/Ci0gICAgICAgIGlmIChpc0F0TGluZUJyZWFr
KCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBNb3ZlIG92ZXIgdG8gdGhlIG5l
eHQgdGV4dCBpdGVtLgotICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbi5yZXNldEl0ZW1Qb3NpdGlv
bigpOwotICAgICAgICArK21fdGV4dEl0ZXJhdG9yOwotICAgIH0KLX0KLQotYm9vbCBTaW1wbGVU
ZXh0UnVuR2VuZXJhdG9yOjptb3ZlVG9OZXh0Tm9uV2hpdGVzcGFjZVBvc2l0aW9uKCkKLXsKLSAg
ICBhdXRvIHN0YXJ0UG9zaXRpb24gPSBtX2N1cnJlbnRQb3NpdGlvbjsKLSAgICBhdXRvIGNvbGxh
cHNlV2hpdGVzcGFjZSA9IGZhbHNlOwotICAgIHdoaWxlIChhdXRvKiB0ZXh0SXRlbSA9IG1fdGV4
dEl0ZXJhdG9yLmN1cnJlbnQoKSkgewotICAgICAgICBhdXRvIHN0cmluZyA9IHRleHRJdGVtLT50
ZXh0OwotICAgICAgICBhdXRvIHByZXNlcnZlTmV3bGluZSA9IHRleHRJdGVtLT5zdHlsZS5wcmVz
ZXJ2ZU5ld2xpbmU7Ci0gICAgICAgIGNvbGxhcHNlV2hpdGVzcGFjZSA9IHRleHRJdGVtLT5zdHls
ZS5jb2xsYXBzZVdoaXRlc3BhY2U7Ci0gICAgICAgIGZvciAoOyBtX2N1cnJlbnRQb3NpdGlvbi5p
dGVtUG9zaXRpb24oKSA8IHN0cmluZy5sZW5ndGgoKTsgKyttX2N1cnJlbnRQb3NpdGlvbikgewot
ICAgICAgICAgICAgYXV0byBjaGFyYWN0ZXIgPSBzdHJpbmdbbV9jdXJyZW50UG9zaXRpb24uaXRl
bVBvc2l0aW9uKCldOwotICAgICAgICAgICAgYm9vbCBpc1doaXRlc3BhY2UgPSBjaGFyYWN0ZXIg
PT0gJyAnIHx8IGNoYXJhY3RlciA9PSAnXHQnIHx8ICghcHJlc2VydmVOZXdsaW5lICYmIGNoYXJh
Y3RlciA9PSAnXG4nKTsKLSAgICAgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKQotICAgICAgICAg
ICAgICAgIHJldHVybiBjb2xsYXBzZVdoaXRlc3BhY2UgJiYgbV9jdXJyZW50UG9zaXRpb24gLSBz
dGFydFBvc2l0aW9uID4gMTsKLSAgICAgICAgfQotICAgICAgICAvLyBDaGVjayBpZiB0aGVyZSdz
IGEgaGFyZCBsaW5lYnJlYWsgYmV0d2VlbiB0ZXh0IGNvbnRlbnQuCi0gICAgICAgIGlmIChpc0F0
TGluZUJyZWFrKCkpCi0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICAvLyBNb3ZlIG92ZXIg
dG8gdGhlIG5leHQgdGV4dCBpdGVtLgotICAgICAgICBtX2N1cnJlbnRQb3NpdGlvbi5yZXNldEl0
ZW1Qb3NpdGlvbigpOwotICAgICAgICArK21fdGV4dEl0ZXJhdG9yOwotICAgIH0KLQotICAgIHJl
dHVybiBjb2xsYXBzZVdoaXRlc3BhY2UgJiYgbV9jdXJyZW50UG9zaXRpb24gLSBzdGFydFBvc2l0
aW9uID4gMTsKLX0KLQotYm9vbCBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yOjppc0F0TGluZUJyZWFr
KCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogY3VycmVudEhhcmRMaW5lQnJlYWtQb3NpdGlvbiA9
IG1faGFyZExpbmVCcmVha0l0ZXJhdG9yLmN1cnJlbnQoKSkKLSAgICAgICAgcmV0dXJuICpjdXJy
ZW50SGFyZExpbmVCcmVha1Bvc2l0aW9uID09IG1fY3VycmVudFBvc2l0aW9uOwotICAgIHJldHVy
biBpc0F0U29mdExpbmVCcmVhaygpOwotfQotCi1ib29sIFNpbXBsZVRleHRSdW5HZW5lcmF0b3I6
OmlzQXRTb2Z0TGluZUJyZWFrKCkgY29uc3QKLXsKLSAgICBhdXRvKiB0ZXh0SXRlbSA9IG1fdGV4
dEl0ZXJhdG9yLmN1cnJlbnQoKTsKLSAgICBpZiAoIXRleHRJdGVtKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBpZiAoIXRleHRJdGVtLT5zdHlsZS5wcmVzZXJ2ZU5ld2xpbmUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0ZXh0SXRlbS0+dGV4dFttX2N1cnJlbnRQ
b3NpdGlvbi5pdGVtUG9zaXRpb24oKV0gPT0gJ1xuJzsKLX0KLQotfQotfQotI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0
L3NpbXBsZS9TaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0L3NpbXBsZS9TaW1wbGVUZXh0UnVuR2VuZXJhdG9y
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDNlNzc0NDAwMTljLi4wMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy90ZXh0bGF5b3V0
L3NpbXBsZS9TaW1wbGVUZXh0UnVuR2VuZXJhdG9yLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICogQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
LSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCi0g
KiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaWYgRU5BQkxFKExBWU9VVF9G
T1JNQVRUSU5HX0NPTlRFWFQpCi0KLSNpbmNsdWRlICJUZXh0Q29udGVudFByb3ZpZGVyLmgiCi0j
aW5jbHVkZSA8d3RmL0lzb01hbGxvYy5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRCcmVha0l0
ZXJhdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyU3R5bGU7Ci0K
LW5hbWVzcGFjZSBMYXlvdXQgewotCi1jbGFzcyBTaW1wbGVUZXh0UnVuR2VuZXJhdG9yIHsKLSAg
ICBXVEZfTUFLRV9JU09fQUxMT0NBVEVEKFNpbXBsZVRleHRSdW5HZW5lcmF0b3IpOwotcHVibGlj
OgotICAgIFNpbXBsZVRleHRSdW5HZW5lcmF0b3IoY29uc3QgVGV4dENvbnRlbnRQcm92aWRlciYp
OwotCi0gICAgdm9pZCBmaW5kTmV4dFJ1bigpOwotICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4g
Y3VycmVudCgpIGNvbnN0OwotICAgIHZvaWQgcmVzZXQoKTsKLQotcHJpdmF0ZToKLSAgICB2b2lk
IG1vdmVUb05leHRCcmVha2FibGVQb3NpdGlvbigpOwotICAgIGJvb2wgbW92ZVRvTmV4dE5vbldo
aXRlc3BhY2VQb3NpdGlvbigpOwotICAgIGJvb2wgaXNBdExpbmVCcmVhaygpIGNvbnN0OwotICAg
IGJvb2wgaXNBdFNvZnRMaW5lQnJlYWsoKSBjb25zdDsKLSAgICBJdGVtUG9zaXRpb24gdG9JdGVt
UG9zaXRpb24oQ29udGVudFBvc2l0aW9uKSBjb25zdDsKLQotICAgIHN0cnVjdCBQb3NpdGlvbiB7
Ci0gICAgICAgIFBvc2l0aW9uKCkgPSBkZWZhdWx0OwotCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9
PShDb250ZW50UG9zaXRpb24gcG9zaXRpb24pIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFBvc2l0
aW9uID09IHBvc2l0aW9uOyB9Ci0gICAgICAgIGJvb2wgb3BlcmF0b3I8KENvbnRlbnRQb3NpdGlv
biBwb3NpdGlvbikgY29uc3QgeyByZXR1cm4gbV9jb250ZW50UG9zaXRpb24gPCBwb3NpdGlvbjsg
fQotICAgICAgICBvcGVyYXRvciBDb250ZW50UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBjb250
ZW50UG9zaXRpb24oKTsgfQotICAgICAgICBQb3NpdGlvbiYgb3BlcmF0b3IrKygpOwotICAgICAg
ICBQb3NpdGlvbiYgb3BlcmF0b3IrPSh1bnNpZ25lZCk7Ci0KLSAgICAgICAgdm9pZCByZXNldEl0
ZW1Qb3NpdGlvbigpIHsgbV9pdGVtUG9zaXRpb24gPSAwOyB9Ci0KLSAgICAgICAgQ29udGVudFBv
c2l0aW9uIGNvbnRlbnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29udGVudFBvc2l0aW9u
OyB9Ci0gICAgICAgIEl0ZW1Qb3NpdGlvbiBpdGVtUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBt
X2l0ZW1Qb3NpdGlvbjsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgQ29udGVudFBvc2l0aW9u
IG1fY29udGVudFBvc2l0aW9uIHsgMCB9OwotICAgICAgICBJdGVtUG9zaXRpb24gbV9pdGVtUG9z
aXRpb24geyAwIH07Ci0gICAgfTsKLQotICAgIGNvbnN0IFRleHRDb250ZW50UHJvdmlkZXImIG1f
Y29udGVudFByb3ZpZGVyOwotICAgIENvbnN0VmVjdG9ySXRlcmF0b3I8VGV4dENvbnRlbnRQcm92
aWRlcjo6VGV4dEl0ZW0+IG1fdGV4dEl0ZXJhdG9yOwotICAgIENvbnN0VmVjdG9ySXRlcmF0b3I8
Q29udGVudFBvc2l0aW9uPiBtX2hhcmRMaW5lQnJlYWtJdGVyYXRvcjsKLQotICAgIFBvc2l0aW9u
IG1fY3VycmVudFBvc2l0aW9uOwotICAgIHN0ZDo6b3B0aW9uYWw8VGV4dFJ1bj4gbV9jdXJyZW50
UnVuOwotICAgIGZsb2F0IG1feFBvc2l0aW9uIHsgMCB9OwotCi0gICAgTGF6eUxpbmVCcmVha0l0
ZXJhdG9yIG1fbGluZUJyZWFrSXRlcmF0b3I7Ci19OwotCi1pbmxpbmUgU2ltcGxlVGV4dFJ1bkdl
bmVyYXRvcjo6UG9zaXRpb24mIFNpbXBsZVRleHRSdW5HZW5lcmF0b3I6OlBvc2l0aW9uOjpvcGVy
YXRvcisrKCkKLXsKLSAgICArK21fY29udGVudFBvc2l0aW9uOwotICAgICsrbV9pdGVtUG9zaXRp
b247Ci0gICAgcmV0dXJuICp0aGlzOwotfQotCi1pbmxpbmUgU2ltcGxlVGV4dFJ1bkdlbmVyYXRv
cjo6UG9zaXRpb24mIFNpbXBsZVRleHRSdW5HZW5lcmF0b3I6OlBvc2l0aW9uOjpvcGVyYXRvcis9
KHVuc2lnbmVkIGFkdmFuY2UpCi17Ci0gICAgbV9jb250ZW50UG9zaXRpb24gKz0gYWR2YW5jZTsK
LSAgICBtX2l0ZW1Qb3NpdGlvbiArPSBhZHZhbmNlOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
fQotfQotI2VuZGlmCg==
</data>
<flag name="review"
          id="370027"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>