<?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>226872</bug_id>
          
          <creation_ts>2021-06-10 04:05:02 -0700</creation_ts>
          <short_desc>Add WeakHashMap</short_desc>
          <delta_ts>2021-06-16 17:07:55 -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>Web Template Framework</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="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fujii</cc>
    
    <cc>ggaren</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>koivisto</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1768503</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-10 04:05:02 -0700</bug_when>
    <thetext>Add the basic version of WeakHashMap which replies on lazy deletion of key &amp; value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768506</commentid>
    <comment_count>1</comment_count>
      <attachid>431061</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-10 04:18:01 -0700</bug_when>
    <thetext>Created attachment 431061
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768581</commentid>
    <comment_count>2</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 09:44:15 -0700</bug_when>
    <thetext>Pending ews, this approach looks good to me. 

But I also think we should add a counter, so that after N operations on a weak map, we iterate and clear all nulls. Such a counter maintains the average case amortized O(1) guarantee. And that way, when we talk about the need for a more intrusive way to clear nulls, we’ll compare against the best possible baseline and avoid premature optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768634</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-10 11:43:44 -0700</bug_when>
    <thetext>(In reply to Geoffrey Garen from comment #2)
&gt; Pending ews, this approach looks good to me. 
&gt; 
&gt; But I also think we should add a counter, so that after N operations on a
&gt; weak map, we iterate and clear all nulls. Such a counter maintains the
&gt; average case amortized O(1) guarantee. And that way, when we talk about the
&gt; need for a more intrusive way to clear nulls, we’ll compare against the best
&gt; possible baseline and avoid premature optimization.

Which operations though? If done natively, that seems like it&apos;s gonna bloat the code size everywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768635</commentid>
    <comment_count>4</comment_count>
      <attachid>431100</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-10 11:43:57 -0700</bug_when>
    <thetext>Created attachment 431100
Fixed the builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768688</commentid>
    <comment_count>5</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 13:04:26 -0700</bug_when>
    <thetext>&gt; &gt; But I also think we should add a counter, so that after N operations on a
&gt; &gt; weak map, we iterate and clear all nulls. Such a counter maintains the
&gt; &gt; average case amortized O(1) guarantee. And that way, when we talk about the
&gt; &gt; need for a more intrusive way to clear nulls, we’ll compare against the best
&gt; &gt; possible baseline and avoid premature optimization.
&gt; 
&gt; Which operations though? If done natively, that seems like it&apos;s gonna bloat
&gt; the code size everywhere.

My straw man proposal would be all insertion, removal, and lookup operations.

If that has a significant impact on code size, my second straw man proposal would be not to mark those functions inline. (I seriously doubt their value as inline functions on modern processors, since the cost is always going to be in the out of line lookup function.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768689</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-10 13:05:08 -0700</bug_when>
    <thetext>Note that I&apos;m proposing an increment, a branch, and a function call. So, yes, a few bytes of code, but not a ton.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768908</commentid>
    <comment_count>7</comment_count>
      <attachid>431187</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-11 04:20:20 -0700</bug_when>
    <thetext>Created attachment 431187
Added amortized deletion</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1768965</commentid>
    <comment_count>8</comment_count>
      <attachid>431187</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2021-06-11 09:27:05 -0700</bug_when>
    <thetext>Comment on attachment 431187
Added amortized deletion

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769150</commentid>
    <comment_count>9</comment_count>
      <attachid>431187</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-11 18:42:13 -0700</bug_when>
    <thetext>Comment on attachment 431187
Added amortized deletion

Clearing flags on attachment: 431187

Committed r278803 (238760@main): &lt;https://commits.webkit.org/238760@main&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769151</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2021-06-11 18:42:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1769154</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-06-11 18:43:37 -0700</bug_when>
    <thetext>&lt;rdar://problem/79227218&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1770478</commentid>
    <comment_count>12</comment_count>
    <who name="Fujii Hironori">fujii</who>
    <bug_when>2021-06-16 17:07:55 -0700</bug_when>
    <thetext>Filed: Bug 227102 – [Win] TestWTF.WTF_WeakPtr.WeakHashMapIterators is crashing</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431061</attachid>
            <date>2021-06-10 04:18:01 -0700</date>
            <delta_ts>2021-06-10 11:43:54 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226872-20210610041800.patch</filename>
            <type>text/plain</type>
            <size>54997</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhkNjlkYzlkNWE1Yjg0MjQ5N2UwNWE2
ZDQ3OWRiZDRjMzM4YjEwNzAuLjc2ZGRlMjIxMjU0ZTI0ODExZTZiYWNlYTc1YzZiMjhhY2Q5ZDI2
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMjEtMDYtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdlYWtIYXNoTWFwCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHNpbXBsZSB2ZXJzaW9uIG9m
IFdlYWtIYXNoTWFwIHdoaWNoIHJlcGxpZXMgb24gbGF6eSBkZWxldGVpb24gb2Yga2V5LXZhbHVl
IHBhaXJzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9XZWFrSGFzaE1hcC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXApOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OlBlZWtLZXlWYWx1ZVBhaXJUcmFpdHMpOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6V2Vha0hhc2hNYXA6OlBlZWtUeXBlKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNo
TWFwOjpQZWVrUHRyVHlwZSk6IEFkZGVkLiBVbmxpa2UgYSByZWd1bGFyIEhhc2hNYXAsIHdlIG5l
ZWQgdG8gZmFrZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgcG9pbnRlciB2YWx1ZSB3aXRoIHRoaXMg
c3RydWN0IHNpbmNlIGtleS12YWx1ZSBwYWlyIGRvZXNuJ3QgZXhpc3QgaW4gSGFzaFRhYmxlIGl0
c2VsZiBhcyBpdCBzdG9yZXMKKyAgICAgICAgUmVmPFdlYWtSZWZJbXBsPiBpbnN0ZWFkLgorICAg
ICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6V2Vha0hhc2hNYXBJdGVyYXRvckJhc2UpOiBBZGRlZC4g
SGFzIGEgYnVuY2ggb2YgaGVscGVyIGZ1bmN0aW9ucyBzbyB0aGF0CisgICAgICAgIFdlYWtIYXNo
TWFwSXRlcmF0b3IgYW5kIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvciBjYW4gc2hhcmUgdGhlIGNv
ZGUuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpXZWFrSGFzaE1hcEl0ZXJhdG9yKTogQWRk
ZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpXZWFrSGFzaE1hcENvbnN0SXRlcmF0b3Ip
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OkFkZFJlc3VsdCk6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6YmVnaW4pOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OmVuZCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6YWRk
KTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpzZXQpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6V2Vha0hhc2hNYXA6OmZpbmQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hh
c2hNYXA6OmNvbnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpnZXQp
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OnJlbW92ZSk6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6cmVtb3ZlSWYpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpj
YXBhY2l0eSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6aXNFbXB0eUlnbm9y
aW5nTnVsbFJlZmVyZW5jZXMpOiBBZGRlZC4gVGhpcyBpcyBha2luIHRvIFdlYWtIYXNoU2V0Ojpj
b21wdXRlc0VtcHR5LgorICAgICAgICBQZXIgcHJpb3IgZGlzY3Vzc2lvbiwgd2UgaW50ZW5kIHRv
IHJlbmFtZSBXZWFrSGFzaFNldCdzIHZlcnNpb24gdG8gdGhpcyBuYW1lIGFzIHdlbGwgZm9yIGNs
YXJpdHkuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpoYXNOdWxsUmVmZXJlbmNlcyk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6Y29tcHV0ZVNpemUpOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OnJlbW92ZU51bGxSZWZlcmVuY2VzKTogQWRkZWQuIFNp
bmNlIFdlYWtIYXNoTWFwIGRvZXNuJ3QgZWFnZXJseSBkZWxldGUgdGhlIHZhbHVlCisgICAgICAg
IHdoZW4gdGhlIGtleSBnb2VzIGF3YXksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3
aGVuIHZhbHVlcyBoZWxkIG9udG8gYnkgV2Vha1JlZkltcGwgd2l0aAorICAgICAgICB0aGUgbnVs
bHB0ciBiYWNrIHBvaW50ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgZW4gbWFzc2UuCisgICAgICAgIChX
VEY6OldlYWtIYXNoTWFwOjpjaGVja0NvbnNpc3RlbmN5KTogQWRkZWQuCisgICAgICAgIChXVEY6
OldlYWtIYXNoTWFwOjptYWtlS2V5SW1wbCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFz
aE1hcDo6a2V5SW1wbElmRXhpc3RzKTogQWRkZWQuCisgICAgICAgICogd3RmL1dlYWtQdHIuaDoK
KwogMjAyMS0wNi0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZHVjZSB1c2Ugb2YgcmVpbnRlcnByZXRfY2FzdDw+IGluIHRoZSBjb2RlYmFzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDQyMDQyYTY5N2NlZGJkYzNj
YWYxMmU3YThiNGFhOTc2OGRkOTE4MC4uMDZlMDk3NzAxYTJiZGVlZTdhMGIwMDYwZjU0NzI0N2M0
ZWNiNGNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01
MTEsNiArNTExLDcgQEAKIAkJOUJCOTFGNTEyNjQ4RUE0RDAwQTU2MjE3IC8qIENoZWNrZWRQdHIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbVN0cmluZ1RhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0b21TdHJpbmdUYWJsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBB
dG9tU3RyaW5nVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXRvbVN0cmluZ1RhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCRTE1MzM1MjY3MUYwMEYwMEM3RDA5NiAvKiBXZWFr
SGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5l
ckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250
YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUI4OUI4NzIy
MUUwMDBGMDBFQjRDRUEgLyogU0RLVmFyaWFudC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyNTcsOCArMTI1OCw4IEBACiAJCQkJNzkzNkQ2QTkxQzk5RjhBRTAw
MEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQxRjBERTEzRjAwQjcxOTU0IC8q
IFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRl
ZEFycmF5TWFwLmggKi8sCi0JCQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5n
VHJlZS5oICovLAogCQkJCUJDQTMwQzdGMjY2RDMwMzQwMDBEMjMwQyAvKiBTcGFuLmggKi8sCisJ
CQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLAogCQkJCUE4
QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgKi8sCiAJCQkJQThBNDczMEYxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggKi8sCkBAIC0xMzM3LDYgKzEzMzgsNyBAQAogCQkJ
CUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKIAkJCQkwRjY2QjI4ODFE
Qzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwICovLAogCQkJCTBGNjZCMjg5MURDOTdCQUIw
MDRBMUQzRiAvKiBXYWxsVGltZS5oICovLAorCQkJCTlCRTE1MzM1MjY3MUYwMEYwMEM3RDA5NiAv
KiBXZWFrSGFzaE1hcC5oICovLAogCQkJCTlCNjdGM0YxMjIyOEQ1MzEwMDMwREU5QyAvKiBXZWFr
SGFzaFNldC5oICovLAogCQkJCTgzQUJCM0MwMjBCMzgyMzIwMEJBMzMwNiAvKiBXZWFrT2JqQ1B0
ci5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CmluZGV4IDlhYjgxMjYyOWZhNjlhMjRlZGZjZGYxZThkMTdhZjc2YjNm
MzkzMWMuLjY4NzIzODJkMjM3YWU5ZjJlZGUxYjUwOTM2ZDgzOTc4OGI3NDNiZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CkBAIC0zMDQsNiArMzA0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIFdURkNvbmZpZy5oCiAgICAgV1RGU2VtYXBob3JlLmgKICAgICBXYWxsVGltZS5oCisgICAg
V2Vha0hhc2hNYXAuaAogICAgIFdlYWtIYXNoU2V0LmgKICAgICBXZWFrUHRyLmgKICAgICBXZWFr
UmFuZG9tLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9XZWFrSGFzaE1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMGYzNWZlNDg3MWJmNTRmOGNj
ZDM4MzJlYmFkYmJhNWE0ZDA1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9X
ZWFrSGFzaE1hcC5oCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVmFs
dWUgd2lsbCBiZSBkZWxldGVkIGxhemlseSB1cG9uIHJlYXNoLiBGb3IgbWFudWFsIGNsZWFudXAs
IGNhbGwgcmVtb3ZlTnVsbFJlZmVyZW5jZXMoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQ291bnRlciA9IEVtcHR5Q291bnRlcj4KK2Ns
YXNzIFdlYWtIYXNoTWFwIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKworICAgIHVzaW5nIFJlZlR5cGUgPSBSZWY8V2Vha1B0ckltcGw8Q291bnRlcj4+Owor
ICAgIHVzaW5nIEtleVRyYWl0cyA9IEhhc2hUcmFpdHM8S2V5VHlwZT47CisgICAgdXNpbmcgVmFs
dWVUcmFpdHMgPSBIYXNoVHJhaXRzPFZhbHVlVHlwZT47CisgICAgdXNpbmcgV2Vha0hhc2hJbXBs
TWFwID0gSGFzaE1hcDxSZWZUeXBlLCBWYWx1ZVR5cGU+OworCisgICAgc3RydWN0IFBlZWtLZXlW
YWx1ZVBhaXJUcmFpdHMgOiBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8S2V5VHlw
ZSY+LCBIYXNoVHJhaXRzPFZhbHVlVHlwZSY+PiB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgIHN0YXRpYyBib29s
IGlzRW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEhhc2hU
cmFpdHM8S2V5VHlwZSY+LCBIYXNoVHJhaXRzPFZhbHVlVHlwZSY+Pjo6VHJhaXRUeXBlJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8
S2V5VHJhaXRzPih2YWx1ZS5rZXkpOworICAgICAgICB9CisgICAgfTsKKyAgICB1c2luZyBQZWVr
S2V5VmFsdWVQYWlyVHlwZSA9IHR5cGVuYW1lIFBlZWtLZXlWYWx1ZVBhaXJUcmFpdHM6OlRyYWl0
VHlwZTsKKworICAgIHN0cnVjdCBQZWVrVHlwZSB7CisgICAgICAgIEtleVR5cGUmIGtleTsKKyAg
ICAgICAgVmFsdWVUeXBlJiB2YWx1ZTsKKyAgICB9OworCisgICAgc3RydWN0IFBlZWtQdHJUeXBl
IHsKKyAgICAgICAgUGVla1B0clR5cGUoY29uc3QgUGVla1R5cGUmIHBlZWspCisgICAgICAgICAg
ICA6IG1fcGVlayhwZWVrKQorICAgICAgICB7IH0KKworICAgICAgICBjb25zdCBQZWVrVHlwZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9wZWVrOyB9CisgICAgICAgIFBlZWtUeXBlJiBv
cGVyYXRvciooKSB7IHJldHVybiBtX3BlZWs7IH0KKworICAgICAgICBjb25zdCBQZWVrVHlwZSog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3BlZWs7IH0KKyAgICAgICAgUGVla1R5cGUq
IG9wZXJhdG9yLT4oKSB7IHJldHVybiAmbV9wZWVrOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBQZWVrVHlwZSBtX3BlZWs7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVy
YXRvclR5cGUsIHR5cGVuYW1lIEl0ZXJhdG9yUGVla1B0clR5cGUsIHR5cGVuYW1lIEl0ZXJhdG9y
UGVla1R5cGU+CisgICAgY2xhc3MgV2Vha0hhc2hNYXBJdGVyYXRvckJhc2UgOiBwdWJsaWMgc3Rk
OjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBJdGVyYXRvclBlZWtUeXBlLCBz
dGQ6OnB0cmRpZmZfdCwgSXRlcmF0b3JQZWVrUHRyVHlwZSwgSXRlcmF0b3JQZWVrVHlwZT4gewor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgV2Vha0hhc2hNYXBJdGVyYXRvckJhc2UoSXRlcmF0b3JU
eXBlIHBvc2l0aW9uLCBJdGVyYXRvclR5cGUgZW5kKQorICAgICAgICAgICAgOiBtX3Bvc2l0aW9u
IHsgcG9zaXRpb24gfQorICAgICAgICAgICAgLCBtX2VuZFBvc2l0aW9uIHsgZW5kIH0KKyAgICAg
ICAgeworICAgICAgICAgICAgc2tpcEVtcHR5QnVja2V0cygpOworICAgICAgICB9CisKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBJdGVyYXRvclBlZWtUeXBlIG1ha2VQZWVrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byogZW50cnkgPSBtX3Bvc2l0aW9uLmdldCgpOworICAgICAgICAgICAg
S2V5VHlwZSoga2V5ID0gZW50cnktPmtleS0+dGVtcGxhdGUgZ2V0PEtleVR5cGU+KCk7CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0b3JQZWVrVHlwZSB7ICprZXksIGVudHJ5LT52YWx1ZSB9Owor
ICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBJdGVyYXRvclBlZWtUeXBlIG1ha2VQ
ZWVrKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogZW50cnkgPSBtX3Bvc2l0
aW9uLmdldCgpOworICAgICAgICAgICAgS2V5VHlwZSoga2V5ID0gZW50cnktPmtleS0+dGVtcGxh
dGUgZ2V0PEtleVR5cGU+KCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0b3JQZWVrVHlwZSB7
ICprZXksIGNvbnN0X2Nhc3Q8VmFsdWVUeXBlJj4oZW50cnktPnZhbHVlKSB9OworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhZHZhbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KG1fcG9zaXRpb24gIT0gbV9lbmRQb3NpdGlvbik7CisgICAgICAgICAgICArK21fcG9zaXRpb247
CisgICAgICAgICAgICBza2lwRW1wdHlCdWNrZXRzKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9w
b3NpdGlvbiAhPSBtX2VuZFBvc2l0aW9uICYmICFtX3Bvc2l0aW9uLT5rZXkuZ2V0KCkpCisgICAg
ICAgICAgICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3JU
eXBlIG1fcG9zaXRpb247CisgICAgICAgIEl0ZXJhdG9yVHlwZSBtX2VuZFBvc2l0aW9uOworICAg
IH07CisKKyAgICBjbGFzcyBXZWFrSGFzaE1hcEl0ZXJhdG9yIDogcHVibGljIFdlYWtIYXNoTWFw
SXRlcmF0b3JCYXNlPHR5cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IsIFBlZWtQdHJU
eXBlLCBQZWVrVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQmFzZSA9IFdlYWtI
YXNoTWFwSXRlcmF0b3JCYXNlPHR5cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IsIFBl
ZWtQdHJUeXBlLCBQZWVrVHlwZT47CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdl
YWtIYXNoTWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bvc2l0aW9u
ID09IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFdlYWtIYXNoTWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bv
c2l0aW9uICE9IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKworICAgICAgICBQZWVrUHRyVHlw
ZSBnZXQoKSB7IHJldHVybiBCYXNlOjptYWtlUGVlaygpOyB9CisgICAgICAgIFBlZWtUeXBlIG9w
ZXJhdG9yKigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKyAgICAgICAgUGVla1B0clR5
cGUgb3BlcmF0b3ItPigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKworICAgICAgICBX
ZWFrSGFzaE1hcEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
QmFzZTo6YWR2YW5jZSgpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBXZWFrSGFzaE1hcEl0ZXJhdG9yKFdlYWtIYXNoSW1wbE1h
cCYgbWFwLCB0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6Oml0ZXJhdG9yIHBvc2l0aW9uKQorICAg
ICAgICAgICAgOiBCYXNlKHBvc2l0aW9uLCBtYXAuZW5kKCkpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3Mg
V2Vha0hhc2hNYXA7CisgICAgfTsKKworICAgIGNsYXNzIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRv
ciA6IHB1YmxpYyBXZWFrSGFzaE1hcEl0ZXJhdG9yQmFzZTx0eXBlbmFtZSBXZWFrSGFzaEltcGxN
YXA6OmNvbnN0X2l0ZXJhdG9yLCBjb25zdCBQZWVrUHRyVHlwZSwgY29uc3QgUGVla1R5cGU+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIEJhc2UgPSBXZWFrSGFzaE1hcEl0ZXJhdG9yQmFz
ZTx0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6OmNvbnN0X2l0ZXJhdG9yLCBjb25zdCBQZWVrUHRy
VHlwZSwgY29uc3QgUGVla1R5cGU+OworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBX
ZWFrSGFzaE1hcENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bv
c2l0aW9uID09IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IEJhc2U6Om1fcG9zaXRpb24gIT0gb3RoZXIuQmFzZTo6bV9wb3NpdGlvbjsgfQorCisgICAgICAg
IGNvbnN0IFBlZWtQdHJUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7
IH0KKyAgICAgICAgY29uc3QgUGVla1R5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gQmFz
ZTo6bWFrZVBlZWsoKTsgfQorICAgICAgICBjb25zdCBQZWVrUHRyVHlwZSBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gQmFzZTo6bWFrZVBlZWsoKTsgfQorCisgICAgICAgIFdlYWtIYXNoTWFw
Q29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6
OmFkdmFuY2UoKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgV2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yKGNvbnN0IFdlYWtIYXNo
SW1wbE1hcCYgbWFwLCB0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6OmNvbnN0X2l0ZXJhdG9yIHBv
c2l0aW9uKQorICAgICAgICAgICAgOiBCYXNlKHBvc2l0aW9uLCBtYXAuZW5kKCkpCisgICAgICAg
IHsgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBm
cmllbmQgY2xhc3MgV2Vha0hhc2hNYXA7CisgICAgfTsKKworICAgIHN0cnVjdCBBZGRSZXN1bHQg
eworICAgICAgICBBZGRSZXN1bHQoKSA6IGlzTmV3RW50cnkoZmFsc2UpIHsgfQorICAgICAgICBB
ZGRSZXN1bHQoV2Vha0hhc2hNYXBJdGVyYXRvciBpdCwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJh
dG9yKGl0KSwgaXNOZXdFbnRyeShpc05ld0VudHJ5KSB7IH0KKyAgICAgICAgV2Vha0hhc2hNYXBJ
dGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5OworCisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc05ld0VudHJ5OyB9CisgICAg
fTsKKworICAgIHVzaW5nIGl0ZXJhdG9yID0gV2Vha0hhc2hNYXBJdGVyYXRvcjsKKyAgICB1c2lu
ZyBjb25zdF9pdGVyYXRvciA9IFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvcjsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gV2Vha0hhc2hNYXBJdGVyYXRvcihtX21hcCwgbV9tYXAuYmVn
aW4oKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBXZWFrSGFzaE1hcEl0ZXJhdG9y
KG1fbWFwLCBtX21hcC5lbmQoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvcihtX21hcCwgbV9tYXAuYmVnaW4oKSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBXZWFrSGFzaE1hcENv
bnN0SXRlcmF0b3IobV9tYXAsIG1fbWFwLmVuZCgpKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1
bmN0b3IpIHsgcmV0dXJuIG1fbWFwLmVuc3VyZShrZXksIGZ1bmN0b3IpOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgS2V5VHlwZSYga2V5LCBU
JiYgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWFwLmFkZChtYWtl
S2V5SW1wbChrZXkpLCBzdGQ6OmZvcndhcmQ8VD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIEFk
ZFJlc3VsdCB7IFdlYWtIYXNoTWFwSXRlcmF0b3IobV9tYXAsIGFkZFJlc3VsdC5pdGVyYXRvciks
IGFkZFJlc3VsdC5pc05ld0VudHJ5IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVj4KKyAgICB2b2lkIHNldChjb25zdCBUJiBrZXksIFYmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fbWFwLnNldChtYWtlS2V5SW1wbChrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7
CisgICAgfQorCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgewor
ICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAgIGlm
ICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKyAgICAgICAgcmV0dXJuIFdl
YWtIYXNoTWFwSXRlcmF0b3IobV9tYXAsIG1fbWFwLmZpbmQoKmtleUltcGwpKTsKKyAgICB9CisK
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8qIGtleUltcGwgPSBrZXlJbXBsSWZFeGlzdHMoa2V5KTsKKyAgICAgICAg
aWYgKCFrZXlJbXBsKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworICAgICAgICByZXR1cm4g
V2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yKG1fbWFwLCBtX21hcC5maW5kKCprZXlJbXBsKSk7Cisg
ICAgfQorCisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAg
IGlmICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gbV9tYXAuY29udGFpbnMoKmtleUltcGwpOworICAgIH0KKworICAgIHR5cGVuYW1lIFZhbHVl
VHJhaXRzOjpQZWVrVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAg
YXV0byoga2V5SW1wbCA9IGtleUltcGxJZkV4aXN0cyhrZXkpOworICAgICAgICBpZiAoIWtleUlt
cGwpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnBlZWsoVmFsdWVUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7CisgICAgICAgIHJldHVybiBtX21hcC5nZXQoKmtleUltcGwpOworICAgIH0K
KworICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IHJldHVybiBtX21hcC5yZW1vdmUoaXQu
bV9wb3NpdGlvbik7IH0KKyAgICBib29sIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAg
eworICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAg
IGlmICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG1fbWFwLnJlbW92ZShrZXlJbXBsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIGJvb2wgcmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tYXAucmVtb3ZlSWYoWyZdKGF1dG8mIGl0ZXJhdG9yKSB7CisgICAgICAg
ICAgICBib29sIGlzUmVsZWFzZWRXZWFrS2V5ID0gIWl0ZXJhdG9yLmtleS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChpc1JlbGVhc2VkV2Vha0tleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKGl0ZXJhdG9yKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgcmV0dXJuIG1fbWFwLmNsZWFyKCk7IH0KKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNhcGFjaXR5KCk7IH0KKyAg
ICBib29sIGlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkgY29uc3QgeyByZXR1cm4gYmVn
aW4oKSA9PSBlbmQoKTsgfQorCisgICAgYm9vbCBoYXNOdWxsUmVmZXJlbmNlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjphbnlPZihtX21hcCwgW10gKGF1dG8mIGl0ZXJhdG9y
KSB7IHJldHVybiAhaXRlcmF0b3Iua2V5LmdldCgpOyB9KTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBjb21wdXRlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PFdlYWtIYXNo
TWFwJj4oKnRoaXMpLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIHJldHVybiBtX21h
cC5zaXplKCk7CisgICAgfQorCisgICAgYm9vbCByZW1vdmVOdWxsUmVmZXJlbmNlcygpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAucmVtb3ZlSWYoW10oYXV0byYgaXRlcmF0b3IpIHsgcmV0
dXJuICFpdGVyYXRvci5rZXkuZ2V0KCk7IH0pOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyBtX21hcC5jaGVja0NvbnNpc3Rl
bmN5KCk7IH0KKyNlbHNlCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
UmVmVHlwZSBtYWtlS2V5SW1wbChjb25zdCBUJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
Km1ha2VXZWFrUHRyPEtleVR5cGU+KGNvbnN0X2Nhc3Q8VCY+KGtleSkpLm1faW1wbDsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgV2Vha1B0ckltcGw8Q291
bnRlcj4qIGtleUltcGxJZkV4aXN0cyhjb25zdCBUJiBrZXkpCisgICAgeworICAgICAgICBhdXRv
JiB3ZWFrUHRySW1wbCA9IGtleS53ZWFrUHRyRmFjdG9yeSgpLm1faW1wbDsKKyAgICAgICAgaWYg
KCF3ZWFrUHRySW1wbCB8fCAhKndlYWtQdHJJbXBsKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB3ZWFrUHRySW1wbC5nZXQoKTsKKyAgICB9CisKKyAgICBXZWFr
SGFzaEltcGxNYXAgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpXZWFrSGFzaE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaCBiL1Nv
dXJjZS9XVEYvd3RmL1dlYWtQdHIuaAppbmRleCAxMmM0YjY4OTg4NzI5OTNhMWE1M2Y1OWY5NmI2
ZDBhYmYyNjdiMGIzLi44NjJiODVkYTQ0YWU4MjQ3MDc3MjFlM2EwMWNiMjA2M2Q5MDcwZGFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XZWFrUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
V2Vha1B0ci5oCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKSB7
IG1faW1wbCA9IG51bGxwdHI7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hNYXA7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hTZXQ7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha1B0cjsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBXZWFrUHRyRmFjdG9yeTsKQEAg
LTE5Myw2ICsxOTQsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hTZXQ7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIFdlYWtIYXNoTWFwOwogCiAg
ICAgbXV0YWJsZSBSZWZQdHI8V2Vha1B0ckltcGw8Q291bnRlcj4+IG1faW1wbDsKICNpZiBBU1NF
UlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDFmNWRjNWI0MjM1NGJiOTY2NjU4Mzg5NDI2MjY1Y2U5N2IzNDQyMTEuLmI5OGMwNTYy
MzQyY2VmNDBiNzEzMWFiMjczMjk5YWJiOWZjOTFiODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV2Vha0hhc2hN
YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHVuaXQgdGVzdHMgZm9yIFdlYWtIYXNoTWFwLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvV2Vha1B0ci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb21wdXRlU2l6
ZU9mV2Vha0hhc2hTZXQpOiBEZWxldGVkIHRoZSB1bnVzZWQgdmFyaWFudC4KKyAgICAgICAgKFdU
Rl9XZWFrUHRyLldlYWtIYXNoU2V0RXhwYW5zaW9uKTogRGVsZXRlZCB0aGUgc3VwZXJmbG91cyBm
b3IgbG9vcC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNvbXB1dGVTaXplT2ZXZWFrSGFzaE1h
cCk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VmFsdWVPYmplY3QpOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlZhbHVlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VmFsdWVPYmplY3Q6On5WYWx1ZU9iamVjdCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpWYWx1ZU9iamVjdDo6VmFsdWVPYmplY3QpOgorICAgICAgICAoV1RGX1dlYWtQ
dHIuV2Vha0hhc2hNYXBCYXNpYyk6IEFkZGVkLgorICAgICAgICAoV1RGX1dlYWtQdHIuV2Vha0hh
c2hNYXBDb25zdE9iamVjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdURl9XZWFrUHRyLldlYWtIYXNo
TWFwRXhwYW5zaW9uKTogQWRkZWQuCisgICAgICAgIChXVEZfV2Vha1B0ci5XZWFrSGFzaE1hcFJl
bW92ZU51bGxSZWZlcmVuY2VzKTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb2xs
ZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzKTogQWRkZWQuCisgICAgICAgIChXVEZfV2Vh
a1B0ci5XZWFrSGFzaE1hcEl0ZXJhdG9ycyk6IEFkZGVkLgorCiAyMDIxLTA2LTA4ICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQt
dGVzdHM6IFRhc2tQb29sIHJlcG9ydHMgUGlja2xpbmdFcnJvciBmb3IgV2luZG93cyBQeXRob24K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dlYWtQdHIuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKaW5kZXggOTFlZmYwNjBh
OTdkNzE0MmJiMzE5ZGU2ZWExYmM2MDJkOGY3OTVkZC4uODhjZWRjNTRlY2FjN2I2ODA3YzBiZDMx
MjFkNWY0Yzk0MDcxYjViNyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvV2Vha1B0ci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0
ci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUg
IlRlc3QuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtMzgsNiArMzksNyBA
QCBzdHJ1Y3QgV2Vha1B0ckNvdW50ZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQ2FuTWFrZVdlYWtQdHIgPSBXVEY6OkNhbk1ha2VXZWFrUHRyPFQsIFdlYWtQdHJGYWN0b3J5
SW5pdGlhbGl6YXRpb246OkxhenksIFdlYWtQdHJDb3VudGVyPjsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHVzaW5nIFdlYWtIYXNoTWFwID0gV1RGOjpXZWFrSGFzaE1hcDxULCBV
LCBXZWFrUHRyQ291bnRlcj47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBXZWFrSGFzaFNl
dCA9IFdURjo6V2Vha0hhc2hTZXQ8VCwgV2Vha1B0ckNvdW50ZXI+OwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdXNpbmcgV2Vha1B0ciA9IFdURjo6V2Vha1B0cjxULCBXZWFrUHRyQ291bnRlcj47CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBXZWFrUHRyRmFjdG9yeSA9IFdURjo6V2Vha1B0ckZh
Y3Rvcnk8VCwgV2Vha1B0ckNvdW50ZXI+OwpAQCAtMzQxLDE3ICszNDMsNiBAQCBURVNUKFdURl9X
ZWFrUHRyLCBEZXJpdmVkQ29uc3RydWN0QW5kQXNzaWduQ29uc3QpCiAgICAgfQogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIGNvbXB1dGVTaXplT2ZXZWFrSGFzaFNldChjb25z
dCBIYXNoU2V0PFdlYWtQdHI8VD4+JiBzZXQpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBpdGVtIDogc2V0KSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
LSAgICAgICAgc2l6ZSsrOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiB1bnNpZ25lZCBjb21wdXRlU2l6ZU9mV2Vha0hhc2hTZXQoY29uc3QgV2Vh
a0hhc2hTZXQ8VD4mIHNldCkKIHsKQEAgLTU2Nyw3ICs1NTgsNyBAQCBURVNUKFdURl9XZWFrUHRy
LCBXZWFrSGFzaFNldEV4cGFuc2lvbikKICAgICB9CiAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtS
ZWZlcmVuY2VzLCAwdSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTsgKytpKSB7
CisgICAgewogICAgICAgICBXZWFrSGFzaFNldDxCYXNlPiB3ZWFrSGFzaFNldDsKICAgICAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb2JqZWN0czsKICAgICAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb3RoZXJPYmplY3RzOwpAQCAtNzgwLDYgKzc3MSw4MzUgQEAg
VEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hTZXRDb21wdXRlU2l6ZSkKICAgICB9CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgordW5zaWduZWQgY29tcHV0ZVNpemVPZldl
YWtIYXNoTWFwKGNvbnN0IFdlYWtIYXNoTWFwPFQsIFU+JiBtYXApCit7CisgICAgdW5zaWduZWQg
c2l6ZSA9IDA7CisgICAgZm9yIChhdXRvJiBpdGVtIDogbWFwKSB7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShpdGVtKTsKKyAgICAgICAgc2l6ZSsrOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30K
Kworc3RydWN0IFZhbHVlT2JqZWN0IDogcHVibGljIFJlZkNvdW50ZWQ8VmFsdWVPYmplY3Q+IHsK
K3B1YmxpYzoKKworICAgIHN0YXRpYyBSZWY8VmFsdWVPYmplY3Q+IGNyZWF0ZShpbnQgdmFsdWUp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgVmFsdWVPYmplY3QodmFsdWUpKTsgfQorCisgICAgflZh
bHVlT2JqZWN0KCkgeyBBU1NFUlQoc19jb3VudCk7IC0tc19jb3VudDsgfQorCisgICAgaW50IHZh
bHVlOworCisgICAgc3RhdGljIHVuc2lnbmVkIHNfY291bnQ7CisKK3ByaXZhdGU6CisgICAgVmFs
dWVPYmplY3QodW5zaWduZWQgc2hvcnQgdmFsdWUpCisgICAgICAgIDogdmFsdWUodmFsdWUpCisg
ICAgeworICAgICAgICArK3NfY291bnQ7CisgICAgfQorfTsKKwordW5zaWduZWQgVmFsdWVPYmpl
Y3Q6OnNfY291bnQgPSAwOworCitURVNUKFdURl9XZWFrUHRyLCBXZWFrSGFzaE1hcEJhc2ljKQor
eworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAg
ICAgICAgQmFzZSBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250
YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAw
dSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hN
YXApLCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QsIDM0KTsKKyAgICAgICAg
RVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShj
b21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEo
d2Vha0hhc2hNYXAuZ2V0KG9iamVjdCksIDM0KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9i
amVjdCwgMTIpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmpl
Y3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLCAzNCk7Cisg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBF
Q1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAg
ICB3ZWFrSGFzaE1hcC5zZXQob2JqZWN0LCA3KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hh
c2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5n
ZXQob2JqZWN0KSwgNyk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNo
TWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
fQorICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworCisgICAgeworICAg
ICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICB7CisgICAg
ICAgICAgICBCYXNlIG9iamVjdDsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1h
cC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9m
V2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmpl
Y3QsIDcpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2Jq
ZWN0KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCksIDcp
OworICAgICAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFz
aE1hcCksIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MXUpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hN
YXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisK
KyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4gd2Vha0hhc2hNYXA7CisgICAg
ICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0MTsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0
MjsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3Qx
KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDEpLCAwKTsK
KyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCAwKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsK
KyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QxLCAzKTsKKyAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIDMpOworICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiksIDApOworICAgICAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY29tcHV0
ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICAgICAgd2Vha0hh
c2hNYXAuYWRkKG9iamVjdDIsIDI0KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNo
TWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1h
cC5nZXQob2JqZWN0MSksIDMpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAu
Y29udGFpbnMob2JqZWN0MikpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QyKSwgMjQpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAydSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFw
KHdlYWtIYXNoTWFwKSwgMnUpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAucmVtb3ZlKG9iamVj
dDEpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVj
dDEpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIDAp
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0Mikp
OworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKSwgMjQpOwor
ICAgICAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1h
cCksIDF1KTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtI
YXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgfQorICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUp
OworCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3
ZWFrSGFzaE1hcDsKKyAgICAgICAgQmFzZSBvYmplY3QxOworICAgICAgICBCYXNlIG9iamVjdDI7
CisgICAgICAgIEJhc2Ugb2JqZWN0MzsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFw
LmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChv
YmplY3QxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250
YWlucyhvYmplY3QyKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0
MiksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMo
b2JqZWN0MykpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDMpLCBu
dWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7Cisg
ICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAw
dSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QxLCBWYWx1ZU9iamVjdDo6Y3JlYXRl
KDEwMCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0MiwgVmFsdWVPYmplY3Q6OmNy
ZWF0ZSgyMDApKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7
CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6c19jb3VudCwgMnUpOworICAgICAgICBF
WFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7CisgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSktPnZhbHVlLCAxMDApOworICAgICAgICBFWFBF
Q1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAgICAgIEVYUEVDVF9F
USh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiktPnZhbHVlLCAyMDApOworICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MykpOworICAgICAgICBFWFBFQ1RfRVEo
d2Vha0hhc2hNYXAuZ2V0KG9iamVjdDMpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNf
YmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6
c19jb3VudCwgMnUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFw
KHdlYWtIYXNoTWFwKSwgMnUpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0MSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7Cisg
ICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51bGxwdHIpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAgICAg
IEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiktPnZhbHVlLCAyMDApOworICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MykpOworICAgICAgICBF
WFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDMpLCBudWxscHRyKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7IC8vIEJlY2F1c2Ugb2JqZWN0MiBob2xk
cyBvbnRvIFdlYWtSZWZlcmVuY2UuCisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6c19j
b3VudCwgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdl
YWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0Myk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7CisgICAg
ICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51bGxwdHIpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiktPnZhbHVlLCAyMDApOworICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MykpOworICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDMpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNU
X0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9i
amVjdDo6c19jb3VudCwgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtI
YXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0
MiwgVmFsdWVPYmplY3Q6OmNyZWF0ZSgyMTApKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtI
YXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFw
LmdldChvYmplY3QxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFw
LmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChv
YmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5j
b250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2Jq
ZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDJ1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAxdSk7CisgICAg
ICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7
CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QyLCBWYWx1ZU9iamVjdDo6Y3JlYXRlKDIy
MCkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MSkp
OworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDEpLCBudWxscHRyKTsK
KyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MikpOworICAg
ICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLT52YWx1ZSwgMjIwKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDMpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QzKSwgbnVsbHB0cik7CisgICAgICAg
IEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAgICBFWFBFQ1RfRVEo
VmFsdWVPYmplY3Q6OnNfY291bnQsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXpl
T2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAucmVt
b3ZlKG9iamVjdDIpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMo
b2JqZWN0MSkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDEpLCBu
dWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVj
dDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKSwgbnVsbHB0
cik7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7
CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51bGxwdHIpOwor
ICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQ
RUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAwdSk7CisgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAwdSk7Cit9CisK
K1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwQ29uc3RPYmplY3RzKQoreworICAgIHsKKyAg
ICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVmPFZhbHVlT2JqZWN0Pj4gd2Vha0hhc2hNYXA7Cisg
ICAgICAgIGNvbnN0IEJhc2Ugb2JqZWN0OworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hN
YXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJl
bmNlcywgMHUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdl
YWtIYXNoTWFwKSwgMHUpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCBWYWx1ZU9i
amVjdDo6Y3JlYXRlKDMpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2Vz
LCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hh
c2hNYXApLCAxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9i
amVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCktPnZhbHVl
LCAzKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3
ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCBWYWx1ZU9iamVjdDo6Y3JlYXRlKDcpKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS0+dmFsdWUsIDMpOworICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVT
aXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAu
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5zZXQob2JqZWN0LCBWYWx1
ZU9iamVjdDo6Y3JlYXRlKDExKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNv
bnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVj
dCktPnZhbHVlLCAxMSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNo
TWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNl
V2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFr
SGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNo
TWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0
KG9iamVjdCksIG51bGxwdHIpOworICAgIH0KKworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8
QmFzZSwgU3RyaW5nPiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgY29uc3QgRGVyaXZlZCBvYmplY3Q7
CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCkuaXNOdWxsKCkpOworICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQRUNU
X0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAg
d2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgImhlbGxvIl9zKTsKKyAgICAgICAgRVhQRUNUX0VRKHNf
YmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9m
V2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtI
YXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfU1RSRVEod2Vha0hhc2hN
YXAuZ2V0KG9iamVjdCkudXRmOCgpLmRhdGEoKSwgImhlbGxvIik7CisgICAgICAgIHdlYWtIYXNo
TWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwg
IndvcmxkIl9zKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2Jq
ZWN0KSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS51dGY4
KCkuZGF0YSgpLCAiaGVsbG8iKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vh
a0hhc2hNYXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgIldlYktpdCJfcyk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1Rf
U1RSRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCkudXRmOCgpLmRhdGEoKSwgIldlYktpdCIpOwor
ICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQ
RUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAg
ICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5y
ZW1vdmUob2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAx
dSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hN
YXApLCAwdSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmpl
Y3QpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCkuaXNOdWxs
KCkpOworICAgIH0KKworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFr
SGFzaE1hcDsKKyAgICAgICAgY29uc3QgRGVyaXZlZCBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdl
YWtIYXNoTWFwLmdldChvYmplY3QpLCAwKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtS
ZWZlcmVuY2VzLCAwdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hN
YXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgMyk7CisgICAgICAgIEVYUEVD
VF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0
ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICBFWFBFQ1RfVFJV
RSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtI
YXNoTWFwLmdldChvYmplY3QpLCAzKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCA3KTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9F
USh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgMyk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VX
ZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtI
YXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QsIDExKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgMTEpOworICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZX
ZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tD
b25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0KTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBF
WFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCksIDApOworICAgICAgICBFWFBFQ1RfRVEo
c19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXpl
T2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1dl
YWtQdHIsIFdlYWtIYXNoTWFwRXhwYW5zaW9uKQoreworICAgIHVuc2lnbmVkIGluaXRpYWxDYXBh
Y2l0eTsKKyAgICBzdGF0aWMgY29uc3RleHByIHVuc2lnbmVkIG1heExvYWRDYXAgPSAzOworICAg
IHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAg
QmFzZSBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUp
OworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAxKTsKKyAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIGluaXRpYWxDYXBhY2l0eSA9IHdl
YWtIYXNoTWFwLmNhcGFjaXR5KCk7CisgICAgfQorICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVm
ZXJlbmNlcywgMHUpOworCisgICAgZm9yICh1bnNpZ25lZCB0ZXN0Q291bnQgPSAwOyB0ZXN0Q291
bnQgPCAxMDsgKyt0ZXN0Q291bnQpIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgdW5zaWdu
ZWQ+IHdlYWtIYXNoTWFwOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2U+PiBv
YmplY3RzOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2U+PiBvdGhlck9iamVj
dHM7CisKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNhcGFjaXR5KCksIDB1KTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoaW5pdGlhbENhcGFjaXR5IC8gbWF4TG9hZENhcCk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbml0aWFsQ2FwYWNpdHkgLyBtYXhMb2FkQ2FwOyAr
K2kpIHsKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0ID0gbWFrZVVuaXF1ZTxCYXNlPigpOworICAg
ICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKCpvYmplY3QsIGkpOworICAgICAgICAgICAgb2JqZWN0
cy5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAgICAgICAgICAgIG90aGVyT2JqZWN0cy5hcHBl
bmQobWFrZVVuaXF1ZTxCYXNlPigpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIG90aGVyT2JqZWN0cy5zaXplKCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hN
YXAuY2FwYWNpdHkoKSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1
dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIG9iamVjdHMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG90aGVyT2JqZWN0cy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMoKm9iamVjdHNbaV0p
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQoKm9iamVjdHNbaV0pLCBp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucygqb3RoZXJP
YmplY3RzW2ldKSk7CisgICAgICAgIH0KKyAgICAgICAgb2JqZWN0cy5jbGVhcigpOworICAgICAg
ICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jh
c2VXZWFrUmVmZXJlbmNlcywgb3RoZXJPYmplY3RzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9F
USh3ZWFrSGFzaE1hcC5jYXBhY2l0eSgpLCBpbml0aWFsQ2FwYWNpdHkpOworICAgICAgICBFWFBF
Q1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAg
ICBmb3IgKGF1dG8mIG9iamVjdCA6IG90aGVyT2JqZWN0cykKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucygqb2JqZWN0KSk7CisgICAgICAgIHVuc2lnbmVkIGkg
PSAxMDA7CisgICAgICAgIGZvciAoYXV0byYgb2JqZWN0IDogb3RoZXJPYmplY3RzKSB7CisgICAg
ICAgICAgICB3ZWFrSGFzaE1hcC5hZGQoKm9iamVjdCwgaSk7CisgICAgICAgICAgICB3ZWFrSGFz
aE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAg
ICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNhcGFjaXR5KCksIGluaXRpYWxDYXBhY2l0eSk7
CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXAp
LCBvdGhlck9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgaSA9IDEwMDsKKyAgICAgICAgZm9yIChh
dXRvJiBvYmplY3QgOiBvdGhlck9iamVjdHMpIHsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHdl
YWtIYXNoTWFwLmNvbnRhaW5zKCpvYmplY3QpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFr
SGFzaE1hcC5nZXQoKm9iamVjdCksIGkpOworICAgICAgICAgICAgKytpOworICAgICAgICB9Cisg
ICAgfQorICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworCisgICAgZm9y
ICh1bnNpZ25lZCB0ZXN0Q291bnQgPSAwOyB0ZXN0Q291bnQgPCAxMDsgKyt0ZXN0Q291bnQpIHsK
KyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVmPFZhbHVlT2JqZWN0Pj4gd2Vha0hhc2hNYXA7
CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAg
IEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5jYXBhY2l0eSgpLCAwdSk7CisgICAgICAgIHVuc2lnbmVk
IG9iamVjdENvdW50ID0gaW5pdGlhbENhcGFjaXR5ICogMjsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG9iamVjdENvdW50OyArK2kpIHsKKyAgICAgICAgICAgIGF1dG8gb2JqZWN0
ID0gbWFrZVVuaXF1ZTxCYXNlPigpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpvYmpl
Y3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMTAwICsgaSkpOworICAgICAgICAgICAgb2JqZWN0cy5h
cHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29u
c2lzdGVuY3koKTsKKyAgICAgICAgfQorICAgICAgICB1bnNpZ25lZCBvcmlnaW5hbENhcGFjaXR5
ID0gd2Vha0hhc2hNYXAuY2FwYWNpdHkoKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtS
ZWZlcmVuY2VzLCBvYmplY3RzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6
ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCBvYmplY3RzLnNpemUoKSk7CisKKyAgICAgICAg
aW50IGkgPSAxMDA7CisgICAgICAgIGZvciAoYXV0byYgb2JqZWN0IDogb2JqZWN0cykgeworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMoKm9iamVjdCkpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldCgqb2JqZWN0KS0+dmFsdWUsIGkpOwor
ICAgICAgICAgICAgKytpOworICAgICAgICB9CisKKyAgICAgICAgb2JqZWN0cy5jbGVhcigpOwor
ICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgb2JqZWN0Q291bnQpOworICAgICAgICBFWFBFQ1RfRVEo
d2Vha0hhc2hNYXAuY2FwYWNpdHkoKSwgb3JpZ2luYWxDYXBhY2l0eSk7CisgICAgICAgIEVYUEVD
VF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgfQor
fQorCitURVNUKFdURl9XZWFrUHRyLCBXZWFrSGFzaE1hcElzRW1wdHlJZ25vcmluZ051bGxSZWZl
cmVuY2VzKQoreworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFz
aE1hcDsKKyAgICAgICAgeworICAgICAgICAgICAgQmFzZSBvYmplY3Q7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAg
ICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgMSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3
ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAg
ICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIHdlYWtIYXNo
TWFwLnNldChvYmplY3QsIDIpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVs
bFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaXNF
bXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5j
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAz
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOwor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxS
ZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZl
cmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3Jp
bmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4gd2Vha0hhc2hNYXA7Cisg
ICAgICAgIEJhc2Ugb2JqZWN0MTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAwdSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJl
bmNlcygpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5n
TnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDEsIDEwMCk7CisgICAgICAgIEVYUEVD
VF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vh
a0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hh
c2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB7CisgICAgICAgICAgICBCYXNlIG9i
amVjdDI7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0MiwgMjAwKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2Vz
KCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICB9CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkp
OworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtI
YXNoTWFwLnJlbW92ZShvYmplY3QxKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAydSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZl
cmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3Jp
bmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIH0KKworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVmPFZhbHVl
T2JqZWN0Pj4gd2Vha0hhc2hNYXA7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
ZT4+IG9iamVjdHM7CisgICAgICAgIGF1dG8gZmlyc3RPYmplY3QgPSBtYWtlVW5pcXVlPEJhc2U+
KCk7CisgICAgICAgIGludCB2YWx1ZSA9IDE7CisgICAgICAgIHdlYWtIYXNoTWFwLnNldCgqZmly
c3RPYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUodmFsdWUrKykpOworICAgICAgICBkbyB7Cisg
ICAgICAgICAgICBhdXRvIG9iamVjdCA9IG1ha2VVbmlxdWU8QmFzZT4oKTsKKyAgICAgICAgICAg
IHdlYWtIYXNoTWFwLnNldCgqb2JqZWN0LCBWYWx1ZU9iamVjdDo6Y3JlYXRlKHZhbHVlKyspKTsK
KyAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKFdURk1vdmUob2JqZWN0KSk7CisgICAgICAgIH0g
d2hpbGUgKCZ3ZWFrSGFzaE1hcC5iZWdpbigpLT5rZXkgPT0gZmlyc3RPYmplY3QuZ2V0KCkpOwor
CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6c19jb3VudCwgb2JqZWN0cy5zaXplKCkg
KyAxKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCBvYmplY3RzLnNp
emUoKSArIDEpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdl
YWtIYXNoTWFwKSwgb2JqZWN0cy5zaXplKCkgKyAxKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdl
YWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vh
a0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIGZpcnN0
T2JqZWN0ID0gbnVsbHB0cjsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVs
bFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5pc0VtcHR5
SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtS
ZWZlcmVuY2VzLCBvYmplY3RzLnNpemUoKSArIDEpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0
ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgb2JqZWN0cy5zaXplKCkpOworICAgICAg
ICBvYmplY3RzLmNsZWFyKCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051
bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5
SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2xlYXIoKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJl
bmNlcygpKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwUmVtb3Zl
TnVsbFJlZmVyZW5jZXMpCit7CisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+
IHdlYWtIYXNoTWFwOworICAgICAgICB7CisgICAgICAgICAgICBCYXNlIG9iamVjdDsKKyAgICAg
ICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICB3ZWFrSGFz
aE1hcC5yZW1vdmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJl
ZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIDEpOwor
ICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAg
RVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdl
YWtIYXNoTWFwLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1h
cC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNO
dWxsUmVmZXJlbmNlcygpKTsKKworICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdCwg
Mik7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVY
UEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAgICAg
ICAgd2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgICAgIHdlYWtI
YXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VX
ZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFw
Lmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5zZXQob2Jq
ZWN0LCAzKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAg
ICB9CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdl
YWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgIHdlYWtIYXNoTWFwLnJl
bW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAg
ICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICB9
CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIFJlZlB0cjxWYWx1ZU9iamVjdD4+
IHdlYWtIYXNoTWFwOworICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPERlcml2ZWQ+PiBv
YmplY3RzOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7Cisg
ICAgICAgICAgICBhdXRvIGtleSA9IG1ha2VVbmlxdWU8RGVyaXZlZD4oKTsKKyAgICAgICAgICAg
IHdlYWtIYXNoTWFwLmFkZCgqa2V5LCBWYWx1ZU9iamVjdDo6Y3JlYXRlKGkgKyAxMDApKTsKKyAg
ICAgICAgICAgIG9iamVjdHMuYXBwZW5kKFdURk1vdmUoa2V5KSk7CisgICAgICAgIH0KKyAgICAg
ICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCA1MFUpOworICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwVSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tD
b25zaXN0ZW5jeSgpOworCisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZU51bGxSZWZlcmVuY2Vz
KCk7CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6c19jb3VudCwgNTBVKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA1MFUpOworICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIHdlYWtIYXNo
TWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgNTA7ICsraSkgeworICAgICAgICAgICAgaWYgKGkgJSAyKQorICAgICAgICAgICAgICAgIG9i
amVjdHNbaV0gPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgd2Vha0hhc2hNYXAucmVt
b3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2Nv
dW50LCAyNVUpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1VSk7
CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsK
KyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgICAgIGJvb2wg
c2Vlbls1MF0gPSB7IGZhbHNlIH07CisgICAgICAgIGZvciAoYXV0byBrZXlWYWx1ZSA6IHdlYWtI
YXNoTWFwKSB7CisgICAgICAgICAgICBpbnQgcmF3VmFsdWUgPSBrZXlWYWx1ZS52YWx1ZS0+dmFs
dWU7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShyYXdWYWx1ZSA+PSAxMDAgJiYgcmF3VmFsdWUg
PCAxNTApOworICAgICAgICAgICAgRVhQRUNUX0VRKChyYXdWYWx1ZSAtIDEwMCkgJSAyLCAwKTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gcmF3VmFsdWUgLSAxMDA7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0Uoc2VlbltpbmRleF0pOworICAgICAgICAgICAgc2VlbltpbmRleF0gPSB0
cnVlOworICAgICAgICAgICAgRVhQRUNUX0VRKCZrZXlWYWx1ZS5rZXksIG9iamVjdHNbaW5kZXhd
LmdldCgpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQoa2V5VmFsdWUu
a2V5KSwga2V5VmFsdWUudmFsdWUuZ2V0KCkpOworICAgICAgICB9CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgICAgICBib29sIHNob3VsZEJlUHJl
c2VudCA9ICEoaSAlIDIpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNlZW5baV0sIHNob3VsZEJl
UHJlc2VudCk7CisgICAgICAgIH0KKworICAgICAgICBvYmplY3RzLmNsZWFyKCk7CisgICAgICAg
IHdlYWtIYXNoTWFwLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIEVYUEVDVF9FUShW
YWx1ZU9iamVjdDo6c19jb3VudCwgMFUpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIDBVKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxS
ZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgfQorfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgS2V5VHlwZSwgdHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZSBNYXA+CithdXRvIGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnMo
TWFwJiBtYXApCit7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8S2V5VHlwZSwgVmFsdWVUeXBlPj4g
cGFpcnM7CisgICAgZm9yIChhdXRvIGl0ID0gbWFwLmJlZ2luKCk7IGl0ICE9IG1hcC5lbmQoKTsg
KytpdCkgeworICAgICAgICBzdGQ6OnBhaXIga2V5VmFsdWVQYWlyIHsgJml0LT5rZXksIGl0Lmdl
dCgpLT52YWx1ZSB9OworICAgICAgICBFWFBFQ1RfRkFMU0UocGFpcnMuY29udGFpbnMoa2V5VmFs
dWVQYWlyKSk7CisgICAgICAgIHBhaXJzLmFkZChrZXlWYWx1ZVBhaXIpOworICAgIH0KKyAgICBy
ZXR1cm4gcGFpcnM7Cit9OworCitURVNUKFdURl9XZWFrUHRyLCBXZWFrSGFzaE1hcEl0ZXJhdG9y
cykKK3sKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4gd2Vha0hhc2hNYXA7
CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0MTsKKyAgICAgICAgICAgIERlcml2
ZWQgb2JqZWN0MjsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0MzsKKyAgICAgICAgICAgIERlcml2
ZWQgb2JqZWN0NDsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QxLCAxKTsKKyAgICAgICAgICAgIHdl
YWtIYXNoTWFwLmFkZChvYmplY3QyLCAyKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChv
YmplY3QzLCAzKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3Q0LCA0KTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNHUpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNvbXB1dGVTaXplKCksIDRVKTsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAg
ICAgICAgY29uc3QgYXV0byYgY29uc3RNYXAgPSB3ZWFrSGFzaE1hcDsKKyAgICAgICAgICAgIGF1
dG8gcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzPEJhc2UqLCBpbnQ+
KGNvbnN0TWFwKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShwYWlycy5zaXplKCksIDRVKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7ICZvYmplY3Qx
LCAxIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFp
ciB7ICZvYmplY3QyLCAyIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRh
aW5zKHN0ZDo6cGFpciB7ICZvYmplY3QzLCAzIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVF
KHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7ICZvYmplY3Q0LCA0IH0pKTsKKworICAgICAgICAg
ICAgd2Vha0hhc2hNYXAucmVtb3ZlKG9iamVjdDIpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAu
cmVtb3ZlKG9iamVjdDMpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCA0dSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJl
ZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHBhaXJzID0gY29sbGVjdEtleVZhbHVlUGFpcnNV
c2luZ0l0ZXJhdG9yczxCYXNlKiwgaW50Pihjb25zdE1hcCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEocGFpcnMuc2l6ZSgpLCAyVSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYWlycy5jb250
YWlucyhzdGQ6OnBhaXIgeyAmb2JqZWN0MSwgMSB9KSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFM
U0UocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDIsIDIgfSkpOworICAgICAgICAg
ICAgRVhQRUNUX0ZBTFNFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7ICZvYmplY3QzLCAzIH0p
KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7ICZv
YmplY3Q0LCA0IH0pKTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJl
ZmVyZW5jZXMoKSk7CisKKyAgICAgICAgYXV0byBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJz
VXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICBFWFBFQ1Rf
RVEocGFpcnMuc2l6ZSgpLCAwVSk7CisgICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1h
cDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEJhc2U+PiBvYmplY3RzOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAlIDIpCisgICAg
ICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKG1ha2VVbmlxdWU8RGVyaXZlZD4oKSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzLmFwcGVuZCht
YWtlVW5pcXVlPEJhc2U+KCkpOworICAgICAgICAgICAgICAgIHdlYWtIYXNoTWFwLnNldCgqb2Jq
ZWN0cy5sYXN0KCksIGkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2Vha0hhc2hNYXAu
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCA1MHUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051
bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNvbXB1
dGVTaXplKCksIDUwVSk7CisKKyAgICAgICAgICAgIGZvciAoYXV0byBpdCA9IHdlYWtIYXNoTWFw
LmJlZ2luKCk7IGl0ICE9IHdlYWtIYXNoTWFwLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICAg
ICAgYXV0byBrZXlWYWx1ZSA9ICppdDsKKyAgICAgICAgICAgICAgICBpZiAoa2V5VmFsdWUudmFs
dWUgJSA2KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBr
ZXlWYWx1ZS52YWx1ZSAqPSA1MTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2Vha0hh
c2hNYXAucmVtb3ZlSWYoW10oYXV0byYga2V5VmFsdWUpIHsgcmV0dXJuICEoa2V5VmFsdWUudmFs
dWUgJSA1KTsgfSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwdSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisK
KyAgICAgICAgICAgIGF1dG8gcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0
b3JzPEJhc2UqLCBpbnQ+KHdlYWtIYXNoTWFwKTsKKyAgICAgICAgICAgIEFTU0VSVChwYWlycy5z
aXplKCksIDQwVSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTA7ICsr
aSkgeworICAgICAgICAgICAgICAgIGlmICghKGkgJSA1KSkKKyAgICAgICAgICAgICAgICAgICAg
RVhQRUNUX1RSVUUoV1RGOjphbGxPZihwYWlycywgWyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0
ZW0uZmlyc3QgIT0gb2JqZWN0c1tpXS5nZXQoKTsgfSkpOworICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKCEoaSAlIDYpKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYWlycy5jb250
YWlucyhzdGQ6OnBhaXIgeyBvYmplY3RzW2ldLmdldCgpLCBpICogNTEgfSkpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFp
bnMoc3RkOjpwYWlyIHsgb2JqZWN0c1tpXS5nZXQoKSwgaSB9KSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCEoaSAlIDUpIHx8ICEoaSAlIDkpKQorICAgICAgICAgICAgICAgICAgICBv
YmplY3RzW2ldID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNDBVKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNo
ZWNrQ29uc2lzdGVuY3koKTsKKworICAgICAgICAgICAgcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQ
YWlyc1VzaW5nSXRlcmF0b3JzPEJhc2UqLCBpbnQ+KHdlYWtIYXNoTWFwKTsKKyAgICAgICAgICAg
IEFTU0VSVChwYWlycy5zaXplKCksIDM2VSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghKGkgJSA1KSB8fCAhKGkg
JSA5KSkKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoV1RGOjphbGxPZihwYWlycywg
WyZdKGF1dG8mIGl0ZW0pIHsgcmV0dXJuIGl0ZW0uZmlyc3QgIT0gb2JqZWN0c1tpXS5nZXQoKTsg
fSkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCEoaSAlIDYpKQorICAgICAgICAgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShwYWlycy5jb250YWlucyhzdGQ6OnBhaXIgeyBvYmplY3RzW2ldLmdl
dCgpLCBpICogNTEgfSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgb2JqZWN0c1tpXS5nZXQo
KSwgaSB9KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmVO
dWxsUmVmZXJlbmNlcygpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAzNlUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxS
ZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgQVNTRVJUKHBhaXJzLnNpemUoKSwgd2Vha0hhc2hN
YXAuY29tcHV0ZVNpemUoKSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2Vz
LCAzNlUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAg
IGF1dG8gcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzPEJhc2UqLCBp
bnQ+KHdlYWtIYXNoTWFwKTsKKyAgICAgICAgRVhQRUNUX0VRKHBhaXJzLnNpemUoKSwgMFUpOwor
CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMzZVKTsKKyAgICAgICAg
d2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFr
SGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1v
dmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDBVKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgfQor
CisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFr
SGFzaE1hcDsKKyAgICAgICAgeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzZT4sIFJlZlB0cjxWYWx1ZU9iamVjdD4+PiBvYmplY3RzOworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoaSAlIDIpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKHN0ZDo6cGFpciB7
IG1ha2VVbmlxdWU8RGVyaXZlZD4oKSwgVmFsdWVPYmplY3Q6OmNyZWF0ZShpICogODMpIH0pOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQo
c3RkOjpwYWlyIHsgbWFrZVVuaXF1ZTxCYXNlPigpLCBWYWx1ZU9iamVjdDo6Y3JlYXRlKGkpIH0p
OworICAgICAgICAgICAgICAgIG9iamVjdHMubGFzdCgpLmZpcnN0LT5kdW1teSA9IDA7CisgICAg
ICAgICAgICAgICAgaWYgKGkgPCAyNSkKKyAgICAgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAu
YWRkKCpvYmplY3RzLmxhc3QoKS5maXJzdCwgKm9iamVjdHMubGFzdCgpLnNlY29uZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1VSk7CisgICAgICAg
ICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgMjVVKTsKKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGl0ID0gd2Vha0hhc2hNYXAuZmluZCgqb2JqZWN0c1tpXS5maXJzdCk7CisgICAg
ICAgICAgICAgICAgaWYgKGkgPCAyNSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJV
RShpdCAhPSB3ZWFrSGFzaE1hcC5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9F
UShpdC0+a2V5LmR1bW15LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSA5KQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdlYWtIYXNoTWFwLmVuZCgpKTsK
KyAgICAgICAgICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAg
IHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAyNVUpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNvbXB1dGVTaXplKCksIDIyVSk7CisgICAgICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IDI1OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0
ID0gd2Vha0hhc2hNYXAuZmluZCgqb2JqZWN0c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAg
aWYgKCEoaSAlIDkpKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdl
YWtIYXNoTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKCZpdC5nZXQoKS0+a2V5LCBv
YmplY3RzW2ldLmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXQuZ2V0
KCktPmtleS5kdW1teSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGkgJSAyKSB7CisgICAgICAg
ICAgICAgICAgICAgIGl0LmdldCgpLT5rZXkuZHVtbXkgPSBpICogMTE7CisgICAgICAgICAgICAg
ICAgICAgIEVYUEVDVF9FUShpdC5nZXQoKS0+dmFsdWUtPnZhbHVlLCBpICogODMpOworICAgICAg
ICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXQuZ2V0KCkt
PnZhbHVlLT52YWx1ZSwgaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIShpICUgNCkpCisgICAg
ICAgICAgICAgICAgICAgIG9iamVjdHNbaV0uZmlyc3QgPSBudWxscHRyOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1VSk7CisgICAgICAgICAgICBF
WFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghKGkg
JSA0KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0
byBpdCA9IHdlYWtIYXNoTWFwLmZpbmQoKm9iamVjdHNbaV0uZmlyc3QpOworICAgICAgICAgICAg
ICAgIGlmICghKGkgJSA5KSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShpdCA9
PSB3ZWFrSGFzaE1hcC5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoJigqaXQpLmtleSwgb2Jq
ZWN0c1tpXS5maXJzdC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGkgJSAyKSB7CisgICAg
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoKml0KS5rZXkuZHVtbXksIGkgKiAxMSk7CisgICAg
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoKml0KS52YWx1ZS0+dmFsdWUsIGkgKiA4Myk7Cisg
ICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgq
aXQpLmtleS5kdW1teSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGl0LT5rZXkuZHVtbXkgPSBp
ICogMzE7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoKml0KS52YWx1ZS0+dmFsdWUs
IGkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdlYWtI
YXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VX
ZWFrUmVmZXJlbmNlcywgMjV1KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFw
Lmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICBBU1NFUlQod2Vha0hhc2hNYXAu
Y29tcHV0ZVNpemUoKSwgMTZVKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVm
ZXJlbmNlcywgMTlVKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNO
dWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgMjU7ICsr
aSkgeworICAgICAgICAgICAgICAgIGlmICghKGkgJSA0KSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgYXV0byBpdCA9IHdlYWtIYXNoTWFwLmZpbmQoKm9i
amVjdHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgIGlmICghKGkgJSA5KSkgeworICAgICAg
ICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSB3ZWFrSGFzaE1hcC5lbmQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBFWFBFQ1RfRVEoJml0LT5rZXksIG9iamVjdHNbaV0uZmlyc3QuZ2V0KCkpOworICAgICAg
ICAgICAgICAgIGF1dG8ga2V5VmFsdWUgPSBpdC5nZXQoKTsKKyAgICAgICAgICAgICAgICBpZiAo
aSAlIDIpIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGtleVZhbHVlLT5rZXkuZHVt
bXksIGkgKiAxMSk7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9FUShrZXlWYWx1ZS0+dmFs
dWUtPnZhbHVlLCBpICogODMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVF9FUSgoKmtleVZhbHVlKS5rZXkuZHVtbXksIGkgKiAzMSk7CisgICAg
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoKmtleVZhbHVlKS52YWx1ZS0+dmFsdWUsIGkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBFWFBF
Q1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDE2VSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdl
YWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBhdXRvIHBhaXJzID0gY29s
bGVjdEtleVZhbHVlUGFpcnNVc2luZ0l0ZXJhdG9yczxCYXNlKiwgUmVmPFZhbHVlT2JqZWN0Pj4o
d2Vha0hhc2hNYXApOworICAgICAgICBFWFBFQ1RfRVEocGFpcnMuc2l6ZSgpLCAwVSk7CisgICAg
ICAgIHdlYWtIYXNoTWFwLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwVSk7CisgICAgfQorfQorCiBjbGFzcyBNdWx0aXBsZUlu
aGVyaXRhbmNlQmFzZTEgOiBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8TXVsdGlwbGVJbmhlcml0YW5j
ZUJhc2UxPiB7CiBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIG1lb3coKSA9IDA7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431100</attachid>
            <date>2021-06-10 11:43:57 -0700</date>
            <delta_ts>2021-06-11 04:20:18 -0700</delta_ts>
            <desc>Fixed the builds</desc>
            <filename>bug-226872-20210610114356.patch</filename>
            <type>text/plain</type>
            <size>54996</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhkNjlkYzlkNWE1Yjg0MjQ5N2UwNWE2
ZDQ3OWRiZDRjMzM4YjEwNzAuLjc2ZGRlMjIxMjU0ZTI0ODExZTZiYWNlYTc1YzZiMjhhY2Q5ZDI2
OGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMjEtMDYtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdlYWtIYXNoTWFwCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBhIHNpbXBsZSB2ZXJzaW9uIG9m
IFdlYWtIYXNoTWFwIHdoaWNoIHJlcGxpZXMgb24gbGF6eSBkZWxldGVpb24gb2Yga2V5LXZhbHVl
IHBhaXJzLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAg
ICAgICogd3RmL0NNYWtlTGlzdHMudHh0OgorICAgICAgICAqIHd0Zi9XZWFrSGFzaE1hcC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXApOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OlBlZWtLZXlWYWx1ZVBhaXJUcmFpdHMpOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6V2Vha0hhc2hNYXA6OlBlZWtUeXBlKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNo
TWFwOjpQZWVrUHRyVHlwZSk6IEFkZGVkLiBVbmxpa2UgYSByZWd1bGFyIEhhc2hNYXAsIHdlIG5l
ZWQgdG8gZmFrZSB0aGUgaXRlcmF0b3IKKyAgICAgICAgcG9pbnRlciB2YWx1ZSB3aXRoIHRoaXMg
c3RydWN0IHNpbmNlIGtleS12YWx1ZSBwYWlyIGRvZXNuJ3QgZXhpc3QgaW4gSGFzaFRhYmxlIGl0
c2VsZiBhcyBpdCBzdG9yZXMKKyAgICAgICAgUmVmPFdlYWtSZWZJbXBsPiBpbnN0ZWFkLgorICAg
ICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6V2Vha0hhc2hNYXBJdGVyYXRvckJhc2UpOiBBZGRlZC4g
SGFzIGEgYnVuY2ggb2YgaGVscGVyIGZ1bmN0aW9ucyBzbyB0aGF0CisgICAgICAgIFdlYWtIYXNo
TWFwSXRlcmF0b3IgYW5kIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvciBjYW4gc2hhcmUgdGhlIGNv
ZGUuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpXZWFrSGFzaE1hcEl0ZXJhdG9yKTogQWRk
ZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpXZWFrSGFzaE1hcENvbnN0SXRlcmF0b3Ip
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OkFkZFJlc3VsdCk6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6YmVnaW4pOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OmVuZCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6YWRk
KTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpzZXQpOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6V2Vha0hhc2hNYXA6OmZpbmQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hh
c2hNYXA6OmNvbnRhaW5zKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpnZXQp
OiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OnJlbW92ZSk6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6cmVtb3ZlSWYpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
V2Vha0hhc2hNYXA6OmNsZWFyKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpj
YXBhY2l0eSk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6aXNFbXB0eUlnbm9y
aW5nTnVsbFJlZmVyZW5jZXMpOiBBZGRlZC4gVGhpcyBpcyBha2luIHRvIFdlYWtIYXNoU2V0Ojpj
b21wdXRlc0VtcHR5LgorICAgICAgICBQZXIgcHJpb3IgZGlzY3Vzc2lvbiwgd2UgaW50ZW5kIHRv
IHJlbmFtZSBXZWFrSGFzaFNldCdzIHZlcnNpb24gdG8gdGhpcyBuYW1lIGFzIHdlbGwgZm9yIGNs
YXJpdHkuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpoYXNOdWxsUmVmZXJlbmNlcyk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6Y29tcHV0ZVNpemUpOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OnJlbW92ZU51bGxSZWZlcmVuY2VzKTogQWRkZWQuIFNp
bmNlIFdlYWtIYXNoTWFwIGRvZXNuJ3QgZWFnZXJseSBkZWxldGUgdGhlIHZhbHVlCisgICAgICAg
IHdoZW4gdGhlIGtleSBnb2VzIGF3YXksIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCB3
aGVuIHZhbHVlcyBoZWxkIG9udG8gYnkgV2Vha1JlZkltcGwgd2l0aAorICAgICAgICB0aGUgbnVs
bHB0ciBiYWNrIHBvaW50ZXIgc2hvdWxkIGJlIGRlbGV0ZWQgZW4gbWFzc2UuCisgICAgICAgIChX
VEY6OldlYWtIYXNoTWFwOjpjaGVja0NvbnNpc3RlbmN5KTogQWRkZWQuCisgICAgICAgIChXVEY6
OldlYWtIYXNoTWFwOjptYWtlS2V5SW1wbCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFz
aE1hcDo6a2V5SW1wbElmRXhpc3RzKTogQWRkZWQuCisgICAgICAgICogd3RmL1dlYWtQdHIuaDoK
KwogMjAyMS0wNi0wOCAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAg
IFJlZHVjZSB1c2Ugb2YgcmVpbnRlcnByZXRfY2FzdDw+IGluIHRoZSBjb2RlYmFzZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNDQyMDQyYTY5N2NlZGJkYzNj
YWYxMmU3YThiNGFhOTc2OGRkOTE4MC4uMDZlMDk3NzAxYTJiZGVlZTdhMGIwMDYwZjU0NzI0N2M0
ZWNiNGNjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagorKysgYi9Tb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC01
MTEsNiArNTExLDcgQEAKIAkJOUJCOTFGNTEyNjQ4RUE0RDAwQTU2MjE3IC8qIENoZWNrZWRQdHIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ2hlY2tlZFB0ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5QkM3MEYwNDE3NkMzNzlEMDAxMDFERUMgLyogQXRvbVN0cmluZ1RhYmxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEF0b21TdHJpbmdUYWJsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTlCRDhGNDBBMTc2QzJBRDgwMDAyRDg2NSAvKiBB
dG9tU3RyaW5nVGFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXRvbVN0cmluZ1RhYmxlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTlCRTE1MzM1MjY3MUYwMEYwMEM3RDA5NiAvKiBXZWFr
SGFzaE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWFrSGFzaE1hcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk5QzY3QzU0MjU4OTM0OEUyODVCNDk2OTkgLyogSW5kZXhlZENvbnRhaW5l
ckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGV4ZWRDb250
YWluZXJJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMUI4OUI4NzIy
MUUwMDBGMDBFQjRDRUEgLyogU0RLVmFyaWFudC54Y2NvbmZpZyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueGNj
b25maWc7IHBhdGggPSBTREtWYXJpYW50LnhjY29uZmlnOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlBMzBENDEyQzFGMERFMEJBMDBCNzE5NTQgLyogU29mdExpbmtpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU29mdExpbmtpbmcuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTEyNTcsOCArMTI1OCw4IEBACiAJCQkJNzkzNkQ2QTkxQzk5RjhBRTAw
MEQxQUVEIC8qIFNtYWxsU2V0LmggKi8sCiAJCQkJQTMwRDQxMkQxRjBERTEzRjAwQjcxOTU0IC8q
IFNvZnRMaW5raW5nLmggKi8sCiAJCQkJOTMxNTZDOEQyNjJDOTgyMjAwRUFFMjdCIC8qIFNvcnRl
ZEFycmF5TWFwLmggKi8sCi0JCQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5n
VHJlZS5oICovLAogCQkJCUJDQTMwQzdGMjY2RDMwMzQwMDBEMjMwQyAvKiBTcGFuLmggKi8sCisJ
CQkJNzkwMzhFMDUyMjRCMDVBNzAwNEMwNzM4IC8qIFNwYW5uaW5nVHJlZS5oICovLAogCQkJCUE4
QTQ3MzBEMTUxQTgyNUIwMDQxMjNGRiAvKiBTcGVjdHJ1bS5oICovLAogCQkJCUE4QTQ3MzBFMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5jcHAgKi8sCiAJCQkJQThBNDczMEYxNTFBODI1
QjAwNDEyM0ZGIC8qIFN0YWNrQm91bmRzLmggKi8sCkBAIC0xMzM3LDYgKzEzMzgsNyBAQAogCQkJ
CUE4QTQ3MzcyMTUxQTgyNUIwMDQxMjNGRiAvKiBWTVRhZ3MuaCAqLywKIAkJCQkwRjY2QjI4ODFE
Qzk3QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuY3BwICovLAogCQkJCTBGNjZCMjg5MURDOTdCQUIw
MDRBMUQzRiAvKiBXYWxsVGltZS5oICovLAorCQkJCTlCRTE1MzM1MjY3MUYwMEYwMEM3RDA5NiAv
KiBXZWFrSGFzaE1hcC5oICovLAogCQkJCTlCNjdGM0YxMjIyOEQ1MzEwMDMwREU5QyAvKiBXZWFr
SGFzaFNldC5oICovLAogCQkJCTgzQUJCM0MwMjBCMzgyMzIwMEJBMzMwNiAvKiBXZWFrT2JqQ1B0
ci5oICovLAogCQkJCTk3NENGQzhEMTZBNEYzMjcwMDZENTQwNCAvKiBXZWFrUHRyLmggKi8sCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XVEYvd3Rm
L0NNYWtlTGlzdHMudHh0CmluZGV4IDlhYjgxMjYyOWZhNjlhMjRlZGZjZGYxZThkMTdhZjc2YjNm
MzkzMWMuLjY4NzIzODJkMjM3YWU5ZjJlZGUxYjUwOTM2ZDgzOTc4OGI3NDNiZDMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XVEYvd3RmL0NN
YWtlTGlzdHMudHh0CkBAIC0zMDQsNiArMzA0LDcgQEAgc2V0KFdURl9QVUJMSUNfSEVBREVSUwog
ICAgIFdURkNvbmZpZy5oCiAgICAgV1RGU2VtYXBob3JlLmgKICAgICBXYWxsVGltZS5oCisgICAg
V2Vha0hhc2hNYXAuaAogICAgIFdlYWtIYXNoU2V0LmgKICAgICBXZWFrUHRyLmgKICAgICBXZWFr
UmFuZG9tLmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtIYXNoTWFwLmggYi9Tb3Vy
Y2UvV1RGL3d0Zi9XZWFrSGFzaE1hcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjdlMGYzNWZlNDg3MWJmNTRmOGNj
ZDM4MzJlYmFkYmJhNWE0ZDA1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9X
ZWFrSGFzaE1hcC5oCkBAIC0wLDAgKzEsMjk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIx
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvQWxnb3JpdGhtcy5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoVGFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV1RGIHsKKworLy8gVmFs
dWUgd2lsbCBiZSBkZWxldGVkIGxhemlseSB1cG9uIHJlYXNoLiBGb3IgbWFudWFsIGNsZWFudXAs
IGNhbGwgcmVtb3ZlTnVsbFJlZmVyZW5jZXMoKS4KK3RlbXBsYXRlPHR5cGVuYW1lIEtleVR5cGUs
IHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUgQ291bnRlciA9IEVtcHR5Q291bnRlcj4KK2Ns
YXNzIFdlYWtIYXNoTWFwIGZpbmFsIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKworICAgIHVzaW5nIFJlZlR5cGUgPSBSZWY8V2Vha1B0ckltcGw8Q291bnRlcj4+Owor
ICAgIHVzaW5nIEtleVRyYWl0cyA9IEhhc2hUcmFpdHM8S2V5VHlwZT47CisgICAgdXNpbmcgVmFs
dWVUcmFpdHMgPSBIYXNoVHJhaXRzPFZhbHVlVHlwZT47CisgICAgdXNpbmcgV2Vha0hhc2hJbXBs
TWFwID0gSGFzaE1hcDxSZWZUeXBlLCBWYWx1ZVR5cGU+OworCisgICAgc3RydWN0IFBlZWtLZXlW
YWx1ZVBhaXJUcmFpdHMgOiBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEhhc2hUcmFpdHM8S2V5VHlw
ZSY+LCBIYXNoVHJhaXRzPFZhbHVlVHlwZSY+PiB7CisgICAgICAgIHN0YXRpYyBjb25zdGV4cHIg
Ym9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7CisgICAgICAgIHN0YXRpYyBib29s
IGlzRW1wdHlWYWx1ZShjb25zdCB0eXBlbmFtZSBLZXlWYWx1ZVBhaXJIYXNoVHJhaXRzPEhhc2hU
cmFpdHM8S2V5VHlwZSY+LCBIYXNoVHJhaXRzPFZhbHVlVHlwZSY+Pjo6VHJhaXRUeXBlJiB2YWx1
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlzSGFzaFRyYWl0c0VtcHR5VmFsdWU8
S2V5VHJhaXRzPih2YWx1ZS5rZXkpOworICAgICAgICB9CisgICAgfTsKKyAgICB1c2luZyBQZWVr
S2V5VmFsdWVQYWlyVHlwZSA9IHR5cGVuYW1lIFBlZWtLZXlWYWx1ZVBhaXJUcmFpdHM6OlRyYWl0
VHlwZTsKKworICAgIHN0cnVjdCBQZWVrVHlwZSB7CisgICAgICAgIEtleVR5cGUmIGtleTsKKyAg
ICAgICAgVmFsdWVUeXBlJiB2YWx1ZTsKKyAgICB9OworCisgICAgc3RydWN0IFBlZWtQdHJUeXBl
IHsKKyAgICAgICAgUGVla1B0clR5cGUoY29uc3QgUGVla1R5cGUmIHBlZWspCisgICAgICAgICAg
ICA6IG1fcGVlayhwZWVrKQorICAgICAgICB7IH0KKworICAgICAgICBjb25zdCBQZWVrVHlwZSYg
b3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9wZWVrOyB9CisgICAgICAgIFBlZWtUeXBlJiBv
cGVyYXRvciooKSB7IHJldHVybiBtX3BlZWs7IH0KKworICAgICAgICBjb25zdCBQZWVrVHlwZSog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3BlZWs7IH0KKyAgICAgICAgUGVla1R5cGUq
IG9wZXJhdG9yLT4oKSB7IHJldHVybiAmbV9wZWVrOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBQZWVrVHlwZSBtX3BlZWs7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBJdGVy
YXRvclR5cGUsIHR5cGVuYW1lIEl0ZXJhdG9yUGVla1B0clR5cGUsIHR5cGVuYW1lIEl0ZXJhdG9y
UGVla1R5cGU+CisgICAgY2xhc3MgV2Vha0hhc2hNYXBJdGVyYXRvckJhc2UgOiBwdWJsaWMgc3Rk
OjppdGVyYXRvcjxzdGQ6OmZvcndhcmRfaXRlcmF0b3JfdGFnLCBJdGVyYXRvclBlZWtUeXBlLCBz
dGQ6OnB0cmRpZmZfdCwgSXRlcmF0b3JQZWVrUHRyVHlwZSwgSXRlcmF0b3JQZWVrVHlwZT4gewor
ICAgIHByb3RlY3RlZDoKKyAgICAgICAgV2Vha0hhc2hNYXBJdGVyYXRvckJhc2UoSXRlcmF0b3JU
eXBlIHBvc2l0aW9uLCBJdGVyYXRvclR5cGUgZW5kKQorICAgICAgICAgICAgOiBtX3Bvc2l0aW9u
IHsgcG9zaXRpb24gfQorICAgICAgICAgICAgLCBtX2VuZFBvc2l0aW9uIHsgZW5kIH0KKyAgICAg
ICAgeworICAgICAgICAgICAgc2tpcEVtcHR5QnVja2V0cygpOworICAgICAgICB9CisKKyAgICAg
ICAgQUxXQVlTX0lOTElORSBJdGVyYXRvclBlZWtUeXBlIG1ha2VQZWVrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXV0byogZW50cnkgPSBtX3Bvc2l0aW9uLmdldCgpOworICAgICAgICAgICAg
S2V5VHlwZSoga2V5ID0gZW50cnktPmtleS0+dGVtcGxhdGUgZ2V0PEtleVR5cGU+KCk7CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0b3JQZWVrVHlwZSB7ICprZXksIGVudHJ5LT52YWx1ZSB9Owor
ICAgICAgICB9CisKKyAgICAgICAgQUxXQVlTX0lOTElORSBJdGVyYXRvclBlZWtUeXBlIG1ha2VQ
ZWVrKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgYXV0byogZW50cnkgPSBtX3Bvc2l0
aW9uLmdldCgpOworICAgICAgICAgICAgS2V5VHlwZSoga2V5ID0gZW50cnktPmtleS0+dGVtcGxh
dGUgZ2V0PEtleVR5cGU+KCk7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0b3JQZWVrVHlwZSB7
ICprZXksIGNvbnN0X2Nhc3Q8VmFsdWVUeXBlJj4oZW50cnktPnZhbHVlKSB9OworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhZHZhbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KG1fcG9zaXRpb24gIT0gbV9lbmRQb3NpdGlvbik7CisgICAgICAgICAgICArK21fcG9zaXRpb247
CisgICAgICAgICAgICBza2lwRW1wdHlCdWNrZXRzKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIHNraXBFbXB0eUJ1Y2tldHMoKQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAobV9w
b3NpdGlvbiAhPSBtX2VuZFBvc2l0aW9uICYmICFtX3Bvc2l0aW9uLT5rZXkuZ2V0KCkpCisgICAg
ICAgICAgICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3JU
eXBlIG1fcG9zaXRpb247CisgICAgICAgIEl0ZXJhdG9yVHlwZSBtX2VuZFBvc2l0aW9uOworICAg
IH07CisKKyAgICBjbGFzcyBXZWFrSGFzaE1hcEl0ZXJhdG9yIDogcHVibGljIFdlYWtIYXNoTWFw
SXRlcmF0b3JCYXNlPHR5cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IsIFBlZWtQdHJU
eXBlLCBQZWVrVHlwZT4geworICAgIHB1YmxpYzoKKyAgICAgICAgdXNpbmcgQmFzZSA9IFdlYWtI
YXNoTWFwSXRlcmF0b3JCYXNlPHR5cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IsIFBl
ZWtQdHJUeXBlLCBQZWVrVHlwZT47CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdl
YWtIYXNoTWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bvc2l0aW9u
ID09IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IFdlYWtIYXNoTWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bv
c2l0aW9uICE9IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKworICAgICAgICBQZWVrUHRyVHlw
ZSBnZXQoKSB7IHJldHVybiBCYXNlOjptYWtlUGVlaygpOyB9CisgICAgICAgIFBlZWtUeXBlIG9w
ZXJhdG9yKigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKyAgICAgICAgUGVla1B0clR5
cGUgb3BlcmF0b3ItPigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKworICAgICAgICBX
ZWFrSGFzaE1hcEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
QmFzZTo6YWR2YW5jZSgpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBXZWFrSGFzaE1hcEl0ZXJhdG9yKFdlYWtIYXNoSW1wbE1h
cCYgbWFwLCB0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6Oml0ZXJhdG9yIHBvc2l0aW9uKQorICAg
ICAgICAgICAgOiBCYXNlKHBvc2l0aW9uLCBtYXAuZW5kKCkpCisgICAgICAgIHsgfQorCisgICAg
ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3Mg
V2Vha0hhc2hNYXA7CisgICAgfTsKKworICAgIGNsYXNzIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRv
ciA6IHB1YmxpYyBXZWFrSGFzaE1hcEl0ZXJhdG9yQmFzZTx0eXBlbmFtZSBXZWFrSGFzaEltcGxN
YXA6OmNvbnN0X2l0ZXJhdG9yLCBjb25zdCBQZWVrUHRyVHlwZSwgY29uc3QgUGVla1R5cGU+IHsK
KyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIEJhc2UgPSBXZWFrSGFzaE1hcEl0ZXJhdG9yQmFz
ZTx0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6OmNvbnN0X2l0ZXJhdG9yLCBjb25zdCBQZWVrUHRy
VHlwZSwgY29uc3QgUGVla1R5cGU+OworCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBX
ZWFrSGFzaE1hcENvbnN0SXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bv
c2l0aW9uID09IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvciYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IEJhc2U6Om1fcG9zaXRpb24gIT0gb3RoZXIuQmFzZTo6bV9wb3NpdGlvbjsgfQorCisgICAgICAg
IGNvbnN0IFBlZWtQdHJUeXBlIGdldCgpIGNvbnN0IHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7
IH0KKyAgICAgICAgY29uc3QgUGVla1R5cGUgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gQmFz
ZTo6bWFrZVBlZWsoKTsgfQorICAgICAgICBjb25zdCBQZWVrUHRyVHlwZSBvcGVyYXRvci0+KCkg
Y29uc3QgeyByZXR1cm4gQmFzZTo6bWFrZVBlZWsoKTsgfQorCisgICAgICAgIFdlYWtIYXNoTWFw
Q29uc3RJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2U6
OmFkdmFuY2UoKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgV2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yKGNvbnN0IFdlYWtIYXNo
SW1wbE1hcCYgbWFwLCB0eXBlbmFtZSBXZWFrSGFzaEltcGxNYXA6OmNvbnN0X2l0ZXJhdG9yIHBv
c2l0aW9uKQorICAgICAgICAgICAgOiBCYXNlKHBvc2l0aW9uLCBtYXAuZW5kKCkpCisgICAgICAg
IHsgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5cGVuYW1lPiBm
cmllbmQgY2xhc3MgV2Vha0hhc2hNYXA7CisgICAgfTsKKworICAgIHN0cnVjdCBBZGRSZXN1bHQg
eworICAgICAgICBBZGRSZXN1bHQoKSA6IGlzTmV3RW50cnkoZmFsc2UpIHsgfQorICAgICAgICBB
ZGRSZXN1bHQoV2Vha0hhc2hNYXBJdGVyYXRvciBpdCwgYm9vbCBpc05ld0VudHJ5KSA6IGl0ZXJh
dG9yKGl0KSwgaXNOZXdFbnRyeShpc05ld0VudHJ5KSB7IH0KKyAgICAgICAgV2Vha0hhc2hNYXBJ
dGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgYm9vbCBpc05ld0VudHJ5OworCisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc05ld0VudHJ5OyB9CisgICAg
fTsKKworICAgIHVzaW5nIGl0ZXJhdG9yID0gV2Vha0hhc2hNYXBJdGVyYXRvcjsKKyAgICB1c2lu
ZyBjb25zdF9pdGVyYXRvciA9IFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvcjsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgeyByZXR1cm4gV2Vha0hhc2hNYXBJdGVyYXRvcihtX21hcCwgbV9tYXAuYmVn
aW4oKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBXZWFrSGFzaE1hcEl0ZXJhdG9y
KG1fbWFwLCBtX21hcC5lbmQoKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvcihtX21hcCwgbV9tYXAuYmVnaW4oKSk7
IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBXZWFrSGFzaE1hcENv
bnN0SXRlcmF0b3IobV9tYXAsIG1fbWFwLmVuZCgpKTsgfQorCisgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIEZ1bmN0b3I+IHZvaWQgZW5zdXJlKGNvbnN0IEtleVR5cGUmIGtleSwgRnVuY3RvciYmIGZ1
bmN0b3IpIHsgcmV0dXJuIG1fbWFwLmVuc3VyZShrZXksIGZ1bmN0b3IpOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIEFkZFJlc3VsdCBhZGQoY29uc3QgS2V5VHlwZSYga2V5LCBU
JiYgdmFsdWUpCisgICAgeworICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fbWFwLmFkZChtYWtl
S2V5SW1wbChrZXkpLCBzdGQ6OmZvcndhcmQ8VD4odmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIEFk
ZFJlc3VsdCB7IFdlYWtIYXNoTWFwSXRlcmF0b3IobV9tYXAsIGFkZFJlc3VsdC5pdGVyYXRvciks
IGFkZFJlc3VsdC5pc05ld0VudHJ5IH07CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVj4KKyAgICB2b2lkIHNldChjb25zdCBUJiBrZXksIFYmJiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIG1fbWFwLnNldChtYWtlS2V5SW1wbChrZXkpLCBXVEZNb3ZlKHZhbHVlKSk7
CisgICAgfQorCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBLZXlUeXBlJiBrZXkpCisgICAgewor
ICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAgIGlm
ICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKyAgICAgICAgcmV0dXJuIFdl
YWtIYXNoTWFwSXRlcmF0b3IobV9tYXAsIG1fbWFwLmZpbmQoKmtleUltcGwpKTsKKyAgICB9CisK
KyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkgY29uc3QKKyAgICB7
CisgICAgICAgIGF1dG8qIGtleUltcGwgPSBrZXlJbXBsSWZFeGlzdHMoa2V5KTsKKyAgICAgICAg
aWYgKCFrZXlJbXBsKQorICAgICAgICAgICAgcmV0dXJuIGVuZCgpOworICAgICAgICByZXR1cm4g
V2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yKG1fbWFwLCBtX21hcC5maW5kKCprZXlJbXBsKSk7Cisg
ICAgfQorCisgICAgYm9vbCBjb250YWlucyhjb25zdCBLZXlUeXBlJiBrZXkpIGNvbnN0CisgICAg
eworICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAg
IGlmICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gbV9tYXAuY29udGFpbnMoKmtleUltcGwpOworICAgIH0KKworICAgIHR5cGVuYW1lIFZhbHVl
VHJhaXRzOjpQZWVrVHlwZSBnZXQoY29uc3QgS2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAg
YXV0byoga2V5SW1wbCA9IGtleUltcGxJZkV4aXN0cyhrZXkpOworICAgICAgICBpZiAoIWtleUlt
cGwpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVUcmFpdHM6OnBlZWsoVmFsdWVUcmFpdHM6OmVt
cHR5VmFsdWUoKSk7CisgICAgICAgIHJldHVybiBtX21hcC5nZXQoKmtleUltcGwpOworICAgIH0K
KworICAgIGJvb2wgcmVtb3ZlKGl0ZXJhdG9yIGl0KSB7IHJldHVybiBtX21hcC5yZW1vdmUoaXQu
bV9wb3NpdGlvbik7IH0KKyAgICBib29sIHJlbW92ZShjb25zdCBLZXlUeXBlJiBrZXkpCisgICAg
eworICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAg
IGlmICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG1fbWFwLnJlbW92ZShrZXlJbXBsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIGJvb2wgcmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICByZXR1cm4gbV9tYXAucmVtb3ZlSWYoWyZdKGF1dG8mIGl0ZXJhdG9yKSB7CisgICAgICAg
ICAgICBib29sIGlzUmVsZWFzZWRXZWFrS2V5ID0gIWl0ZXJhdG9yLmtleS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmIChpc1JlbGVhc2VkV2Vha0tleSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgIHJldHVybiBmdW5jdG9yKGl0ZXJhdG9yKTsKKyAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgdm9pZCBjbGVhcigpIHsgcmV0dXJuIG1fbWFwLmNsZWFyKCk7IH0KKyAgICB1
bnNpZ25lZCBjYXBhY2l0eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNhcGFjaXR5KCk7IH0KKyAg
ICBib29sIGlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkgY29uc3QgeyByZXR1cm4gYmVn
aW4oKSA9PSBlbmQoKTsgfQorCisgICAgYm9vbCBoYXNOdWxsUmVmZXJlbmNlcygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gV1RGOjphbnlPZihtX21hcCwgW10gKGF1dG8mIGl0ZXJhdG9y
KSB7IHJldHVybiAhaXRlcmF0b3Iua2V5LmdldCgpOyB9KTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBjb21wdXRlU2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBjb25zdF9jYXN0PFdlYWtIYXNo
TWFwJj4oKnRoaXMpLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIHJldHVybiBtX21h
cC5zaXplKCk7CisgICAgfQorCisgICAgYm9vbCByZW1vdmVOdWxsUmVmZXJlbmNlcygpCisgICAg
eworICAgICAgICByZXR1cm4gbV9tYXAucmVtb3ZlSWYoW10oYXV0byYgaXRlcmF0b3IpIHsgcmV0
dXJuICFpdGVyYXRvci5rZXkuZ2V0KCk7IH0pOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVE
CisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyBtX21hcC5jaGVja0NvbnNpc3Rl
bmN5KCk7IH0KKyNlbHNlCisgICAgdm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMg
UmVmVHlwZSBtYWtlS2V5SW1wbChjb25zdCBUJiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4g
Km1ha2VXZWFrUHRyPEtleVR5cGU+KGNvbnN0X2Nhc3Q8VCY+KGtleSkpLm1faW1wbDsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBzdGF0aWMgV2Vha1B0ckltcGw8Q291
bnRlcj4qIGtleUltcGxJZkV4aXN0cyhjb25zdCBUJiBrZXkpCisgICAgeworICAgICAgICBhdXRv
JiB3ZWFrUHRySW1wbCA9IGtleS53ZWFrUHRyRmFjdG9yeSgpLm1faW1wbDsKKyAgICAgICAgaWYg
KCF3ZWFrUHRySW1wbCB8fCAhKndlYWtQdHJJbXBsKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiB3ZWFrUHRySW1wbC5nZXQoKTsKKyAgICB9CisKKyAgICBXZWFr
SGFzaEltcGxNYXAgbV9tYXA7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RG
OjpXZWFrSGFzaE1hcDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaCBiL1Nv
dXJjZS9XVEYvd3RmL1dlYWtQdHIuaAppbmRleCAxMmM0YjY4OTg4NzI5OTNhMWE1M2Y1OWY5NmI2
ZDBhYmYyNjdiMGIzLi44NjJiODVkYTQ0YWU4MjQ3MDc3MjFlM2EwMWNiMjA2M2Q5MDcwZGFlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9XZWFrUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYv
V2Vha1B0ci5oCkBAIC0xMTksNiArMTE5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY2xlYXIoKSB7
IG1faW1wbCA9IG51bGxwdHI7IH0KIAogcHJpdmF0ZToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSwg
dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hNYXA7CiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hTZXQ7CiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha1B0cjsKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBXZWFrUHRyRmFjdG9yeTsKQEAg
LTE5Myw2ICsxOTQsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hTZXQ7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIFdlYWtIYXNoTWFwOwogCiAg
ICAgbXV0YWJsZSBSZWZQdHI8V2Vha1B0ckltcGw8Q291bnRlcj4+IG1faW1wbDsKICNpZiBBU1NF
UlRfRU5BQkxFRApkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9n
CmluZGV4IDFmNWRjNWI0MjM1NGJiOTY2NjU4Mzg5NDI2MjY1Y2U5N2IzNDQyMTEuLmI5OGMwNTYy
MzQyY2VmNDBiNzEzMWFiMjczMjk5YWJiOWZjOTFiODAgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5n
ZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMS0wNi0xMCAg
Unlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBBZGQgV2Vha0hhc2hN
YXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjg3
MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVk
IHVuaXQgdGVzdHMgZm9yIFdlYWtIYXNoTWFwLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XVEYvV2Vha1B0ci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb21wdXRlU2l6
ZU9mV2Vha0hhc2hTZXQpOiBEZWxldGVkIHRoZSB1bnVzZWQgdmFyaWFudC4KKyAgICAgICAgKFdU
Rl9XZWFrUHRyLldlYWtIYXNoU2V0RXhwYW5zaW9uKTogRGVsZXRlZCB0aGUgc3VwZXJmbG91cyBm
b3IgbG9vcC4KKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNvbXB1dGVTaXplT2ZXZWFrSGFzaE1h
cCk6IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VmFsdWVPYmplY3QpOiBBZGRlZC4K
KyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlZhbHVlT2JqZWN0OjpjcmVhdGUpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VmFsdWVPYmplY3Q6On5WYWx1ZU9iamVjdCk6CisgICAgICAgIChUZXN0
V2ViS2l0QVBJOjpWYWx1ZU9iamVjdDo6VmFsdWVPYmplY3QpOgorICAgICAgICAoV1RGX1dlYWtQ
dHIuV2Vha0hhc2hNYXBCYXNpYyk6IEFkZGVkLgorICAgICAgICAoV1RGX1dlYWtQdHIuV2Vha0hh
c2hNYXBDb25zdE9iamVjdHMpOiBBZGRlZC4KKyAgICAgICAgKFdURl9XZWFrUHRyLldlYWtIYXNo
TWFwRXhwYW5zaW9uKTogQWRkZWQuCisgICAgICAgIChXVEZfV2Vha1B0ci5XZWFrSGFzaE1hcFJl
bW92ZU51bGxSZWZlcmVuY2VzKTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjb2xs
ZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzKTogQWRkZWQuCisgICAgICAgIChXVEZfV2Vh
a1B0ci5XZWFrSGFzaE1hcEl0ZXJhdG9ycyk6IEFkZGVkLgorCiAyMDIxLTA2LTA4ICBGdWppaSBI
aXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQt
dGVzdHM6IFRhc2tQb29sIHJlcG9ydHMgUGlja2xpbmdFcnJvciBmb3IgV2luZG93cyBQeXRob24K
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dlYWtQdHIuY3BwIGIv
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKaW5kZXggOTFlZmYwNjBh
OTdkNzE0MmJiMzE5ZGU2ZWExYmM2MDJkOGY3OTVkZC4uZWRjMGI3NjEyODgwY2FmNmI5ZGFlODQw
MTRhNGJjZTY5MTM1NjJiNSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
VEYvV2Vha1B0ci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0
ci5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUg
IlRlc3QuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vh
a0hhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtMzgsNiArMzksNyBA
QCBzdHJ1Y3QgV2Vha1B0ckNvdW50ZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQ2FuTWFrZVdlYWtQdHIgPSBXVEY6OkNhbk1ha2VXZWFrUHRyPFQsIFdlYWtQdHJGYWN0b3J5
SW5pdGlhbGl6YXRpb246OkxhenksIFdlYWtQdHJDb3VudGVyPjsKK3RlbXBsYXRlPHR5cGVuYW1l
IFQsIHR5cGVuYW1lIFU+IHVzaW5nIFdlYWtIYXNoTWFwID0gV1RGOjpXZWFrSGFzaE1hcDxULCBV
LCBXZWFrUHRyQ291bnRlcj47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBXZWFrSGFzaFNl
dCA9IFdURjo6V2Vha0hhc2hTZXQ8VCwgV2Vha1B0ckNvdW50ZXI+OwogdGVtcGxhdGU8dHlwZW5h
bWUgVD4gdXNpbmcgV2Vha1B0ciA9IFdURjo6V2Vha1B0cjxULCBXZWFrUHRyQ291bnRlcj47CiB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBXZWFrUHRyRmFjdG9yeSA9IFdURjo6V2Vha1B0ckZh
Y3Rvcnk8VCwgV2Vha1B0ckNvdW50ZXI+OwpAQCAtMzQxLDE3ICszNDMsNiBAQCBURVNUKFdURl9X
ZWFrUHRyLCBEZXJpdmVkQ29uc3RydWN0QW5kQXNzaWduQ29uc3QpCiAgICAgfQogfQogCi10ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KLXVuc2lnbmVkIGNvbXB1dGVTaXplT2ZXZWFrSGFzaFNldChjb25z
dCBIYXNoU2V0PFdlYWtQdHI8VD4+JiBzZXQpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0g
ICAgZm9yIChhdXRvJiBpdGVtIDogc2V0KSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
LSAgICAgICAgc2l6ZSsrOwotICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQogdGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CiB1bnNpZ25lZCBjb21wdXRlU2l6ZU9mV2Vha0hhc2hTZXQoY29uc3QgV2Vh
a0hhc2hTZXQ8VD4mIHNldCkKIHsKQEAgLTU2Nyw3ICs1NTgsNyBAQCBURVNUKFdURl9XZWFrUHRy
LCBXZWFrSGFzaFNldEV4cGFuc2lvbikKICAgICB9CiAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtS
ZWZlcmVuY2VzLCAwdSk7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTsgKytpKSB7
CisgICAgewogICAgICAgICBXZWFrSGFzaFNldDxCYXNlPiB3ZWFrSGFzaFNldDsKICAgICAgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb2JqZWN0czsKICAgICAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb3RoZXJPYmplY3RzOwpAQCAtNzgwLDYgKzc3MSw4MzUgQEAg
VEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hTZXRDb21wdXRlU2l6ZSkKICAgICB9CiB9CiAKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBULCB0eXBlbmFtZSBVPgordW5zaWduZWQgY29tcHV0ZVNpemVPZldl
YWtIYXNoTWFwKGNvbnN0IFdlYWtIYXNoTWFwPFQsIFU+JiBtYXApCit7CisgICAgdW5zaWduZWQg
c2l6ZSA9IDA7CisgICAgZm9yIChhdXRvIGl0ZW0gOiBtYXApIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGl0ZW0pOworICAgICAgICBzaXplKys7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQor
CitzdHJ1Y3QgVmFsdWVPYmplY3QgOiBwdWJsaWMgUmVmQ291bnRlZDxWYWx1ZU9iamVjdD4gewor
cHVibGljOgorCisgICAgc3RhdGljIFJlZjxWYWx1ZU9iamVjdD4gY3JlYXRlKGludCB2YWx1ZSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBWYWx1ZU9iamVjdCh2YWx1ZSkpOyB9CisKKyAgICB+VmFs
dWVPYmplY3QoKSB7IEFTU0VSVChzX2NvdW50KTsgLS1zX2NvdW50OyB9CisKKyAgICBpbnQgdmFs
dWU7CisKKyAgICBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsKKworcHJpdmF0ZToKKyAgICBWYWx1
ZU9iamVjdCh1bnNpZ25lZCBzaG9ydCB2YWx1ZSkKKyAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAg
ICB7CisgICAgICAgICsrc19jb3VudDsKKyAgICB9Cit9OworCit1bnNpZ25lZCBWYWx1ZU9iamVj
dDo6c19jb3VudCA9IDA7CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwQmFzaWMpCit7
CisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAg
ICAgICBCYXNlIG9iamVjdDsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRh
aW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1
KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1h
cCksIDB1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgMzQpOworICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNv
bXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgRVhQRUNU
X1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3
ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgMzQpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2Jq
ZWN0LCAxMik7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVj
dCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCksIDM0KTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVD
VF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAg
IHdlYWtIYXNoTWFwLnNldChvYmplY3QsIDcpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFz
aE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QpLCA3KTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAx
dSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hN
YXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9
CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAgICB7CisgICAg
ICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIEJhc2Ugb2JqZWN0OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFw
LmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZX
ZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jh
c2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVj
dCwgNyk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmpl
Y3QpKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgNyk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNo
TWFwKSwgMXUpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAx
dSk7CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1h
cCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgIH0KKyAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKwor
ICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAgICAg
ICAgeworICAgICAgICAgICAgQmFzZSBvYmplY3QxOworICAgICAgICAgICAgQmFzZSBvYmplY3Qy
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEp
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIDApOwor
ICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiksIDApOworICAg
ICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOwor
ICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDEsIDMpOworICAgICAgICAgICAgRVhQ
RUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MSkpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgMyk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MikpOworICAgICAgICAgICAgRVhQRUNU
X0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKSwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
c19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb21wdXRl
U2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgICAgICB3ZWFrSGFz
aE1hcC5hZGQob2JqZWN0MiwgMjQpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hN
YXAuY29udGFpbnMob2JqZWN0MSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFw
LmdldChvYmplY3QxKSwgMyk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5j
b250YWlucyhvYmplY3QyKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0
KG9iamVjdDIpLCAyNCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDJ1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAo
d2Vha0hhc2hNYXApLCAydSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0
MSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0
MSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgMCk7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCAyNCk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFw
KSwgMXUpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hh
c2hNYXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7
CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIFJlZjxWYWx1ZU9iamVjdD4+IHdl
YWtIYXNoTWFwOworICAgICAgICBCYXNlIG9iamVjdDE7CisgICAgICAgIEJhc2Ugb2JqZWN0MjsK
KyAgICAgICAgQmFzZSBvYmplY3QzOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAu
Y29udGFpbnMob2JqZWN0MSkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9i
amVjdDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRh
aW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3Qy
KSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhv
YmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51
bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAg
ICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1
KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDEsIFZhbHVlT2JqZWN0OjpjcmVhdGUo
MTAwKSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QyLCBWYWx1ZU9iamVjdDo6Y3Jl
YXRlKDIwMCkpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsK
KyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAydSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKS0+dmFsdWUsIDEwMCk7CisgICAgICAgIEVYUEVD
VF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VR
KHdlYWtIYXNoTWFwLmdldChvYmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3
ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0Ojpz
X2NvdW50LCAydSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAo
d2Vha0hhc2hNYXApLCAydSk7CisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QxKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgbnVsbHB0cik7CisgICAg
ICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAg
RVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAg
IEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBF
Q1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsgLy8gQmVjYXVzZSBvYmplY3QyIGhvbGRz
IG9udG8gV2Vha1JlZmVyZW5jZS4KKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2Nv
dW50LCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vh
a0hhc2hNYXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QzKTsKKyAg
ICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAg
ICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgbnVsbHB0cik7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQ
RUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVY
UEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2Jq
ZWN0OjpzX2NvdW50LCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hh
c2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3Qy
LCBWYWx1ZU9iamVjdDo6Y3JlYXRlKDIxMCkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hh
c2hNYXAuY29udGFpbnMob2JqZWN0MSkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAu
Z2V0KG9iamVjdDEpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAu
Y29udGFpbnMob2JqZWN0MikpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9i
amVjdDIpLT52YWx1ZSwgMjAwKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNv
bnRhaW5zKG9iamVjdDMpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmpl
Y3QzKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MnUpOworICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDF1KTsKKyAgICAg
ICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsK
KyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdDIsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMjIw
KSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7
CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51bGxwdHIpOwor
ICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAg
ICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiktPnZhbHVlLCAyMjApOworICAg
ICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MykpOworICAgICAg
ICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDMpLCBudWxscHRyKTsKKyAgICAgICAg
RVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAgIEVYUEVDVF9FUShW
YWx1ZU9iamVjdDo6c19jb3VudCwgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVP
ZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1v
dmUob2JqZWN0Mik7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhv
YmplY3QxKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51
bGxwdHIpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0
MikpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCBudWxscHRy
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDMpKTsK
KyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QzKSwgbnVsbHB0cik7Cisg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAgICBFWFBF
Q1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDB1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDB1KTsKKyAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDB1KTsKK30KKwor
VEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hNYXBDb25zdE9iamVjdHMpCit7CisgICAgeworICAg
ICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFrSGFzaE1hcDsKKyAg
ICAgICAgY29uc3QgQmFzZSBvYmplY3Q7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1h
cC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCAwdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vh
a0hhc2hNYXApLCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIFZhbHVlT2Jq
ZWN0OjpjcmVhdGUoMykpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFz
aE1hcCksIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2Jq
ZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS0+dmFsdWUs
IDMpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdl
YWtIYXNoTWFwLmFkZChvYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUoNykpOworICAgICAgICBF
WFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLT52YWx1ZSwgMyk7CisgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNp
emVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5j
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QsIFZhbHVl
T2JqZWN0OjpjcmVhdGUoMTEpKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29u
dGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0
KS0+dmFsdWUsIDExKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAx
dSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hN
YXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgd2Vha0hhc2hNYXAucmVtb3ZlKG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VX
ZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtI
YXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hN
YXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQo
b2JqZWN0KSwgbnVsbHB0cik7CisgICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxC
YXNlLCBTdHJpbmc+IHdlYWtIYXNoTWFwOworICAgICAgICBjb25zdCBEZXJpdmVkIG9iamVjdDsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS5pc051bGwoKSk7CisgICAg
ICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICBFWFBFQ1Rf
RVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAgICB3
ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAiaGVsbG8iX3MpOworICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZX
ZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hh
c2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSh3ZWFrSGFzaE1h
cC5nZXQob2JqZWN0KS51dGY4KCkuZGF0YSgpLCAiaGVsbG8iKTsKKyAgICAgICAgd2Vha0hhc2hN
YXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAi
d29ybGQiX3MpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmpl
Y3QpKTsKKyAgICAgICAgRVhQRUNUX1NUUkVRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLnV0Zjgo
KS5kYXRhKCksICJoZWxsbyIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFr
SGFzaE1hcCksIDF1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgICAgICB3ZWFrSGFzaE1hcC5zZXQob2JqZWN0LCAiV2ViS2l0Il9zKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9T
VFJFUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS51dGY4KCkuZGF0YSgpLCAiV2ViS2l0Iik7Cisg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBF
Q1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAg
ICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLnJl
bW92ZShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1
KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1h
cCksIDB1KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVj
dCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS5pc051bGwo
KSk7CisgICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtI
YXNoTWFwOworICAgICAgICBjb25zdCBEZXJpdmVkIG9iamVjdDsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vh
a0hhc2hNYXAuZ2V0KG9iamVjdCksIDApOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1h
cCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAzKTsKKyAgICAgICAgRVhQRUNU
X0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRl
U2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hh
c2hNYXAuZ2V0KG9iamVjdCksIDMpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3Rl
bmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIDcpOworICAgICAgICBFWFBF
Q1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VR
KHdlYWtIYXNoTWFwLmdldChvYmplY3QpLCAzKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdl
YWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hh
c2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lz
dGVuY3koKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgMTEpOworICAgICAgICBF
WFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNU
X0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLCAxMSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jh
c2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldl
YWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QpOworICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgMCk7CisgICAgICAgIEVYUEVDVF9FUShz
X2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVP
ZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgIH0KK30KKworVEVTVChXVEZfV2Vh
a1B0ciwgV2Vha0hhc2hNYXBFeHBhbnNpb24pCit7CisgICAgdW5zaWduZWQgaW5pdGlhbENhcGFj
aXR5OworICAgIHN0YXRpYyBjb25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZENhcCA9IDM7CisgICAg
eworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICBC
YXNlIG9iamVjdDsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7
CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIDEpOworICAgICAgICBFWFBFQ1RfRVEo
c19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gd2Vh
a0hhc2hNYXAuY2FwYWNpdHkoKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAwdSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHRlc3RDb3VudCA9IDA7IHRlc3RDb3Vu
dCA8IDEwOyArK3Rlc3RDb3VudCkgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCB1bnNpZ25l
ZD4gd2Vha0hhc2hNYXA7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9i
amVjdHM7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG90aGVyT2JqZWN0
czsKKworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY2FwYWNpdHkoKSwgMHUpOworICAg
ICAgICBFWFBFQ1RfVFJVRShpbml0aWFsQ2FwYWNpdHkgLyBtYXhMb2FkQ2FwKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluaXRpYWxDYXBhY2l0eSAvIG1heExvYWRDYXA7ICsr
aSkgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSBtYWtlVW5pcXVlPEJhc2U+KCk7CisgICAg
ICAgICAgICB3ZWFrSGFzaE1hcC5hZGQoKm9iamVjdCwgaSk7CisgICAgICAgICAgICBvYmplY3Rz
LmFwcGVuZChXVEZNb3ZlKG9iamVjdCkpOworICAgICAgICAgICAgb3RoZXJPYmplY3RzLmFwcGVu
ZChtYWtlVW5pcXVlPEJhc2U+KCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJl
bmNlcywgb3RoZXJPYmplY3RzLnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1h
cC5jYXBhY2l0eSgpLCBpbml0aWFsQ2FwYWNpdHkpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0
ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgb2JqZWN0cy5zaXplKCkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3RoZXJPYmplY3RzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucygqb2JqZWN0c1tpXSkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldCgqb2JqZWN0c1tpXSksIGkp
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKCpvdGhlck9i
amVjdHNbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBvYmplY3RzLmNsZWFyKCk7CisgICAgICAg
IHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFz
ZVdlYWtSZWZlcmVuY2VzLCBvdGhlck9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VR
KHdlYWtIYXNoTWFwLmNhcGFjaXR5KCksIGluaXRpYWxDYXBhY2l0eSk7CisgICAgICAgIEVYUEVD
VF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAg
IGZvciAoYXV0byYgb2JqZWN0IDogb3RoZXJPYmplY3RzKQorICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKCpvYmplY3QpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9
IDEwMDsKKyAgICAgICAgZm9yIChhdXRvJiBvYmplY3QgOiBvdGhlck9iamVjdHMpIHsKKyAgICAg
ICAgICAgIHdlYWtIYXNoTWFwLmFkZCgqb2JqZWN0LCBpKTsKKyAgICAgICAgICAgIHdlYWtIYXNo
TWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAg
ICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY2FwYWNpdHkoKSwgaW5pdGlhbENhcGFjaXR5KTsK
KyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCks
IG90aGVyT2JqZWN0cy5zaXplKCkpOworICAgICAgICBpID0gMTAwOworICAgICAgICBmb3IgKGF1
dG8mIG9iamVjdCA6IG90aGVyT2JqZWN0cykgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vh
a0hhc2hNYXAuY29udGFpbnMoKm9iamVjdCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtI
YXNoTWFwLmdldCgqb2JqZWN0KSwgaSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAg
ICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIHRlc3RDb3VudCA9IDA7IHRlc3RDb3VudCA8IDEwOyArK3Rlc3RDb3VudCkgewor
ICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFrSGFzaE1hcDsK
KyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb2JqZWN0czsKKyAgICAgICAg
RVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNhcGFjaXR5KCksIDB1KTsKKyAgICAgICAgdW5zaWduZWQg
b2JqZWN0Q291bnQgPSBpbml0aWFsQ2FwYWNpdHkgKiAyOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgb2JqZWN0Q291bnQ7ICsraSkgeworICAgICAgICAgICAgYXV0byBvYmplY3Qg
PSBtYWtlVW5pcXVlPEJhc2U+KCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5zZXQoKm9iamVj
dCwgVmFsdWVPYmplY3Q6OmNyZWF0ZSgxMDAgKyBpKSk7CisgICAgICAgICAgICBvYmplY3RzLmFw
cGVuZChXVEZNb3ZlKG9iamVjdCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25z
aXN0ZW5jeSgpOworICAgICAgICB9CisgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsQ2FwYWNpdHkg
PSB3ZWFrSGFzaE1hcC5jYXBhY2l0eSgpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIG9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXpl
T2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIG9iamVjdHMuc2l6ZSgpKTsKKworICAgICAgICBp
bnQgaSA9IDEwMDsKKyAgICAgICAgZm9yIChhdXRvJiBvYmplY3QgOiBvYmplY3RzKSB7CisgICAg
ICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucygqb2JqZWN0KSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KCpvYmplY3QpLT52YWx1ZSwgaSk7Cisg
ICAgICAgICAgICArK2k7CisgICAgICAgIH0KKworICAgICAgICBvYmplY3RzLmNsZWFyKCk7Cisg
ICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCBvYmplY3RDb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSh3
ZWFrSGFzaE1hcC5jYXBhY2l0eSgpLCBvcmlnaW5hbENhcGFjaXR5KTsKKyAgICAgICAgRVhQRUNU
X0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICB9Cit9
CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwSXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVy
ZW5jZXMpCit7CisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNo
TWFwOworICAgICAgICB7CisgICAgICAgICAgICBCYXNlIG9iamVjdDsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNU
X1RSVUUod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAg
ICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdl
YWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAg
ICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgd2Vha0hhc2hN
YXAuc2V0KG9iamVjdCwgMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxs
UmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5pc0Vt
cHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNo
ZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIDMp
OworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAg
ICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJl
ZmVyZW5jZXMoKSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgICAgIH0KKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVy
ZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmlu
Z051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDF1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAg
ICAgICAgQmFzZSBvYmplY3QxOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDB1KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVu
Y2VzKCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3JpbmdO
dWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgp
OworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0MSwgMTAwKTsKKyAgICAgICAgRVhQRUNU
X0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtI
YXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFz
aE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2Jq
ZWN0MjsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QyLCAyMDApOworICAgICAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMo
KSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
IH0KKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7
CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgd2Vha0hh
c2hNYXAucmVtb3ZlKG9iamVjdDEpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVy
ZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmlu
Z051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5
KCk7CisgICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVP
YmplY3Q+PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNl
Pj4gb2JqZWN0czsKKyAgICAgICAgYXV0byBmaXJzdE9iamVjdCA9IG1ha2VVbmlxdWU8QmFzZT4o
KTsKKyAgICAgICAgaW50IHZhbHVlID0gMTsKKyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpmaXJz
dE9iamVjdCwgVmFsdWVPYmplY3Q6OmNyZWF0ZSh2YWx1ZSsrKSk7CisgICAgICAgIGRvIHsKKyAg
ICAgICAgICAgIGF1dG8gb2JqZWN0ID0gbWFrZVVuaXF1ZTxCYXNlPigpOworICAgICAgICAgICAg
d2Vha0hhc2hNYXAuc2V0KCpvYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUodmFsdWUrKykpOwor
ICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAgICAgICAgfSB3
aGlsZSAoJndlYWtIYXNoTWFwLmJlZ2luKCktPmtleSA9PSBmaXJzdE9iamVjdC5nZXQoKSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCBvYmplY3RzLnNpemUoKSAr
IDEpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIG9iamVjdHMuc2l6
ZSgpICsgMSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vh
a0hhc2hNYXApLCBvYmplY3RzLnNpemUoKSArIDEpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vh
a0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgZmlyc3RP
YmplY3QgPSBudWxscHRyOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxs
UmVmZXJlbmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1wdHlJ
Z25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIG9iamVjdHMuc2l6ZSgpICsgMSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRl
U2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCBvYmplY3RzLnNpemUoKSk7CisgICAgICAg
IG9iamVjdHMuY2xlYXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVs
bFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJ
Z25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jbGVhcigpOwor
ICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7Cisg
ICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVu
Y2VzKCkpOworICAgIH0KK30KKworVEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hNYXBSZW1vdmVO
dWxsUmVmZXJlbmNlcykKK3sKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4g
d2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0OworICAgICAg
ICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNU
X0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uo
d2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdlYWtIYXNo
TWFwLnJlbW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDB1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVm
ZXJlbmNlcygpKTsKKworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgMSk7Cisg
ICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAgICAgICAgd2Vh
a0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFw
LmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVm
ZXJlbmNlcywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051
bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5zZXQob2JqZWN0LCAy
KTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAg
ICB3ZWFrSGFzaE1hcC5yZW1vdmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICAgICAgd2Vha0hh
c2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdl
YWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAu
aGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmpl
Y3QsIDMpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAg
IH0KKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBFWFBF
Q1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vh
a0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgd2Vha0hhc2hNYXAucmVt
b3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVmUHRyPFZhbHVlT2JqZWN0Pj4g
d2Vha0hhc2hNYXA7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGVyaXZlZD4+IG9i
amVjdHM7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAg
ICAgICAgICAgIGF1dG8ga2V5ID0gbWFrZVVuaXF1ZTxEZXJpdmVkPigpOworICAgICAgICAgICAg
d2Vha0hhc2hNYXAuYWRkKCprZXksIFZhbHVlT2JqZWN0OjpjcmVhdGUoaSArIDEwMCkpOworICAg
ICAgICAgICAgb2JqZWN0cy5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICAgICAgfQorICAgICAg
ICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDUwVSk7CisgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNTBVKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtI
YXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0Nv
bnNpc3RlbmN5KCk7CisKKyAgICAgICAgd2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMo
KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCA1MFUpOworICAgICAg
ICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwVSk7CisgICAgICAgIEVYUEVDVF9G
QUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hN
YXAuY2hlY2tDb25zaXN0ZW5jeSgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA1MDsgKytpKSB7CisgICAgICAgICAgICBpZiAoaSAlIDIpCisgICAgICAgICAgICAgICAgb2Jq
ZWN0c1tpXSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1v
dmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291
bnQsIDI1VSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMjVVKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOwor
ICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICAgICAgYm9vbCBz
ZWVuWzUwXSA9IHsgZmFsc2UgfTsKKyAgICAgICAgZm9yIChhdXRvIGtleVZhbHVlIDogd2Vha0hh
c2hNYXApIHsKKyAgICAgICAgICAgIGludCByYXdWYWx1ZSA9IGtleVZhbHVlLnZhbHVlLT52YWx1
ZTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHJhd1ZhbHVlID49IDEwMCAmJiByYXdWYWx1ZSA8
IDE1MCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHJhd1ZhbHVlIC0gMTAwKSAlIDIsIDApOwor
ICAgICAgICAgICAgdW5zaWduZWQgaW5kZXggPSByYXdWYWx1ZSAtIDEwMDsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRShzZWVuW2luZGV4XSk7CisgICAgICAgICAgICBzZWVuW2luZGV4XSA9IHRy
dWU7CisgICAgICAgICAgICBFWFBFQ1RfRVEoJmtleVZhbHVlLmtleSwgb2JqZWN0c1tpbmRleF0u
Z2V0KCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChrZXlWYWx1ZS5r
ZXkpLCBrZXlWYWx1ZS52YWx1ZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkQmVQcmVz
ZW50ID0gIShpICUgMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2VlbltpXSwgc2hvdWxkQmVQ
cmVzZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIG9iamVjdHMuY2xlYXIoKTsKKyAgICAgICAg
d2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKFZh
bHVlT2JqZWN0OjpzX2NvdW50LCAwVSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVm
ZXJlbmNlcywgMFUpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJl
ZmVyZW5jZXMoKSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICB9Cit9CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lIE1hcD4KK2F1dG8gY29sbGVjdEtleVZhbHVlUGFpcnNVc2luZ0l0ZXJhdG9ycyhN
YXAmIG1hcCkKK3sKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiBw
YWlyczsKKyAgICBmb3IgKGF1dG8gaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyAr
K2l0KSB7CisgICAgICAgIHN0ZDo6cGFpciBrZXlWYWx1ZVBhaXIgeyAmaXQtPmtleSwgaXQuZ2V0
KCktPnZhbHVlIH07CisgICAgICAgIEVYUEVDVF9GQUxTRShwYWlycy5jb250YWlucyhrZXlWYWx1
ZVBhaXIpKTsKKyAgICAgICAgcGFpcnMuYWRkKGtleVZhbHVlUGFpcik7CisgICAgfQorICAgIHJl
dHVybiBwYWlyczsKK307CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwSXRlcmF0b3Jz
KQoreworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsK
KyAgICAgICAgeworICAgICAgICAgICAgQmFzZSBvYmplY3QxOworICAgICAgICAgICAgRGVyaXZl
ZCBvYmplY3QyOworICAgICAgICAgICAgQmFzZSBvYmplY3QzOworICAgICAgICAgICAgRGVyaXZl
ZCBvYmplY3Q0OworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDEsIDEpOworICAgICAgICAgICAgd2Vh
a0hhc2hNYXAuYWRkKG9iamVjdDIsIDIpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9i
amVjdDMsIDMpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDQsIDQpOworICAg
ICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA0dSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgNFUpOworICAgICAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAg
ICAgICBjb25zdCBhdXRvJiBjb25zdE1hcCA9IHdlYWtIYXNoTWFwOworICAgICAgICAgICAgYXV0
byBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4o
Y29uc3RNYXApOworICAgICAgICAgICAgRVhQRUNUX0VRKHBhaXJzLnNpemUoKSwgNFUpOworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDEs
IDEgfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWly
IHsgJm9iamVjdDIsIDIgfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFp
bnMoc3RkOjpwYWlyIHsgJm9iamVjdDMsIDMgfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUo
cGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDQsIDQgfSkpOworCisgICAgICAgICAg
ICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0Mik7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5y
ZW1vdmUob2JqZWN0Myk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDR1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVm
ZXJlbmNlcygpKTsKKworICAgICAgICAgICAgcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQYWlyc1Vz
aW5nSXRlcmF0b3JzPEJhc2UqLCBpbnQ+KGNvbnN0TWFwKTsKKyAgICAgICAgICAgIEVYUEVDVF9F
UShwYWlycy5zaXplKCksIDJVKTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRh
aW5zKHN0ZDo6cGFpciB7ICZvYmplY3QxLCAxIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxT
RShwYWlycy5jb250YWlucyhzdGQ6OnBhaXIgeyAmb2JqZWN0MiwgMiB9KSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRkFMU0UocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDMsIDMgfSkp
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9i
amVjdDQsIDQgfSkpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVm
ZXJlbmNlcywgMnUpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVm
ZXJlbmNlcygpKTsKKworICAgICAgICBhdXRvIHBhaXJzID0gY29sbGVjdEtleVZhbHVlUGFpcnNV
c2luZ0l0ZXJhdG9yczxCYXNlKiwgaW50Pih3ZWFrSGFzaE1hcCk7CisgICAgICAgIEVYUEVDVF9F
UShwYWlycy5zaXplKCksIDBVKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFw
PEJhc2UsIGludD4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpICUgMikKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQobWFrZVVuaXF1ZTxEZXJpdmVkPigpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKG1h
a2VVbmlxdWU8QmFzZT4oKSk7CisgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpvYmpl
Y3RzLmxhc3QoKSwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5j
aGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIDUwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVs
bFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY29tcHV0
ZVNpemUoKSwgNTBVKTsKKworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gd2Vha0hhc2hNYXAu
YmVnaW4oKTsgaXQgIT0gd2Vha0hhc2hNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGtleVZhbHVlID0gKml0OworICAgICAgICAgICAgICAgIGlmIChrZXlWYWx1ZS52YWx1
ZSAlIDYpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGtl
eVZhbHVlLnZhbHVlICo9IDUxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZWFrSGFz
aE1hcC5yZW1vdmVJZihbXShhdXRvJiBrZXlWYWx1ZSkgeyByZXR1cm4gIShrZXlWYWx1ZS52YWx1
ZSAlIDUpOyB9KTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNTB1KTsKKyAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKwor
ICAgICAgICAgICAgYXV0byBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRv
cnM8QmFzZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICAgICAgQVNTRVJUKHBhaXJzLnNp
emUoKSwgNDBVKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDUpKQorICAgICAgICAgICAgICAgICAgICBF
WFBFQ1RfVFJVRShXVEY6OmFsbE9mKHBhaXJzLCBbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRl
bS5maXJzdCAhPSBvYmplY3RzW2ldLmdldCgpOyB9KSk7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoIShpICUgNikpCisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRh
aW5zKHN0ZDo6cGFpciB7IG9iamVjdHNbaV0uZ2V0KCksIGkgKiA1MSB9KSk7CisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYWlycy5jb250YWlu
cyhzdGQ6OnBhaXIgeyBvYmplY3RzW2ldLmdldCgpLCBpIH0pKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIShpICUgNSkgfHwgIShpICUgOSkpCisgICAgICAgICAgICAgICAgICAgIG9i
amVjdHNbaV0gPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA0MFUpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOworCisgICAgICAgICAgICBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBh
aXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICAgICAg
QVNTRVJUKHBhaXJzLnNpemUoKSwgMzZVKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDUpIHx8ICEoaSAl
IDkpKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFsbE9mKHBhaXJzLCBb
Jl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5maXJzdCAhPSBvYmplY3RzW2ldLmdldCgpOyB9
KSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIShpICUgNikpCisgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7IG9iamVjdHNbaV0uZ2V0
KCksIGkgKiA1MSB9KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBFWFBFQ1RfVFJVRShwYWlycy5jb250YWlucyhzdGQ6OnBhaXIgeyBvYmplY3RzW2ldLmdldCgp
LCBpIH0pKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZU51
bGxSZWZlcmVuY2VzKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDM2VSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJl
ZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBBU1NFUlQocGFpcnMuc2l6ZSgpLCB3ZWFrSGFzaE1h
cC5jb21wdXRlU2l6ZSgpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDM2VSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
RVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAg
YXV0byBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGlu
dD4od2Vha0hhc2hNYXApOworICAgICAgICBFWFBFQ1RfRVEocGFpcnMuc2l6ZSgpLCAwVSk7CisK
KyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAzNlUpOworICAgICAgICB3
ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtI
YXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92
ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNl
cywgMFUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
IEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICB9CisK
KyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIFJlZjxWYWx1ZU9iamVjdD4+IHdlYWtI
YXNoTWFwOworICAgICAgICB7CisgICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPHN0ZDo6dW5p
cXVlX3B0cjxCYXNlPiwgUmVmUHRyPFZhbHVlT2JqZWN0Pj4+IG9iamVjdHM7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIGlm
IChpICUgMikKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQoc3RkOjpwYWlyIHsg
bWFrZVVuaXF1ZTxEZXJpdmVkPigpLCBWYWx1ZU9iamVjdDo6Y3JlYXRlKGkgKiA4MykgfSk7Cisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzLmFwcGVuZChz
dGQ6OnBhaXIgeyBtYWtlVW5pcXVlPEJhc2U+KCksIFZhbHVlT2JqZWN0OjpjcmVhdGUoaSkgfSk7
CisgICAgICAgICAgICAgICAgb2JqZWN0cy5sYXN0KCkuZmlyc3QtPmR1bW15ID0gMDsKKyAgICAg
ICAgICAgICAgICBpZiAoaSA8IDI1KQorICAgICAgICAgICAgICAgICAgICB3ZWFrSGFzaE1hcC5h
ZGQoKm9iamVjdHMubGFzdCgpLmZpcnN0LCAqb2JqZWN0cy5sYXN0KCkuc2Vjb25kKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMjVVKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5jb21wdXRlU2l6ZSgpLCAyNVUpOworCisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAg
ICAgIGF1dG8gaXQgPSB3ZWFrSGFzaE1hcC5maW5kKCpvYmplY3RzW2ldLmZpcnN0KTsKKyAgICAg
ICAgICAgICAgICBpZiAoaSA8IDI1KSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVF
KGl0ICE9IHdlYWtIYXNoTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VR
KGl0LT5rZXkuZHVtbXksIDApOworICAgICAgICAgICAgICAgICAgICBpZiAoaSAlIDkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoaXQgPT0gd2Vha0hhc2hNYXAuZW5kKCkpOwor
ICAgICAgICAgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShpdCk7CisgICAgICAgICAgICAgICAg
d2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1VSk7CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgMjJVKTsKKyAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgMjU7ICsraSkgeworICAgICAgICAgICAgICAgIGF1dG8gaXQg
PSB3ZWFrSGFzaE1hcC5maW5kKCpvYmplY3RzW2ldLmZpcnN0KTsKKyAgICAgICAgICAgICAgICBp
ZiAoIShpICUgOSkpIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX1RSVUUoaXQgPT0gd2Vh
a0hhc2hNYXAuZW5kKCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoJml0LmdldCgpLT5rZXksIG9i
amVjdHNbaV0uZmlyc3QuZ2V0KCkpOworICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdC5nZXQo
KS0+a2V5LmR1bW15LCAwKTsKKyAgICAgICAgICAgICAgICBpZiAoaSAlIDIpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaXQuZ2V0KCktPmtleS5kdW1teSA9IGkgKiAxMTsKKyAgICAgICAgICAgICAg
ICAgICAgRVhQRUNUX0VRKGl0LmdldCgpLT52YWx1ZS0+dmFsdWUsIGkgKiA4Myk7CisgICAgICAg
ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdC5nZXQoKS0+
dmFsdWUtPnZhbHVlLCBpKTsKKworICAgICAgICAgICAgICAgIGlmICghKGkgJSA0KSkKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0c1tpXS5maXJzdCA9IG51bGxwdHI7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMjVVKTsKKyAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCAyNTsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAl
IDQpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBhdXRv
IGl0ID0gd2Vha0hhc2hNYXAuZmluZCgqb2JqZWN0c1tpXS5maXJzdCk7CisgICAgICAgICAgICAg
ICAgaWYgKCEoaSAlIDkpKSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09
IHdlYWtIYXNoTWFwLmVuZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgmKCppdCkua2V5LCBvYmpl
Y3RzW2ldLmZpcnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBpZiAoaSAlIDIpIHsKKyAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgqaXQpLmtleS5kdW1teSwgaSAqIDExKTsKKyAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgqaXQpLnZhbHVlLT52YWx1ZSwgaSAqIDgzKTsKKyAg
ICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoKCpp
dCkua2V5LmR1bW15LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaXQtPmtleS5kdW1teSA9IGkg
KiAzMTsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgqaXQpLnZhbHVlLT52YWx1ZSwg
aSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgd2Vha0hh
c2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdl
YWtSZWZlcmVuY2VzLCAyNXUpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAu
aGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIEFTU0VSVCh3ZWFrSGFzaE1hcC5j
b21wdXRlU2l6ZSgpLCAxNlUpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAxOVUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051
bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDQpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ID0gd2Vha0hhc2hNYXAuZmluZCgqb2Jq
ZWN0c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDkpKSB7CisgICAgICAg
ICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdlYWtIYXNoTWFwLmVuZCgpKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIEVYUEVDVF9FUSgmaXQtPmtleSwgb2JqZWN0c1tpXS5maXJzdC5nZXQoKSk7CisgICAgICAg
ICAgICAgICAgYXV0byBrZXlWYWx1ZSA9IGl0LmdldCgpOworICAgICAgICAgICAgICAgIGlmIChp
ICUgMikgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoa2V5VmFsdWUtPmtleS5kdW1t
eSwgaSAqIDExKTsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGtleVZhbHVlLT52YWx1
ZS0+dmFsdWUsIGkgKiA4Myk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKCgqa2V5VmFsdWUpLmtleS5kdW1teSwgaSAqIDMxKTsKKyAgICAg
ICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgqa2V5VmFsdWUpLnZhbHVlLT52YWx1ZSwgaSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEVYUEVD
VF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMTZVKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vh
a0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIGF1dG8gcGFpcnMgPSBjb2xs
ZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzPEJhc2UqLCBSZWY8VmFsdWVPYmplY3Q+Pih3
ZWFrSGFzaE1hcCk7CisgICAgICAgIEVYUEVDVF9FUShwYWlycy5zaXplKCksIDBVKTsKKyAgICAg
ICAgd2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRVEo
c19iYXNlV2Vha1JlZmVyZW5jZXMsIDBVKTsKKyAgICB9Cit9CisKIGNsYXNzIE11bHRpcGxlSW5o
ZXJpdGFuY2VCYXNlMSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNdWx0aXBsZUluaGVyaXRhbmNl
QmFzZTE+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWVvdygpID0gMDsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>431187</attachid>
            <date>2021-06-11 04:20:20 -0700</date>
            <delta_ts>2021-06-11 18:42:13 -0700</delta_ts>
            <desc>Added amortized deletion</desc>
            <filename>bug-226872-20210611042020.patch</filename>
            <type>text/plain</type>
            <size>62175</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4NjI3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDhkNjlkYzlkNWE1Yjg0MjQ5N2UwNWE2
ZDQ3OWRiZDRjMzM4YjEwNzAuLjhhZGIxM2QzMTc1MmYzZjAxMjkzMzhkYzRmOTE2ZmMwODU0NjRi
NzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNTMgQEAKKzIwMjEtMDYtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdlYWtIYXNoTWFwCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBXZWFrSGFzaE1hcCB3aGljaCBk
ZWxldGVzIGVudHJpZXMgZHVyaW5nIHJlaGFzaGluZyBhbmQgYW1vcnRpemVkIG92ZXIgdGltZSAo
YmFzZWQgb24KKyAgICAgICAgdGhlIG51bWJlciBvZiByZWFkICYgd3JpdGUgYWNjZXNzZXMgZG9u
ZSBvbiBhIGdpdmVuIFdlYWtIYXNoTWFwIGluc3RhbmNlKS4KKworICAgICAgICAqIFdURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoKKyAg
ICAgICAgKiB3dGYvV2Vha0hhc2hNYXAuaDogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNo
TWFwKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpQZWVrS2V5VmFsdWVQYWly
VHJhaXRzKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpQZWVrVHlwZSk6IEFk
ZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6UGVla1B0clR5cGUpOiBBZGRlZC4gVW5s
aWtlIGEgcmVndWxhciBIYXNoTWFwLCB3ZSBuZWVkIHRvIGZha2UgdGhlIGl0ZXJhdG9yCisgICAg
ICAgIHBvaW50ZXIgdmFsdWUgd2l0aCB0aGlzIHN0cnVjdCBzaW5jZSBrZXktdmFsdWUgcGFpciBk
b2Vzbid0IGV4aXN0IGluIEhhc2hUYWJsZSBpdHNlbGYgYXMgaXQgc3RvcmVzCisgICAgICAgIFJl
ZjxXZWFrUmVmSW1wbD4gaW5zdGVhZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OldlYWtI
YXNoTWFwSXRlcmF0b3JCYXNlKTogQWRkZWQuIEhhcyBhIGJ1bmNoIG9mIGhlbHBlciBmdW5jdGlv
bnMgc28gdGhhdAorICAgICAgICBXZWFrSGFzaE1hcEl0ZXJhdG9yIGFuZCBXZWFrSGFzaE1hcENv
bnN0SXRlcmF0b3IgY2FuIHNoYXJlIHRoZSBjb2RlLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1h
cDo6V2Vha0hhc2hNYXBJdGVyYXRvcik6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFrSGFzaE1h
cDo6V2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtI
YXNoTWFwOjpBZGRSZXN1bHQpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OmJl
Z2luKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjplbmQpOiBBZGRlZC4KKyAg
ICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OmFkZCk6IEFkZGVkLgorICAgICAgICAoV1RGOjpXZWFr
SGFzaE1hcDo6c2V0KTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpmaW5kKTog
QWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpjb250YWlucyk6IEFkZGVkLgorICAg
ICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6Z2V0KTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtI
YXNoTWFwOjpyZW1vdmUpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OnJlbW92
ZUlmKTogQWRkZWQuCisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpjbGVhcik6IEFkZGVkLgor
ICAgICAgICAoV1RGOjpXZWFrSGFzaE1hcDo6Y2FwYWNpdHkpOiBBZGRlZC4KKyAgICAgICAgKFdU
Rjo6V2Vha0hhc2hNYXA6OmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKTogQWRkZWQuIFRo
aXMgaXMgYWtpbiB0byBXZWFrSGFzaFNldDo6Y29tcHV0ZXNFbXB0eS4KKyAgICAgICAgUGVyIHBy
aW9yIGRpc2N1c3Npb24sIHdlIGludGVuZCB0byByZW5hbWUgV2Vha0hhc2hTZXQncyB2ZXJzaW9u
IHRvIHRoaXMgbmFtZSBhcyB3ZWxsIGZvciBjbGFyaXR5LgorICAgICAgICBOb3RlIHRoYXQgdGhp
cyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBoYXNoIHRhYmxlIGNvbXBsZXRlbHkgaWYgdGhlIG1h
cCBpcyBzZW1hbnRpY2FsbHkgZW1wdHkKKyAgICAgICAgYnV0IEhhc2hUYWJsZSBjb250YWlucyBu
dWxsIHJlZmVyZW5jZXMgYXMga2V5cy4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6Omhhc051
bGxSZWZlcmVuY2VzKTogQWRkZWQuIFRyaWdnZXJzIGFtb3J0aXplZCBjbGVhbnVwIGJhc2VkIG9u
IHRoZSBudW1iZXIKKyAgICAgICAgb2YgaXRlcmF0aW9ucyBwZXJmb3JtZWQuIElmIHRoZXJlIGFy
ZSBubyBudWxsIHJlZmVyZW5jZXMsIGl0IHJlc2V0cyBtX29wZXJhdGlvbkNvdW50U2luY2VMYXN0
Q2xlYW51cC4KKyAgICAgICAgKFdURjo6V2Vha0hhc2hNYXA6OmNvbXB1dGVTaXplKTogQWRkZWQu
CisgICAgICAgIChXVEY6OldlYWtIYXNoTWFwOjpyZW1vdmVOdWxsUmVmZXJlbmNlcyk6IEFkZGVk
LiBTaW5jZSBXZWFrSGFzaE1hcCBkb2Vzbid0IGVhZ2VybHkgZGVsZXRlIHRoZSB2YWx1ZQorICAg
ICAgICB3aGVuIHRoZSBrZXkgZ29lcyBhd2F5LCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxs
ZWQgd2hlbiB2YWx1ZXMgaGVsZCBvbnRvIGJ5IFdlYWtSZWZJbXBsIHdpdGgKKyAgICAgICAgdGhl
IG51bGxwdHIgYmFjayBwb2ludGVyIHNob3VsZCBiZSBkZWxldGVkIGVuIG1hc3NlLgorICAgICAg
ICAoV1RGOjpXZWFrSGFzaE1hcDo6Y2hlY2tDb25zaXN0ZW5jeSk6IEFkZGVkLgorICAgICAgICAo
V1RGOjpXZWFrSGFzaE1hcDo6bWFrZUtleUltcGwpOiBBZGRlZC4KKyAgICAgICAgKFdURjo6V2Vh
a0hhc2hNYXA6OmtleUltcGxJZkV4aXN0cyk6IEFkZGVkLgorICAgICAgICAqIHd0Zi9XZWFrUHRy
Lmg6CisKIDIwMjEtMDYtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAg
ICAgICBSZWR1Y2UgdXNlIG9mIHJlaW50ZXJwcmV0X2Nhc3Q8PiBpbiB0aGUgY29kZWJhc2UKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDQ0MjA0MmE2OTdjZWRi
ZGMzY2FmMTJlN2E4YjRhYTk3NjhkZDkxODAuLjA2ZTA5NzcwMWEyYmRlZWU3YTBiMDA2MGY1NDcy
NDdjNGVjYjRjYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKKysrIGIvU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtNTExLDYgKzUxMSw3IEBACiAJCTlCQjkxRjUxMjY0OEVBNEQwMEE1NjIxNyAvKiBDaGVja2Vk
UHRyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENoZWNrZWRQdHIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJOUJDNzBGMDQxNzZDMzc5RDAwMTAxREVDIC8qIEF0b21TdHJpbmdUYWJsZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBdG9tU3RyaW5nVGFibGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5QkQ4RjQwQTE3NkMyQUQ4MDAwMkQ4NjUg
LyogQXRvbVN0cmluZ1RhYmxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEF0b21TdHJpbmdUYWJsZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5QkUxNTMzNTI2NzFGMDBGMDBDN0QwOTYgLyog
V2Vha0hhc2hNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2Vha0hhc2hNYXAuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJOUM2N0M1NDI1ODkzNDhFMjg1QjQ5Njk5IC8qIEluZGV4ZWRDb250
YWluZXJJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmRleGVk
Q29udGFpbmVySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTFCODlC
ODcyMjFFMDAwRjAwRUI0Q0VBIC8qIFNES1ZhcmlhbnQueGNjb25maWcgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0
LnhjY29uZmlnOyBwYXRoID0gU0RLVmFyaWFudC54Y2NvbmZpZzsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJQTMwRDQxMkMxRjBERTBCQTAwQjcxOTU0IC8qIFNvZnRMaW5raW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNvZnRMaW5raW5nLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC0xMjU3LDggKzEyNTgsOCBAQAogCQkJCTc5MzZENkE5MUM5OUY4
QUUwMDBEMUFFRCAvKiBTbWFsbFNldC5oICovLAogCQkJCUEzMEQ0MTJEMUYwREUxM0YwMEI3MTk1
NCAvKiBTb2Z0TGlua2luZy5oICovLAogCQkJCTkzMTU2QzhEMjYyQzk4MjIwMEVBRTI3QiAvKiBT
b3J0ZWRBcnJheU1hcC5oICovLAotCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFu
bmluZ1RyZWUuaCAqLywKIAkJCQlCQ0EzMEM3RjI2NkQzMDM0MDAwRDIzMEMgLyogU3Bhbi5oICov
LAorCQkJCTc5MDM4RTA1MjI0QjA1QTcwMDRDMDczOCAvKiBTcGFubmluZ1RyZWUuaCAqLywKIAkJ
CQlBOEE0NzMwRDE1MUE4MjVCMDA0MTIzRkYgLyogU3BlY3RydW0uaCAqLywKIAkJCQlBOEE0NzMw
RTE1MUE4MjVCMDA0MTIzRkYgLyogU3RhY2tCb3VuZHMuY3BwICovLAogCQkJCUE4QTQ3MzBGMTUx
QTgyNUIwMDQxMjNGRiAvKiBTdGFja0JvdW5kcy5oICovLApAQCAtMTMzNyw2ICsxMzM4LDcgQEAK
IAkJCQlBOEE0NzM3MjE1MUE4MjVCMDA0MTIzRkYgLyogVk1UYWdzLmggKi8sCiAJCQkJMEY2NkIy
ODgxREM5N0JBQjAwNEExRDNGIC8qIFdhbGxUaW1lLmNwcCAqLywKIAkJCQkwRjY2QjI4OTFEQzk3
QkFCMDA0QTFEM0YgLyogV2FsbFRpbWUuaCAqLywKKwkJCQk5QkUxNTMzNTI2NzFGMDBGMDBDN0Qw
OTYgLyogV2Vha0hhc2hNYXAuaCAqLywKIAkJCQk5QjY3RjNGMTIyMjhENTMxMDAzMERFOUMgLyog
V2Vha0hhc2hTZXQuaCAqLywKIAkJCQk4M0FCQjNDMDIwQjM4MjMyMDBCQTMzMDYgLyogV2Vha09i
akNQdHIuaCAqLywKIAkJCQk5NzRDRkM4RDE2QTRGMzI3MDA2RDU0MDQgLyogV2Vha1B0ci5oICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV1RG
L3d0Zi9DTWFrZUxpc3RzLnR4dAppbmRleCA5YWI4MTI2MjlmYTY5YTI0ZWRmY2RmMWU4ZDE3YWY3
NmIzZjM5MzFjLi42ODcyMzgyZDIzN2FlOWYyZWRlMWI1MDkzNmQ4Mzk3ODhiNzQzYmQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV1RGL3d0
Zi9DTWFrZUxpc3RzLnR4dApAQCAtMzA0LDYgKzMwNCw3IEBAIHNldChXVEZfUFVCTElDX0hFQURF
UlMKICAgICBXVEZDb25maWcuaAogICAgIFdURlNlbWFwaG9yZS5oCiAgICAgV2FsbFRpbWUuaAor
ICAgIFdlYWtIYXNoTWFwLmgKICAgICBXZWFrSGFzaFNldC5oCiAgICAgV2Vha1B0ci5oCiAgICAg
V2Vha1JhbmRvbS5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XZWFrSGFzaE1hcC5oIGIv
U291cmNlL1dURi93dGYvV2Vha0hhc2hNYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjcxMmU1N2NhNjNlYWNk
MTAyMWM2NTIyMDZlNzhlYzdjODM0OTI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dURi93
dGYvV2Vha0hhc2hNYXAuaApAQCAtMCwwICsxLDM1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAyMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSA8d3RmL0FsZ29yaXRobXMuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFZhbHVlIHdpbGwgYmUgZGVsZXRlZCBsYXppbHkgdXBvbiByZWhhc2ggb3IgYW1vcnRpemVkIG92
ZXIgdGltZS4gRm9yIG1hbnVhbCBjbGVhbnVwLCBjYWxsIHJlbW92ZU51bGxSZWZlcmVuY2VzKCku
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
IENvdW50ZXIgPSBFbXB0eUNvdW50ZXI+CitjbGFzcyBXZWFrSGFzaE1hcCBmaW5hbCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICB1c2luZyBSZWZUeXBlID0g
UmVmPFdlYWtQdHJJbXBsPENvdW50ZXI+PjsKKyAgICB1c2luZyBLZXlUcmFpdHMgPSBIYXNoVHJh
aXRzPEtleVR5cGU+OworICAgIHVzaW5nIFZhbHVlVHJhaXRzID0gSGFzaFRyYWl0czxWYWx1ZVR5
cGU+OworICAgIHVzaW5nIFdlYWtIYXNoSW1wbE1hcCA9IEhhc2hNYXA8UmVmVHlwZSwgVmFsdWVU
eXBlPjsKKworICAgIHN0cnVjdCBQZWVrS2V5VmFsdWVQYWlyVHJhaXRzIDogS2V5VmFsdWVQYWly
SGFzaFRyYWl0czxIYXNoVHJhaXRzPEtleVR5cGUmPiwgSGFzaFRyYWl0czxWYWx1ZVR5cGUmPj4g
eworICAgICAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgaGFzSXNFbXB0eVZhbHVlRnVuY3Rpb24g
PSB0cnVlOworICAgICAgICBzdGF0aWMgYm9vbCBpc0VtcHR5VmFsdWUoY29uc3QgdHlwZW5hbWUg
S2V5VmFsdWVQYWlySGFzaFRyYWl0czxIYXNoVHJhaXRzPEtleVR5cGUmPiwgSGFzaFRyYWl0czxW
YWx1ZVR5cGUmPj46OlRyYWl0VHlwZSYgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBpc0hhc2hUcmFpdHNFbXB0eVZhbHVlPEtleVRyYWl0cz4odmFsdWUua2V5KTsKKyAgICAg
ICAgfQorICAgIH07CisgICAgdXNpbmcgUGVla0tleVZhbHVlUGFpclR5cGUgPSB0eXBlbmFtZSBQ
ZWVrS2V5VmFsdWVQYWlyVHJhaXRzOjpUcmFpdFR5cGU7CisKKyAgICBzdHJ1Y3QgUGVla1R5cGUg
eworICAgICAgICBLZXlUeXBlJiBrZXk7CisgICAgICAgIFZhbHVlVHlwZSYgdmFsdWU7CisgICAg
fTsKKworICAgIHN0cnVjdCBQZWVrUHRyVHlwZSB7CisgICAgICAgIFBlZWtQdHJUeXBlKGNvbnN0
IFBlZWtUeXBlJiBwZWVrKQorICAgICAgICAgICAgOiBtX3BlZWsocGVlaykKKyAgICAgICAgeyB9
CisKKyAgICAgICAgY29uc3QgUGVla1R5cGUmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1f
cGVlazsgfQorICAgICAgICBQZWVrVHlwZSYgb3BlcmF0b3IqKCkgeyByZXR1cm4gbV9wZWVrOyB9
CisKKyAgICAgICAgY29uc3QgUGVla1R5cGUqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAm
bV9wZWVrOyB9CisgICAgICAgIFBlZWtUeXBlKiBvcGVyYXRvci0+KCkgeyByZXR1cm4gJm1fcGVl
azsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgUGVla1R5cGUgbV9wZWVrOworICAgIH07CisK
KyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgTWFwVHlwZSwgdHlwZW5hbWUgSXRlcmF0b3JUeXBlLCB0
eXBlbmFtZSBJdGVyYXRvclBlZWtQdHJUeXBlLCB0eXBlbmFtZSBJdGVyYXRvclBlZWtUeXBlPgor
ICAgIGNsYXNzIFdlYWtIYXNoTWFwSXRlcmF0b3JCYXNlIDogcHVibGljIHN0ZDo6aXRlcmF0b3I8
c3RkOjpmb3J3YXJkX2l0ZXJhdG9yX3RhZywgSXRlcmF0b3JQZWVrVHlwZSwgc3RkOjpwdHJkaWZm
X3QsIEl0ZXJhdG9yUGVla1B0clR5cGUsIEl0ZXJhdG9yUGVla1R5cGU+IHsKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIFdlYWtIYXNoTWFwSXRlcmF0b3JCYXNlKE1hcFR5cGUmIHdlYWtIYXNoTWFw
LCBJdGVyYXRvclR5cGUgcG9zaXRpb24pCisgICAgICAgICAgICA6IG1fd2Vha0hhc2hNYXAgeyB3
ZWFrSGFzaE1hcCB9CisgICAgICAgICAgICAsIG1fcG9zaXRpb24geyBwb3NpdGlvbiB9CisgICAg
ICAgICAgICAsIG1fZW5kUG9zaXRpb24geyB3ZWFrSGFzaE1hcC5tX21hcC5lbmQoKSB9CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKKyAgICAgICAgfQorICAgIAor
ICAgICAgICB+V2Vha0hhc2hNYXBJdGVyYXRvckJhc2UoKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobV9lbXB0eUJ1Y2tldENvdW50ID4gbV93ZWFrSGFzaE1hcC5tX21hcC5zaXplKCkgLyA4
KQorICAgICAgICAgICAgICAgIGNvbnN0X2Nhc3Q8V2Vha0hhc2hNYXAmPihtX3dlYWtIYXNoTWFw
KS5yZW1vdmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG1fd2Vha0hhc2hNYXAuYW1vcnRpemVkQ2xlYW51cElmTmVlZGVkKG1fYWR2YW5jZUNvdW50
ICsgbV9lbXB0eUJ1Y2tldENvdW50KTsKKyAgICAgICAgfQorCisgICAgICAgIEFMV0FZU19JTkxJ
TkUgSXRlcmF0b3JQZWVrVHlwZSBtYWtlUGVlaygpCisgICAgICAgIHsKKyAgICAgICAgICAgIGF1
dG8qIGVudHJ5ID0gbV9wb3NpdGlvbi5nZXQoKTsKKyAgICAgICAgICAgIEtleVR5cGUqIGtleSA9
IGVudHJ5LT5rZXktPnRlbXBsYXRlIGdldDxLZXlUeXBlPigpOworICAgICAgICAgICAgcmV0dXJu
IEl0ZXJhdG9yUGVla1R5cGUgeyAqa2V5LCBlbnRyeS0+dmFsdWUgfTsKKyAgICAgICAgfQorCisg
ICAgICAgIEFMV0FZU19JTkxJTkUgSXRlcmF0b3JQZWVrVHlwZSBtYWtlUGVlaygpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGF1dG8qIGVudHJ5ID0gbV9wb3NpdGlvbi5nZXQoKTsKKyAg
ICAgICAgICAgIEtleVR5cGUqIGtleSA9IGVudHJ5LT5rZXktPnRlbXBsYXRlIGdldDxLZXlUeXBl
PigpOworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yUGVla1R5cGUgeyAqa2V5LCBjb25zdF9j
YXN0PFZhbHVlVHlwZSY+KGVudHJ5LT52YWx1ZSkgfTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgYWR2YW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Bvc2l0aW9uICE9
IG1fZW5kUG9zaXRpb24pOworICAgICAgICAgICAgKyttX3Bvc2l0aW9uOworICAgICAgICAgICAg
KyttX2FkdmFuY2VDb3VudDsKKyAgICAgICAgICAgIHNraXBFbXB0eUJ1Y2tldHMoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc2tpcEVtcHR5QnVja2V0cygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHdoaWxlIChtX3Bvc2l0aW9uICE9IG1fZW5kUG9zaXRpb24gJiYgIW1fcG9zaXRpb24t
PmtleS5nZXQoKSkgeworICAgICAgICAgICAgICAgICsrbV9wb3NpdGlvbjsKKyAgICAgICAgICAg
ICAgICArK21fZW1wdHlCdWNrZXRDb3VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGNvbnN0IE1hcFR5cGUmIG1fd2Vha0hhc2hNYXA7CisgICAgICAgIEl0ZXJhdG9yVHlw
ZSBtX3Bvc2l0aW9uOworICAgICAgICBJdGVyYXRvclR5cGUgbV9lbmRQb3NpdGlvbjsKKyAgICAg
ICAgdW5zaWduZWQgbV9hZHZhbmNlQ291bnQgeyAwIH07CisgICAgICAgIHVuc2lnbmVkIG1fZW1w
dHlCdWNrZXRDb3VudCB7IDAgfTsKKyAgICB9OworCisgICAgY2xhc3MgV2Vha0hhc2hNYXBJdGVy
YXRvciA6IHB1YmxpYyBXZWFrSGFzaE1hcEl0ZXJhdG9yQmFzZTxXZWFrSGFzaE1hcCwgdHlwZW5h
bWUgV2Vha0hhc2hJbXBsTWFwOjppdGVyYXRvciwgUGVla1B0clR5cGUsIFBlZWtUeXBlPiB7Cisg
ICAgcHVibGljOgorICAgICAgICB1c2luZyBCYXNlID0gV2Vha0hhc2hNYXBJdGVyYXRvckJhc2U8
V2Vha0hhc2hNYXAsIHR5cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IsIFBlZWtQdHJU
eXBlLCBQZWVrVHlwZT47CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFdlYWtIYXNo
TWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bvc2l0aW9uID09IG90
aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFdl
YWtIYXNoTWFwSXRlcmF0b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bvc2l0aW9u
ICE9IG90aGVyLkJhc2U6Om1fcG9zaXRpb247IH0KKworICAgICAgICBQZWVrUHRyVHlwZSBnZXQo
KSB7IHJldHVybiBCYXNlOjptYWtlUGVlaygpOyB9CisgICAgICAgIFBlZWtUeXBlIG9wZXJhdG9y
KigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKyAgICAgICAgUGVla1B0clR5cGUgb3Bl
cmF0b3ItPigpIHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKworICAgICAgICBXZWFrSGFz
aE1hcEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQmFzZTo6
YWR2YW5jZSgpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBXZWFrSGFzaE1hcEl0ZXJhdG9yKFdlYWtIYXNoTWFwJiBtYXAsIHR5
cGVuYW1lIFdlYWtIYXNoSW1wbE1hcDo6aXRlcmF0b3IgcG9zaXRpb24pCisgICAgICAgICAgICA6
IEJhc2UgeyBtYXAsIHBvc2l0aW9uIH0KKyAgICAgICAgeyB9CisKKyAgICAgICAgdGVtcGxhdGUg
PHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlwZW5hbWU+IGZyaWVuZCBjbGFzcyBXZWFrSGFzaE1hcDsK
KyAgICB9OworCisgICAgY2xhc3MgV2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yIDogcHVibGljIFdl
YWtIYXNoTWFwSXRlcmF0b3JCYXNlPGNvbnN0IFdlYWtIYXNoTWFwLCB0eXBlbmFtZSBXZWFrSGFz
aEltcGxNYXA6OmNvbnN0X2l0ZXJhdG9yLCBjb25zdCBQZWVrUHRyVHlwZSwgY29uc3QgUGVla1R5
cGU+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIHVzaW5nIEJhc2UgPSBXZWFrSGFzaE1hcEl0ZXJh
dG9yQmFzZTxjb25zdCBXZWFrSGFzaE1hcCwgdHlwZW5hbWUgV2Vha0hhc2hJbXBsTWFwOjpjb25z
dF9pdGVyYXRvciwgY29uc3QgUGVla1B0clR5cGUsIGNvbnN0IFBlZWtUeXBlPjsKKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgV2Vha0hhc2hNYXBDb25zdEl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gQmFzZTo6bV9wb3NpdGlvbiA9PSBvdGhlci5CYXNlOjptX3Bvc2l0aW9u
OyB9CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBXZWFrSGFzaE1hcENvbnN0SXRlcmF0
b3ImIG90aGVyKSBjb25zdCB7IHJldHVybiBCYXNlOjptX3Bvc2l0aW9uICE9IG90aGVyLkJhc2U6
Om1fcG9zaXRpb247IH0KKworICAgICAgICBjb25zdCBQZWVrUHRyVHlwZSBnZXQoKSBjb25zdCB7
IHJldHVybiBCYXNlOjptYWtlUGVlaygpOyB9CisgICAgICAgIGNvbnN0IFBlZWtUeXBlIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7IH0KKyAgICAgICAgY29uc3Qg
UGVla1B0clR5cGUgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuIEJhc2U6Om1ha2VQZWVrKCk7
IH0KKworICAgICAgICBXZWFrSGFzaE1hcENvbnN0SXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAg
ICAgICB7CisgICAgICAgICAgICBCYXNlOjphZHZhbmNlKCk7CisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFdlYWtIYXNoTWFwQ29u
c3RJdGVyYXRvcihjb25zdCBXZWFrSGFzaE1hcCYgbWFwLCB0eXBlbmFtZSBXZWFrSGFzaEltcGxN
YXA6OmNvbnN0X2l0ZXJhdG9yIHBvc2l0aW9uKQorICAgICAgICAgICAgOiBCYXNlIHsgbWFwLCBw
b3NpdGlvbiB9CisgICAgICAgIHsgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlw
ZW5hbWUsIHR5cGVuYW1lPiBmcmllbmQgY2xhc3MgV2Vha0hhc2hNYXA7CisgICAgfTsKKworICAg
IHN0cnVjdCBBZGRSZXN1bHQgeworICAgICAgICBBZGRSZXN1bHQoKSA6IGlzTmV3RW50cnkoZmFs
c2UpIHsgfQorICAgICAgICBBZGRSZXN1bHQoV2Vha0hhc2hNYXBJdGVyYXRvciBpdCwgYm9vbCBp
c05ld0VudHJ5KSA6IGl0ZXJhdG9yKGl0KSwgaXNOZXdFbnRyeShpc05ld0VudHJ5KSB7IH0KKyAg
ICAgICAgV2Vha0hhc2hNYXBJdGVyYXRvciBpdGVyYXRvcjsKKyAgICAgICAgYm9vbCBpc05ld0Vu
dHJ5OworCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBp
c05ld0VudHJ5OyB9CisgICAgfTsKKworICAgIHVzaW5nIGl0ZXJhdG9yID0gV2Vha0hhc2hNYXBJ
dGVyYXRvcjsKKyAgICB1c2luZyBjb25zdF9pdGVyYXRvciA9IFdlYWtIYXNoTWFwQ29uc3RJdGVy
YXRvcjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gV2Vha0hhc2hNYXBJdGVyYXRv
cigqdGhpcywgbV9tYXAuYmVnaW4oKSk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBX
ZWFrSGFzaE1hcEl0ZXJhdG9yKCp0aGlzLCBtX21hcC5lbmQoKSk7IH0KKyAgICBjb25zdF9pdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIFdlYWtIYXNoTWFwQ29uc3RJdGVyYXRvcigqdGhp
cywgbV9tYXAuYmVnaW4oKSk7IH0KKyAgICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBXZWFrSGFzaE1hcENvbnN0SXRlcmF0b3IoKnRoaXMsIG1fbWFwLmVuZCgpKTsgfQorCisg
ICAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+IHZvaWQgZW5zdXJlKGNvbnN0IEtleVR5cGUm
IGtleSwgRnVuY3RvciYmIGZ1bmN0b3IpIHsgcmV0dXJuIG1fbWFwLmVuc3VyZShrZXksIGZ1bmN0
b3IpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEFkZFJlc3VsdCBhZGQoY29u
c3QgS2V5VHlwZSYga2V5LCBUJiYgdmFsdWUpCisgICAgeworICAgICAgICBhbW9ydGl6ZWRDbGVh
bnVwSWZOZWVkZWQoKTsKKyAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX21hcC5hZGQobWFrZUtl
eUltcGwoa2V5KSwgc3RkOjpmb3J3YXJkPFQ+KHZhbHVlKSk7CisgICAgICAgIHJldHVybiBBZGRS
ZXN1bHQgeyBXZWFrSGFzaE1hcEl0ZXJhdG9yKCp0aGlzLCBhZGRSZXN1bHQuaXRlcmF0b3IpLCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSB9OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQs
IHR5cGVuYW1lIFY+CisgICAgdm9pZCBzZXQoY29uc3QgVCYga2V5LCBWJiYgdmFsdWUpCisgICAg
eworICAgICAgICBhbW9ydGl6ZWRDbGVhbnVwSWZOZWVkZWQoKTsKKyAgICAgICAgbV9tYXAuc2V0
KG1ha2VLZXlJbXBsKGtleSksIFdURk1vdmUodmFsdWUpKTsKKyAgICB9CisKKyAgICBpdGVyYXRv
ciBmaW5kKGNvbnN0IEtleVR5cGUmIGtleSkKKyAgICB7CisgICAgICAgIGFtb3J0aXplZENsZWFu
dXBJZk5lZWRlZCgpOworICAgICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtl
eSk7CisgICAgICAgIGlmICgha2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKyAg
ICAgICAgcmV0dXJuIFdlYWtIYXNoTWFwSXRlcmF0b3IoKnRoaXMsIG1fbWFwLmZpbmQoKmtleUlt
cGwpKTsKKyAgICB9CisKKyAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IEtleVR5cGUmIGtl
eSkgY29uc3QKKyAgICB7CisgICAgICAgIGFtb3J0aXplZENsZWFudXBJZk5lZWRlZCgpOworICAg
ICAgICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAgIGlmICgh
a2V5SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBlbmQoKTsKKyAgICAgICAgcmV0dXJuIFdlYWtI
YXNoTWFwQ29uc3RJdGVyYXRvcigqdGhpcywgbV9tYXAuZmluZCgqa2V5SW1wbCkpOworICAgIH0K
KworICAgIGJvb2wgY29udGFpbnMoY29uc3QgS2V5VHlwZSYga2V5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgYW1vcnRpemVkQ2xlYW51cElmTmVlZGVkKCk7CisgICAgICAgIGF1dG8qIGtleUltcGwg
PSBrZXlJbXBsSWZFeGlzdHMoa2V5KTsKKyAgICAgICAgaWYgKCFrZXlJbXBsKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9tYXAuY29udGFpbnMoKmtleUltcGwp
OworICAgIH0KKworICAgIHR5cGVuYW1lIFZhbHVlVHJhaXRzOjpQZWVrVHlwZSBnZXQoY29uc3Qg
S2V5VHlwZSYga2V5KQorICAgIHsKKyAgICAgICAgYW1vcnRpemVkQ2xlYW51cElmTmVlZGVkKCk7
CisgICAgICAgIGF1dG8qIGtleUltcGwgPSBrZXlJbXBsSWZFeGlzdHMoa2V5KTsKKyAgICAgICAg
aWYgKCFrZXlJbXBsKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlVHJhaXRzOjpwZWVrKFZhbHVl
VHJhaXRzOjplbXB0eVZhbHVlKCkpOworICAgICAgICByZXR1cm4gbV9tYXAuZ2V0KCprZXlJbXBs
KTsKKyAgICB9CisKKyAgICBib29sIHJlbW92ZShpdGVyYXRvciBpdCkKKyAgICB7CisgICAgICAg
IGFtb3J0aXplZENsZWFudXBJZk5lZWRlZCgpOworICAgICAgICByZXR1cm4gbV9tYXAucmVtb3Zl
KGl0Lm1fcG9zaXRpb24pOworICAgIH0KKworICAgIGJvb2wgcmVtb3ZlKGNvbnN0IEtleVR5cGUm
IGtleSkKKyAgICB7CisgICAgICAgIGFtb3J0aXplZENsZWFudXBJZk5lZWRlZCgpOworICAgICAg
ICBhdXRvKiBrZXlJbXBsID0ga2V5SW1wbElmRXhpc3RzKGtleSk7CisgICAgICAgIGlmICgha2V5
SW1wbCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fbWFwLnJl
bW92ZShrZXlJbXBsKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIGJvb2wgcmVtb3ZlSWYoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX29w
ZXJhdGlvbkNvdW50U2luY2VMYXN0Q2xlYW51cCA9IDA7CisgICAgICAgIHJldHVybiBtX21hcC5y
ZW1vdmVJZihbJl0oYXV0byYgaXRlcmF0b3IpIHsKKyAgICAgICAgICAgIGJvb2wgaXNSZWxlYXNl
ZFdlYWtLZXkgPSAhaXRlcmF0b3Iua2V5LmdldCgpOworICAgICAgICAgICAgaWYgKGlzUmVsZWFz
ZWRXZWFrS2V5KQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIGZ1bmN0b3IoaXRlcmF0b3IpOworICAgICAgICB9KTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyKCkKKyAgICB7CisgICAgICAgIG1fb3BlcmF0aW9uQ291bnRTaW5jZUxhc3RDbGVhbnVwID0g
MDsKKyAgICAgICAgbV9tYXAuY2xlYXIoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYXBhY2l0
eSgpIGNvbnN0IHsgcmV0dXJuIG1fbWFwLmNhcGFjaXR5KCk7IH0KKworICAgIGJvb2wgaXNFbXB0
eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSBjb25zdAorICAgIHsKKyAgICAgICAgYXV0byByZXN1
bHQgPSBiZWdpbigpID09IGVuZCgpOworICAgICAgICBpZiAoVU5MSUtFTFkocmVzdWx0ICYmIG1f
bWFwLnNpemUoKSkpCisgICAgICAgICAgICBjb25zdF9jYXN0PFdlYWtIYXNoTWFwJj4oKnRoaXMp
LmNsZWFyKCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBoYXNO
dWxsUmVmZXJlbmNlcygpIGNvbnN0CisgICAgeworICAgICAgICB1bnNpZ25lZCBjb3VudCA9IDA7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gV1RGOjphbnlPZihtX21hcCwgWyZdIChhdXRvJiBpdGVy
YXRvcikgeworICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgIHJldHVybiAhaXRlcmF0
b3Iua2V5LmdldCgpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAg
ICAgIGFtb3J0aXplZENsZWFudXBJZk5lZWRlZChjb3VudCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fb3BlcmF0aW9uQ291bnRTaW5jZUxhc3RDbGVhbnVwID0gMDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBjb21wdXRlU2l6ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBjb25zdF9jYXN0PFdlYWtIYXNoTWFwJj4oKnRoaXMpLnJlbW92ZU51bGxS
ZWZlcmVuY2VzKCk7CisgICAgICAgIHJldHVybiBtX21hcC5zaXplKCk7CisgICAgfQorCisgICAg
TkVWRVJfSU5MSU5FIGJvb2wgcmVtb3ZlTnVsbFJlZmVyZW5jZXMoKQorICAgIHsKKyAgICAgICAg
bV9vcGVyYXRpb25Db3VudFNpbmNlTGFzdENsZWFudXAgPSAwOworICAgICAgICByZXR1cm4gbV9t
YXAucmVtb3ZlSWYoW10oYXV0byYgaXRlcmF0b3IpIHsgcmV0dXJuICFpdGVyYXRvci5rZXkuZ2V0
KCk7IH0pOworICAgIH0KKworI2lmIEFTU0VSVF9FTkFCTEVECisgICAgdm9pZCBjaGVja0NvbnNp
c3RlbmN5KCkgY29uc3QgeyBtX21hcC5jaGVja0NvbnNpc3RlbmN5KCk7IH0KKyNlbHNlCisgICAg
dm9pZCBjaGVja0NvbnNpc3RlbmN5KCkgY29uc3QgeyB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAg
ICBBTFdBWVNfSU5MSU5FIHZvaWQgYW1vcnRpemVkQ2xlYW51cElmTmVlZGVkKHVuc2lnbmVkIG9w
ZXJhdGlvbnNQZXJmb3JtZWQgPSAxKSBjb25zdAorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY3Vy
cmVudENvdW50ID0gbV9vcGVyYXRpb25Db3VudFNpbmNlTGFzdENsZWFudXA7CisgICAgICAgIG1f
b3BlcmF0aW9uQ291bnRTaW5jZUxhc3RDbGVhbnVwID0gY3VycmVudENvdW50ICsgb3BlcmF0aW9u
c1BlcmZvcm1lZDsKKyAgICAgICAgaWYgKGN1cnJlbnRDb3VudCAvIDIgPiBtX21hcC5zaXplKCkp
CisgICAgICAgICAgICBjb25zdF9jYXN0PFdlYWtIYXNoTWFwJj4oKnRoaXMpLnJlbW92ZU51bGxS
ZWZlcmVuY2VzKCk7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3Rh
dGljIFJlZlR5cGUgbWFrZUtleUltcGwoY29uc3QgVCYga2V5KQorICAgIHsKKyAgICAgICAgcmV0
dXJuICptYWtlV2Vha1B0cjxLZXlUeXBlPihjb25zdF9jYXN0PFQmPihrZXkpKS5tX2ltcGw7Cisg
ICAgfQorCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CisgICAgc3RhdGljIFdlYWtQdHJJbXBs
PENvdW50ZXI+KiBrZXlJbXBsSWZFeGlzdHMoY29uc3QgVCYga2V5KQorICAgIHsKKyAgICAgICAg
YXV0byYgd2Vha1B0ckltcGwgPSBrZXkud2Vha1B0ckZhY3RvcnkoKS5tX2ltcGw7CisgICAgICAg
IGlmICghd2Vha1B0ckltcGwgfHwgISp3ZWFrUHRySW1wbCkKKyAgICAgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gd2Vha1B0ckltcGwuZ2V0KCk7CisgICAgfQorCisgICAg
V2Vha0hhc2hJbXBsTWFwIG1fbWFwOworICAgIG11dGFibGUgdW5zaWduZWQgbV9vcGVyYXRpb25D
b3VudFNpbmNlTGFzdENsZWFudXAgeyAwIH07IC8vIEZJWE1FOiBTdG9yZSB0aGlzIGFzIGEgSGFz
aFRhYmxlIG1ldGEgZGF0YS4KKworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSwgdHlwZW5hbWUsIHR5
cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5kIGNsYXNzIFdlYWtIYXNoTWFwSXRlcmF0b3JCYXNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6V2Vha0hhc2hNYXA7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9XZWFrUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9XZWFrUHRy
LmgKaW5kZXggMTJjNGI2ODk4ODcyOTkzYTFhNTNmNTlmOTZiNmQwYWJmMjY3YjBiMy4uODYyYjg1
ZGE0NGFlODI0NzA3NzIxZTNhMDFjYjIwNjNkOTA3MGRhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri93dGYvV2Vha1B0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1dlYWtQdHIuaApAQCAtMTE5LDYg
KzExOSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNsZWFyKCkgeyBtX2ltcGwgPSBudWxscHRyOyB9
CiAKIHByaXZhdGU6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVuYW1lLCB0eXBlbmFtZT4g
ZnJpZW5kIGNsYXNzIFdlYWtIYXNoTWFwOwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFt
ZT4gZnJpZW5kIGNsYXNzIFdlYWtIYXNoU2V0OwogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBl
bmFtZT4gZnJpZW5kIGNsYXNzIFdlYWtQdHI7CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUsIHR5cGVu
YW1lPiBmcmllbmQgY2xhc3MgV2Vha1B0ckZhY3Rvcnk7CkBAIC0xOTMsNiArMTk0LDcgQEAgcHVi
bGljOgogCiBwcml2YXRlOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZT4gZnJpZW5k
IGNsYXNzIFdlYWtIYXNoU2V0OworICAgIHRlbXBsYXRlPHR5cGVuYW1lLCB0eXBlbmFtZSwgdHlw
ZW5hbWU+IGZyaWVuZCBjbGFzcyBXZWFrSGFzaE1hcDsKIAogICAgIG11dGFibGUgUmVmUHRyPFdl
YWtQdHJJbXBsPENvdW50ZXI+PiBtX2ltcGw7CiAjaWYgQVNTRVJUX0VOQUJMRUQKZGlmZiAtLWdp
dCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxZjVkYzViNDIzNTRi
Yjk2NjY1ODM4OTQyNjI2NWNlOTdiMzQ0MjExLi45ZDZmMTllMmZhYmY3N2EzYzJmNmNhMmM3OWVh
NzViMjc0MGFiYjgyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMjggQEAKKzIwMjEtMDYtMTAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWRkIFdlYWtIYXNoTWFwCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjY4NzIKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB1bml0IHRlc3RzIGZvciBXZWFr
SGFzaE1hcC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dlYWtQdHIuY3Bw
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y29tcHV0ZVNpemVPZldlYWtIYXNoU2V0KTogRGVs
ZXRlZCB0aGUgdW51c2VkIHZhcmlhbnQuCisgICAgICAgIChXVEZfV2Vha1B0ci5XZWFrSGFzaFNl
dEV4cGFuc2lvbik6IERlbGV0ZWQgdGhlIHN1cGVyZmxvdXMgZm9yIGxvb3AuCisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXApOiBBZGRlZC4KKyAgICAgICAg
KFRlc3RXZWJLaXRBUEk6OlZhbHVlT2JqZWN0KTogQWRkZWQuCisgICAgICAgIChUZXN0V2ViS2l0
QVBJOjpWYWx1ZU9iamVjdDo6Y3JlYXRlKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlZhbHVl
T2JqZWN0Ojp+VmFsdWVPYmplY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VmFsdWVPYmpl
Y3Q6OlZhbHVlT2JqZWN0KToKKyAgICAgICAgKFdURl9XZWFrUHRyLldlYWtIYXNoTWFwQmFzaWMp
OiBBZGRlZC4KKyAgICAgICAgKFdURl9XZWFrUHRyLldlYWtIYXNoTWFwQ29uc3RPYmplY3RzKTog
QWRkZWQuCisgICAgICAgIChXVEZfV2Vha1B0ci5XZWFrSGFzaE1hcEV4cGFuc2lvbik6IEFkZGVk
LgorICAgICAgICAoV1RGX1dlYWtQdHIuV2Vha0hhc2hNYXBSZW1vdmVOdWxsUmVmZXJlbmNlcyk6
IEFkZGVkLgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6Y29sbGVjdEtleVZhbHVlUGFpcnNVc2lu
Z0l0ZXJhdG9ycyk6IEFkZGVkLgorICAgICAgICAoV1RGX1dlYWtQdHIuV2Vha0hhc2hNYXBJdGVy
YXRvcnMpOiBBZGRlZC4KKyAgICAgICAgKFdURl9XZWFrUHRyLldlYWtIYXNoTWFwQW1vcnRpemVk
Q2xlYW51cCk6IEFkZGVkLgorCiAyMDIxLTA2LTA4ICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3Jp
LkZ1amlpQHNvbnkuY29tPgogCiAgICAgICAgIHJ1bi13ZWJraXQtdGVzdHM6IFRhc2tQb29sIHJl
cG9ydHMgUGlja2xpbmdFcnJvciBmb3IgV2luZG93cyBQeXRob24KZGlmZiAtLWdpdCBhL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV1RGL1dlYWtQdHIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKaW5kZXggOTFlZmYwNjBhOTdkNzE0MmJiMzE5ZGU2ZWEx
YmM2MDJkOGY3OTVkZC4uOWU2ZDdlNDQ0Yzc3MmNjMmJiODIyMTYzNTlkOGQ0NWJjZDIxNTViYiAx
MDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKKysr
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XVEYvV2Vha1B0ci5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKIAogI2luY2x1ZGUgIlRlc3QuaCIKKyNpbmNsdWRl
IDx3dGYvV2Vha0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvV2Vha0hhc2hTZXQuaD4KIAogbmFt
ZXNwYWNlIFRlc3RXZWJLaXRBUEkgewpAQCAtMzgsNiArMzksNyBAQCBzdHJ1Y3QgV2Vha1B0ckNv
dW50ZXIgewogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQ2FuTWFrZVdlYWtQdHIg
PSBXVEY6OkNhbk1ha2VXZWFrUHRyPFQsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246Okxh
enksIFdlYWtQdHJDb3VudGVyPjsKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFU+IHVz
aW5nIFdlYWtIYXNoTWFwID0gV1RGOjpXZWFrSGFzaE1hcDxULCBVLCBXZWFrUHRyQ291bnRlcj47
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBXZWFrSGFzaFNldCA9IFdURjo6V2Vha0hhc2hT
ZXQ8VCwgV2Vha1B0ckNvdW50ZXI+OwogdGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgV2Vha1B0
ciA9IFdURjo6V2Vha1B0cjxULCBXZWFrUHRyQ291bnRlcj47CiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBXZWFrUHRyRmFjdG9yeSA9IFdURjo6V2Vha1B0ckZhY3Rvcnk8VCwgV2Vha1B0ckNv
dW50ZXI+OwpAQCAtMzQxLDE3ICszNDMsNiBAQCBURVNUKFdURl9XZWFrUHRyLCBEZXJpdmVkQ29u
c3RydWN0QW5kQXNzaWduQ29uc3QpCiAgICAgfQogfQogCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
LXVuc2lnbmVkIGNvbXB1dGVTaXplT2ZXZWFrSGFzaFNldChjb25zdCBIYXNoU2V0PFdlYWtQdHI8
VD4+JiBzZXQpCi17Ci0gICAgdW5zaWduZWQgc2l6ZSA9IDA7Ci0gICAgZm9yIChhdXRvJiBpdGVt
IDogc2V0KSB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKLSAgICAgICAgc2l6ZSsrOwot
ICAgIH0KLSAgICByZXR1cm4gc2l6ZTsKLX0KLQogdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiB1bnNp
Z25lZCBjb21wdXRlU2l6ZU9mV2Vha0hhc2hTZXQoY29uc3QgV2Vha0hhc2hTZXQ8VD4mIHNldCkK
IHsKQEAgLTU2Nyw3ICs1NTgsNyBAQCBURVNUKFdURl9XZWFrUHRyLCBXZWFrSGFzaFNldEV4cGFu
c2lvbikKICAgICB9CiAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CiAK
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgMTsgKytpKSB7CisgICAgewogICAgICAgICBX
ZWFrSGFzaFNldDxCYXNlPiB3ZWFrSGFzaFNldDsKICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNlPj4gb2JqZWN0czsKICAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNl
Pj4gb3RoZXJPYmplY3RzOwpAQCAtNzgwLDYgKzc3MSw5NTEgQEAgVEVTVChXVEZfV2Vha1B0ciwg
V2Vha0hhc2hTZXRDb21wdXRlU2l6ZSkKICAgICB9CiB9CiAKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBVPgordW5zaWduZWQgY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKGNvbnN0IFdl
YWtIYXNoTWFwPFQsIFU+JiBtYXApCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IDA7CisgICAgZm9y
IChhdXRvIGl0ZW0gOiBtYXApIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOworICAgICAg
ICBzaXplKys7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQorCitzdHJ1Y3QgVmFsdWVPYmpl
Y3QgOiBwdWJsaWMgUmVmQ291bnRlZDxWYWx1ZU9iamVjdD4geworcHVibGljOgorCisgICAgc3Rh
dGljIFJlZjxWYWx1ZU9iamVjdD4gY3JlYXRlKGludCB2YWx1ZSkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBWYWx1ZU9iamVjdCh2YWx1ZSkpOyB9CisKKyAgICB+VmFsdWVPYmplY3QoKSB7IEFTU0VS
VChzX2NvdW50KTsgLS1zX2NvdW50OyB9CisKKyAgICBpbnQgdmFsdWU7CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgc19jb3VudDsKKworcHJpdmF0ZToKKyAgICBWYWx1ZU9iamVjdCh1bnNpZ25lZCBz
aG9ydCB2YWx1ZSkKKyAgICAgICAgOiB2YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgICsrc19j
b3VudDsKKyAgICB9Cit9OworCit1bnNpZ25lZCBWYWx1ZU9iamVjdDo6c19jb3VudCA9IDA7CisK
K1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwQmFzaWMpCit7CisgICAgeworICAgICAgICBX
ZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICBCYXNlIG9iamVjdDsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQRUNU
X0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAg
d2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgMzQpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vh
a1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFz
aE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAu
Y29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2Jq
ZWN0KSwgMzQpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAxMik7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCksIDM0KTsKKyAgICAgICAgRVhQRUNUX0VRKHNf
YmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9m
V2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChv
YmplY3QsIDcpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmpl
Y3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLCA3KTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVD
VF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAg
IHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNf
YmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJh
c2UsIGludD4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0
OworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFz
aE1hcCksIDB1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MHUpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgNyk7CisgICAgICAgICAg
ICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgICAg
IEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgNyk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIH0KKyAg
ICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1
KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgIH0KKyAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKworICAgIHsKKyAgICAgICAgV2Vh
a0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgeworICAgICAgICAgICAg
QmFzZSBvYmplY3QxOworICAgICAgICAgICAgQmFzZSBvYmplY3QyOworICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIDApOworICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgICAgIEVYUEVD
VF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MiksIDApOworICAgICAgICAgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoY29tcHV0
ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAgICAgICAgd2Vha0hh
c2hNYXAuYWRkKG9iamVjdDEsIDMpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hN
YXAuY29udGFpbnMob2JqZWN0MSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFw
LmdldChvYmplY3QxKSwgMyk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAu
Y29udGFpbnMob2JqZWN0MikpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QyKSwgMCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAo
d2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0Miwg
MjQpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0
MSkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgMyk7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCAyNCk7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAg
ICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAydSk7
CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0MSk7CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MSkpOworICAgICAgICAgICAg
RVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QxKSwgMCk7CisgICAgICAgICAgICBFWFBF
Q1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCAyNCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB9
CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXAp
LCAwdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9Cisg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAgICB7CisgICAgICAg
IFdlYWtIYXNoTWFwPEJhc2UsIFJlZjxWYWx1ZU9iamVjdD4+IHdlYWtIYXNoTWFwOworICAgICAg
ICBCYXNlIG9iamVjdDE7CisgICAgICAgIEJhc2Ugb2JqZWN0MjsKKyAgICAgICAgQmFzZSBvYmpl
Y3QzOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MSkp
OworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDEpLCBudWxscHRyKTsK
KyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QyKSwgbnVsbHB0cik7CisgICAg
ICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAg
IEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNv
bXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAgd2Vha0hh
c2hNYXAuYWRkKG9iamVjdDEsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMTAwKSk7CisgICAgICAgIHdl
YWtIYXNoTWFwLmFkZChvYmplY3QyLCBWYWx1ZU9iamVjdDo6Y3JlYXRlKDIwMCkpOworICAgICAg
ICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX0VR
KFZhbHVlT2JqZWN0OjpzX2NvdW50LCAydSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNo
TWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QxKS0+dmFsdWUsIDEwMCk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFw
LmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChv
YmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5j
b250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2Jq
ZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDJ1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAydSk7CisgICAg
ICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAydSk7
CisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QxKTsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdl
YWtIYXNoTWFwLmdldChvYmplY3QxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVFKHdl
YWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNo
TWFwLmdldChvYmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1h
cC5nZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1Jl
ZmVyZW5jZXMsIDJ1KTsgLy8gQmVjYXVzZSBvYmplY3QyIGhvbGRzIG9udG8gV2Vha1JlZmVyZW5j
ZS4KKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAxdSk7CisgICAgICAg
IEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7Cisg
ICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QzKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDEpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtI
YXNoTWFwLmdldChvYmplY3QxKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtI
YXNoTWFwLmNvbnRhaW5zKG9iamVjdDIpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFw
LmdldChvYmplY3QyKS0+dmFsdWUsIDIwMCk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFz
aE1hcC5jb250YWlucyhvYmplY3QzKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5n
ZXQob2JqZWN0MyksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAxdSk7
CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXAp
LCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QyLCBWYWx1ZU9iamVjdDo6Y3Jl
YXRlKDIxMCkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2Jq
ZWN0MSkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDEpLCBudWxs
cHRyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0Mikp
OworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLT52YWx1ZSwgMjAw
KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDMpKTsK
KyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChvYmplY3QzKSwgbnVsbHB0cik7Cisg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAgICBFWFBF
Q1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1
dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAgICAgd2Vha0hhc2hN
YXAuc2V0KG9iamVjdDIsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMjIwKSk7CisgICAgICAgIEVYUEVD
VF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7CisgICAgICAgIEVYUEVDVF9F
USh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51bGxwdHIpOworICAgICAgICBFWFBFQ1RfVFJV
RSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QyKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFr
SGFzaE1hcC5nZXQob2JqZWN0MiktPnZhbHVlLCAyMjApOworICAgICAgICBFWFBFQ1RfRkFMU0Uo
d2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MykpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hh
c2hNYXAuZ2V0KG9iamVjdDMpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdl
YWtSZWZlcmVuY2VzLCAydSk7CisgICAgICAgIEVYUEVDVF9FUShWYWx1ZU9iamVjdDo6c19jb3Vu
dCwgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtI
YXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0Mik7CisgICAg
ICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QxKSk7CisgICAgICAg
IEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0MSksIG51bGxwdHIpOworICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0MikpOworICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdDIpLCBudWxscHRyKTsKKyAgICAgICAgRVhQRUNU
X0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdDMpKTsKKyAgICAgICAgRVhQRUNUX0VR
KHdlYWtIYXNoTWFwLmdldChvYmplY3QzKSwgbnVsbHB0cik7CisgICAgICAgIEVYUEVDVF9FUShz
X2Jhc2VXZWFrUmVmZXJlbmNlcywgMnUpOworICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6
OnNfY291bnQsIDB1KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgIH0KKyAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICBFWFBF
Q1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDB1KTsKK30KKworVEVTVChXVEZfV2Vha1B0ciwg
V2Vha0hhc2hNYXBDb25zdE9iamVjdHMpCit7CisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxC
YXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgY29uc3QgQmFzZSBv
YmplY3Q7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3Qp
KTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAg
IEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAwdSk7Cisg
ICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMykpOwor
ICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQ
RUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAgICAg
ICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVY
UEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS0+dmFsdWUsIDMpOworICAgICAgICB3ZWFr
SGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmpl
Y3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUoNykpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFz
aE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QpLT52YWx1ZSwgMyk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJl
bmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdl
YWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7
CisgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUoMTEp
KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7Cisg
ICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS0+dmFsdWUsIDExKTsKKyAg
ICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVD
VF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAg
IHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgd2Vha0hhc2hNYXAucmVt
b3ZlKG9iamVjdCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUp
OworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFw
KSwgMHUpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuY29udGFpbnMob2JqZWN0
KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KSwgbnVsbHB0cik7
CisgICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBTdHJpbmc+IHdlYWtI
YXNoTWFwOworICAgICAgICBjb25zdCBEZXJpdmVkIG9iamVjdDsKKyAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfVFJVRSh3
ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS5pc051bGwoKSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jh
c2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldl
YWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMHUpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2Jq
ZWN0LCAiaGVsbG8iX3MpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDF1KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFz
aE1hcCksIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMob2Jq
ZWN0KSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS51dGY4
KCkuZGF0YSgpLCAiaGVsbG8iKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5hZGQob2JqZWN0LCAid29ybGQiX3MpOworICAgICAg
ICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQ
RUNUX1NUUkVRKHdlYWtIYXNoTWFwLmdldChvYmplY3QpLnV0ZjgoKS5kYXRhKCksICJoZWxsbyIp
OworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAg
RVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDF1KTsKKyAg
ICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1h
cC5zZXQob2JqZWN0LCAiV2ViS2l0Il9zKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hN
YXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9TVFJFUSh3ZWFrSGFzaE1hcC5n
ZXQob2JqZWN0KS51dGY4KCkuZGF0YSgpLCAiV2ViS2l0Iik7CisgICAgICAgIEVYUEVDVF9FUShz
X2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVP
ZldlYWtIYXNoTWFwKHdlYWtIYXNoTWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QpOworICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNU
X0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBF
Q1RfVFJVRSh3ZWFrSGFzaE1hcC5nZXQob2JqZWN0KS5pc051bGwoKSk7CisgICAgfQorCisgICAg
eworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICBj
b25zdCBEZXJpdmVkIG9iamVjdDsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNv
bnRhaW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVj
dCksIDApOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAg
ICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1
KTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFr
SGFzaE1hcC5hZGQob2JqZWN0LCAzKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAxdSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAo
d2Vha0hhc2hNYXApLCAxdSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmNvbnRh
aW5zKG9iamVjdCkpOworICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuZ2V0KG9iamVjdCks
IDMpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdl
YWtIYXNoTWFwLmFkZChvYmplY3QsIDcpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1h
cC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChv
YmplY3QpLCAzKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7
CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hNYXAp
LCAxdSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAg
d2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgMTEpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFz
aE1hcC5jb250YWlucyhvYmplY3QpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdl
dChvYmplY3QpLCAxMSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
MXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtIYXNo
TWFwKSwgMXUpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAg
ICAgIHdlYWtIYXNoTWFwLnJlbW92ZShvYmplY3QpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vh
a0hhc2hNYXAuY29udGFpbnMob2JqZWN0KSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1h
cC5nZXQob2JqZWN0KSwgMCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNl
cywgMXUpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFwKHdlYWtI
YXNoTWFwKSwgMHUpOworICAgIH0KK30KKworVEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hNYXBF
eHBhbnNpb24pCit7CisgICAgdW5zaWduZWQgaW5pdGlhbENhcGFjaXR5OworICAgIHN0YXRpYyBj
b25zdGV4cHIgdW5zaWduZWQgbWF4TG9hZENhcCA9IDM7CisgICAgeworICAgICAgICBXZWFrSGFz
aE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICBCYXNlIG9iamVjdDsKKyAgICAg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAgIHdlYWtIYXNo
TWFwLmFkZChvYmplY3QsIDEpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIDF1KTsKKyAgICAgICAgaW5pdGlhbENhcGFjaXR5ID0gd2Vha0hhc2hNYXAuY2FwYWNpdHko
KTsKKyAgICB9CisgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAg
ICBmb3IgKHVuc2lnbmVkIHRlc3RDb3VudCA9IDA7IHRlc3RDb3VudCA8IDEwOyArK3Rlc3RDb3Vu
dCkgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCB1bnNpZ25lZD4gd2Vha0hhc2hNYXA7Cisg
ICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG90aGVyT2JqZWN0czsKKworICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuY2FwYWNpdHkoKSwgMHUpOworICAgICAgICBFWFBFQ1RfVFJVRShp
bml0aWFsQ2FwYWNpdHkgLyBtYXhMb2FkQ2FwKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluaXRpYWxDYXBhY2l0eSAvIG1heExvYWRDYXA7ICsraSkgeworICAgICAgICAgICAg
YXV0byBvYmplY3QgPSBtYWtlVW5pcXVlPEJhc2U+KCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1h
cC5hZGQoKm9iamVjdCwgaSk7CisgICAgICAgICAgICBvYmplY3RzLmFwcGVuZChXVEZNb3ZlKG9i
amVjdCkpOworICAgICAgICAgICAgb3RoZXJPYmplY3RzLmFwcGVuZChtYWtlVW5pcXVlPEJhc2U+
KCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICB9CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgb3RoZXJPYmplY3Rz
LnNpemUoKSk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5jYXBhY2l0eSgpLCBpbml0
aWFsQ2FwYWNpdHkpOworICAgICAgICBFWFBFQ1RfRVEoY29tcHV0ZVNpemVPZldlYWtIYXNoTWFw
KHdlYWtIYXNoTWFwKSwgb2JqZWN0cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgb3RoZXJPYmplY3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBFWFBFQ1Rf
VFJVRSh3ZWFrSGFzaE1hcC5jb250YWlucygqb2JqZWN0c1tpXSkpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKHdlYWtIYXNoTWFwLmdldCgqb2JqZWN0c1tpXSksIGkpOworICAgICAgICAgICAgRVhQ
RUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNvbnRhaW5zKCpvdGhlck9iamVjdHNbaV0pKTsKKyAgICAg
ICAgfQorICAgICAgICBvYmplY3RzLmNsZWFyKCk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCBv
dGhlck9iamVjdHMuc2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmNhcGFj
aXR5KCksIGluaXRpYWxDYXBhY2l0eSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9m
V2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCAwdSk7CisgICAgICAgIGZvciAoYXV0byYgb2JqZWN0
IDogb3RoZXJPYmplY3RzKQorICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmNv
bnRhaW5zKCpvYmplY3QpKTsKKyAgICAgICAgdW5zaWduZWQgaSA9IDEwMDsKKyAgICAgICAgZm9y
IChhdXRvJiBvYmplY3QgOiBvdGhlck9iamVjdHMpIHsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFw
LmFkZCgqb2JqZWN0LCBpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEod2Vh
a0hhc2hNYXAuY2FwYWNpdHkoKSwgaW5pdGlhbENhcGFjaXR5KTsKKyAgICAgICAgRVhQRUNUX0VR
KGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIG90aGVyT2JqZWN0cy5zaXpl
KCkpOworICAgICAgICBpID0gMTAwOworICAgICAgICBmb3IgKGF1dG8mIG9iamVjdCA6IG90aGVy
T2JqZWN0cykgeworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuY29udGFpbnMo
Km9iamVjdCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldCgqb2JqZWN0
KSwgaSk7CisgICAgICAgICAgICArK2k7CisgICAgICAgIH0KKyAgICB9CisgICAgRVhQRUNUX0VR
KHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIHRlc3RDb3Vu
dCA9IDA7IHRlc3RDb3VudCA8IDEwOyArK3Rlc3RDb3VudCkgeworICAgICAgICBXZWFrSGFzaE1h
cDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb2JqZWN0czsKKyAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNo
TWFwLmNhcGFjaXR5KCksIDB1KTsKKyAgICAgICAgdW5zaWduZWQgb2JqZWN0Q291bnQgPSBpbml0
aWFsQ2FwYWNpdHkgKiAyOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb2JqZWN0
Q291bnQ7ICsraSkgeworICAgICAgICAgICAgYXV0byBvYmplY3QgPSBtYWtlVW5pcXVlPEJhc2U+
KCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5zZXQoKm9iamVjdCwgVmFsdWVPYmplY3Q6OmNy
ZWF0ZSgxMDAgKyBpKSk7CisgICAgICAgICAgICBvYmplY3RzLmFwcGVuZChXVEZNb3ZlKG9iamVj
dCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICB9CisgICAgICAgIHVuc2lnbmVkIG9yaWdpbmFsQ2FwYWNpdHkgPSB3ZWFrSGFzaE1hcC5jYXBh
Y2l0eSgpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIG9iamVjdHMu
c2l6ZSgpKTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZXZWFrSGFzaE1hcCh3ZWFr
SGFzaE1hcCksIG9iamVjdHMuc2l6ZSgpKTsKKworICAgICAgICBpbnQgaSA9IDEwMDsKKyAgICAg
ICAgZm9yIChhdXRvJiBvYmplY3QgOiBvYmplY3RzKSB7CisgICAgICAgICAgICBFWFBFQ1RfVFJV
RSh3ZWFrSGFzaE1hcC5jb250YWlucygqb2JqZWN0KSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEo
d2Vha0hhc2hNYXAuZ2V0KCpvYmplY3QpLT52YWx1ZSwgaSk7CisgICAgICAgICAgICArK2k7Cisg
ICAgICAgIH0KKworICAgICAgICBvYmplY3RzLmNsZWFyKCk7CisgICAgICAgIHdlYWtIYXNoTWFw
LmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVu
Y2VzLCBvYmplY3RDb3VudCk7CisgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5jYXBhY2l0
eSgpLCBvcmlnaW5hbENhcGFjaXR5KTsKKyAgICAgICAgRVhQRUNUX0VRKGNvbXB1dGVTaXplT2ZX
ZWFrSGFzaE1hcCh3ZWFrSGFzaE1hcCksIDB1KTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1dlYWtQ
dHIsIFdlYWtIYXNoTWFwSXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMpCit7CisgICAgewor
ICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICB7Cisg
ICAgICAgICAgICBCYXNlIG9iamVjdDsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFr
UmVmZXJlbmNlcywgMHUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhh
c051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAu
aXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICB3ZWFrSGFzaE1h
cC5hZGQob2JqZWN0LCAxKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJl
bmNlcywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxS
ZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1w
dHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KG9iamVjdCwgMik7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAg
ICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAg
ICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVm
ZXJlbmNlcygpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmFkZChvYmplY3QsIDMpOworICAgICAgICAgICAgRVhQ
RUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFM
U0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9yaW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAg
ICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIH0KKyAgICAg
ICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkp
OworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAg
RVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3
ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgfQorCisgICAgeworICAgICAgICBX
ZWFrSGFzaE1hcDxCYXNlLCBpbnQ+IHdlYWtIYXNoTWFwOworICAgICAgICBCYXNlIG9iamVjdDE7
CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMHUpOworICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVY
UEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkpOwor
ICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgIHdlYWtIYXNo
TWFwLmFkZChvYmplY3QxLCAxMDApOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVy
ZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZl
cmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaXNFbXB0eUlnbm9y
aW5nTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVu
Y3koKTsKKyAgICAgICAgeworICAgICAgICAgICAgQmFzZSBvYmplY3QyOworICAgICAgICAgICAg
d2Vha0hhc2hNYXAuYWRkKG9iamVjdDIsIDIwMCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFz
aE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFr
SGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIHdl
YWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgfQorICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDJ1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hh
c2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFz
aE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hN
YXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUob2JqZWN0
MSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxS
ZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+
PiB3ZWFrSGFzaE1hcDsKKyAgICAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNlPj4gb2Jq
ZWN0czsKKyAgICAgICAgYXV0byBmaXJzdE9iamVjdCA9IG1ha2VVbmlxdWU8QmFzZT4oKTsKKyAg
ICAgICAgaW50IHZhbHVlID0gMTsKKyAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpmaXJzdE9iamVj
dCwgVmFsdWVPYmplY3Q6OmNyZWF0ZSh2YWx1ZSsrKSk7CisgICAgICAgIGRvIHsKKyAgICAgICAg
ICAgIGF1dG8gb2JqZWN0ID0gbWFrZVVuaXF1ZTxCYXNlPigpOworICAgICAgICAgICAgd2Vha0hh
c2hNYXAuc2V0KCpvYmplY3QsIFZhbHVlT2JqZWN0OjpjcmVhdGUodmFsdWUrKykpOworICAgICAg
ICAgICAgb2JqZWN0cy5hcHBlbmQoV1RGTW92ZShvYmplY3QpKTsKKyAgICAgICAgfSB3aGlsZSAo
JndlYWtIYXNoTWFwLmJlZ2luKCktPmtleSA9PSBmaXJzdE9iamVjdC5nZXQoKSk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCBvYmplY3RzLnNpemUoKSArIDEpOwor
ICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIG9iamVjdHMuc2l6ZSgpICsg
MSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9mV2Vha0hhc2hNYXAod2Vha0hhc2hN
YXApLCBvYmplY3RzLnNpemUoKSArIDEpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hN
YXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1h
cC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgZmlyc3RPYmplY3Qg
PSBudWxscHRyOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJl
bmNlcygpKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmlu
Z051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5j
ZXMsIG9iamVjdHMuc2l6ZSgpICsgMSk7CisgICAgICAgIEVYUEVDVF9FUShjb21wdXRlU2l6ZU9m
V2Vha0hhc2hNYXAod2Vha0hhc2hNYXApLCBvYmplY3RzLnNpemUoKSk7CisgICAgICAgIG9iamVj
dHMuY2xlYXIoKTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVy
ZW5jZXMoKSk7CisgICAgICAgIEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmlu
Z051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jbGVhcigpOworICAgICAg
ICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmlzRW1wdHlJZ25vcmluZ051bGxSZWZlcmVuY2VzKCkp
OworICAgIH0KK30KKworVEVTVChXVEZfV2Vha1B0ciwgV2Vha0hhc2hNYXBSZW1vdmVOdWxsUmVm
ZXJlbmNlcykKK3sKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2UsIGludD4gd2Vha0hh
c2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIEJhc2Ugb2JqZWN0OworICAgICAgICAgICAg
d2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNf
YmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hh
c2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLnJl
bW92ZU51bGxSZWZlcmVuY2VzKCk7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNp
c3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNl
cygpKTsKKworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdCwgMSk7CisgICAgICAg
ICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3
ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAgICAgICAgd2Vha0hhc2hN
YXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNl
cywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZl
cmVuY2VzKCkpOworCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5zZXQob2JqZWN0LCAyKTsKKyAg
ICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVY
UEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMXUpOworICAgICAgICAgICAgRVhQRUNUX0ZB
TFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICB3ZWFr
SGFzaE1hcC5yZW1vdmVOdWxsUmVmZXJlbmNlcygpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAu
Y2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZl
cmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVs
bFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLnNldChvYmplY3QsIDMp
OworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAxdSk7CisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIH0KKyAg
ICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBFWFBFQ1RfRVEo
c19iYXNlV2Vha1JlZmVyZW5jZXMsIDF1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hN
YXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgd2Vha0hhc2hNYXAucmVtb3ZlTnVs
bFJlZmVyZW5jZXMoKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOwor
ICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQ
RUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgIH0KKworICAg
IHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVmUHRyPFZhbHVlT2JqZWN0Pj4gd2Vha0hh
c2hNYXA7CisgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8RGVyaXZlZD4+IG9iamVjdHM7
CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAg
ICAgIGF1dG8ga2V5ID0gbWFrZVVuaXF1ZTxEZXJpdmVkPigpOworICAgICAgICAgICAgd2Vha0hh
c2hNYXAuYWRkKCprZXksIFZhbHVlT2JqZWN0OjpjcmVhdGUoaSArIDEwMCkpOworICAgICAgICAg
ICAgb2JqZWN0cy5hcHBlbmQoV1RGTW92ZShrZXkpKTsKKyAgICAgICAgfQorICAgICAgICBFWFBF
Q1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDUwVSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jh
c2VXZWFrUmVmZXJlbmNlcywgNTBVKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFw
Lmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3Rl
bmN5KCk7CisKKyAgICAgICAgd2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAg
ICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCA1MFUpOworICAgICAgICBFWFBF
Q1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwVSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3
ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hl
Y2tDb25zaXN0ZW5jeSgpOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsg
KytpKSB7CisgICAgICAgICAgICBpZiAoaSAlIDIpCisgICAgICAgICAgICAgICAgb2JqZWN0c1tp
XSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmVOdWxs
UmVmZXJlbmNlcygpOworICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDI1
VSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMjVVKTsKKyAgICAg
ICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAg
ICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisKKyAgICAgICAgYm9vbCBzZWVuWzUw
XSA9IHsgZmFsc2UgfTsKKyAgICAgICAgZm9yIChhdXRvIGtleVZhbHVlIDogd2Vha0hhc2hNYXAp
IHsKKyAgICAgICAgICAgIGludCByYXdWYWx1ZSA9IGtleVZhbHVlLnZhbHVlLT52YWx1ZTsKKyAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKHJhd1ZhbHVlID49IDEwMCAmJiByYXdWYWx1ZSA8IDE1MCk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoKHJhd1ZhbHVlIC0gMTAwKSAlIDIsIDApOworICAgICAg
ICAgICAgdW5zaWduZWQgaW5kZXggPSByYXdWYWx1ZSAtIDEwMDsKKyAgICAgICAgICAgIEVYUEVD
VF9GQUxTRShzZWVuW2luZGV4XSk7CisgICAgICAgICAgICBzZWVuW2luZGV4XSA9IHRydWU7Cisg
ICAgICAgICAgICBFWFBFQ1RfRVEoJmtleVZhbHVlLmtleSwgb2JqZWN0c1tpbmRleF0uZ2V0KCkp
OworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNoTWFwLmdldChrZXlWYWx1ZS5rZXkpLCBr
ZXlWYWx1ZS52YWx1ZS5nZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkQmVQcmVzZW50ID0g
IShpICUgMik7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc2VlbltpXSwgc2hvdWxkQmVQcmVzZW50
KTsKKyAgICAgICAgfQorCisgICAgICAgIG9iamVjdHMuY2xlYXIoKTsKKyAgICAgICAgd2Vha0hh
c2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2Jq
ZWN0OjpzX2NvdW50LCAwVSk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNl
cywgMFUpOworICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5j
ZXMoKSk7CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICB9Cit9
CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBLZXlUeXBlLCB0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lIE1hcD4KK2F1dG8gY29sbGVjdEtleVZhbHVlUGFpcnNVc2luZ0l0ZXJhdG9ycyhNYXAmIG1h
cCkKK3sKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxLZXlUeXBlLCBWYWx1ZVR5cGU+PiBwYWlyczsK
KyAgICBmb3IgKGF1dG8gaXQgPSBtYXAuYmVnaW4oKTsgaXQgIT0gbWFwLmVuZCgpOyArK2l0KSB7
CisgICAgICAgIHN0ZDo6cGFpciBrZXlWYWx1ZVBhaXIgeyAmaXQtPmtleSwgaXQuZ2V0KCktPnZh
bHVlIH07CisgICAgICAgIEVYUEVDVF9GQUxTRShwYWlycy5jb250YWlucyhrZXlWYWx1ZVBhaXIp
KTsKKyAgICAgICAgcGFpcnMuYWRkKGtleVZhbHVlUGFpcik7CisgICAgfQorICAgIHJldHVybiBw
YWlyczsKK307CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdlYWtIYXNoTWFwSXRlcmF0b3JzKQorewor
ICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgaW50PiB3ZWFrSGFzaE1hcDsKKyAgICAg
ICAgeworICAgICAgICAgICAgQmFzZSBvYmplY3QxOworICAgICAgICAgICAgRGVyaXZlZCBvYmpl
Y3QyOworICAgICAgICAgICAgQmFzZSBvYmplY3QzOworICAgICAgICAgICAgRGVyaXZlZCBvYmpl
Y3Q0OworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAg
ICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDEsIDEpOworICAgICAgICAgICAgd2Vha0hhc2hN
YXAuYWRkKG9iamVjdDIsIDIpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDMs
IDMpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKG9iamVjdDQsIDQpOworICAgICAgICAg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA0dSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgNHUpOworICAgICAgICAgICAgRVhQRUNU
X0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAgICAgICBj
b25zdCBhdXRvJiBjb25zdE1hcCA9IHdlYWtIYXNoTWFwOworICAgICAgICAgICAgYXV0byBwYWly
cyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4oY29uc3RN
YXApOworICAgICAgICAgICAgRVhQRUNUX0VRKHBhaXJzLnNpemUoKSwgNHUpOworICAgICAgICAg
ICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDEsIDEgfSkp
OworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9i
amVjdDIsIDIgfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3Rk
OjpwYWlyIHsgJm9iamVjdDMsIDMgfSkpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMu
Y29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDQsIDQgfSkpOworCisgICAgICAgICAgICB3ZWFr
SGFzaE1hcC5yZW1vdmUob2JqZWN0Mik7CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUo
b2JqZWN0Myk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDR1
KTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNl
cygpKTsKKworICAgICAgICAgICAgcGFpcnMgPSBjb2xsZWN0S2V5VmFsdWVQYWlyc1VzaW5nSXRl
cmF0b3JzPEJhc2UqLCBpbnQ+KGNvbnN0TWFwKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShwYWly
cy5zaXplKCksIDJ1KTsKKyAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0
ZDo6cGFpciB7ICZvYmplY3QxLCAxIH0pKTsKKyAgICAgICAgICAgIEVYUEVDVF9GQUxTRShwYWly
cy5jb250YWlucyhzdGQ6OnBhaXIgeyAmb2JqZWN0MiwgMiB9KSk7CisgICAgICAgICAgICBFWFBF
Q1RfRkFMU0UocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDMsIDMgfSkpOworICAg
ICAgICAgICAgRVhQRUNUX1RSVUUocGFpcnMuY29udGFpbnMoc3RkOjpwYWlyIHsgJm9iamVjdDQs
IDQgfSkpOworICAgICAgICB9CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNl
cywgMnUpOworICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNl
cygpKTsKKworICAgICAgICBhdXRvIHBhaXJzID0gY29sbGVjdEtleVZhbHVlUGFpcnNVc2luZ0l0
ZXJhdG9yczxCYXNlKiwgaW50Pih3ZWFrSGFzaE1hcCk7CisgICAgICAgIEVYUEVDVF9FUShwYWly
cy5zaXplKCksIDB1KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFwPEJhc2Us
IGludD4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpICUgMikKKyAgICAgICAgICAg
ICAgICAgICAgb2JqZWN0cy5hcHBlbmQobWFrZVVuaXF1ZTxEZXJpdmVkPigpKTsKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKG1ha2VVbmlx
dWU8QmFzZT4oKSk7CisgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpvYmplY3RzLmxh
c3QoKSwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDUwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVy
ZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUo
KSwgNTB1KTsKKworICAgICAgICAgICAgZm9yIChhdXRvIGl0ID0gd2Vha0hhc2hNYXAuYmVnaW4o
KTsgaXQgIT0gd2Vha0hhc2hNYXAuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGtleVZhbHVlID0gKml0OworICAgICAgICAgICAgICAgIGlmIChrZXlWYWx1ZS52YWx1ZSAlIDYp
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGtleVZhbHVl
LnZhbHVlICo9IDUxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5y
ZW1vdmVJZihbXShhdXRvJiBrZXlWYWx1ZSkgeyByZXR1cm4gIShrZXlWYWx1ZS52YWx1ZSAlIDUp
OyB9KTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNTB1KTsKKyAgICAgICAgICAg
IEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAgICAg
ICAgICAgYXV0byBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFz
ZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICAgICAgQVNTRVJUKHBhaXJzLnNpemUoKSwg
NDBVKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKCEoaSAlIDUpKQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1Rf
VFJVRShXVEY6OmFsbE9mKHBhaXJzLCBbJl0oYXV0byYgaXRlbSkgeyByZXR1cm4gaXRlbS5maXJz
dCAhPSBvYmplY3RzW2ldLmdldCgpOyB9KSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIShp
ICUgNikpCisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0
ZDo6cGFpciB7IG9iamVjdHNbaV0uZ2V0KCksIGkgKiA1MSB9KSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShwYWlycy5jb250YWlucyhzdGQ6
OnBhaXIgeyBvYmplY3RzW2ldLmdldCgpLCBpIH0pKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIShpICUgNSkgfHwgIShpICUgOSkpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHNb
aV0gPSBudWxscHRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFz
ZVdlYWtSZWZlcmVuY2VzLCA0MHUpOworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25z
aXN0ZW5jeSgpOworCisgICAgICAgICAgICBwYWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNp
bmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICAgICAgQVNTRVJU
KHBhaXJzLnNpemUoKSwgMzZVKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCA1MDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDUpIHx8ICEoaSAlIDkpKQor
ICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShXVEY6OmFsbE9mKHBhaXJzLCBbJl0oYXV0
byYgaXRlbSkgeyByZXR1cm4gaXRlbS5maXJzdCAhPSBvYmplY3RzW2ldLmdldCgpOyB9KSk7Cisg
ICAgICAgICAgICAgICAgZWxzZSBpZiAoIShpICUgNikpCisgICAgICAgICAgICAgICAgICAgIEVY
UEVDVF9UUlVFKHBhaXJzLmNvbnRhaW5zKHN0ZDo6cGFpciB7IG9iamVjdHNbaV0uZ2V0KCksIGkg
KiA1MSB9KSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBFWFBF
Q1RfVFJVRShwYWlycy5jb250YWlucyhzdGQ6OnBhaXIgeyBvYmplY3RzW2ldLmdldCgpLCBpIH0p
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLnJlbW92ZU51bGxSZWZl
cmVuY2VzKCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDM2
dSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5j
ZXMoKSk7CisgICAgICAgICAgICBBU1NFUlQocGFpcnMuc2l6ZSgpLCB3ZWFrSGFzaE1hcC5jb21w
dXRlU2l6ZSgpKTsKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsK
KyAgICAgICAgfQorICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDM2dSk7
CisgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAgYXV0byBw
YWlycyA9IGNvbGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vh
a0hhc2hNYXApOworICAgICAgICBFWFBFQ1RfRVEocGFpcnMuc2l6ZSgpLCAwdSk7CisKKyAgICAg
ICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAwdSk7IC8vIEl0ZXJhdGluZyBvdmVy
IFdlYWtIYXNoTWFwIHNob3VsZCBoYXZlIHRyaWdnZXJkIGFtb3J0aXplZCBkZWxldGlvbi4KKyAg
ICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBFWFBFQ1RfRkFM
U0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgfQorCisgICAgeworICAg
ICAgICBXZWFrSGFzaE1hcDxCYXNlLCBSZWY8VmFsdWVPYmplY3Q+PiB3ZWFrSGFzaE1hcDsKKyAg
ICAgICAgeworICAgICAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
ZT4sIFJlZlB0cjxWYWx1ZU9iamVjdD4+PiBvYmplY3RzOworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAoaSAlIDIpCisg
ICAgICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKHN0ZDo6cGFpciB7IG1ha2VVbmlxdWU8
RGVyaXZlZD4oKSwgVmFsdWVPYmplY3Q6OmNyZWF0ZShpICogODMpIH0pOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQoc3RkOjpwYWlyIHsg
bWFrZVVuaXF1ZTxCYXNlPigpLCBWYWx1ZU9iamVjdDo6Y3JlYXRlKGkpIH0pOworICAgICAgICAg
ICAgICAgIG9iamVjdHMubGFzdCgpLmZpcnN0LT5kdW1teSA9IDA7CisgICAgICAgICAgICAgICAg
aWYgKGkgPCAyNSkKKyAgICAgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAuYWRkKCpvYmplY3Rz
Lmxhc3QoKS5maXJzdCwgKm9iamVjdHMubGFzdCgpLnNlY29uZCk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1dSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgMjV1KTsKKworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0
ID0gd2Vha0hhc2hNYXAuZmluZCgqb2JqZWN0c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAg
aWYgKGkgPCAyNSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShpdCAhPSB3ZWFr
SGFzaE1hcC5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9FUShpdC0+a2V5LmR1
bW15LCAwKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGkgJSA5KQorICAgICAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdlYWtIYXNoTWFwLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICB3ZWFrSGFzaE1hcC5yZW1vdmUoaXQpOworICAgICAgICAgICAgICAgIHdlYWtIYXNoTWFw
LmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgRVhQRUNU
X0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCAyNXUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNF
KHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX0VR
KHdlYWtIYXNoTWFwLmNvbXB1dGVTaXplKCksIDIydSk7CisgICAgICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IDI1OyArK2kpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ID0gd2Vha0hhc2hN
YXAuZmluZCgqb2JqZWN0c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDkp
KSB7CisgICAgICAgICAgICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdlYWtIYXNoTWFwLmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgRVhQRUNUX0VRKCZpdC5nZXQoKS0+a2V5LCBvYmplY3RzW2ldLmZp
cnN0LmdldCgpKTsKKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXQuZ2V0KCktPmtleS5kdW1t
eSwgMCk7CisgICAgICAgICAgICAgICAgaWYgKGkgJSAyKSB7CisgICAgICAgICAgICAgICAgICAg
IGl0LmdldCgpLT5rZXkuZHVtbXkgPSBpICogMTE7CisgICAgICAgICAgICAgICAgICAgIEVYUEVD
VF9FUShpdC5nZXQoKS0+dmFsdWUtPnZhbHVlLCBpICogODMpOworICAgICAgICAgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoaXQuZ2V0KCktPnZhbHVlLT52YWx1
ZSwgaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIShpICUgNCkpCisgICAgICAgICAgICAgICAg
ICAgIG9iamVjdHNbaV0uZmlyc3QgPSBudWxscHRyOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDI1dSk7CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3
ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgMjU7ICsraSkgeworICAgICAgICAgICAgICAgIGlmICghKGkgJSA0KSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgYXV0byBpdCA9IHdlYWtI
YXNoTWFwLmZpbmQoKm9iamVjdHNbaV0uZmlyc3QpOworICAgICAgICAgICAgICAgIGlmICghKGkg
JSA5KSkgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfVFJVRShpdCA9PSB3ZWFrSGFzaE1h
cC5lbmQoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoJigqaXQpLmtleSwgb2JqZWN0c1tpXS5maXJz
dC5nZXQoKSk7CisgICAgICAgICAgICAgICAgaWYgKGkgJSAyKSB7CisgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9FUSgoKml0KS5rZXkuZHVtbXksIGkgKiAxMSk7CisgICAgICAgICAgICAgICAg
ICAgIEVYUEVDVF9FUSgoKml0KS52YWx1ZS0+dmFsdWUsIGkgKiA4Myk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKCgqaXQpLmtleS5kdW1t
eSwgMCk7CisgICAgICAgICAgICAgICAgICAgIGl0LT5rZXkuZHVtbXkgPSBpICogMzE7CisgICAg
ICAgICAgICAgICAgICAgIEVYUEVDVF9FUSgoKml0KS52YWx1ZS0+dmFsdWUsIGkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNr
Q29uc2lzdGVuY3koKTsKKyAgICAgICAgICAgIEVYUEVDVF9FUSh3ZWFrSGFzaE1hcC5jb21wdXRl
U2l6ZSgpLCAxNnUpOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCAyNTsgKytpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDQpKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ID0gd2Vha0hhc2hNYXAuZmluZCgqb2JqZWN0
c1tpXS5maXJzdCk7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAlIDkpKSB7CisgICAgICAgICAg
ICAgICAgICAgIEVYUEVDVF9UUlVFKGl0ID09IHdlYWtIYXNoTWFwLmVuZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IEVYUEVDVF9FUSgmaXQtPmtleSwgb2JqZWN0c1tpXS5maXJzdC5nZXQoKSk7CisgICAgICAgICAg
ICAgICAgYXV0byBrZXlWYWx1ZSA9IGl0LmdldCgpOworICAgICAgICAgICAgICAgIGlmIChpICUg
MikgeworICAgICAgICAgICAgICAgICAgICBFWFBFQ1RfRVEoa2V5VmFsdWUtPmtleS5kdW1teSwg
aSAqIDExKTsKKyAgICAgICAgICAgICAgICAgICAgRVhQRUNUX0VRKGtleVZhbHVlLT52YWx1ZS0+
dmFsdWUsIGkgKiA4Myk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAg
ICAgICAgRVhQRUNUX0VRKCgqa2V5VmFsdWUpLmtleS5kdW1teSwgaSAqIDMxKTsKKyAgICAgICAg
ICAgICAgICAgICAgRVhQRUNUX0VRKCgqa2V5VmFsdWUpLnZhbHVlLT52YWx1ZSwgaSk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIEVYUEVDVF9F
UShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMTZ1KTsKKyAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hh
c2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgIGF1dG8gcGFpcnMgPSBjb2xsZWN0
S2V5VmFsdWVQYWlyc1VzaW5nSXRlcmF0b3JzPEJhc2UqLCBSZWY8VmFsdWVPYmplY3Q+Pih3ZWFr
SGFzaE1hcCk7CisgICAgICAgIEVYUEVDVF9FUShwYWlycy5zaXplKCksIDBVKTsKKyAgICAgICAg
d2Vha0hhc2hNYXAucmVtb3ZlTnVsbFJlZmVyZW5jZXMoKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDBVKTsKKyAgICB9Cit9CisKK1RFU1QoV1RGX1dlYWtQdHIsIFdl
YWtIYXNoTWFwQW1vcnRpemVkQ2xlYW51cCkKK3sKKyAgICB7CisgICAgICAgIFdlYWtIYXNoTWFw
PEJhc2UsIGludD4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChpICUgMikKKyAgICAg
ICAgICAgICAgICAgICAgb2JqZWN0cy5hcHBlbmQobWFrZVVuaXF1ZTxEZXJpdmVkPigpKTsKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5kKG1h
a2VVbmlxdWU8QmFzZT4oKSk7CisgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0KCpvYmpl
Y3RzLmxhc3QoKSwgaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIGNvbGxlY3RLZXlWYWx1ZVBhaXJz
VXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vha0hhc2hNYXApOworICAgICAgICAgICAgd2Vh
a0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFz
ZVdlYWtSZWZlcmVuY2VzLCA1MHUpOworICAgICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNo
TWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworICAgICAgICAgICAgRVhQRUNUX0VRKHdlYWtIYXNo
TWFwLmNvbXB1dGVTaXplKCksIDUwdSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoaSAl
IDUpKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzW2ldID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3koKTsKKyAgICAg
ICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgNTB1KTsKKyAgICAgICAgICAg
IEVYUEVDVF9UUlVFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOworCisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgICAgICAgICAgIGNv
bGxlY3RLZXlWYWx1ZVBhaXJzVXNpbmdJdGVyYXRvcnM8QmFzZSosIGludD4od2Vha0hhc2hNYXAp
OworCisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAg
ICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDQwdSk7CisgICAgICAgICAgICBF
WFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1MDsgKytpKSB7CisgICAgICAgICAgICAgICAg
aWYgKCEoaSAlIDkpKQorICAgICAgICAgICAgICAgICAgICBvYmplY3RzW2ldID0gbnVsbHB0cjsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA0MHUpOwor
ICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7
CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA0OyArK2kpCisgICAgICAg
ICAgICAgICAgY29sbGVjdEtleVZhbHVlUGFpcnNVc2luZ0l0ZXJhdG9yczxCYXNlKiwgaW50Pih3
ZWFrSGFzaE1hcCk7CisKKyAgICAgICAgICAgIHdlYWtIYXNoTWFwLmNoZWNrQ29uc2lzdGVuY3ko
KTsKKyAgICAgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywgMzZ1KTsKKyAg
ICAgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgV2Vha0hhc2hNYXA8QmFzZSwgUmVm
PFZhbHVlT2JqZWN0Pj4gd2Vha0hhc2hNYXA7CisgICAgICAgIHsKKyAgICAgICAgICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzZT4+IG9iamVjdHM7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAgICAgICAgICAgIG9iamVjdHMuYXBwZW5k
KG1ha2VVbmlxdWU8RGVyaXZlZD4oKSk7CisgICAgICAgICAgICAgICAgd2Vha0hhc2hNYXAuc2V0
KCpvYmplY3RzLmxhc3QoKSwgVmFsdWVPYmplY3Q6OmNyZWF0ZShpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAg
ICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwdSk7CisgICAgICAgICAgICBFWFBF
Q1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDUwdSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFM
U0Uod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1Rf
RVEod2Vha0hhc2hNYXAuY29tcHV0ZVNpemUoKSwgNTB1KTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDUwOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIShpICUgNykpCisgICAgICAgICAgICAgICAgICAgIG9iamVjdHNbaV0gPSBudWxscHRy
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5j
eSgpOworICAgICAgICAgICAgRVhQRUNUX1RSVUUod2Vha0hhc2hNYXAuaGFzTnVsbFJlZmVyZW5j
ZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDUwdSk7
CisgICAgICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDUwdSk7CisKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvJiBwdHIgOiBvYmplY3RzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghcHRyKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIGF1dG8gaXQgPSB3ZWFrSGFzaE1hcC5maW5kKCpwdHIpOworICAgICAgICAgICAgICAg
ICAgICBFWFBFQ1RfVFJVRShpdCAhPSB3ZWFrSGFzaE1hcC5lbmQoKSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0
ZW5jeSgpOworICAgICAgICAgICAgRVhQRUNUX0VRKHNfYmFzZVdlYWtSZWZlcmVuY2VzLCA0MnUp
OworICAgICAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCA0MnUpOworICAg
ICAgICAgICAgRVhQRUNUX0ZBTFNFKHdlYWtIYXNoTWFwLmhhc051bGxSZWZlcmVuY2VzKCkpOwor
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgNTA7ICsraSkgeworICAgICAg
ICAgICAgICAgIGlmICghKGkgJSAzKSkKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0c1tpXSA9
IG51bGxwdHI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3ZWFrSGFzaE1hcC5jaGVja0Nv
bnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMs
IDQydSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmplY3Q6OnNfY291bnQsIDQydSk7
CisgICAgICAgICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygp
KTsKKworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IDQ7ICsraSkgeworICAg
ICAgICAgICAgICAgIGludCBvYmplY3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChh
dXRvJiBwdHIgOiBvYmplY3RzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChwdHIpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gd2Vha0hhc2hNYXAuYWRkKCpwdHIs
IFZhbHVlT2JqZWN0OjpjcmVhdGUob2JqZWN0SW5kZXggKiA1MSkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgRVhQRUNUX0VRKHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnZhbHVlLCBvYmplY3RJ
bmRleCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKytvYmpl
Y3RJbmRleDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB3
ZWFrSGFzaE1hcC5jaGVja0NvbnNpc3RlbmN5KCk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoc19i
YXNlV2Vha1JlZmVyZW5jZXMsIDI4dSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEoVmFsdWVPYmpl
Y3Q6OnNfY291bnQsIDI4dSk7CisgICAgICAgICAgICBFWFBFQ1RfRkFMU0Uod2Vha0hhc2hNYXAu
aGFzTnVsbFJlZmVyZW5jZXMoKSk7CisgICAgICAgICAgICBFWFBFQ1RfRVEod2Vha0hhc2hNYXAu
Y29tcHV0ZVNpemUoKSwgMjh1KTsKKyAgICAgICAgfQorICAgICAgICB3ZWFrSGFzaE1hcC5jaGVj
a0NvbnNpc3RlbmN5KCk7CisgICAgICAgIEVYUEVDVF9FUShzX2Jhc2VXZWFrUmVmZXJlbmNlcywg
Mjh1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZhbHVlT2JqZWN0OjpzX2NvdW50LCAyOHUpOworICAg
ICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKworICAg
ICAgICBFWFBFQ1RfVFJVRSh3ZWFrSGFzaE1hcC5pc0VtcHR5SWdub3JpbmdOdWxsUmVmZXJlbmNl
cygpKTsKKyAgICAgICAgd2Vha0hhc2hNYXAuY2hlY2tDb25zaXN0ZW5jeSgpOworICAgICAgICBF
WFBFQ1RfRVEoc19iYXNlV2Vha1JlZmVyZW5jZXMsIDB1KTsKKyAgICAgICAgRVhQRUNUX0VRKFZh
bHVlT2JqZWN0OjpzX2NvdW50LCAwdSk7CisgICAgICAgIEVYUEVDVF9GQUxTRSh3ZWFrSGFzaE1h
cC5oYXNOdWxsUmVmZXJlbmNlcygpKTsKKyAgICB9Cit9CisKIGNsYXNzIE11bHRpcGxlSW5oZXJp
dGFuY2VCYXNlMSA6IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxNdWx0aXBsZUluaGVyaXRhbmNlQmFz
ZTE+IHsKIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgbWVvdygpID0gMDsK
</data>

          </attachment>
      

    </bug>

</bugzilla>