<?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>185060</bug_id>
          
          <creation_ts>2018-04-26 17:17:45 -0700</creation_ts>
          <short_desc>[negative result] B3 should have generalized path specialization</short_desc>
          <delta_ts>2018-04-30 17:03:47 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>185069</dependson>
    
    <dependson>185123</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1418328</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-26 17:17:45 -0700</bug_when>
    <thetext>Patch forthcoming.

I don&apos;t know if this will be profitable yet.  Reading IR in Octane, it seems like it might be.  Only one way to find out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418329</commentid>
    <comment_count>1</comment_count>
      <attachid>338939</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-26 17:18:18 -0700</bug_when>
    <thetext>Created attachment 338939
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418373</commentid>
    <comment_count>2</comment_count>
      <attachid>338952</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-26 19:31:12 -0700</bug_when>
    <thetext>Created attachment 338952
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418377</commentid>
    <comment_count>3</comment_count>
      <attachid>338954</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-26 19:43:20 -0700</bug_when>
    <thetext>Created attachment 338954
this phase is nuts</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418406</commentid>
    <comment_count>4</comment_count>
      <attachid>338965</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-26 21:38:25 -0700</bug_when>
    <thetext>Created attachment 338965
I&apos;m slowly putting this phase together</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418668</commentid>
    <comment_count>5</comment_count>
      <attachid>339038</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-27 16:40:44 -0700</bug_when>
    <thetext>Created attachment 339038
close to written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418723</commentid>
    <comment_count>6</comment_count>
      <attachid>339050</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-27 19:23:41 -0700</bug_when>
    <thetext>Created attachment 339050
it might be written</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418817</commentid>
    <comment_count>7</comment_count>
      <attachid>339075</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-28 12:46:02 -0700</bug_when>
    <thetext>Created attachment 339075
it&apos;s starting to compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418860</commentid>
    <comment_count>8</comment_count>
      <attachid>339087</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-28 19:24:26 -0700</bug_when>
    <thetext>Created attachment 339087
it specialized something without crashing or emitting broken code

It was a small function, too small to cause interesting compiler problems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418894</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-29 10:05:05 -0700</bug_when>
    <thetext>It&apos;s a 14% speed-up on the following benchmark. Note that we&apos;re duplicating a CheckAdd (which has a full OSR thingy). Note that we&apos;re not (yet) unswitching the loop, because the structure load is not hoisted out of the loop.

function foo(o) {
    var result = 0;
    for (var i = 0; i &lt; 100; ++i) {
        result += o.f;
        o.f = i;
    }
    return result;
}

noInline(foo);

var before = preciseTime();
for (var i = 0; i &lt; 100000; ++i) {
    var result = foo(i &amp; 1 ? {f:42} : {e:41, f:42});
    if (result != (99 * 98) / 2 + 42)
        throw &quot;Error: bad result: &quot; + result;
}
var after = preciseTime();
print(&quot;That took &quot; + (after - before) * 1000 + &quot; ms&quot;);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1418943</commentid>
    <comment_count>10</comment_count>
      <attachid>339104</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-29 21:29:29 -0700</bug_when>
    <thetext>Created attachment 339104
it&apos;s starting to come to life</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419168</commentid>
    <comment_count>11</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-30 16:38:42 -0700</bug_when>
    <thetext>Current perf data suggests that this is not a speed-up.  Will verify again once I fix some bugs.  But this is looking like a negative result, mostly because taildup is too darn good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1419182</commentid>
    <comment_count>12</comment_count>
      <attachid>339163</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-04-30 17:03:10 -0700</bug_when>
    <thetext>Created attachment 339163
mostly works, not a speed-up

Still has test failures.  But it&apos;s definitely not a speed-up, so I&apos;m going to stop working on it.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338939</attachid>
            <date>2018-04-26 17:18:18 -0700</date>
            <delta_ts>2018-04-26 19:31:12 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22809</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVk
Z2VzLmNwcAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgIHByb2MuaW52YWxpZGF0ZUNGRygp
OworICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBwcm9jLmludmFsaWRh
dGVDRkcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTcGVjaWFsaXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgU3BlY2lhbGl6ZUJyYW5jaGVzIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNo
ZXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgY3JlYXRlSG9pc3RpbmdUYXJn
ZXRzKCk7CisgICAgICAgIG1fZG9taW5hdG9ycyA9ICZwcm9jLmRvbWluYXRvcnMoKTsKKyAgICAg
ICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKKyAgICAgICAgZmluZEJyYW5jaGVzKCk7Cisg
ICAgICAgIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpOworICAgICAgICBjcmVh
dGVTbGljZXNCeURvbWluYW50UmVkdW5kYW5jeSgpOworICAgICAgICBjcmVhdGVTbGljZXNCeUhv
aXN0aW5nKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUhvaXN0aW5n
VGFyZ2V0cygpCisgICAgeworICAgICAgICAvLyBBbGwgbG93ZXItZnJlcXVlbmN5IHByZWRlY2Vz
c29ycyBvZiBhIGJsb2NrIHNob3VsZCBqdW1wIHRvIHRoYXQgYmxvY2sgdmlhIGEgaG9pc3RpbmcK
KyAgICAgICAgLy8gdGFyZ2V0IGJsb2NrLiBJZiB3ZSBkb24ndCB1c2UgdGhlc2UgYmxvY2tzLCB0
aGV5J2xsIGdldCBjb2xsZWN0ZWQgYnkgcmVkdWNlU3RyZW5ndGguCisgICAgICAgIAorICAgICAg
ICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKKyAgICAgICAgCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgICAgICB1bnNpZ25l
ZCBudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0gMDsKKyAgICAgICAgICAgIGRv
dWJsZSBtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0gMDsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpID49IGJs
b2NrLT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vz
c29ycysrOworICAgICAgICAgICAgICAgIG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVk
ZWNlc3NvcnMgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtYXhGcmVxdWVuY3lPZkxv
d2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzLCBwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb3dlckZy
ZXF1ZW5jeVByZWRlY2Vzc29ycyA8IDIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhvaXN0aW5nVGFyZ2V0ID0gaW5zZXJ0
aW9uU2V0Lmluc2VydEJlZm9yZShibG9jaywgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVBy
ZWRlY2Vzc29ycyk7CisgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+YXBwZW5kTmV3PFZhbHVl
Pihwcm9jLCBKdW1wLCBibG9jayk7CisgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+c2V0U3Vj
Y2Vzc29ycyhGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpID49IGJsb2NrLT5mcmVxdWVuY3koKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3IoYmxvY2ssIGhvaXN0aW5nVGFy
Z2V0KTsKKyAgICAgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+YWRkUHJlZGVjZXNzb3IocHJl
ZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVQcmVkZWNlc3NvcihwcmVk
ZWNlc3Nvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay0+YWRkUHJlZGVjZXNz
b3IoaG9pc3RpbmdUYXJnZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7
CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJyYW5jaGVzKCkKKyAgICB7CisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICAgICAgICAgIFZh
bHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICAgICAgc3dpdGNoICh2
YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAg
ICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgICAgICAgICBtX3ByZWRpY2F0ZVRvQnJh
bmNoZXMuYWRkKHZhbHVlLT5jaGlsZCgwKSwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZh
bHVlLmFwcGVuZChWYWx1ZUluQmxvY2soYmxvY2ssIGluZGV4KSk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpCisg
ICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAg
ICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRl
ID0gYmxvY2stPmxhc3QoKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogc3RhcnQgOiBpbnNlcnRpb25Qb2ludC5ibG9jaygpLT5zdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICBtX2RvbWluYXRvcnMtPmZvckFsbEJsb2Nrc0RvbWluYXRl
c0J5KAorICAgICAgICAgICAgICAgICAgICBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgWyZd
IChCYXNpY0Jsb2NrKiBkdXBsaWNhdGVkQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5hZGQoc3RkOjptYWtlX3BhaXIoZHVwbGljYXRlZEJs
b2NrLCBwcmVkaWNhdGUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVTbGljZXNCeURvbWluYW50
UmVkdW5kYW5jeSgpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9wcmVkaWNh
dGVUb0JyYW5jaGVzKSB7CisgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0gZW50cnkua2V5
OworICAgICAgICAgICAgVmVjdG9yPFZhbHVlSW5CbG9jaz4mIGJyYW5jaGVzID0gZW50cnkudmFs
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEVhY2ggYmxvY2sgY2FuIG9ubHkgaGF2
ZSBvbmUgImJyYW5jaCIsIHNpbmNlOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDEp
IFRoaXMgcmVkdW5kYW5jeSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmaXhlZDoKKyAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAvLyAgICAgICAg
Q2hlY2soQHApCisgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAv
LworICAgICAgICAgICAgLy8gMikgVGhpcyByZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBi
ZWVuIGZpeGVkOgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAg
ICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgIC8vICAgICAgICBCcmFu
Y2goQHApCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gMykgVGhpcyByZWR1bmRhbmN5
IGlzIG5vdCB2YWxpZCBJUjoKKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyAgICBCQiNm
b286CisgICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgLy8gICAg
ICAgIENoZWNrKEBwKQorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIDQpIFRoaXMgcmVk
dW5kYW5jeSBpcyBub3QgdmFsaWQgSVI6CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8g
ICAgQkIjZm9vOgorICAgICAgICAgICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAg
IC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICBmb3IgKFZhbHVlSW5CbG9jayBicmFu
Y2ggOiBicmFuY2hlcykKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCcmFuY2hlcy5hZGQo
YnJhbmNoLmJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChWYWx1ZUluQmxv
Y2sgaW5zZXJ0aW9uUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAgICAgICAgIGlmIChpbnNl
cnRpb25Qb2ludC52YWx1ZSgpLT5vcGNvZGUoKSAhPSBCcmFuY2gpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoVmFs
dWVJbkJsb2NrIGJyYW5jaFBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhpbnNlcnRpb25Qb2ludC5ibG9jaywgYnJhbmNo
UG9pbnQuYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQuYmxv
Y2sgPT0gYnJhbmNoUG9pbnQuYmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChp
bnNlcnRpb25Qb2ludC5pbmRleCgpID4gYnJhbmNoUG9pbnQuaW5kZXgoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnQuaW5kZXgo
KSA9PSBicmFuY2hQb2ludC5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9zbGljZSA9IG1fc2xpY2VzLmFk
ZCgpOworICAgICAgICAgICAgICAgICAgICBtX3NsaWNlLT5wcmVkaWNhdGUgPSBwcmVkaWNhdGU7
CisgICAgICAgICAgICAgICAgICAgIG1fc2xpY2UtPmluc2VydGlvblBvaW50ID0gaW5zZXJ0aW9u
UG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIG1fc2xpY2UtPmJyYW5jaFBvaW50ID0gYnJhbmNo
UG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIG1fc2xpY2UtPmluc2VydGVkQnJhbmNoQ29zdCA9
IGluc2VydGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydGlvblBvaW50LnZhbHVlKCkgPT0gYnJh
bmNoUG9pbnQudmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9zbGljZS0+c3Bh
Y2VDb3N0ID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2xpY2UtPmJlbmVmaXQgPSBp
bnNlcnRpb25Qb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fc2xpY2UtPnNwYWNlQ29zdCA9IGJy
YW5jaFBvaW50LmluZGV4KCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3NsaWNlLT5iZW5l
Zml0ID0gYnJhbmNoUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCkgKyBtX3NsaWNlLT5pbnNlcnRl
ZEJyYW5jaENvc3QuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBvaW50
LmJsb2NrKCkgIT0gYnJhbmNoUG9pbnQuYmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoQWxsKGJyYW5jaFBvaW50LmJsb2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBv
cCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrID09IGluc2VydGlv
blBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fc2xpY2UtPmJsb2Nrcy5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbV9kdXBsaWNhdGVkRm9y
UHJlZGljYXRlLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBwcmVkaWNhdGUpKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NsaWNlLT5zcGFjZUNvc3QgKz0gYmxv
Y2stPnNpemUoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fYmxvY2tz
V2l0aEJyYW5jaGVzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1fc2xpY2UtPmJlbmVmaXQgKz0gYmxvY2stPmZyZXF1ZW5jeSgpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGZvciAoVmFsdWVJbkJsb2NrIGJyYW5jaCA6IGJyYW5jaGVzKQorICAgICAgICAgICAgICAg
IG1fYmxvY2tzV2l0aEJyYW5jaGVzLnJlbW92ZShicmFuY2guYmxvY2spOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY3JlYXRlU2xpY2VzQnlIb2lzdGluZygpCisgICAgeworICAg
ICAgICBib29sIGNoYW5nZWQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBm
YWxzZTsKKyAgICAgICAgICAgIGZvciAobV9zbGljZSA6IG1fc2xpY2VzKSB7CisgICAgICAgICAg
ICAgICAgaWYgKG1fc2xpY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpIDw9
IG1fc2xpY2UtPnByZWRpY2F0ZS0+b3duZXItPmZyZXF1ZW5jeSgpKQorICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBuZXdJbnNlcnRpb25Qb2ludEJsb2NrID0gbV9zbGljZS0+aW5zZXJ0aW9uUG9pbnQuYmxv
Y2soKTsKKyAgICAgICAgICAgICAgICB3aGlsZSAobmV3SW5zZXJ0aW9uUG9pbnRCbG9rYy0+ZnJl
cXVlbmN5KCkgPj0gbV9zbGljZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKSkKKyAgICAgICAgICAg
ICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9taW5hdG9ycy0+aWRvbShuZXdJ
bnNlcnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiAoIW1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKG1fc2xpY2UtPnByZWRpY2F0ZS0+b3duZXIsIG5l
d0luc2VydGlvblBvaW50QmxvY2spKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAobmV3SW5zZXJ0aW9uUG9pbnRCbG9j
ayA9PSBtX3NsaWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBIb2lzdGlu
ZyB0YXJnZXRzIG11c3QgaGF2ZSBqdW1wcyBhdCB0aGUgZW5kIG9mIHRoZW0gYmVjYXVzZSB3ZSBj
cmVhdGVkIGhvaXN0aW5nCisgICAgICAgICAgICAgICAgLy8gdGFyZ2V0cyB0aGF0IGhhdmUganVt
cHMuCisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobmV3SW5zZXJ0aW9uUG9pbnRCbG9j
ay0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBTbGljZSogbmV3U2xpY2Ug
PSBtX3NsaWNlcy5hZGQoKm1fc2xpY2UpOworICAgICAgICAgICAgICAgIG5ld1NsaWNlLT5pbnNl
cnRpb25Qb2ludCA9IFZhbHVlSW5CbG9jaygKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5zZXJ0
aW9uUG9pbnRCbG9jaywKKyAgICAgICAgICAgICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9j
ay0+c2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQmxvY2tX
b3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9zbGljZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wcmV0ZW5k
VG9IYXZlU2VlbihibG9jayk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgd29y
a2xpc3QucHVzaEFsbChtX3NsaWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygpLT5wcmVkZWNlc3Nv
cnMoKSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrIDogd29ya2xp
c3QucG9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJsb2NrID09IG5ld0luc2VydGlv
blBvaW50KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9zbGljZS0+YnJhbmNo
UG9pbnQuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50
IHRvIGFkZCB0aGUgZW5kIG9mIHRoaXMgYmxvY2suIE5vdGUsIGlmIHdlIHNlZSB0aGlzIGJsb2Nr
LAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBpbiB0
aGUgYmxvY2tzIHNldC4gVGhhdCBtZWFucyB0aGF0IG1fc2xpY2Ugd2FzIGEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGEgZG9taW5hbnQgcmVkdW5kYW5jeSBzbGljZSByYXRoZXIgdGhhbiBh
IGhvaXN0ZWQgc2xpY2UuIEl0IGFsc28gbWVhbnMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoYXQgdGhpcyBibG9jayBkb2Vzbid0IGhhdmUgYW55IHVuYWNjb3VudGVkLWZvciBicmFuY2hl
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3
U2xpY2UtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6ZSgpIC0gKG1fc2xpY2UtPmJyYW5jaFBvaW50
LmluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogTmVlZCB0byBoYXZlIGEgZ2xvYmFsIGJsb2Nrc1dpdGhCcmFuY2hlcyBzbyB0
aGF0IHdlIGNhbiBjb3VudCB3aGV0aGVyCisgICAgICAgICAgICAgICAgICAgIC8vIHRoZSBibG9j
ayBhZGRzIHRvIHRoZSBiZW5lZml0LgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSB3aGlsZSAoY2hhbmdlZCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYg
bV9wcm9jOworICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9ycyB7IG51bGxwdHIgfTsKKyAgICAK
KyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlSW5CbG9jaz4+IG1fcHJlZGljYXRlVG9C
cmFuY2hlczsKKyAgICAKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUq
Pj4gbV9ibG9ja3NXaXRoQnJhbmNoZXM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8QmFzaWNCbG9j
ayosIFZhbHVlKj4+IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZTsKKyAgICAKKyAgICBJbmRleFNl
dDxCYXNpY0Jsb2NrKj4gbV9ibG9ja3NXaXRoQnJhbmNoZXM7CisgICAgCisgICAgU2xpY2UqIG1f
c2xpY2U7CisKKyAgICBzdHJ1Y3QgU2xpY2UgeworICAgICAgICBkb3VibGUgYmVuZWZpdE92ZXJD
b3N0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChiZW5lZml0IC0gaW5z
ZXJ0ZWRCcmFuY2hDb3N0KSAvIHNwYWNlQ29zdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgVmFsdWUqIHByZWRpY2F0ZTsKKyAgICAgICAgVmFsdWVJbkJsb2NrIGluc2VydGlvblBvaW50
OworICAgICAgICBWYWx1ZUluQmxvY2sgYnJhbmNoUG9pbnQ7CisgICAgICAgIGRvdWJsZSBiZW5l
Zml0IHsgMCB9OworICAgICAgICBkb3VibGUgaW5zZXJ0ZWRCcmFuY2hDb3N0IHsgMCB9OworICAg
ICAgICBkb3VibGUgc3BhY2VDb3N0IHsgMCB9OworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGJsb2NrczsgLy8gVGhlIGxpc3Qgb2YgZHVwbGljYXRlZCBibG9ja3Mgbm90IGluY2x1ZGluZyB0
aGUgYnJhbmNoUG9pbnQuCisgICAgfTsKKyAgICAKKyAgICBCYWc8U2xpY2U+IG1fc2xpY2VzOwor
fTsKKworYm9vbCBzcGVjaWFsaXplQnJhbmNoZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAic3BlY2lhbGl6ZUJyYW5jaGVzIik7CisgICAgU3Bl
Y2lhbGl6ZUJyYW5jaGVzIHNwZWNpYWxpemVCcmFuY2hlcyhwcm9jKTsKKyAgICByZXR1cm4gc3Bl
Y2lhbGl6ZUJyYW5jaGVzLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1NwZWNpYWxpemVCcmFuY2hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBEdXBsaWNhdGVzIGNv
ZGUgdG8gcmVtb3ZlIGJyYW5jaGVzLiBFYWNoIHBpZWNlIG9mIGNvZGUgZ2V0cyBkdXBsaWNhdGVk
IGF0IG1vc3Qgb25jZSwgc28gdGhlcmUKKy8vIGlzIG5vIGV4cG9uZW50aWFsIGJsb3ctdXAuCisK
K2Jvb2wgc3BlY2lhbGl6ZUJyYW5jaGVzKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5CbG9jay5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Zv
aWQgVmFsdWVJbkJsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYg
KCp0aGlzKQorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jayksICI6IiwgbV9p
bmRleCwgIi0+IiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQoIm51bGwi
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suaAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZUluQmxvY2sgewor
cHVibGljOgorICAgIFZhbHVlSW5CbG9jaygpIHsgfQorICAgIAorICAgIFZhbHVlSW5CbG9jayhC
YXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFz
aWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVmFsdWUqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9jay0+YXQobV9pbmRleCk7IH0KKyAgICAKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVmFsdWVJbkJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZh
bHVlSW5CbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFZhbHVlSW5CbG9jaygpOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNo
PEJhc2ljQmxvY2sqPjo6aGFzaChtX2Jsb2NrKSArIG1faW5kZXg7CisgICAgfQorICAgIAorICAg
IFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAg
ICAgICBtX2luZGV4LS07CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVk
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IFZhbHVlSW5CbG9j
ayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5kZXgg
eyBVSU5UX01BWCB9OworfTsKKworc3RydWN0IFZhbHVlSW5CbG9ja0hhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZhbHVlSW5CbG9jayYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVJbkJsb2NrJiBhLCBjb25z
dCBWYWx1ZUluQmxvY2smIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4
cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWU+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6QjM6OlZhbHVlSW5CbG9jaz4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6VmFsdWVJbkJsb2Nr
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpWYWx1ZUluQmxvY2s+IDogcHVi
bGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpWYWx1ZUluQmxvY2s+IHsKKyAgICBz
dGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBwdWJsaWM6IAogICAgIC8vIExpa2Ug
ZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZl
Y3Rvci4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMp
OwogICAgIAorICAgIC8vIENsZWFycyB0aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBtZW1vcnkuIElm
IHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZXQgYW5kIGZyZWUgbWVtb3J5LCB0aGVuCisgICAgLy8g
eW91IHdhbnQgKnRoaXMgPSBCaXRWZWN0b3IoKS4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjbGVhckFsbCgpOwogCiAgICAgYm9vbCBxdWlja0dldChzaXplX3QgYml0KSBjb25zdApJbmRl
eDogU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsOCAr
NjQsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBzYXcoTm9kZSBub2RlKSB7IHJldHVybiBtX3Nl
ZW4uY29udGFpbnMobm9kZSk7IH0KICAgICAKKyAgICBib29sIHByZXRlbmRUb0hhdmVTZWVuKE5v
ZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVuLmFkZChub2RlKTsgfQorICAgIAogICAgIGNvbnN0IFNl
dCYgc2VlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbjsgfQotCisgICAgCiBwcml2YXRlOgogICAg
IFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRleDogU291cmNl
L1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNl
dC5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KKyAg
ICAKKyAgICAvLyBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2V0IHdpdGhvdXQgZnJlZWlu
ZyBtZW1vcnkuCisgICAgdm9pZCByZW1vdmVBbGwoKQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xl
YXJBbGwoKTsKKyAgICB9CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25z
dAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338952</attachid>
            <date>2018-04-26 19:31:12 -0700</date>
            <delta_ts>2018-04-26 19:43:20 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>26618</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVk
Z2VzLmNwcAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgIHByb2MuaW52YWxpZGF0ZUNGRygp
OworICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBwcm9jLmludmFsaWRh
dGVDRkcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTcGVjaWFsaXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgU3BlY2lhbGl6ZUJyYW5jaGVzIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNo
ZXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgY3JlYXRlSG9pc3RpbmdUYXJn
ZXRzKCk7CisgICAgICAgIG1fZG9taW5hdG9ycyA9ICZwcm9jLmRvbWluYXRvcnMoKTsKKyAgICAg
ICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKKyAgICAgICAgZmluZEJyYW5jaGVzKCk7Cisg
ICAgICAgIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpOworICAgICAgICBjcmVh
dGVUcmFjZXNCeURvbWluYW50UmVkdW5kYW5jeSgpOworICAgICAgICBjcmVhdGVUcmFjZXNCeUhv
aXN0aW5nKCk7CisgICAgICAgIGNob29zZVRyYWNlT3JkZXIoKTsKKyAgICAgICAgc2ltdWxhdGVE
dXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKCk7CisgICAgICAgIGRlbW90ZUFwcHJvcHJpYXRlVmFs
dWVzKCk7CisgICAgICAgIGR1cGxpY2F0ZVRyYWNlcygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCBjcmVhdGVIb2lzdGluZ1RhcmdldHMoKQorICAgIHsKKyAgICAgICAgLy8gQWxs
IGxvd2VyLWZyZXF1ZW5jeSBwcmVkZWNlc3NvcnMgb2YgYSBibG9jayBzaG91bGQganVtcCB0byB0
aGF0IGJsb2NrIHZpYSBhIGhvaXN0aW5nCisgICAgICAgIC8vIHRhcmdldCBibG9jay4gSWYgd2Ug
ZG9uJ3QgdXNlIHRoZXNlIGJsb2NrcywgdGhleSdsbCBnZXQgY29sbGVjdGVkIGJ5IHJlZHVjZVN0
cmVuZ3RoLgorICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0
KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJv
YykgeworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vz
c29ycyA9IDA7CisgICAgICAgICAgICBkb3VibGUgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5j
eVByZWRlY2Vzc29ycyA9IDA7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRl
Y2Vzc29yLT5mcmVxdWVuY3koKSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG51bWJl
ck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMrKzsKKyAgICAgICAgICAgICAgICBtYXhGcmVx
dWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0KKyAgICAgICAgICAgICAgICAgICAg
c3RkOjptYXgobWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycywgcHJlZGVj
ZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG51bWJlck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPCAyKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBob2lzdGluZ1RhcmdldCA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2ssIG1heEZy
ZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMpOworICAgICAgICAgICAgaG9pc3Rp
bmdUYXJnZXQtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgYmxvY2spOworICAgICAgICAg
ICAgaG9pc3RpbmdUYXJnZXQtPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKGJsb2NrKSk7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRl
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29yLT5mcmVxdWVuY3ko
KSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3Vj
Y2Vzc29yKGJsb2NrLCBob2lzdGluZ1RhcmdldCk7CisgICAgICAgICAgICAgICAgaG9pc3RpbmdU
YXJnZXQtPmFkZFByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBibG9j
ay0+cmVtb3ZlUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKGhvaXN0aW5nVGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgICAg
ICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmRCcmFu
Y2hlcygpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAgICAgY2FzZSBDaGVjazogeworICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkaWNhdGVUb0JyYW5jaGVzLmFk
ZChwcmVkaWNhdGUsIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoVmFs
dWVJbkJsb2NrKGJsb2NrLCBpbmRleCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEVhY2gg
YmxvY2sgY2FuIG9ubHkgaGF2ZSBvbmUgImJyYW5jaCIsIHNpbmNlOgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAxKSBUaGlzIHJlZHVuZGFuY3kgd291bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQ6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAg
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDIpIFRoaXMgcmVkdW5k
YW5jeSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmaXhlZDoKKyAgICAgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFu
Y2goQHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDMp
IFRoaXMgcmVkdW5kYW5jeSBpcyBub3QgdmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNr
KEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyA0KSBU
aGlzIHJlZHVuZGFuY3kgaXMgbm90IHZhbGlkIElSOgorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2go
QHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIE9mIGNv
dXJzZSwgdGhlIGZpcnN0IHR3byBhc3N1bXB0aW9ucyBjb3VsZCBiZSB2aW9sYXRlZCBiZWNhdXNl
IG9mIGEgbWlzc2VkCisgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1
bml0eS4gVGhpcyBwaGFzZSBpcyBwcmVwYXJlZCBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICAg
ICAgbV9ibG9ja3NXaXRoQnJhbmNoZXMuYWRkKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBwcmVkaWNh
dGUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5kQmxvY2tzRHVwbGljYXRlZEZvclByZWRpY2F0
ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUqIHBy
ZWRpY2F0ZSA9IGJsb2NrLT5sYXN0KCktPmNoaWxkKDApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN0YXJ0IDogaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9kb21pbmF0b3JzLT5mb3JBbGxCbG9ja3NE
b21pbmF0ZXNCeSgKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogZHVwbGljYXRlZEJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuYWRkKHN0ZDo6bWFrZV9wYWlyKGR1cGxp
Y2F0ZWRCbG9jaywgcHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY3JlYXRlVHJhY2VzQnlE
b21pbmFudFJlZHVuZGFuY3koKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cHJlZGljYXRlVG9CcmFuY2hlcykgeworICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IGVu
dHJ5LmtleTsKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUluQmxvY2s+JiBicmFuY2hlcyA9IGVu
dHJ5LnZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFZhbHVlSW5CbG9jayBp
bnNlcnRpb25Qb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc2VydGlv
blBvaW50LnZhbHVlKCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZUlu
QmxvY2sgYnJhbmNoUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGluc2VydGlvblBvaW50LmJsb2NrLCBicmFuY2hQb2lu
dC5ibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC5ibG9jayA9
PSBicmFuY2hQb2ludC5ibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2Vy
dGlvblBvaW50LmluZGV4KCkgPiBicmFuY2hQb2ludC5pbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2ludC5pbmRleCgpID09
IGJyYW5jaFBvaW50LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlID0gbV90cmFjZXMuYWRkKCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBpbnNlcnRpb25Qb2lu
dDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YnJhbmNoUG9pbnQgPSBicmFuY2hQb2lu
dDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0ZWRCcmFuY2hDb3N0ID0gaW5z
ZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFsdWUoKSA9PSBicmFuY2hQ
b2ludC52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5zcGFjZUNv
c3QgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YmVuZWZpdCA9IGluc2Vy
dGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ID0gYnJhbmNo
UG9pbnQuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPmJlbmVmaXQg
PSBicmFuY2hQb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKSArIG1fdHJhY2UtPmluc2VydGVkQnJh
bmNoQ29zdC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnQuYmxv
Y2soKSAhPSBicmFuY2hQb2ludC5ibG9jaygpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2hBbGwoYnJhbmNoUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCkKKyAgICB7CisgICAgICAgIFZl
Y3RvcjxUcmFjZSo+IHRyYWNlc1RvUHJvY2VzczsKKyAgICAgICAgZm9yIChUcmFjZSogdHJhY2Ug
OiBtX3RyYWNlcykKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5hcHBlbmQodHJhY2UpOwor
ICAgICAgICB3aGlsZSAoVHJhY2UqIG9sZFRyYWNlID0gdHJhY2VzVG9Qcm9jZXNzLnRha2VMYXN0
KCkpIHsKKyAgICAgICAgICAgIGlmIChvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+
ZnJlcXVlbmN5KCkgPD0gb2xkVHJhY2UtPnByZWRpY2F0ZS0+b3duZXItPmZyZXF1ZW5jeSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBuZXdJbnNlcnRpb25Qb2ludEJsb2NrID0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50
LmJsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAobmV3SW5zZXJ0aW9uUG9pbnRCbG9rYy0+ZnJl
cXVlbmN5KCkgPj0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpCisgICAgICAgICAg
ICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9taW5hdG9ycy0+aWRvbShuZXdJbnNl
cnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2RvbWlu
YXRvcnMtPmRvbWluYXRlcyhvbGRUcmFjZS0+cHJlZGljYXRlLT5vd25lciwgbmV3SW5zZXJ0aW9u
UG9pbnRCbG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChuZXdJbnNlcnRpb25Qb2ludEJsb2NrID09IG9sZFRyYWNlLT5pbnNlcnRp
b25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBIb2lzdGluZyB0YXJnZXRzIG11c3QgaGF2ZSBqdW1wcyBhdCB0aGUg
ZW5kIG9mIHRoZW0gYmVjYXVzZSB3ZSBjcmVhdGVkIGhvaXN0aW5nCisgICAgICAgICAgICAvLyB0
YXJnZXRzIHRoYXQgaGF2ZSBqdW1wcy4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5ld0lu
c2VydGlvblBvaW50QmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fdHJhY2UgPSBtX3RyYWNlcy5hZGQoKm9sZFRyYWNlKTsKKyAgICAg
ICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50ID0gVmFsdWVJbkJsb2NrKAorICAgICAgICAg
ICAgICAgIG5ld0luc2VydGlvblBvaW50QmxvY2ssCisgICAgICAgICAgICAgICAgbmV3SW5zZXJ0
aW9uUG9pbnRCbG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJs
b2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogb2xkVHJhY2UtPmJsb2NrcykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wcmV0ZW5kVG9I
YXZlU2VlbihibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hB
bGwob2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAg
ICAgICAgICAgIGNsb3NlVHJhY2Uod29ya2xpc3QpOworICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5hcHBlbmQobV90
cmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9zZVRyYWNlKEJsb2Nr
V29ya2xpc3QmIHdvcmtsaXN0KQorICAgIHsKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrIDogd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBtX3RyYWNl
LT5pbnNlcnRpb25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX3RyYWNlLT5ibG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fdHJhY2UtPmJyYW5jaFBvaW50
LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWRkIHRoZSBl
bmQgb2YgdGhpcyBibG9jay4gTm90ZSwgaWYgd2Ugc2VlIHRoaXMgYmxvY2ssCisgICAgICAgICAg
ICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBhbHJlYWR5IGluIHRoZSBibG9ja3Mgc2V0
LiBUaGF0IG1lYW5zIHRoYXQgb2xkVHJhY2Ugd2FzIGEKKyAgICAgICAgICAgICAgICAvLyBhIGRv
bWluYW50IHJlZHVuZGFuY3kgdHJhY2UgcmF0aGVyIHRoYW4gYSBob2lzdGVkIHRyYWNlLiBJdCBh
bHNvIG1lYW5zCisgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzIGJsb2NrIGRvZXNuJ3QgaGF2
ZSBhbnkgdW5hY2NvdW50ZWQtZm9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1fdHJhY2UtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6ZSgpIC0gKG1fdHJhY2Ut
PmJyYW5jaFBvaW50LmluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2R1cGxpY2F0ZWRG
b3JQcmVkaWNhdGUuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fdHJhY2UtPnByZWRp
Y2F0ZSkpKSB7CisgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ICs9IGJsb2NrLT5z
aXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGBpZmAgaXMgbmVzdGVkIGJlY2F1c2Ug
aWYgYSBkdXBsaWNhdGVkIGJsb2NrICpkaWQqIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIGJy
YW5jaCBmb3Igb3VyIHByZWRpY2F0ZSB0aGVuIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB3ZSBtaXNz
ZWQgYW4KKyAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaW4gdGhl
IGxhc3QgcmVkdWNlU3RyZW5ndGggcGFzcy4gVGhhdCBpcworICAgICAgICAgICAgICAgIC8vIG1v
c3QgbGlrZWx5IHRvIGhhcHBlbiBiZWNhdXNlIHRoaXMgcmVkdW5kYW5jeSB3YXMgcmV2ZWFsZWQg
b25seQorICAgICAgICAgICAgICAgIC8vIGFmdGVyIHNvbWUgcGhhc2UgdGhhdCByYW4gYWZ0ZXIg
cmVkdWNlU3RyZW5ndGgsIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBlbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy4gVGhlcmVmb3JlLCBhIGZ1dHVyZSBwYXNzIG9mCisgICAgICAgICAgICAg
ICAgLy8gcmVkdWNlU3RyZW5ndGggaXMgdmVyeSBsaWtlbHkgdG8gcmVtb3ZlIGEgZHVwbGljYXRl
ZCBicmFuY2ggZm9yCisgICAgICAgICAgICAgICAgLy8gb3VyIHByZWRpY2F0ZSB3aXRob3V0IG5l
ZWRpbmcgdG8gc3BlY2lhbGl6ZS4gVGhlcmVmb3JlLCB3ZSBkb24ndAorICAgICAgICAgICAgICAg
IC8vIHdhbnQgdG8gY291bGQgaXQgYXMgYSBiZW5lZml0IGhlcmUuIEFsc28sIHdlIGRvbid0IGR1
cGxpY2F0ZQorICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgYmxvY2tzLCBzbyB3ZSB3b3Vs
ZG4ndCBiZSBjcmVhdGluZyBhbnkgYmVuZWZpdCBhbnl3YXkuCisgICAgICAgICAgICAgICAgaWYg
KG1fYmxvY2tzV2l0aEJyYW5jaGVzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3Ry
YWNlLT5wcmVkaWNhdGUoKSkpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5iZW5lZml0
ICs9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgY2hvb3NlVHJhY2VPcmRlcigpCisgICAgeworICAgICAg
ICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJhY2VzKSB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCBrbm93IGFueXRoaW5nIGFib3V0IHRoaXMgaGV1cmlzdGljIHlldC4KKyAgICAgICAgICAgIGlm
ICh0cmFjZS0+YmVuZWZpdE92ZXJDb3N0KCkgPiAwLjIpCisgICAgICAgICAgICAgICAgbV90cmFj
ZXNJbk9yZGVyLmFwcGVuZCh0cmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0
ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdHJhY2VzSW5PcmRlci5iZWdpbigpLCBtX3RyYWNlc0lu
T3JkZXIuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRyYWNlKiBsZWZ0LCBUcmFjZSogcmlnaHQp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBv
ZiBiZW5lZml0LgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5iZW5lZml0T3ZlckNvc3Qo
KSA+IHJpZ2h0LT5iZW5lZml0T3ZlckNvc3QoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpCisgICAgewor
ICAgICAgICBtX3RyYWNlc0luT3JkZXIucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKFRyYWNlKiB0cmFjZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0
ZWRCbG9ja3MuY29udGFpbnModHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3Rl
ZEJsb2Nrcy5jb250YWlucyh0cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2soKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiB0cmFjZS0+YmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FmZmVj
dGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKSk7
CisgICAgICAgICAgICAgICAgbV9hZmZlY3RlZEJsb2Nrcy5hZGQodHJhY2UtPmJyYW5jaFBvaW50
LmJsb2NrKCkpOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiB0cmFj
ZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZChibG9j
ayk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMoKQorICAgIHsKKyAgICAg
ICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSAmJiBt
X2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWVzVG9EZW1vdGUuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5v
d25lciAhPSBibG9jayAmJiBtX2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGNoaWxkLT5vd25lcikp
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZW1vdGVW
YWx1ZXMobV9wcm9jLCB2YWx1ZXNUb0RlbW90ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVw
bGljYXRlVHJhY2VzKCkKKyAgICB7CisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgZm9yIChUcmFjZSogdHJhY2UgOiBtX3Ry
YWNlc0luT3JkZXIpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlk
YXRlQ0ZHKCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIERvbWlu
YXRvcnMqIG1fZG9taW5hdG9ycyB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBIYXNoTWFwPFZhbHVl
KiwgVmVjdG9yPFZhbHVlSW5CbG9jaz4+IG1fcHJlZGljYXRlVG9CcmFuY2hlczsKKyAgICAKKyAg
ICBIYXNoU2V0PHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPj4gbV9ibG9ja3NXaXRoQnJh
bmNoZXM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZhbHVlKj4+IG1fZHVw
bGljYXRlZEZvclByZWRpY2F0ZTsKKyAgICAKKyAgICBUcmFjZSogbV90cmFjZTsKKworICAgIHN0
cnVjdCBUcmFjZSB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0T3ZlckNvc3QoKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJsZToKKyAgICAgICAgICAgIC8vIDEp
IFBhaXIgb2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBjb2RlIHRvIGR1cGxpY2F0ZSBiZXR3
ZWVuIHRoZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2ggaW5zaWRlIG9mIHNtYWxsIGxvb3Au
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IHZhbHVhYmxlOgorICAgICAgICAg
ICAgLy8gMykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQgbG9vcCB0byBob2lzdCBhbiBpbm5l
ciBicmFuY2guCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMSks
IHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0aGUgYmVuZWZpdCB0byBiZSAxLgor
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDIpLCB3ZSBleHBlY3Qg
c3BhY2VDb3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0IHRvIGJlIDkuCisgICAgICAgICAg
ICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyksIHdlIGV4cGVjdCBzcGFjZUNvc3Qg
dG8gYmUgPjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEwMC4KKyAgICAgICAgICAgIHJldHVy
biAoYmVuZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCkgLyBzcGFjZUNvc3Q7CisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwcmVkaWNhdGU7CisgICAgICAgIFZhbHVlSW5CbG9j
ayBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAgVmFsdWVJbkJsb2NrIGJyYW5jaFBvaW50OworICAg
ICAgICBkb3VibGUgYmVuZWZpdCB7IDAgfTsKKyAgICAgICAgZG91YmxlIGluc2VydGVkQnJhbmNo
Q29zdCB7IDAgfTsKKyAgICAgICAgZG91YmxlIHNwYWNlQ29zdCB7IDAgfTsKKyAgICAgICAgVmVj
dG9yPEJhc2ljQmxvY2sqPiBibG9ja3M7IC8vIFRoZSBsaXN0IG9mIGR1cGxpY2F0ZWQgYmxvY2tz
IG5vdCBpbmNsdWRpbmcgdGhlIGJyYW5jaFBvaW50LgorICAgIH07CisgICAgCisgICAgQmFnPFRy
YWNlPiBtX3RyYWNlczsKKyAgICBWZWN0b3I8VHJhY2UqPiBtX3RyYWNlc0luT3JkZXI7CisgICAg
CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IG1fYWZmZWN0ZWRCbG9ja3M7Cit9OworCitib29s
IHNwZWNpYWxpemVCcmFuY2hlcyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBw
aGFzZVNjb3BlKHByb2MsICJzcGVjaWFsaXplQnJhbmNoZXMiKTsKKyAgICBTcGVjaWFsaXplQnJh
bmNoZXMgc3BlY2lhbGl6ZUJyYW5jaGVzKHByb2MpOworICAgIHJldHVybiBzcGVjaWFsaXplQnJh
bmNoZXMucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lh
bGl6ZUJyYW5jaGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3BlY2lhbGl6ZUJyYW5jaGVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIER1cGxpY2F0ZXMgY29kZSB0byByZW1v
dmUgYnJhbmNoZXMuIEVhY2ggcGllY2Ugb2YgY29kZSBnZXRzIGR1cGxpY2F0ZWQgYXQgbW9zdCBv
bmNlLCBzbyB0aGVyZQorLy8gaXMgbm8gZXhwb25lbnRpYWwgYmxvdy11cC4KKworYm9vbCBzcGVj
aWFsaXplQnJhbmNoZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZUlu
QmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoKnRoaXMpCisg
ICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChtX2Jsb2NrKSwgIjoiLCBtX2luZGV4LCAiLT4i
LCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgibnVsbCIpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlSW5CbG9jayB7CitwdWJsaWM6Cisg
ICAgVmFsdWVJbkJsb2NrKCkgeyB9CisgICAgCisgICAgVmFsdWVJbkJsb2NrKEJhc2ljQmxvY2sq
IGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2NrLT5hdChtX2luZGV4KTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBWYWx1ZUluQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxv
Y2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVJbkJsb2Nr
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gVmFsdWVJbkJsb2NrKCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8QmFzaWNCbG9j
ayo+OjpoYXNoKG1fYmxvY2spICsgbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgVmFsdWVJbkJs
b2NrKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1faW5k
ZXgtLTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVJbkJsb2NrKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFY
IH07Cit9OworCitzdHJ1Y3QgVmFsdWVJbkJsb2NrSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgVmFsdWVJbkJsb2NrJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAg
ICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZUluQmxvY2smIGEsIGNvbnN0IFZhbHVlSW5C
bG9jayYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0
IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6VmFs
dWVJbkJsb2NrPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNoIEhhc2g7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4gOiBwdWJsaWMgU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4geworICAgIHN0YXRpYyBjb25z
dGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShy
ZXZpc2lvbiAyMzA5NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBj
b3B5KQpAQCAtMTEwLDYgKzExMCw4IEBAIHB1YmxpYzogCiAgICAgLy8gTGlrZSBlbnN1cmVTaXpl
KCksIGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cyk7CiAgICAgCisg
ICAgLy8gQ2xlYXJzIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4gSWYgeW91IHdhbnQg
dG8gY2xlYXIgdGhlIHNldCBhbmQgZnJlZSBtZW1vcnksIHRoZW4KKyAgICAvLyB5b3Ugd2FudCAq
dGhpcyA9IEJpdFZlY3RvcigpLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyQWxs
KCk7CiAKICAgICBib29sIHF1aWNrR2V0KHNpemVfdCBiaXQpIGNvbnN0CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L0dyYXBoTm9kZVdvcmtsaXN0LmgJKHJldmlzaW9uIDIzMDk3MCkKKysrIFNvdXJjZS9XVEYvd3Rm
L0dyYXBoTm9kZVdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw4ICs2NCwxMCBAQCBw
dWJsaWM6CiAKICAgICBib29sIHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5jb250YWlu
cyhub2RlKTsgfQogICAgIAorICAgIGJvb2wgcHJldGVuZFRvSGF2ZVNlZW4oTm9kZSBub2RlKSB7
IHJldHVybiBtX3NlZW4uYWRkKG5vZGUpOyB9CisgICAgCiAgICAgY29uc3QgU2V0JiBzZWVuKCkg
Y29uc3QgeyByZXR1cm4gbV9zZWVuOyB9Ci0KKyAgICAKIHByaXZhdGU6CiAgICAgU2V0IG1fc2Vl
bjsKICAgICBWZWN0b3I8Tm9kZSwgMTY+IG1fc3RhY2s7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9J
bmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlz
aW9uIDIzMDk3MCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NldC5j
bGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQorICAgIAorICAgIC8v
IFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4K
KyAgICB2b2lkIHJlbW92ZUFsbCgpCisgICAgeworICAgICAgICBtX3NldC5jbGVhckFsbCgpOwor
ICAgIH0KIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338954</attachid>
            <date>2018-04-26 19:43:20 -0700</date>
            <delta_ts>2018-04-26 21:38:25 -0700</delta_ts>
            <desc>this phase is nuts</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28163</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVk
Z2VzLmNwcAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgIHByb2MuaW52YWxpZGF0ZUNGRygp
OworICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBwcm9jLmludmFsaWRh
dGVDRkcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTcGVjaWFsaXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgU3BlY2lhbGl6ZUJyYW5jaGVzIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNo
ZXMoUHJvY2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgY3JlYXRlSG9pc3RpbmdUYXJn
ZXRzKCk7CisgICAgICAgIG1fZG9taW5hdG9ycyA9ICZwcm9jLmRvbWluYXRvcnMoKTsKKyAgICAg
ICAgbV9wcm9jLnJlc2V0VmFsdWVPd25lcnMoKTsKKyAgICAgICAgZmluZEJyYW5jaGVzKCk7Cisg
ICAgICAgIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpOworICAgICAgICBjcmVh
dGVUcmFjZXNCeURvbWluYW50UmVkdW5kYW5jeSgpOworICAgICAgICBjcmVhdGVUcmFjZXNCeUhv
aXN0aW5nKCk7CisgICAgICAgIGNob29zZVRyYWNlT3JkZXIoKTsKKyAgICAgICAgc2ltdWxhdGVE
dXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKCk7CisgICAgICAgIGRlbW90ZUFwcHJvcHJpYXRlVmFs
dWVzKCk7CisgICAgICAgIGR1cGxpY2F0ZVRyYWNlcygpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgdm9pZCBjcmVhdGVIb2lzdGluZ1RhcmdldHMoKQorICAgIHsKKyAgICAgICAgLy8gQWxs
IGxvd2VyLWZyZXF1ZW5jeSBwcmVkZWNlc3NvcnMgb2YgYSBibG9jayBzaG91bGQganVtcCB0byB0
aGF0IGJsb2NrIHZpYSBhIGhvaXN0aW5nCisgICAgICAgIC8vIHRhcmdldCBibG9jay4gSWYgd2Ug
ZG9uJ3QgdXNlIHRoZXNlIGJsb2NrcywgdGhleSdsbCBnZXQgY29sbGVjdGVkIGJ5IHJlZHVjZVN0
cmVuZ3RoLgorICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0
KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJv
YykgeworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vz
c29ycyA9IDA7CisgICAgICAgICAgICBkb3VibGUgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5j
eVByZWRlY2Vzc29ycyA9IDA7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRl
Y2Vzc29yLT5mcmVxdWVuY3koKSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG51bWJl
ck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMrKzsKKyAgICAgICAgICAgICAgICBtYXhGcmVx
dWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0KKyAgICAgICAgICAgICAgICAgICAg
c3RkOjptYXgobWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycywgcHJlZGVj
ZXNzb3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgaWYgKG51bWJlck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPCAyKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBob2lzdGluZ1RhcmdldCA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2ssIG1heEZy
ZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMpOworICAgICAgICAgICAgaG9pc3Rp
bmdUYXJnZXQtPmFwcGVuZE5ldzxWYWx1ZT4ocHJvYywgSnVtcCwgYmxvY2spOworICAgICAgICAg
ICAgaG9pc3RpbmdUYXJnZXQtPnNldFN1Y2Nlc3NvcnMoRnJlcXVlbnRlZEJsb2NrKGJsb2NrKSk7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRl
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29yLT5mcmVxdWVuY3ko
KSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3Vj
Y2Vzc29yKGJsb2NrLCBob2lzdGluZ1RhcmdldCk7CisgICAgICAgICAgICAgICAgaG9pc3RpbmdU
YXJnZXQtPmFkZFByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICBibG9j
ay0+cmVtb3ZlUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKGhvaXN0aW5nVGFyZ2V0KTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgICAg
ICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmRCcmFu
Y2hlcygpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5kZXgt
LTspIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoaW5kZXgpOwor
ICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAgICAgY2FzZSBDaGVjazogeworICAgICAgICAg
ICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9wcmVkaWNhdGVUb0JyYW5jaGVzLmFk
ZChwcmVkaWNhdGUsIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoVmFs
dWVJbkJsb2NrKGJsb2NrLCBpbmRleCkpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEVhY2gg
YmxvY2sgY2FuIG9ubHkgaGF2ZSBvbmUgImJyYW5jaCIsIHNpbmNlOgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAxKSBUaGlzIHJlZHVuZGFuY3kgd291bGQg
aGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQ6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAg
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDIpIFRoaXMgcmVkdW5k
YW5jeSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmaXhlZDoKKyAgICAgICAgICAgICAgICAgICAg
Ly8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFu
Y2goQHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDMp
IFRoaXMgcmVkdW5kYW5jeSBpcyBub3QgdmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNr
KEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyA0KSBU
aGlzIHJlZHVuZGFuY3kgaXMgbm90IHZhbGlkIElSOgorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAgICAgICAgIC8v
ICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2go
QHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIE9mIGNv
dXJzZSwgdGhlIGZpcnN0IHR3byBhc3N1bXB0aW9ucyBjb3VsZCBiZSB2aW9sYXRlZCBiZWNhdXNl
IG9mIGEgbWlzc2VkCisgICAgICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1
bml0eS4gVGhpcyBwaGFzZSBpcyBwcmVwYXJlZCBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICAg
ICAgbV9ibG9ja3NXaXRoQnJhbmNoZXMuYWRkKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBwcmVkaWNh
dGUpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5kQmxvY2tzRHVwbGljYXRlZEZvclByZWRpY2F0
ZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewor
ICAgICAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUqIHBy
ZWRpY2F0ZSA9IGJsb2NrLT5sYXN0KCktPmNoaWxkKDApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN0YXJ0IDogaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+c3Vj
Y2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgbV9kb21pbmF0b3JzLT5mb3JBbGxCbG9ja3NE
b21pbmF0ZXNCeSgKKyAgICAgICAgICAgICAgICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAg
ICAgIFsmXSAoQmFzaWNCbG9jayogZHVwbGljYXRlZEJsb2NrKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuYWRkKHN0ZDo6bWFrZV9wYWlyKGR1cGxp
Y2F0ZWRCbG9jaywgcHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY3JlYXRlVHJhY2VzQnlE
b21pbmFudFJlZHVuZGFuY3koKQorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1f
cHJlZGljYXRlVG9CcmFuY2hlcykgeworICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IGVu
dHJ5LmtleTsKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUluQmxvY2s+JiBicmFuY2hlcyA9IGVu
dHJ5LnZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKFZhbHVlSW5CbG9jayBp
bnNlcnRpb25Qb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAgICAgICAgaWYgKGluc2VydGlv
blBvaW50LnZhbHVlKCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZm9yIChWYWx1ZUlu
QmxvY2sgYnJhbmNoUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IW1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGluc2VydGlvblBvaW50LmJsb2NrLCBicmFuY2hQb2lu
dC5ibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC5ibG9jayA9
PSBicmFuY2hQb2ludC5ibG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2Vy
dGlvblBvaW50LmluZGV4KCkgPiBicmFuY2hQb2ludC5pbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2ludC5pbmRleCgpID09
IGJyYW5jaFBvaW50LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlID0gbV90cmFjZXMuYWRkKCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAg
ICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBpbnNlcnRpb25Qb2lu
dDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YnJhbmNoUG9pbnQgPSBicmFuY2hQb2lu
dDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0ZWRCcmFuY2hDb3N0ID0gaW5z
ZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFsdWUoKSA9PSBicmFuY2hQ
b2ludC52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5zcGFjZUNv
c3QgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YmVuZWZpdCA9IGluc2Vy
dGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ID0gYnJhbmNo
UG9pbnQuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPmJlbmVmaXQg
PSBicmFuY2hQb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKSArIG1fdHJhY2UtPmluc2VydGVkQnJh
bmNoQ29zdC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnQuYmxv
Y2soKSAhPSBicmFuY2hQb2ludC5ibG9jaygpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAg
QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2hBbGwoYnJhbmNoUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCkKKyAgICB7CisgICAgICAgIFZl
Y3RvcjxUcmFjZSo+IHRyYWNlc1RvUHJvY2VzczsKKyAgICAgICAgZm9yIChUcmFjZSogdHJhY2Ug
OiBtX3RyYWNlcykKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5hcHBlbmQodHJhY2UpOwor
ICAgICAgICB3aGlsZSAoVHJhY2UqIG9sZFRyYWNlID0gdHJhY2VzVG9Qcm9jZXNzLnRha2VMYXN0
KCkpIHsKKyAgICAgICAgICAgIGlmIChvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+
ZnJlcXVlbmN5KCkgPD0gb2xkVHJhY2UtPnByZWRpY2F0ZS0+b3duZXItPmZyZXF1ZW5jeSgpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNp
Y0Jsb2NrKiBuZXdJbnNlcnRpb25Qb2ludEJsb2NrID0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50
LmJsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAobmV3SW5zZXJ0aW9uUG9pbnRCbG9rYy0+ZnJl
cXVlbmN5KCkgPj0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpCisgICAgICAgICAg
ICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9taW5hdG9ycy0+aWRvbShuZXdJbnNl
cnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2RvbWlu
YXRvcnMtPmRvbWluYXRlcyhvbGRUcmFjZS0+cHJlZGljYXRlLT5vd25lciwgbmV3SW5zZXJ0aW9u
UG9pbnRCbG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChuZXdJbnNlcnRpb25Qb2ludEJsb2NrID09IG9sZFRyYWNlLT5pbnNlcnRp
b25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBIb2lzdGluZyB0YXJnZXRzIG11c3QgaGF2ZSBqdW1wcyBhdCB0aGUg
ZW5kIG9mIHRoZW0gYmVjYXVzZSB3ZSBjcmVhdGVkIGhvaXN0aW5nCisgICAgICAgICAgICAvLyB0
YXJnZXRzIHRoYXQgaGF2ZSBqdW1wcy4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG5ld0lu
c2VydGlvblBvaW50QmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG1fdHJhY2UgPSBtX3RyYWNlcy5hZGQoKm9sZFRyYWNlKTsKKyAgICAg
ICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50ID0gVmFsdWVJbkJsb2NrKAorICAgICAgICAg
ICAgICAgIG5ld0luc2VydGlvblBvaW50QmxvY2ssCisgICAgICAgICAgICAgICAgbmV3SW5zZXJ0
aW9uUG9pbnRCbG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJs
b2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogb2xkVHJhY2UtPmJsb2NrcykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wcmV0ZW5kVG9I
YXZlU2VlbihibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hB
bGwob2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAg
ICAgICAgICAgIGNsb3NlVHJhY2Uod29ya2xpc3QpOworICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5hcHBlbmQobV90
cmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9zZVRyYWNlKEJsb2Nr
V29ya2xpc3QmIHdvcmtsaXN0KQorICAgIHsKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrIDogd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBtX3RyYWNl
LT5pbnNlcnRpb25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBtX3RyYWNlLT5ibG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fdHJhY2UtPmJyYW5jaFBvaW50
LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWRkIHRoZSBl
bmQgb2YgdGhpcyBibG9jay4gTm90ZSwgaWYgd2Ugc2VlIHRoaXMgYmxvY2ssCisgICAgICAgICAg
ICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBhbHJlYWR5IGluIHRoZSBibG9ja3Mgc2V0
LiBUaGF0IG1lYW5zIHRoYXQgb2xkVHJhY2Ugd2FzIGEKKyAgICAgICAgICAgICAgICAvLyBhIGRv
bWluYW50IHJlZHVuZGFuY3kgdHJhY2UgcmF0aGVyIHRoYW4gYSBob2lzdGVkIHRyYWNlLiBJdCBh
bHNvIG1lYW5zCisgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzIGJsb2NrIGRvZXNuJ3QgaGF2
ZSBhbnkgdW5hY2NvdW50ZWQtZm9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG1fdHJhY2UtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6ZSgpIC0gKG1fdHJhY2Ut
PmJyYW5jaFBvaW50LmluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2R1cGxpY2F0ZWRG
b3JQcmVkaWNhdGUuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fdHJhY2UtPnByZWRp
Y2F0ZSkpKSB7CisgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ICs9IGJsb2NrLT5z
aXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGBpZmAgaXMgbmVzdGVkIGJlY2F1c2Ug
aWYgYSBkdXBsaWNhdGVkIGJsb2NrICpkaWQqIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIGJy
YW5jaCBmb3Igb3VyIHByZWRpY2F0ZSB0aGVuIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB3ZSBtaXNz
ZWQgYW4KKyAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkgaW4gdGhl
IGxhc3QgcmVkdWNlU3RyZW5ndGggcGFzcy4gVGhhdCBpcworICAgICAgICAgICAgICAgIC8vIG1v
c3QgbGlrZWx5IHRvIGhhcHBlbiBiZWNhdXNlIHRoaXMgcmVkdW5kYW5jeSB3YXMgcmV2ZWFsZWQg
b25seQorICAgICAgICAgICAgICAgIC8vIGFmdGVyIHNvbWUgcGhhc2UgdGhhdCByYW4gYWZ0ZXIg
cmVkdWNlU3RyZW5ndGgsIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBlbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy4gVGhlcmVmb3JlLCBhIGZ1dHVyZSBwYXNzIG9mCisgICAgICAgICAgICAg
ICAgLy8gcmVkdWNlU3RyZW5ndGggaXMgdmVyeSBsaWtlbHkgdG8gcmVtb3ZlIGEgZHVwbGljYXRl
ZCBicmFuY2ggZm9yCisgICAgICAgICAgICAgICAgLy8gb3VyIHByZWRpY2F0ZSB3aXRob3V0IG5l
ZWRpbmcgdG8gc3BlY2lhbGl6ZS4gVGhlcmVmb3JlLCB3ZSBkb24ndAorICAgICAgICAgICAgICAg
IC8vIHdhbnQgdG8gY291bGQgaXQgYXMgYSBiZW5lZml0IGhlcmUuIEFsc28sIHdlIGRvbid0IGR1
cGxpY2F0ZQorICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgYmxvY2tzLCBzbyB3ZSB3b3Vs
ZG4ndCBiZSBjcmVhdGluZyBhbnkgYmVuZWZpdCBhbnl3YXkuCisgICAgICAgICAgICAgICAgaWYg
KG1fYmxvY2tzV2l0aEJyYW5jaGVzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3Ry
YWNlLT5wcmVkaWNhdGUoKSkpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5iZW5lZml0
ICs9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIHZvaWQgY2hvb3NlVHJhY2VPcmRlcigpCisgICAgeworICAgICAg
ICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJhY2VzKSB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCBrbm93IGFueXRoaW5nIGFib3V0IHRoaXMgaGV1cmlzdGljIHlldC4KKyAgICAgICAgICAgIGlm
ICh0cmFjZS0+YmVuZWZpdE92ZXJDb3N0KCkgPiAwLjIpCisgICAgICAgICAgICAgICAgbV90cmFj
ZXNJbk9yZGVyLmFwcGVuZCh0cmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0
ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdHJhY2VzSW5PcmRlci5iZWdpbigpLCBtX3RyYWNlc0lu
T3JkZXIuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRyYWNlKiBsZWZ0LCBUcmFjZSogcmlnaHQp
IC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBv
ZiBiZW5lZml0LgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5iZW5lZml0T3ZlckNvc3Qo
KSA+IHJpZ2h0LT5iZW5lZml0T3ZlckNvc3QoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpCisgICAgewor
ICAgICAgICBtX3RyYWNlc0luT3JkZXIucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBb
Jl0gKFRyYWNlKiB0cmFjZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0
ZWRCbG9ja3MuY29udGFpbnModHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3Rl
ZEJsb2Nrcy5jb250YWlucyh0cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2soKSkpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiB0cmFjZS0+YmxvY2tzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX2FmZmVj
dGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKSk7
CisgICAgICAgICAgICAgICAgbV9hZmZlY3RlZEJsb2Nrcy5hZGQodHJhY2UtPmJyYW5jaFBvaW50
LmJsb2NrKCkpOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiB0cmFj
ZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZChibG9j
ayk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMoKQorICAgIHsKKyAgICAg
ICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSAmJiBt
X2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgdmFs
dWVzVG9EZW1vdGUuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5v
d25lciAhPSBibG9jayAmJiBtX2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGNoaWxkLT5vd25lcikp
CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZW1vdGVW
YWx1ZXMobV9wcm9jLCB2YWx1ZXNUb0RlbW90ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVw
bGljYXRlVHJhY2VzKCkKKyAgICB7CisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgSW5kZXhNYXA8VmFsdWUqLCBWYWx1ZSo+
IHZhbHVlTWFwKG1fcHJvYy52YWx1ZXMoKS5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9y
IChtX3RyYWNlIDogbV90cmFjZXNJbk9yZGVyKSB7CisgICAgICAgICAgICBWZWN0b3I8QmFzaWNC
bG9jayo+IGJsb2Nrc1RvRHVwbGljYXRlOworICAgICAgICAgICAgYmxvY2tzVG9EdXBsaWNhdGUu
YXBwZW5kKG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpOworICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fdHJhY2UtPmJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGJsb2NrICE9IG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAg
ICAgICAgIGJsb2Nrc1RvRHVwbGljYXRlLmFwcGVuZChibG9jayk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgICAgICBibG9j
a3NUb0R1cGxpY2F0ZS5iZWdpbigpLCBibG9ja3NUb0R1cGxpY2F0ZS5lbmQoKSwKKyAgICAgICAg
ICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGxlZnQsIEJhc2ljQmxvY2sqIHJpZ2h0KSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPmluZGV4KCkgPCByaWdodC0+aW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gT3JkZXIgbWF0dGVy
cyEgV2UgdHJ5IHRvIGNyZWF0ZSBhIENGRyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGdhcmJhZ2Uu
IFRoYXQncworICAgICAgICAgICAgLy8gcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgdGhlIHBl
cmZvcm1hbmNlIG9mIGxpbmVhciBzY2FuLiBJdCBkb2Vzbid0IG1hdHRlciBmb3IKKyAgICAgICAg
ICAgIC8vIGdyYXBoIGNvbG9yaW5nIHRob3VnaC4gSXQgZGVmaW5pdGVseSBtYXR0ZXJzIGZvciBk
ZWJ1Z2dpbmcgdGhlIGNvbXBpbGVyLgorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2tCZWZv
cmVJbnNlcnRpb25Qb2ludCA9IGJsb2Nrc1RvRHVwbGljYXRlLmxhc3QoKTsKKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NUb0R1cGxpY2F0ZSkgeworICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBUaGUgZHVwbGljYXRlIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGlzIHRo
ZSBlbHNlIGNhc2UuIFNvLCBkb24ndCBkdXBsaWNhdGUKKyAgICAgICAgICAgICAgICAvLyBhbnkg
YmxvY2tzIHRoYXQgY29ycmVzcG9uZCB0byB0aGUgdGhlbiBjYXNlLiBJIGd1ZXNzIHRoYXQgbWVh
bnMgYmVpbmcgYWJsZSB0bworICAgICAgICAgICAgICAgIC8vIHRyYWNrIHN1Y2ggdGhpbmdzISBU
aGUgZHVwbGljYXRlZEZvclByZWRpY2F0ZSBzaG91bGQgYmUgYSBtYXAgdG8gYm9vbCBvcgorICAg
ICAgICAgICAgICAgIC8vIHNvbWV0aGluZy4KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBpbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIoYmxvY2tCZWZvcmVJbnNl
cnRpb25Qb2ludCwgYmxvY2stPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAgIG1fcHJvYy5p
bnZhbGlkYXRlQ0ZHKCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAg
IERvbWluYXRvcnMqIG1fZG9taW5hdG9ycyB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBIYXNoTWFw
PFZhbHVlKiwgVmVjdG9yPFZhbHVlSW5CbG9jaz4+IG1fcHJlZGljYXRlVG9CcmFuY2hlczsKKyAg
ICAKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPj4gbV9ibG9ja3NX
aXRoQnJhbmNoZXM7CisgICAgSGFzaFNldDxzdGQ6OnBhaXI8QmFzaWNCbG9jayosIFZhbHVlKj4+
IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZTsKKyAgICAKKyAgICBUcmFjZSogbV90cmFjZTsKKwor
ICAgIHN0cnVjdCBUcmFjZSB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0T3ZlckNvc3QoKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJsZToKKyAgICAgICAgICAg
IC8vIDEpIFBhaXIgb2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBjb2RlIHRvIGR1cGxpY2F0
ZSBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2ggaW5zaWRlIG9mIHNtYWxs
IGxvb3AuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IHZhbHVhYmxlOgorICAg
ICAgICAgICAgLy8gMykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQgbG9vcCB0byBob2lzdCBh
biBpbm5lciBicmFuY2guCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBv
ZiAoMSksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0aGUgYmVuZWZpdCB0byBi
ZSAxLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDIpLCB3ZSBl
eHBlY3Qgc3BhY2VDb3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0IHRvIGJlIDkuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyksIHdlIGV4cGVjdCBzcGFj
ZUNvc3QgdG8gYmUgPjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEwMC4KKyAgICAgICAgICAg
IHJldHVybiAoYmVuZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCkgLyBzcGFjZUNvc3Q7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwcmVkaWNhdGU7CisgICAgICAgIFZhbHVl
SW5CbG9jayBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAgVmFsdWVJbkJsb2NrIGJyYW5jaFBvaW50
OworICAgICAgICBkb3VibGUgYmVuZWZpdCB7IDAgfTsKKyAgICAgICAgZG91YmxlIGluc2VydGVk
QnJhbmNoQ29zdCB7IDAgfTsKKyAgICAgICAgZG91YmxlIHNwYWNlQ29zdCB7IDAgfTsKKyAgICAg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3M7IC8vIFRoZSBsaXN0IG9mIGR1cGxpY2F0ZWQg
YmxvY2tzIG5vdCBpbmNsdWRpbmcgdGhlIGJyYW5jaFBvaW50LgorICAgIH07CisgICAgCisgICAg
QmFnPFRyYWNlPiBtX3RyYWNlczsKKyAgICBWZWN0b3I8VHJhY2UqPiBtX3RyYWNlc0luT3JkZXI7
CisgICAgCisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IG1fYWZmZWN0ZWRCbG9ja3M7Cit9Owor
Citib29sIHNwZWNpYWxpemVCcmFuY2hlcyhQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKHByb2MsICJzcGVjaWFsaXplQnJhbmNoZXMiKTsKKyAgICBTcGVjaWFs
aXplQnJhbmNoZXMgc3BlY2lhbGl6ZUJyYW5jaGVzKHByb2MpOworICAgIHJldHVybiBzcGVjaWFs
aXplQnJhbmNoZXMucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3BlY2lhbGl6ZUJyYW5jaGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIER1cGxpY2F0ZXMgY29kZSB0
byByZW1vdmUgYnJhbmNoZXMuIEVhY2ggcGllY2Ugb2YgY29kZSBnZXRzIGR1cGxpY2F0ZWQgYXQg
bW9zdCBvbmNlLCBzbyB0aGVyZQorLy8gaXMgbm8gZXhwb25lbnRpYWwgYmxvdy11cC4KKworYm9v
bCBzcGVjaWFsaXplQnJhbmNoZXMoUHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBW
YWx1ZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoKnRo
aXMpCisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChtX2Jsb2NrKSwgIjoiLCBtX2luZGV4
LCAiLT4iLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisgICAgICAgIG91dC5wcmludCgibnVsbCIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlSW5CbG9jayB7CitwdWJs
aWM6CisgICAgVmFsdWVJbkJsb2NrKCkgeyB9CisgICAgCisgICAgVmFsdWVJbkJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQor
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgeworICAgIH0KKyAgICAKKyAgICBCYXNpY0Js
b2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBWYWx1ZSogdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2Jsb2NrLT5hdChtX2luZGV4KTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBWYWx1ZUluQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVJ
bkJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gVmFsdWVJbkJsb2NrKCk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8QmFz
aWNCbG9jayo+OjpoYXNoKG1fYmxvY2spICsgbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgVmFs
dWVJbkJsb2NrKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAg
IG1faW5kZXgtLTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVJbkJsb2NrKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJ
TlRfTUFYIH07Cit9OworCitzdHJ1Y3QgVmFsdWVJbkJsb2NrSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgVmFsdWVJbkJsb2NrJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBWYWx1ZUluQmxvY2smIGEsIGNvbnN0IFZh
bHVlSW5CbG9jayYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpC
Mzo6VmFsdWVJbkJsb2NrPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4gOiBwdWJsaWMg
U2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4geworICAgIHN0YXRp
YyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw4IEBAIHB1YmxpYzogCiAgICAgLy8gTGlrZSBlbnN1
cmVTaXplKCksIGJ1dCBzdXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9y
LgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cyk7CiAg
ICAgCisgICAgLy8gQ2xlYXJzIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4gSWYgeW91
IHdhbnQgdG8gY2xlYXIgdGhlIHNldCBhbmQgZnJlZSBtZW1vcnksIHRoZW4KKyAgICAvLyB5b3Ug
d2FudCAqdGhpcyA9IEJpdFZlY3RvcigpLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNs
ZWFyQWxsKCk7CiAKICAgICBib29sIHF1aWNrR2V0KHNpemVfdCBiaXQpIGNvbnN0CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHJldmlzaW9uIDIzMDk3MCkKKysrIFNvdXJjZS9X
VEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw4ICs2NCwx
MCBAQCBwdWJsaWM6CiAKICAgICBib29sIHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5j
b250YWlucyhub2RlKTsgfQogICAgIAorICAgIGJvb2wgcHJldGVuZFRvSGF2ZVNlZW4oTm9kZSBu
b2RlKSB7IHJldHVybiBtX3NlZW4uYWRkKG5vZGUpOyB9CisgICAgCiAgICAgY29uc3QgU2V0JiBz
ZWVuKCkgY29uc3QgeyByZXR1cm4gbV9zZWVuOyB9Ci0KKyAgICAKIHByaXZhdGU6CiAgICAgU2V0
IG1fc2VlbjsKICAgICBWZWN0b3I8Tm9kZSwgMTY+IG1fc3RhY2s7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJ
KHJldmlzaW9uIDIzMDk3MCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTYxLDYgKzYxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQorICAgIAor
ICAgIC8vIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9tIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1l
bW9yeS4KKyAgICB2b2lkIHJlbW92ZUFsbCgpCisgICAgeworICAgICAgICBtX3NldC5jbGVhckFs
bCgpOworICAgIH0KIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAg
ICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>338965</attachid>
            <date>2018-04-26 21:38:25 -0700</date>
            <delta_ts>2018-04-27 16:40:44 -0700</delta_ts>
            <desc>I&apos;m slowly putting this phase together</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>30696</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVk
Z2VzLmNwcAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgIHByb2MuaW52YWxpZGF0ZUNGRygp
OworICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBwcm9jLmludmFsaWRh
dGVDRkcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2ICsx
NDIsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tzLnNpemUoKTsgfQogICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
cltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gdGFrZUJsb2NrKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBXVEZNb3ZlKG1fYmxvY2tzW2luZGV4XSk7IH0KIAogICAgIHR5cGVkZWYgV1RGOjpJ
bmRleGVkQ29udGFpbmVySXRlcmF0b3I8UHJvY2VkdXJlPiBpdGVyYXRvcjsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFu
Y2hlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzU3BlY2lhbGl6ZUJyYW5jaGVzLmgiCisKKyNpbmNsdWRlICJCM1ZhbHVlSW5CbG9j
ay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFNwZWNpYWxpemVCcmFuY2hlcyB7CitwdWJsaWM6CisgICAgU3BlY2lhbGl6
ZUJyYW5jaGVzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBtX3Byb2MocHJvYykKKyAgICB7
CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAgICAgIGJyZWFrQ3JpdGlj
YWxFZGdlcygpOworICAgICAgICBjcmVhdGVIb2lzdGluZ1RhcmdldHMoKTsKKyAgICAgICAgbV9k
b21pbmF0b3JzID0gJnByb2MuZG9taW5hdG9ycygpOworICAgICAgICBtX3Byb2MucmVzZXRWYWx1
ZU93bmVycygpOworICAgICAgICBmaW5kQnJhbmNoZXMoKTsKKyAgICAgICAgZmluZEJsb2Nrc0R1
cGxpY2F0ZWRGb3JQcmVkaWNhdGVzKCk7CisgICAgICAgIGNyZWF0ZVRyYWNlc0J5RG9taW5hbnRS
ZWR1bmRhbmN5KCk7CisgICAgICAgIGNyZWF0ZVRyYWNlc0J5SG9pc3RpbmcoKTsKKyAgICAgICAg
Y2hvb3NlVHJhY2VPcmRlcigpOworICAgICAgICBzaW11bGF0ZUR1cGxpY2F0aW9uQW5kUHJ1bmVU
cmFjZXMoKTsKKyAgICAgICAgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMoKTsKKyAgICAgICAgZHVw
bGljYXRlVHJhY2VzKCk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUhv
aXN0aW5nVGFyZ2V0cygpCisgICAgeworICAgICAgICAvLyBBbGwgbG93ZXItZnJlcXVlbmN5IHBy
ZWRlY2Vzc29ycyBvZiBhIGJsb2NrIHNob3VsZCBqdW1wIHRvIHRoYXQgYmxvY2sgdmlhIGEgaG9p
c3RpbmcKKyAgICAgICAgLy8gdGFyZ2V0IGJsb2NrLiBJZiB3ZSBkb24ndCB1c2UgdGhlc2UgYmxv
Y2tzLCB0aGV5J2xsIGdldCBjb2xsZWN0ZWQgYnkgcmVkdWNlU3RyZW5ndGguCisgICAgICAgIAor
ICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgICAgICB1
bnNpZ25lZCBudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0gMDsKKyAgICAgICAg
ICAgIGRvdWJsZSBtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0gMDsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgp
ID49IGJsb2NrLT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVBy
ZWRlY2Vzc29ycysrOworICAgICAgICAgICAgICAgIG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVu
Y3lQcmVkZWNlc3NvcnMgPQorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1heChtYXhGcmVxdWVu
Y3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzLCBwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobnVtYmVyT2ZM
b3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycyA8IDIpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGhvaXN0aW5nVGFyZ2V0ID0g
aW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShibG9jaywgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1
ZW5jeVByZWRlY2Vzc29ycyk7CisgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+YXBwZW5kTmV3
PFZhbHVlPihwcm9jLCBKdW1wLCBibG9jayk7CisgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+
c2V0U3VjY2Vzc29ycyhGcmVxdWVudGVkQmxvY2soYmxvY2spKTsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpID49IGJsb2NrLT5mcmVxdWVu
Y3koKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNjZXNzb3IoYmxvY2ssIGhvaXN0
aW5nVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBob2lzdGluZ1RhcmdldC0+YWRkUHJlZGVjZXNz
b3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVQcmVkZWNlc3Nv
cihwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBibG9jay0+YWRkUHJl
ZGVjZXNzb3IoaG9pc3RpbmdUYXJnZXQpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBp
ZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRl
Q0ZHKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJyYW5jaGVzKCkKKyAgICB7CisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICAgICAg
ICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7CisgICAgICAgICAgICAgICAgc3dp
dGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAg
ICAgICAgICAgICAgICBjYXNlIENoZWNrOiB7CisgICAgICAgICAgICAgICAgICAgIFZhbHVlKiBw
cmVkaWNhdGUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMuYWRkKHByZWRpY2F0ZSwgVmVjdG9y
PFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVuZChWYWx1ZUluQmxvY2soYmxvY2ssIGlu
ZGV4KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gRWFjaCBibG9jayBjYW4gb25seSBoYXZl
IG9uZSAiYnJhbmNoIiwgc2luY2U6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgIC8vIDEpIFRoaXMgcmVkdW5kYW5jeSB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBm
aXhlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAg
QkIjZm9vOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhpcyByZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxy
ZWFkeSBiZWVuIGZpeGVkOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhA
cCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMykgVGhpcyByZWR1bmRhbmN5IGlz
IG5vdCB2YWxpZCBJUjoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBw
KQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAg
ICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDQpIFRoaXMgcmVkdW5kYW5jeSBpcyBu
b3QgdmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
IC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJyYW5jaChAcCkK
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gT2YgY291cnNlLCB0aGUgZmlyc3QgdHdv
IGFzc3VtcHRpb25zIGNvdWxkIGJlIHZpb2xhdGVkIGJlY2F1c2Ugb2YgYSBtaXNzZWQKKyAgICAg
ICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5LiBUaGlzIHBoYXNlIGlz
IHByZXBhcmVkIGZvciB0aGF0LgorICAgICAgICAgICAgICAgICAgICBtX2Jsb2Nrc1dpdGhCcmFu
Y2hlcy5hZGQoc3RkOjptYWtlX3BhaXIoYmxvY2ssIHByZWRpY2F0ZSkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICB2b2lkIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpCisgICAgeworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBpZiAoYmxv
Y2stPmxhc3QoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0gYmxvY2stPmxh
c3QoKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gaGFuZGxlU3Vj
Y2Vzc29yID0gWyZdIChCYXNpY0Jsb2NrKiBzdGFydCwgYm9vbCBwcmVkaWNhdGVWYWx1ZSkgewor
ICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycy0+Zm9yQWxsQmxvY2tzRG9taW5hdGVzQnkoCisg
ICAgICAgICAgICAgICAgICAgIHN0YXJ0LAorICAgICAgICAgICAgICAgICAgICBbJl0gKEJhc2lj
QmxvY2sqIGR1cGxpY2F0ZWRCbG9jaykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gSXQn
cyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBoYXZlIGNvbGxpc2lvbnMgaWYgYSBicmFuY2ggZG9t
aW5hdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbm90aGVyIGJyYW5jaCB3YXNu
J3QgZWxpbWluYXRlZCBieSBmb2xkUGF0aENvbnN0YW50cy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5hZGQoc3RkOjptYWtlX3BhaXIoZHVwbGljYXRl
ZEJsb2NrLCBwcmVkaWNhdGUpLCBwcmVkaWNhdGVWYWx1ZSk7CisgICAgICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaGFuZGxlU3Vj
Y2Vzc29yKGluc2VydGlvblBvaW50LmJsb2NrKCktPnN1Y2Nlc3NvckJsb2NrKDApLCB0cnVlKTsK
KyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3NvcihpbnNlcnRpb25Qb2ludC5ibG9jaygpLT5zdWNj
ZXNzb3JCbG9jaygxKSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y3JlYXRlVHJhY2VzQnlEb21pbmFudFJlZHVuZGFuY3koKQorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fcHJlZGljYXRlVG9CcmFuY2hlcykgeworICAgICAgICAgICAgVmFsdWUq
IHByZWRpY2F0ZSA9IGVudHJ5LmtleTsKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZUluQmxvY2s+
JiBicmFuY2hlcyA9IGVudHJ5LnZhbHVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3Ig
KFZhbHVlSW5CbG9jayBpbnNlcnRpb25Qb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGluc2VydGlvblBvaW50LnZhbHVlKCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZm9yIChWYWx1ZUluQmxvY2sgYnJhbmNoUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKGluc2VydGlvblBvaW50LmJs
b2NrLCBicmFuY2hQb2ludC5ibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRp
b25Qb2ludC5ibG9jayA9PSBicmFuY2hQb2ludC5ibG9jaykgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGluc2VydGlvblBvaW50LmluZGV4KCkgPiBicmFuY2hQb2ludC5pbmRleCgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Q
b2ludC5pbmRleCgpID09IGJyYW5jaFBvaW50LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlID0g
bV90cmFjZXMuYWRkKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnByZWRpY2F0ZSA9
IHByZWRpY2F0ZTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQg
PSBpbnNlcnRpb25Qb2ludDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YnJhbmNoUG9p
bnQgPSBicmFuY2hQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0ZWRC
cmFuY2hDb3N0ID0gaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFs
dWUoKSA9PSBicmFuY2hQb2ludC52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3RyYWNlLT5zcGFjZUNvc3QgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+
YmVuZWZpdCA9IGluc2VydGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+c3Bh
Y2VDb3N0ID0gYnJhbmNoUG9pbnQuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
dHJhY2UtPmJlbmVmaXQgPSBicmFuY2hQb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKSArIG1fdHJh
Y2UtPmluc2VydGVkQnJhbmNoQ29zdC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5z
ZXJ0aW9uUG9pbnQuYmxvY2soKSAhPSBicmFuY2hQb2ludC5ibG9jaygpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2hBbGwoYnJhbmNoUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3Jz
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCkKKyAg
ICB7CisgICAgICAgIFZlY3RvcjxUcmFjZSo+IHRyYWNlc1RvUHJvY2VzczsKKyAgICAgICAgZm9y
IChUcmFjZSogdHJhY2UgOiBtX3RyYWNlcykKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5h
cHBlbmQodHJhY2UpOworICAgICAgICB3aGlsZSAoVHJhY2UqIG9sZFRyYWNlID0gdHJhY2VzVG9Q
cm9jZXNzLnRha2VMYXN0KCkpIHsKKyAgICAgICAgICAgIGlmIChvbGRUcmFjZS0+aW5zZXJ0aW9u
UG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCkgPD0gb2xkVHJhY2UtPnByZWRpY2F0ZS0+b3duZXIt
PmZyZXF1ZW5jeSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdJbnNlcnRpb25Qb2ludEJsb2NrID0gb2xkVHJhY2Ut
Pmluc2VydGlvblBvaW50LmJsb2NrKCk7CisgICAgICAgICAgICB3aGlsZSAobmV3SW5zZXJ0aW9u
UG9pbnRCbG9rYy0+ZnJlcXVlbmN5KCkgPj0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2Nr
KCkpCisgICAgICAgICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9taW5hdG9y
cy0+aWRvbShuZXdJbnNlcnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhvbGRUcmFjZS0+cHJlZGljYXRlLT5vd25l
ciwgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jaykpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChuZXdJbnNlcnRpb25Qb2ludEJsb2NrID09IG9s
ZFRyYWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBIb2lzdGluZyB0YXJnZXRzIG11c3QgaGF2
ZSBqdW1wcyBhdCB0aGUgZW5kIG9mIHRoZW0gYmVjYXVzZSB3ZSBjcmVhdGVkIGhvaXN0aW5nCisg
ICAgICAgICAgICAvLyB0YXJnZXRzIHRoYXQgaGF2ZSBqdW1wcy4KKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUKG5ld0luc2VydGlvblBvaW50QmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVt
cCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdHJhY2UgPSBtX3RyYWNlcy5hZGQoKm9s
ZFRyYWNlKTsKKyAgICAgICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50ID0gVmFsdWVJbkJs
b2NrKAorICAgICAgICAgICAgICAgIG5ld0luc2VydGlvblBvaW50QmxvY2ssCisgICAgICAgICAg
ICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jay0+c2l6ZSgpIC0gMSk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogb2xkVHJhY2UtPmJsb2NrcykKKyAgICAgICAgICAgICAgICB3b3Jr
bGlzdC5wcmV0ZW5kVG9IYXZlU2VlbihibG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2hBbGwob2xkVHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCktPnByZWRl
Y2Vzc29ycygpKTsKKyAgICAgICAgICAgIGNsb3NlVHJhY2Uod29ya2xpc3QpOworICAgICAgICAg
ICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyYWNlc1RvUHJv
Y2Vzcy5hcHBlbmQobV90cmFjZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBj
bG9zZVRyYWNlKEJsb2NrV29ya2xpc3QmIHdvcmtsaXN0KQorICAgIHsKKyAgICAgICAgd2hpbGUg
KEJhc2ljQmxvY2sqIGJsb2NrIDogd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIGlmIChi
bG9jayA9PSBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygpKQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3RyYWNlLT5ibG9ja3MuYXBw
ZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fdHJh
Y2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdh
bnQgdG8gYWRkIHRoZSBlbmQgb2YgdGhpcyBibG9jay4gTm90ZSwgaWYgd2Ugc2VlIHRoaXMgYmxv
Y2ssCisgICAgICAgICAgICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBhbHJlYWR5IGlu
IHRoZSBibG9ja3Mgc2V0LiBUaGF0IG1lYW5zIHRoYXQgb2xkVHJhY2Ugd2FzIGEKKyAgICAgICAg
ICAgICAgICAvLyBhIGRvbWluYW50IHJlZHVuZGFuY3kgdHJhY2UgcmF0aGVyIHRoYW4gYSBob2lz
dGVkIHRyYWNlLiBJdCBhbHNvIG1lYW5zCisgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzIGJs
b2NrIGRvZXNuJ3QgaGF2ZSBhbnkgdW5hY2NvdW50ZWQtZm9yIGJyYW5jaGVzLgorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG1fdHJhY2UtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6
ZSgpIC0gKG1fdHJhY2UtPmJyYW5jaFBvaW50LmluZGV4KCkgKyAxKTsKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYg
KCFtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ss
IG1fdHJhY2UtPnByZWRpY2F0ZSkpKSB7CisgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VD
b3N0ICs9IGJsb2NrLT5zaXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGBpZmAgaXMg
bmVzdGVkIGJlY2F1c2UgaWYgYSBkdXBsaWNhdGVkIGJsb2NrICpkaWQqIGhhdmUgYQorICAgICAg
ICAgICAgICAgIC8vIGJyYW5jaCBmb3Igb3VyIHByZWRpY2F0ZSB0aGVuIGl0J3MgcHJvYmFibHkg
YmVjYXVzZSB3ZSBtaXNzZWQgYW4KKyAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb24gb3Bw
b3J0dW5pdHkgaW4gdGhlIGxhc3QgcmVkdWNlU3RyZW5ndGggcGFzcy4gVGhhdCBpcworICAgICAg
ICAgICAgICAgIC8vIG1vc3QgbGlrZWx5IHRvIGhhcHBlbiBiZWNhdXNlIHRoaXMgcmVkdW5kYW5j
eSB3YXMgcmV2ZWFsZWQgb25seQorICAgICAgICAgICAgICAgIC8vIGFmdGVyIHNvbWUgcGhhc2Ug
dGhhdCByYW4gYWZ0ZXIgcmVkdWNlU3RyZW5ndGgsIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBl
bGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy4gVGhlcmVmb3JlLCBhIGZ1dHVyZSBwYXNzIG9m
CisgICAgICAgICAgICAgICAgLy8gcmVkdWNlU3RyZW5ndGggaXMgdmVyeSBsaWtlbHkgdG8gcmVt
b3ZlIGEgZHVwbGljYXRlZCBicmFuY2ggZm9yCisgICAgICAgICAgICAgICAgLy8gb3VyIHByZWRp
Y2F0ZSB3aXRob3V0IG5lZWRpbmcgdG8gc3BlY2lhbGl6ZS4gVGhlcmVmb3JlLCB3ZSBkb24ndAor
ICAgICAgICAgICAgICAgIC8vIHdhbnQgdG8gY291bGQgaXQgYXMgYSBiZW5lZml0IGhlcmUuIEFs
c28sIHdlIGRvbid0IGR1cGxpY2F0ZQorICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgYmxv
Y2tzLCBzbyB3ZSB3b3VsZG4ndCBiZSBjcmVhdGluZyBhbnkgYmVuZWZpdCBhbnl3YXkuCisgICAg
ICAgICAgICAgICAgaWYgKG1fYmxvY2tzV2l0aEJyYW5jaGVzLmNvbnRhaW5zKHN0ZDo6bWFrZV9w
YWlyKGJsb2NrLCBtX3RyYWNlLT5wcmVkaWNhdGUoKSkpKQorICAgICAgICAgICAgICAgICAgICBt
X3RyYWNlLT5iZW5lZml0ICs9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+cHJlZGVjZXNzb3Jz
KCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2hvb3NlVHJhY2VPcmRlcigp
CisgICAgeworICAgICAgICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJhY2VzKSB7CisgICAgICAg
ICAgICAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoaXMgaGV1cmlzdGljIHlldC4K
KyAgICAgICAgICAgIGlmICh0cmFjZS0+YmVuZWZpdE92ZXJDb3N0KCkgPiAwLjIpCisgICAgICAg
ICAgICAgICAgbV90cmFjZXNJbk9yZGVyLmFwcGVuZCh0cmFjZSk7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdHJhY2VzSW5PcmRlci5iZWdp
bigpLCBtX3RyYWNlc0luT3JkZXIuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRyYWNlKiBsZWZ0
LCBUcmFjZSogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVz
Y2VuZGluZyBvcmRlciBvZiBiZW5lZml0LgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5i
ZW5lZml0T3ZlckNvc3QoKSA+IHJpZ2h0LT5iZW5lZml0T3ZlckNvc3QoKTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKyAgICAKKyAgICB2b2lkIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRy
YWNlcygpCisgICAgeworICAgICAgICBtX3RyYWNlc0luT3JkZXIucmVtb3ZlQWxsTWF0Y2hpbmco
CisgICAgICAgICAgICBbJl0gKFRyYWNlKiB0cmFjZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgaWYgKG1fYWZmZWN0ZWRCbG9ja3MuY29udGFpbnModHJhY2UtPmluc2VydGlvblBvaW50LmJs
b2NrKCkpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICBpZiAobV9hZmZlY3RlZEJsb2Nrcy5jb250YWlucyh0cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2so
KSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiB0cmFjZS0+YmxvY2tzKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+aW5zZXJ0aW9u
UG9pbnQuYmxvY2soKSk7CisgICAgICAgICAgICAgICAgbV9hZmZlY3RlZEJsb2Nrcy5hZGQodHJh
Y2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiB0cmFjZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgICAgICBtX2FmZmVjdGVk
QmxvY2tzLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMo
KQorICAgIHsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKKyAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29k
ZSgpID09IFBoaSAmJiBtX2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGJsb2NrKSkKKyAgICAgICAg
ICAgICAgICAgICAgdmFsdWVzVG9EZW1vdGUuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBp
ZiAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jayAmJiBtX2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5z
KGNoaWxkLT5vd25lcikpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5h
ZGQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICBkZW1vdGVWYWx1ZXMobV9wcm9jLCB2YWx1ZXNUb0RlbW90ZSk7CisgICAgfQorICAg
IAorICAgIHZvaWQgZHVwbGljYXRlVHJhY2VzKCkKKyAgICB7CisgICAgICAgIEJsb2NrSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgSW5kZXhNYXA8
QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBibG9ja01hcChtX3Byb2MuYmxvY2tzKCkuc2l6ZSgp
KTsKKyAgICAgICAgSW5kZXhNYXA8VmFsdWUqLCBWYWx1ZSo+IHZhbHVlTWFwKG1fcHJvYy52YWx1
ZXMoKS5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChtX3RyYWNlIDogbV90cmFjZXNJ
bk9yZGVyKSB7CisgICAgICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc1RvRHVwbGlj
YXRlOworICAgICAgICAgICAgYmxvY2tzVG9EdXBsaWNhdGUuYXBwZW5kKG1fdHJhY2UtPmJyYW5j
aFBvaW50LmJsb2NrKCkpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
dHJhY2UtPmJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrICE9IG1fdHJhY2Ut
PmJyYW5jaFBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrc1RvRHVwbGlj
YXRlLmFwcGVuZChibG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgICAgICBibG9ja3NUb0R1cGxpY2F0ZS5iZWdpbigp
LCBibG9ja3NUb0R1cGxpY2F0ZS5lbmQoKSwKKyAgICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxv
Y2sqIGxlZnQsIEJhc2ljQmxvY2sqIHJpZ2h0KSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGxlZnQtPmluZGV4KCkgPCByaWdodC0+aW5kZXgoKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgLy8gT3JkZXIgbWF0dGVycyEgV2UgdHJ5IHRvIGNyZWF0ZSBh
IENGRyB0aGF0IGRvZXNuJ3QgbG9vayBsaWtlIGdhcmJhZ2UuIFRoYXQncworICAgICAgICAgICAg
Ly8gcGFydGljdWxhcmx5IGltcG9ydGFudCBmb3IgdGhlIHBlcmZvcm1hbmNlIG9mIGxpbmVhciBz
Y2FuLiBJdCBkb2Vzbid0IG1hdHRlciBmb3IKKyAgICAgICAgICAgIC8vIGdyYXBoIGNvbG9yaW5n
IHRob3VnaC4gSXQgZGVmaW5pdGVseSBtYXR0ZXJzIGZvciBkZWJ1Z2dpbmcgdGhlIGNvbXBpbGVy
LgorICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2tCZWZvcmVJbnNlcnRpb25Qb2ludCA9IGJs
b2Nrc1RvRHVwbGljYXRlLmxhc3QoKTtlCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogYmxvY2tzVG9EdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBt
X2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihibG9jaywgbV90cmFj
ZS0+cHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9kdXBsaWNhdGVk
Rm9yUHJlZGljYXRlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgZHVw
bGljYXRlIHRoZSBlbHNlIGJsb2Nrcy4gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93CisgICAgICAg
ICAgICAgICAgICAgIC8vIG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZSB3b3JrcywgdGhpcyBjb3Vs
ZCBiZSB0aGUgdGhlbiBibG9jayBpZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gLSBUaGlzIGlz
IGRvbWluYXRlZCBieSAoYW5kIGR1cGxpY2F0ZWQgZm9yKSBhIGJyYW5jaCB0aGF0IGlzIGRvbWlu
YXRlZCBieSBvdXIKKyAgICAgICAgICAgICAgICAgICAgLy8gICBpbnNlcnRpb24gcG9pbnQsIGFu
ZCBhIGJyYW5jaCBkb21pbmF0ZWQgYnkgb3VyIGluc2VydGlvbiBwb2ludC4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gLSBPdXIgaW5zZXJ0aW9uIHBvaW50IGlzIGRvbWluYXRlZCBieSAoYW5kIGR1
cGxpY2F0ZWQgZm9yKSBhbm90aGVyIGJyYW5jaCBvbgorICAgICAgICAgICAgICAgICAgICAvLyAg
IG91ciBwcmVkaWNhdGUuCisgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiB0aGlzIGJsb2Nr
IGlzIGluIHRoZSB0aGVuIGFuZCBlbHNlIGNhc2Ugb2YgdGhlIHNhbWUgcHJlZGljYXRlLCB0aGVu
IGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGlzIHVucmVhY2hhYmxlLiBTbywgd2UgY2FuIGRv
IHdoYXRldmVyIHdlIHdhbnQgd2l0aCBpdC4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCppdGVy
KQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBibG9ja01hcFtibG9ja10gPSBibG9jazsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBwcm9n
cmFtIGZsb3cuIEdvdHRhIGtlZXAgdGhlIENGRyBzYW5lLgorICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0lu
c2VydGlvblNldDo6QmxvY2tJbnNlcnRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YmxvY2tCZWZvcmVJbnNlcnRpb25Qb2ludC0+aW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtX3Byb2MudGFrZUJsb2NrKGJsb2NrLT5pbmRleCgpKSkpOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPQorICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIoYmxvY2tCZWZvcmVJbnNlcnRpb25Qb2ludCwgYmxv
Y2stPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgICAgICBibG9ja01hcFtibG9ja10gPSBuZXdC
bG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gQ2xvbmUg
dGhlIHZhbHVlcy4gQmUgc3VyZSB0byBmb2xkIGJyYW5jaGVzIGFuZCBjaGVja3MgYWxvbmcgdGhl
IHdheS4KKyAgICAgICAgICAgIC8vIEZJWE1FCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICAgICAgbV9wcm9jLmludmFsaWRh
dGVDRkcoKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgRG9taW5h
dG9ycyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OworICAgIAorICAgIEhhc2hNYXA8VmFsdWUq
LCBWZWN0b3I8VmFsdWVJbkJsb2NrPj4gbV9wcmVkaWNhdGVUb0JyYW5jaGVzOworICAgIAorICAg
IEhhc2hTZXQ8c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBWYWx1ZSo+PiBtX2Jsb2Nrc1dpdGhCcmFu
Y2hlczsKKyAgICAKKyAgICAvLyBXZSBzYXkgdGhhdCBhIGJsb2NrIGlzIGR1cGxpY2F0ZWQgZm9y
IGEgYnJhbmNoIGlmIGl0J3MgZG9taW5hdGVkIGJ5IHRoZSBzdWNjZXNzb3Igb2Ygb25lIG9mCisg
ICAgLy8gdGhvc2UgYnJhbmNoZXMuIFRoZSBib29sIHZhbHVlIGlzIHRoZSBwcmVkaWNhdGUncyB2
YWx1ZSB3aGVuIHdlIGFyZSBpbiB0aGF0IGJsb2NrLgorICAgIEhhc2hNYXA8c3RkOjpwYWlyPEJh
c2ljQmxvY2sqLCBWYWx1ZSo+LCBib29sPiBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGU7CisgICAg
CisgICAgVHJhY2UqIG1fdHJhY2U7CisKKyAgICBzdHJ1Y3QgVHJhY2UgeworICAgICAgICBkb3Vi
bGUgYmVuZWZpdE92ZXJDb3N0KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU3Vw
ZXIgdmFsdWFibGU6CisgICAgICAgICAgICAvLyAxKSBQYWlyIG9mIGJyYW5jaGVzIHdpdGggdmVy
eSBsaXR0bGUgY29kZSB0byBkdXBsaWNhdGUgYmV0d2VlbiB0aGVtLgorICAgICAgICAgICAgLy8g
MikgQnJhbmNoIGluc2lkZSBvZiBzbWFsbCBsb29wLgorICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgIC8vIE5vdCB2YWx1YWJsZToKKyAgICAgICAgICAgIC8vIDMpIER1cGxpY2F0aW5nIGEgbGFy
Z2UgbmVzdGVkIGxvb3AgdG8gaG9pc3QgYW4gaW5uZXIgYnJhbmNoLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDEpLCB3ZSBleHBlY3Qgc3BhY2VDb3N0IHRvIGJl
ID4gMSBidXQgdGhlIGJlbmVmaXQgdG8gYmUgMS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAvLyBJbiBjYXNlIG9mICgyKSwgd2UgZXhwZWN0IHNwYWNlQ29zdCB0byBiZSA1LTIwIGJ1dCB0
aGUgYmVuZWZpdCB0byBiZSA5LgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNh
c2Ugb2YgKDMpLCB3ZSBleHBlY3Qgc3BhY2VDb3N0IHRvIGJlID4xMDAgYnV0IHRoZSBiZW5lZml0
IHRvIGJlID4xMDAuCisgICAgICAgICAgICByZXR1cm4gKGJlbmVmaXQgLSBpbnNlcnRlZEJyYW5j
aENvc3QpIC8gc3BhY2VDb3N0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBWYWx1ZSog
cHJlZGljYXRlOworICAgICAgICBWYWx1ZUluQmxvY2sgaW5zZXJ0aW9uUG9pbnQ7CisgICAgICAg
IFZhbHVlSW5CbG9jayBicmFuY2hQb2ludDsKKyAgICAgICAgZG91YmxlIGJlbmVmaXQgeyAwIH07
CisgICAgICAgIGRvdWJsZSBpbnNlcnRlZEJyYW5jaENvc3QgeyAwIH07CisgICAgICAgIGRvdWJs
ZSBzcGFjZUNvc3QgeyAwIH07CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzOyAv
LyBUaGUgbGlzdCBvZiBkdXBsaWNhdGVkIGJsb2NrcyBub3QgaW5jbHVkaW5nIHRoZSBicmFuY2hQ
b2ludC4KKyAgICB9OworICAgIAorICAgIEJhZzxUcmFjZT4gbV90cmFjZXM7CisgICAgVmVjdG9y
PFRyYWNlKj4gbV90cmFjZXNJbk9yZGVyOworICAgIAorICAgIEluZGV4U2V0PEJhc2ljQmxvY2sq
PiBtX2FmZmVjdGVkQmxvY2tzOworfTsKKworYm9vbCBzcGVjaWFsaXplQnJhbmNoZXMoUHJvY2Vk
dXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAic3BlY2lhbGl6
ZUJyYW5jaGVzIik7CisgICAgU3BlY2lhbGl6ZUJyYW5jaGVzIHNwZWNpYWxpemVCcmFuY2hlcyhw
cm9jKTsKKyAgICByZXR1cm4gc3BlY2lhbGl6ZUJyYW5jaGVzLnJ1bigpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5oCShub25l
eGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJl
OworCisvLyBEdXBsaWNhdGVzIGNvZGUgdG8gcmVtb3ZlIGJyYW5jaGVzLiBFYWNoIHBpZWNlIG9m
IGNvZGUgZ2V0cyBkdXBsaWNhdGVkIGF0IG1vc3Qgb25jZSwgc28gdGhlcmUKKy8vIGlzIG5vIGV4
cG9uZW50aWFsIGJsb3ctdXAuCisKK2Jvb2wgc3BlY2lhbGl6ZUJyYW5jaGVzKFByb2NlZHVyZSYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5CbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVJbkJsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgaWYgKCp0aGlzKQorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAobV9ibG9jayksICI6IiwgbV9pbmRleCwgIi0+IiwgdmFsdWUoKSk7CisgICAgZWxzZQorICAg
ICAgICBvdXQucHJpbnQoIm51bGwiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUluQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUluQmxvY2suaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUluQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBWYWx1ZUluQmxvY2sgeworcHVibGljOgorICAgIFZhbHVlSW5CbG9jaygpIHsgfQorICAg
IAorICAgIFZhbHVlSW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgIHsK
KyAgICB9CisgICAgCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgVmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jay0+YXQobV9pbmRleCk7IH0K
KyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVmFsdWVJbkJsb2NrJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAg
ICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICB9CisgICAgCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlSW5CbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFZh
bHVlSW5CbG9jaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpQdHJIYXNoPEJhc2ljQmxvY2sqPjo6aGFzaChtX2Jsb2NrKSArIG1faW5k
ZXg7CisgICAgfQorICAgIAorICAgIFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX2luZGV4LS07CisgICAgfQorICAgIAorICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICp0aGlzID09IFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OworfTsKKworc3RydWN0IFZhbHVlSW5C
bG9ja0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZhbHVlSW5CbG9jayYg
a2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3Qg
VmFsdWVJbkJsb2NrJiBhLCBjb25zdCBWYWx1ZUluQmxvY2smIGIpIHsgcmV0dXJuIGEgPT0gYjsg
fQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4geworICAgIHR5cGVkZWYg
SlNDOjpCMzo6VmFsdWVJbkJsb2NrSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIz
OjpWYWx1ZUluQmxvY2s+IDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpW
YWx1ZUluQmxvY2s+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBw
dWJsaWM6IAogICAgIC8vIExpa2UgZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcg
dGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBy
ZXNpemUoc2l6ZV90IG51bUJpdHMpOwogICAgIAorICAgIC8vIENsZWFycyB0aGUgc2V0IHdpdGhv
dXQgZnJlZWluZyBtZW1vcnkuIElmIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZXQgYW5kIGZyZWUg
bWVtb3J5LCB0aGVuCisgICAgLy8geW91IHdhbnQgKnRoaXMgPSBCaXRWZWN0b3IoKS4KICAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckFsbCgpOwogCiAgICAgYm9vbCBxdWlja0dldChz
aXplX3QgYml0KSBjb25zdApJbmRleDogU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZp
c2lvbiAyMzA5NzApCisrKyBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0y
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNjQsOCArNjQsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBzYXcoTm9k
ZSBub2RlKSB7IHJldHVybiBtX3NlZW4uY29udGFpbnMobm9kZSk7IH0KICAgICAKKyAgICBib29s
IHByZXRlbmRUb0hhdmVTZWVuKE5vZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVuLmFkZChub2RlKTsg
fQorICAgIAogICAgIGNvbnN0IFNldCYgc2VlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbjsgfQot
CisgICAgCiBwcml2YXRlOgogICAgIFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBt
X3N0YWNrOwpJbmRleDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3VyY2UvV1RG
L3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMiBAQCBwdWJsaWM6
CiAgICAgewogICAgICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRl
eCh2YWx1ZSkpOwogICAgIH0KKyAgICAKKyAgICAvLyBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0
aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBtZW1vcnkuCisgICAgdm9pZCByZW1vdmVBbGwoKQorICAg
IHsKKyAgICAgICAgbV9zZXQuY2xlYXJBbGwoKTsKKyAgICB9CiAKICAgICBib29sIGNvbnRhaW5z
KGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339038</attachid>
            <date>2018-04-27 16:40:44 -0700</date>
            <delta_ts>2018-04-27 19:23:41 -0700</delta_ts>
            <desc>close to written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>36626</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVk
Z2VzLmNwcAkocmV2aXNpb24gMjMwOTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCB2
b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgIH0KICAgICB9
CiAKLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZSgpOwotICAgIHByb2MuaW52YWxpZGF0ZUNGRygp
OworICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICBwcm9jLmludmFsaWRh
dGVDRkcoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIzMDk3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkz
LDcgKzkzLDYgQEAgVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQogICAgIHJl
dHVybiBtX3ZhbHVlcy5hZGQoV1RGTW92ZShjbG9uZSkpOwogfQogCi0KIFZhbHVlKiBQcm9jZWR1
cmU6OmFkZEludENvbnN0YW50KE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1
ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw4IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9
CiAgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tzW2luZGV4XS5nZXQoKTsgfQogICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiB0YWtlQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFdURk1v
dmUobV9ibG9ja3NbaW5kZXhdKTsgfQogCiAgICAgdHlwZWRlZiBXVEY6OkluZGV4ZWRDb250YWlu
ZXJJdGVyYXRvcjxQcm9jZWR1cmU+IGl0ZXJhdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTcGVj
aWFsaXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
U3BlY2lhbGl6ZUJyYW5jaGVzIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMoUHJv
Y2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2VzKCk7Cisg
ICAgICAgIGNyZWF0ZUhvaXN0aW5nVGFyZ2V0cygpOworICAgICAgICBtX2RvbWluYXRvcnMgPSAm
cHJvYy5kb21pbmF0b3JzKCk7CisgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7Cisg
ICAgICAgIGZpbmRCcmFuY2hlcygpOworICAgICAgICBmaW5kQmxvY2tzRHVwbGljYXRlZEZvclBy
ZWRpY2F0ZXMoKTsKKyAgICAgICAgY3JlYXRlVHJhY2VzQnlEb21pbmFudFJlZHVuZGFuY3koKTsK
KyAgICAgICAgY3JlYXRlVHJhY2VzQnlIb2lzdGluZygpOworICAgICAgICBjaG9vc2VUcmFjZU9y
ZGVyKCk7CisgICAgICAgIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpOworICAg
ICAgICBkZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpOworICAgICAgICBkdXBsaWNhdGVUcmFjZXMo
KTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlSG9pc3RpbmdUYXJnZXRz
KCkKKyAgICB7CisgICAgICAgIC8vIEFsbCBsb3dlci1mcmVxdWVuY3kgcHJlZGVjZXNzb3JzIG9m
IGEgYmxvY2sgc2hvdWxkIGp1bXAgdG8gdGhhdCBibG9jayB2aWEgYSBob2lzdGluZworICAgICAg
ICAvLyB0YXJnZXQgYmxvY2suIElmIHdlIGRvbid0IHVzZSB0aGVzZSBibG9ja3MsIHRoZXknbGwg
Z2V0IGNvbGxlY3RlZCBieSByZWR1Y2VTdHJlbmd0aC4KKyAgICAgICAgCisgICAgICAgIEJsb2Nr
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAgZG91YmxlIG1h
eEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZy
ZXF1ZW5jeSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzKys7
CisgICAgICAgICAgICAgICAgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29y
cyA9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVx
dWVuY3lQcmVkZWNlc3NvcnMsIHByZWRlY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZkxvd2VyRnJlcXVlbmN5
UHJlZGVjZXNzb3JzIDwgMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQmFzaWNCbG9jayogaG9pc3RpbmdUYXJnZXQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0QmVmb3JlKGJsb2NrLCBtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNz
b3JzKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5hcHBlbmROZXc8VmFsdWU+KHByb2Ms
IEp1bXAsIGJsb2NrKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5zZXRTdWNjZXNzb3Jz
KEZyZXF1ZW50ZWRCbG9jayhibG9jaykpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBw
cmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlm
IChwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZyZXF1ZW5jeSgpKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBwcmVkZWNlc3Nvci0+cmVwbGFjZVN1Y2Nlc3NvcihibG9jaywgaG9pc3RpbmdUYXJnZXQpOwor
ICAgICAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihwcmVkZWNlc3Nv
cik7CisgICAgICAgICAgICAgICAgYmxvY2stPnJlbW92ZVByZWRlY2Vzc29yKHByZWRlY2Vzc29y
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT5hZGRQcmVkZWNlc3Nvcihob2lz
dGluZ1RhcmdldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbnNlcnRpb25T
ZXQuZXhlY3V0ZSgpKQorICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVDRkcoKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBmaW5kQnJhbmNoZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZh
bHVlID0gYmxvY2stPmF0KGluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5v
cGNvZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgICAg
IGNhc2UgQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IHZh
bHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IG1fcHJlZGljYXRlVG9CcmFuY2hlcy5hZGQocHJlZGljYXRlLCBWZWN0b3I8VmFsdWUqPigpKS5p
dGVyYXRvci0+dmFsdWUuYXBwZW5kKFZhbHVlSW5CbG9jayhibG9jaywgaW5kZXgpKTsKKworICAg
ICAgICAgICAgICAgICAgICAvLyBFYWNoIGJsb2NrIGNhbiBvbmx5IGhhdmUgb25lICJicmFuY2gi
LCBzaW5jZToKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8g
MSkgVGhpcyByZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpeGVkOgorICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgICAgICAvLyAyKSBUaGlzIHJlZHVuZGFuY3kgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZml4
ZWQ6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJC
I2ZvbzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAg
ICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICAvLyAzKSBUaGlzIHJlZHVuZGFuY3kgaXMgbm90IHZhbGlkIElS
OgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNm
b286CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gNCkgVGhpcyByZWR1bmRhbmN5IGlzIG5vdCB2YWxpZCBJUjoK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9v
OgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZSBmaXJzdCB0d28gYXNzdW1wdGlvbnMg
Y291bGQgYmUgdmlvbGF0ZWQgYmVjYXVzZSBvZiBhIG1pc3NlZAorICAgICAgICAgICAgICAgICAg
ICAvLyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuIFRoaXMgcGhhc2UgaXMgcHJlcGFyZWQgZm9y
IHRoYXQuCisgICAgICAgICAgICAgICAgICAgIG1fYmxvY2tzV2l0aEJyYW5jaGVzLmFkZChzdGQ6
Om1ha2VfcGFpcihibG9jaywgcHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJs
b2Nrc0R1cGxpY2F0ZWRGb3JQcmVkaWNhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5v
cGNvZGUoKSAhPSBCcmFuY2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSBibG9jay0+bGFzdCgpLT5jaGlsZCgw
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBoYW5kbGVTdWNjZXNzb3IgPSBbJl0g
KEJhc2ljQmxvY2sqIHN0YXJ0LCBib29sIHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAg
ICAgbV9kb21pbmF0b3JzLT5mb3JBbGxCbG9ja3NEb21pbmF0ZXNCeSgKKyAgICAgICAgICAgICAg
ICAgICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogZHVwbGlj
YXRlZEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRo
YXQgdGhpcyB3aWxsIGhhdmUgY29sbGlzaW9ucyBpZiBhIGJyYW5jaCBkb21pbmF0ZWQgYnkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFub3RoZXIgYnJhbmNoIHdhc24ndCBlbGltaW5hdGVk
IGJ5IGZvbGRQYXRoQ29uc3RhbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kdXBsaWNh
dGVkRm9yUHJlZGljYXRlLmFkZChzdGQ6Om1ha2VfcGFpcihkdXBsaWNhdGVkQmxvY2ssIHByZWRp
Y2F0ZSksIHByZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3IoaW5zZXJ0
aW9uUG9pbnQuYmxvY2soKS0+c3VjY2Vzc29yQmxvY2soMCksIHRydWUpOworICAgICAgICAgICAg
aGFuZGxlU3VjY2Vzc29yKGluc2VydGlvblBvaW50LmJsb2NrKCktPnN1Y2Nlc3NvckJsb2NrKDEp
LCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNC
eURvbWluYW50UmVkdW5kYW5jeSgpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9wcmVkaWNhdGVUb0JyYW5jaGVzKSB7CisgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0g
ZW50cnkua2V5OworICAgICAgICAgICAgVmVjdG9yPFZhbHVlSW5CbG9jaz4mIGJyYW5jaGVzID0g
ZW50cnkudmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoVmFsdWVJbkJsb2Nr
IGluc2VydGlvblBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0
aW9uUG9pbnQudmFsdWUoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVl
SW5CbG9jayBicmFuY2hQb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghbV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoaW5zZXJ0aW9uUG9pbnQuYmxvY2ssIGJyYW5jaFBv
aW50LmJsb2NrKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydGlvblBvaW50LmJsb2Nr
ID09IGJyYW5jaFBvaW50LmJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5z
ZXJ0aW9uUG9pbnQuaW5kZXgoKSA+IGJyYW5jaFBvaW50LmluZGV4KCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBvaW50LmluZGV4KCkg
PT0gYnJhbmNoUG9pbnQuaW5kZXgoKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UgPSBtX3RyYWNlcy5hZGQo
KTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+cHJlZGljYXRlID0gcHJlZGljYXRlOwor
ICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludCA9IGluc2VydGlvblBv
aW50OworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5icmFuY2hQb2ludCA9IGJyYW5jaFBv
aW50OworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNlcnRlZEJyYW5jaENvc3QgPSBp
bnNlcnRpb25Qb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC52YWx1ZSgpID09IGJyYW5j
aFBvaW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnNwYWNl
Q29zdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5iZW5lZml0ID0gaW5z
ZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5zcGFjZUNvc3QgPSBicmFu
Y2hQb2ludC5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YmVuZWZp
dCA9IGJyYW5jaFBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpICsgbV90cmFjZS0+aW5zZXJ0ZWRC
cmFuY2hDb3N0LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2ludC5i
bG9jaygpICE9IGJyYW5jaFBvaW50LmJsb2NrKCkpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgICAgICAgICAgICAgICAgICAgICAgd29ya2xp
c3QucHVzaEFsbChicmFuY2hQb2ludC5ibG9jaygpLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBjbG9zZVRyYWNlKHdvcmtsaXN0KTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIGNyZWF0ZVRyYWNlc0J5SG9pc3RpbmcoKQorICAgIHsKKyAgICAgICAg
VmVjdG9yPFRyYWNlKj4gdHJhY2VzVG9Qcm9jZXNzOworICAgICAgICBmb3IgKFRyYWNlKiB0cmFj
ZSA6IG1fdHJhY2VzKQorICAgICAgICAgICAgdHJhY2VzVG9Qcm9jZXNzLmFwcGVuZCh0cmFjZSk7
CisgICAgICAgIHdoaWxlIChUcmFjZSogb2xkVHJhY2UgPSB0cmFjZXNUb1Byb2Nlc3MudGFrZUxh
c3QoKSkgeworICAgICAgICAgICAgaWYgKG9sZFRyYWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygp
LT5mcmVxdWVuY3koKSA8PSBvbGRUcmFjZS0+cHJlZGljYXRlLT5vd25lci0+ZnJlcXVlbmN5KCkp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIG5ld0luc2VydGlvblBvaW50QmxvY2sgPSBvbGRUcmFjZS0+aW5zZXJ0aW9uUG9p
bnQuYmxvY2soKTsKKyAgICAgICAgICAgIHdoaWxlIChuZXdJbnNlcnRpb25Qb2ludEJsb2tjLT5m
cmVxdWVuY3koKSA+PSBvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKSkKKyAgICAgICAg
ICAgICAgICBuZXdJbnNlcnRpb25Qb2ludEJsb2NrID0gbV9kb21pbmF0b3JzLT5pZG9tKG5ld0lu
c2VydGlvblBvaW50QmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fZG9t
aW5hdG9ycy0+ZG9taW5hdGVzKG9sZFRyYWNlLT5wcmVkaWNhdGUtPm93bmVyLCBuZXdJbnNlcnRp
b25Qb2ludEJsb2NrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgaWYgKG5ld0luc2VydGlvblBvaW50QmxvY2sgPT0gb2xkVHJhY2UtPmluc2Vy
dGlvblBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEhvaXN0aW5nIHRhcmdldHMgbXVzdCBoYXZlIGp1bXBzIGF0IHRo
ZSBlbmQgb2YgdGhlbSBiZWNhdXNlIHdlIGNyZWF0ZWQgaG9pc3RpbmcKKyAgICAgICAgICAgIC8v
IHRhcmdldHMgdGhhdCBoYXZlIGp1bXBzLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobmV3
SW5zZXJ0aW9uUG9pbnRCbG9jay0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbV90cmFjZSA9IG1fdHJhY2VzLmFkZCgqb2xkVHJhY2UpOworICAg
ICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBWYWx1ZUluQmxvY2soCisgICAgICAg
ICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jaywKKyAgICAgICAgICAgICAgICBuZXdJbnNl
cnRpb25Qb2ludEJsb2NrLT5zaXplKCkgLSAxKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBvbGRUcmFjZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnByZXRlbmRU
b0hhdmVTZWVuKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVz
aEFsbChvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3JzKCkpOwor
ICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7CisgICAgICAgICAgICBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgdHJhY2VzVG9Qcm9jZXNzLmFwcGVuZCht
X3RyYWNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNsb3NlVHJhY2UoQmxv
Y2tXb3JrbGlzdCYgd29ya2xpc3QpCisgICAgeworICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayog
YmxvY2sgOiB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fdHJh
Y2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdHJhY2UtPmJsb2Nrcy5hcHBlbmQoYmxvY2spOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV90cmFjZS0+YnJhbmNoUG9p
bnQuYmxvY2soKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2FudCB0byBhZGQgdGhl
IGVuZCBvZiB0aGlzIGJsb2NrLiBOb3RlLCBpZiB3ZSBzZWUgdGhpcyBibG9jaywKKyAgICAgICAg
ICAgICAgICAvLyBpdCdzIGJlY2F1c2UgaXQgd2Fzbid0IGFscmVhZHkgaW4gdGhlIGJsb2NrcyBz
ZXQuIFRoYXQgbWVhbnMgdGhhdCBvbGRUcmFjZSB3YXMgYQorICAgICAgICAgICAgICAgIC8vIGEg
ZG9taW5hbnQgcmVkdW5kYW5jeSB0cmFjZSByYXRoZXIgdGhhbiBhIGhvaXN0ZWQgdHJhY2UuIEl0
IGFsc28gbWVhbnMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHRoaXMgYmxvY2sgZG9lc24ndCBo
YXZlIGFueSB1bmFjY291bnRlZC1mb3IgYnJhbmNoZXMuCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ICs9IGJsb2NrLT5zaXplKCkgLSAobV90cmFj
ZS0+YnJhbmNoUG9pbnQuaW5kZXgoKSArIDEpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fZHVwbGljYXRl
ZEZvclByZWRpY2F0ZS5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihibG9jaywgbV90cmFjZS0+cHJl
ZGljYXRlKSkpIHsKKyAgICAgICAgICAgICAgICBtX3RyYWNlLT5zcGFjZUNvc3QgKz0gYmxvY2st
PnNpemUoKTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgYGlmYCBpcyBuZXN0ZWQgYmVjYXVz
ZSBpZiBhIGR1cGxpY2F0ZWQgYmxvY2sgKmRpZCogaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8g
YnJhbmNoIGZvciBvdXIgcHJlZGljYXRlIHRoZW4gaXQncyBwcm9iYWJseSBiZWNhdXNlIHdlIG1p
c3NlZCBhbgorICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSBpbiB0
aGUgbGFzdCByZWR1Y2VTdHJlbmd0aCBwYXNzLiBUaGF0IGlzCisgICAgICAgICAgICAgICAgLy8g
bW9zdCBsaWtlbHkgdG8gaGFwcGVuIGJlY2F1c2UgdGhpcyByZWR1bmRhbmN5IHdhcyByZXZlYWxl
ZCBvbmx5CisgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgc29tZSBwaGFzZSB0aGF0IHJhbiBhZnRl
ciByZWR1Y2VTdHJlbmd0aCwgbGlrZQorICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zLiBUaGVyZWZvcmUsIGEgZnV0dXJlIHBhc3Mgb2YKKyAgICAgICAgICAg
ICAgICAvLyByZWR1Y2VTdHJlbmd0aCBpcyB2ZXJ5IGxpa2VseSB0byByZW1vdmUgYSBkdXBsaWNh
dGVkIGJyYW5jaCBmb3IKKyAgICAgICAgICAgICAgICAvLyBvdXIgcHJlZGljYXRlIHdpdGhvdXQg
bmVlZGluZyB0byBzcGVjaWFsaXplLiBUaGVyZWZvcmUsIHdlIGRvbid0CisgICAgICAgICAgICAg
ICAgLy8gd2FudCB0byBjb3VsZCBpdCBhcyBhIGJlbmVmaXQgaGVyZS4gQWxzbywgd2UgZG9uJ3Qg
ZHVwbGljYXRlCisgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlZCBibG9ja3MsIHNvIHdlIHdv
dWxkbid0IGJlIGNyZWF0aW5nIGFueSBiZW5lZml0IGFueXdheS4KKyAgICAgICAgICAgICAgICBp
ZiAobV9ibG9ja3NXaXRoQnJhbmNoZXMuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1f
dHJhY2UtPnByZWRpY2F0ZSgpKSkpCisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPmJlbmVm
aXQgKz0gYmxvY2stPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjaG9vc2VUcmFjZU9yZGVyKCkKKyAgICB7CisgICAg
ICAgIGZvciAoVHJhY2UqIHRyYWNlIDogbV90cmFjZXMpIHsKKyAgICAgICAgICAgIC8vIFdlIGRv
bid0IGtub3cgYW55dGhpbmcgYWJvdXQgdGhpcyBoZXVyaXN0aWMgeWV0LgorICAgICAgICAgICAg
aWYgKHRyYWNlLT5iZW5lZml0T3ZlckNvc3QoKSA+IDAuMikKKyAgICAgICAgICAgICAgICBtX3Ry
YWNlc0luT3JkZXIuYXBwZW5kKHRyYWNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
c3RkOjpzb3J0KAorICAgICAgICAgICAgbV90cmFjZXNJbk9yZGVyLmJlZ2luKCksIG1fdHJhY2Vz
SW5PcmRlci5lbmQoKSwKKyAgICAgICAgICAgIFsmXSAoVHJhY2UqIGxlZnQsIFRyYWNlKiByaWdo
dCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgLy8gU29ydCBpbiBkZXNjZW5kaW5nIG9yZGVy
IG9mIGJlbmVmaXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPmJlbmVmaXRPdmVyQ29z
dCgpID4gcmlnaHQtPmJlbmVmaXRPdmVyQ29zdCgpOworICAgICAgICAgICAgfSk7CisgICAgfQor
ICAgIAorICAgIHZvaWQgc2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKCkKKyAgICB7
CisgICAgICAgIG1fdHJhY2VzSW5PcmRlci5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAg
IFsmXSAoVHJhY2UqIHRyYWNlKSAtPiBib29sIHsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZl
Y3RlZEJsb2Nrcy5jb250YWlucyh0cmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKSkpCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGlmIChtX2FmZmVj
dGVkQmxvY2tzLmNvbnRhaW5zKHRyYWNlLT5icmFuY2hQb2ludC5ibG9jaygpKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IHRyYWNlLT5ibG9ja3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWZm
ZWN0ZWRCbG9ja3MuY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG1fYWZmZWN0ZWRCbG9ja3MuYWRkKHRyYWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygp
KTsKKyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+YnJhbmNoUG9p
bnQuYmxvY2soKSk7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHRy
YWNlLT5ibG9ja3MpCisgICAgICAgICAgICAgICAgICAgIG1fYWZmZWN0ZWRCbG9ja3MuYWRkKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAg
ICB9CisgICAgCisgICAgdm9pZCBkZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpCisgICAgeworICAg
ICAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYm
IG1fYWZmZWN0ZWRCbG9ja3MuY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogY2hp
bGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQt
Pm93bmVyICE9IGJsb2NrICYmIG1fYWZmZWN0ZWRCbG9ja3MuY29udGFpbnMoY2hpbGQtPm93bmVy
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVtb3RlLmFkZCh2YWx1ZSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbW90
ZVZhbHVlcyhtX3Byb2MsIHZhbHVlc1RvRGVtb3RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
dXBsaWNhdGVUcmFjZXMoKQorICAgIHsKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0
aW9uU2V0KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwg
QmFzaWNCbG9jayo+IGJsb2NrTWFwKG1fcHJvYy5ibG9ja3MoKS5zaXplKCkpOworICAgICAgICBJ
bmRleE1hcDxWYWx1ZSosIFZhbHVlKj4gdmFsdWVNYXAobV9wcm9jLnZhbHVlcygpLnNpemUoKSk7
CisgICAgICAgIAorICAgICAgICBmb3IgKG1fdHJhY2UgOiBtX3RyYWNlc0luT3JkZXIpIHsKKyAg
ICAgICAgICAgIGF1dG8gYWRkQmxvY2tUb0R1cGxpY2F0ZSA9IFsmXSAoQmFzaWNCbG9jayogYmxv
Y2spIHsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdC5hcHBlbmQoYmxv
Y2spOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9ibG9ja3NUb0R1cGxpY2F0ZVNl
dC5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7Cisg
ICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRCbG9ja1RvRHVwbGlj
YXRlKG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpOworICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fdHJhY2UtPmJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGJsb2NrICE9IG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAg
ICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICAgICAgYmxvY2tzVG9EdXBs
aWNhdGUuYmVnaW4oKSwgYmxvY2tzVG9EdXBsaWNhdGUuZW5kKCksCisgICAgICAgICAgICAgICAg
WyZdIChCYXNpY0Jsb2NrKiBsZWZ0LCBCYXNpY0Jsb2NrKiByaWdodCkgLT4gYm9vbCB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZJWE1FOiBX
ZSdyZSBub3QgcmVhbGx5IGR1cGxpY2F0aW5nIHRoZSBicmFuY2hQb2ludCEgV2Ugd2FudCB0byBz
cGxpdCBpdCBhbmQgdGhlbgorICAgICAgICAgICAgLy8gZHVwbGljYXRlIHRoZSBmaXJzdCBwYXJ0
LiBUaGF0J3MgYSBsaXR0bGUgd2VpcmQgdG8gZml0IGludG8gdGhpcyBmcmFtZXdvcmsuIE1heWJl
IHdlCisgICAgICAgICAgICAvLyBzcGxpdCBpdCBiZWZvcmUgd2UgY3JlYXRlIHRoZSBkdXBsaWNh
dGUgc2V0IGFuZCBhbGwgdGhhdC4gV2UnbGwgYWxzbyB3YW50IGEgdmVyc2lvbiBvZgorICAgICAg
ICAgICAgLy8gc3BsaXRGb3J3YXJkKCkgdGhhdCBhZGRzIHRoZSBuZXcgYmxvY2sgYXQgYW4gaW5k
ZXggb2Ygb3VyIGNob2ljZSwgc28gdGhhdCB3ZSBhZGQgaXQKKyAgICAgICAgICAgIC8vIGF0IHRo
ZSBlbmQgb3Igc29tZXRoaW5nLgorCisgICAgICAgICAgICAvLyBPcmRlciBtYXR0ZXJzISBXZSB0
cnkgdG8gY3JlYXRlIGEgQ0ZHIHRoYXQgZG9lc24ndCBsb29rIGxpa2UgZ2FyYmFnZS4gVGhhdCdz
CisgICAgICAgICAgICAvLyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciB0aGUgcGVyZm9ybWFu
Y2Ugb2YgbGluZWFyIHNjYW4uIEl0IGRvZXNuJ3QgbWF0dGVyIGZvcgorICAgICAgICAgICAgLy8g
Z3JhcGggY29sb3JpbmcgdGhvdWdoLiBJdCBkZWZpbml0ZWx5IG1hdHRlcnMgZm9yIGRlYnVnZ2lu
ZyB0aGUgY29tcGlsZXIuCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9ja0JlZm9yZUluc2Vy
dGlvblBvaW50ID0gYmxvY2tzVG9EdXBsaWNhdGUubGFzdCgpO2UKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3NUb0R1cGxpY2F0ZSkgeworICAgICAgICAgICAgICAg
IGF1dG8gaXRlciA9IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5maW5kKHN0ZDo6bWFrZV9wYWly
KGJsb2NrLCBtX3RyYWNlLT5wcmVkaWNhdGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciAh
PSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgZG9uJ3QgZHVwbGljYXRlIHRoZW4vZWxzZSBibG9ja3MuIE5vdGUgdGhhdCBiZWNhdXNl
IG9mIGhvdworICAgICAgICAgICAgICAgICAgICAvLyBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUg
d29ya3MsIHRoaXMgY291bGQgYmUgYm90aCBhIHRoZW4gYW5kIGEgZWxzZSBibG9jayBpZjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gLSBUaGlzIGlzIGRvbWluYXRlZCBieSAoYW5kIGR1cGxpY2F0
ZWQgZm9yKSBhIGJyYW5jaCB0aGF0IGlzIGRvbWluYXRlZCBieSBvdXIKKyAgICAgICAgICAgICAg
ICAgICAgLy8gICBpbnNlcnRpb24gcG9pbnQsIGFuZCBhIGJyYW5jaCBkb21pbmF0ZWQgYnkgb3Vy
IGluc2VydGlvbiBwb2ludC4KKyAgICAgICAgICAgICAgICAgICAgLy8gLSBPdXIgaW5zZXJ0aW9u
IHBvaW50IGlzIGRvbWluYXRlZCBieSAoYW5kIGR1cGxpY2F0ZWQgZm9yKSBhbm90aGVyIGJyYW5j
aCBvbgorICAgICAgICAgICAgICAgICAgICAvLyAgIG91ciBwcmVkaWNhdGUuCisgICAgICAgICAg
ICAgICAgICAgIC8vIEJ1dCBpZiB0aGlzIGJsb2NrIGlzIGluIHRoZSB0aGVuIGFuZCBlbHNlIGNh
c2Ugb2YgdGhlIHNhbWUgcHJlZGljYXRlLCB0aGVuIGl0CisgICAgICAgICAgICAgICAgICAgIC8v
IGlzIHVucmVhY2hhYmxlLiBTbywgd2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgd2l0aCBpdC4K
KworICAgICAgICAgICAgICAgICAgICAvLyBXZSBsZWF2ZSB0aGVuIGJsb2NrcyB3aGVyZSB0aGV5
IGFyZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKCppdGVyKQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAvLyBNb3ZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIHByb2dyYW0gZmxvdy4g
R290dGEga2VlcCB0aGUgQ0ZHIHNhbmUuCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnRBZnRlcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0
OjpCbG9ja0luc2VydGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBibG9ja0JlZm9y
ZUluc2VydGlvblBvaW50LT5pbmRleCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
cHJvYy50YWtlQmxvY2soYmxvY2stPmluZGV4KCkpKSk7CisgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9CisgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRBZnRlcihibG9ja0JlZm9yZUluc2VydGlvblBvaW50LCBibG9jay0+ZnJlcXVl
bmN5KCkpOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5wcmVkZWNlc3NvcnMoKSA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+c3VjY2Vzc29ycygp
ID0gYmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgICAgICAgICBibG9ja01hcFtibG9ja10g
PSBuZXdCbG9jazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0
byBlbHNlQmxvY2tGb3IgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBCYXNpY0Jsb2NrKiB7
CisgICAgICAgICAgICAgICAgaWYgKEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrTWFwW2Jsb2Nr
XSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzVG9EdXBsaWNhdGUpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIGZvbGRWYWx1ZUZvciA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiB2
YWx1ZSwgYm9vbCBwcmVkaWNhdGVWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+Y2hpbGQoMCkgIT0gbV90cmFjZS0+cHJl
ZGljYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmxvY2ssIHByZWRpY2F0ZVZhbHVlID8gYmxvY2stPnRha2VuKCkgOiB0YWtlbi0+
bm90VGFrZW4oKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDApICE9IG1fdHJhY2UtPnByZWRpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZVZhbHVl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwor
ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHJld2lyZUJsb2NrRm9yID0gWyZdIChCYXNp
Y0Jsb2NrKiBibG9jaywgYm9vbCBwcmVkaWNhdGVWYWx1ZSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAocHJlZGljYXRlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRo
ZSBjdXJyZW50IHJld2lyaW5nIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgZm9yIHRoZW4g
YmxvY2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqJiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2UncmUgZHVwbGljYXRpbmcgY29kZSBkb21pbmF0ZWQgYnkg
dGhlIGluc2VydGlvbiBwb2ludC4gVGhlcmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gdGhlIHByZWRlY2Vzc29ycyBzaG91bGQgZWl0aGVyIGJlIHRoZSBpbnNlcnRpb24gcG9pbnQs
IG9yIGl0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBibG9jayBpbiB0
aGUgc2V0IG9mIGR1cGxpY2F0ZWQgYmxvY2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KHByZWRlY2Vzc29yID09IG1fdHJhY2UtPmluc2VydGlvblBvaW50LmJsb2NrKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYmxvY2tzVG9EdXBsaWNh
dGVTZXQuY29udGFpbnMocHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBy
ZWRlY2Vzc29yID0gZWxzZUJsb2NrRm9yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAobV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5jb250YWlucyhzdWNj
ZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvciA9IGVsc2VCbG9j
a0ZvcihzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+YWRkUHJlZGVlc3NvcihibG9jayk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5maW5k
KHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3RyYWNlLT5wcmVkaWNhdGUpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXRlciAhPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgcmV3aXJlQmxvY2tGb3IoYmxvY2ssICppdGVyKTsKKyAgICAgICAgICAg
ICAgICAgICAgZm9sZFZhbHVlRm9yKGJsb2NrLCBibG9jay0+bGFzdCgpLCAqaXRlcik7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBlbHNlQmxvY2sgPSBlbHNlQmxvY2tG
b3IoYmxvY2spOworICAgICAgICAgICAgICAgIHJld2lyZUJsb2NrRm9yKGJsb2NrLCB0cnVlKTsK
KyAgICAgICAgICAgICAgICByZXdpcmVCbG9ja0ZvcihlbHNlQmxvY2ssIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAg
ICAgICBWYWx1ZSogY2xvbmUgPSBtX3Byb2MuY2xvbmUodmFsdWUpOworICAgICAgICAgICAgICAg
ICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgPSBjbG9uZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9IHZhbHVlTWFwW2NoaWxkXSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IHJlcGxhY2VtZW50OworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9
IFZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlTWFwW3ZhbHVlXSA9IGNsb25lOwor
ICAgICAgICAgICAgICAgICAgICBlbHNlQmxvY2stPmFwcGVuZChjbG9uZSk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxvY2ssIHZhbHVl
LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFZhbHVlRm9yKGVsc2VCbG9jaywgY2xv
bmUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIFZhbHVlKiBpbnNlcnRpb25Qb2ludEp1bXAgPSBtX3RyYWNlLT5pbnNl
cnRpb25Qb2ludC5ibG9jaygpLT5sYXN0KCk7CisgICAgICAgICAgICBzd2l0Y2ggKGluc2VydGlv
blBvaW50SnVtcC0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBvaW50SnVtcC0+Y2hpbGQoMCkgPT0g
bV90cmFjZS0+cHJlZGljYXRlKTsKKyAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGRuJ3Qg
YmUgYW55dGhpbmcgbGVmdCB0byBkbyBpZiB3ZSdyZSBpbiB0aGlzIHNpdHVhdGlvbi4KKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgSnVt
cDoKKyAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludC5ibG9jaygpLT5yZXBs
YWNlTGFzdFdpdGhOZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIGluc2Vy
dGlvblBvaW50SnVtcC0+b3JpZ2luKCksIG1fdHJhY2UtPnByZWRpY2F0ZSk7CisgICAgICAgICAg
ICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+YXBwZW5kU3VjY2Vzc29yKAor
ICAgICAgICAgICAgICAgICAgICBlbHNlQmxvY2tGb3IobV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQu
YmxvY2soKS0+c3VjY2Vzc29yKDApKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0
LnRha2VMYXN0KCkpCisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5yZW1v
dmUoYmxvY2spOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKSkKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgfQor
ICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jOworICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9y
cyB7IG51bGxwdHIgfTsKKyAgICAKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlSW5C
bG9jaz4+IG1fcHJlZGljYXRlVG9CcmFuY2hlczsKKyAgICAKKyAgICBIYXNoU2V0PHN0ZDo6cGFp
cjxCYXNpY0Jsb2NrKiwgVmFsdWUqPj4gbV9ibG9ja3NXaXRoQnJhbmNoZXM7CisgICAgCisgICAg
Ly8gV2Ugc2F5IHRoYXQgYSBibG9jayBpcyBkdXBsaWNhdGVkIGZvciBhIGJyYW5jaCBpZiBpdCdz
IGRvbWluYXRlZCBieSB0aGUgc3VjY2Vzc29yIG9mIG9uZSBvZgorICAgIC8vIHRob3NlIGJyYW5j
aGVzLiBUaGUgYm9vbCB2YWx1ZSBpcyB0aGUgcHJlZGljYXRlJ3MgdmFsdWUgd2hlbiB3ZSBhcmUg
aW4gdGhhdCBibG9jay4KKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUq
PiwgYm9vbD4gbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlOworICAgIAorICAgIFRyYWNlKiBtX3Ry
YWNlOworCisgICAgc3RydWN0IFRyYWNlIHsKKyAgICAgICAgZG91YmxlIGJlbmVmaXRPdmVyQ29z
dCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN1cGVyIHZhbHVhYmxlOgorICAg
ICAgICAgICAgLy8gMSkgUGFpciBvZiBicmFuY2hlcyB3aXRoIHZlcnkgbGl0dGxlIGNvZGUgdG8g
ZHVwbGljYXRlIGJldHdlZW4gdGhlbS4KKyAgICAgICAgICAgIC8vIDIpIEJyYW5jaCBpbnNpZGUg
b2Ygc21hbGwgbG9vcC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgdmFsdWFi
bGU6CisgICAgICAgICAgICAvLyAzKSBEdXBsaWNhdGluZyBhIGxhcmdlIG5lc3RlZCBsb29wIHRv
IGhvaXN0IGFuIGlubmVyIGJyYW5jaC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJ
biBjYXNlIG9mICgxKSwgd2UgZXhwZWN0IHNwYWNlQ29zdCB0byBiZSA+IDEgYnV0IHRoZSBiZW5l
Zml0IHRvIGJlIDEuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAo
MiksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgNS0yMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUg
OS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mICgzKSwgd2UgZXhw
ZWN0IHNwYWNlQ29zdCB0byBiZSA+MTAwIGJ1dCB0aGUgYmVuZWZpdCB0byBiZSA+MTAwLgorICAg
ICAgICAgICAgcmV0dXJuIChiZW5lZml0IC0gaW5zZXJ0ZWRCcmFuY2hDb3N0KSAvIHNwYWNlQ29z
dDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFsdWUqIHByZWRpY2F0ZTsKKyAgICAg
ICAgVmFsdWVJbkJsb2NrIGluc2VydGlvblBvaW50OyAvLyBGSVhNRTogVGhpcyBzaG91bGQganVz
dCBiZSBhIEJhc2ljQmxvY2sqLCBzaW5jZSBpdCBhbHdheXMgcG9pbnRzIHRvIHRoZSBicmFuY2gu
CisgICAgICAgIFZhbHVlSW5CbG9jayBicmFuY2hQb2ludDsKKyAgICAgICAgZG91YmxlIGJlbmVm
aXQgeyAwIH07CisgICAgICAgIGRvdWJsZSBpbnNlcnRlZEJyYW5jaENvc3QgeyAwIH07CisgICAg
ICAgIGRvdWJsZSBzcGFjZUNvc3QgeyAwIH07CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4g
YmxvY2tzOyAvLyBUaGUgbGlzdCBvZiBkdXBsaWNhdGVkIGJsb2NrcyBub3QgaW5jbHVkaW5nIHRo
ZSBicmFuY2hQb2ludC4KKyAgICB9OworICAgIAorICAgIEJhZzxUcmFjZT4gbV90cmFjZXM7Cisg
ICAgVmVjdG9yPFRyYWNlKj4gbV90cmFjZXNJbk9yZGVyOworICAgIAorICAgIEluZGV4U2V0PEJh
c2ljQmxvY2sqPiBtX2FmZmVjdGVkQmxvY2tzOworICAgIAorICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3Q7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IG1f
YmxvY2tzVG9EdXBsaWNhdGVTZXQ7Cit9OworCitib29sIHNwZWNpYWxpemVCcmFuY2hlcyhQcm9j
ZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJzcGVjaWFs
aXplQnJhbmNoZXMiKTsKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMgc3BlY2lhbGl6ZUJyYW5jaGVz
KHByb2MpOworICAgIHJldHVybiBzcGVjaWFsaXplQnJhbmNoZXMucnVuKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKG5v
bmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5j
aGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CisKKy8vIER1cGxpY2F0ZXMgY29kZSB0byByZW1vdmUgYnJhbmNoZXMuIEVhY2ggcGllY2Ug
b2YgY29kZSBnZXRzIGR1cGxpY2F0ZWQgYXQgbW9zdCBvbmNlLCBzbyB0aGVyZQorLy8gaXMgbm8g
ZXhwb25lbnRpYWwgYmxvdy11cC4KKworYm9vbCBzcGVjaWFsaXplQnJhbmNoZXMoUHJvY2VkdXJl
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAko
bm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsdWVJbkJsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBpZiAoKnRoaXMpCisgICAgICAgIG91dC5wcmludChwb2ludGVy
RHVtcChtX2Jsb2NrKSwgIjoiLCBtX2luZGV4LCAiLT4iLCB2YWx1ZSgpKTsKKyAgICBlbHNlCisg
ICAgICAgIG91dC5wcmludCgibnVsbCIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlSW5CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlSW5CbG9jay5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFZhbHVlSW5CbG9jayB7CitwdWJsaWM6CisgICAgVmFsdWVJbkJsb2NrKCkgeyB9Cisg
ICAgCisgICAgVmFsdWVJbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2s7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
KyAgICBWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrLT5hdChtX2luZGV4KTsg
fQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBWYWx1ZUluQmxvY2smIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAg
ICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgIH0KKyAgICAKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVJbkJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0g
VmFsdWVJbkJsb2NrKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OlB0ckhhc2g8QmFzaWNCbG9jayo+OjpoYXNoKG1fYmxvY2spICsgbV9p
bmRleDsKKyAgICB9CisgICAgCisgICAgVmFsdWVJbkJsb2NrKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1faW5kZXgtLTsKKyAgICB9CisgICAgCisgICAg
Ym9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgPT0gVmFsdWVJbkJsb2NrKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07
CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07Cit9OworCitzdHJ1Y3QgVmFsdWVJ
bkJsb2NrSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVmFsdWVJbkJsb2Nr
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBWYWx1ZUluQmxvY2smIGEsIGNvbnN0IFZhbHVlSW5CbG9jayYgYikgeyByZXR1cm4gYSA9PSBi
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6VmFsdWVJbkJsb2NrPiB7CisgICAgdHlwZWRl
ZiBKU0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
QjM6OlZhbHVlSW5CbG9jaz4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6
OlZhbHVlSW5CbG9jaz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNa
ZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAyMzA5NzApCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMTEwLDYgKzExMCw4IEBA
IHB1YmxpYzogCiAgICAgLy8gTGlrZSBlbnN1cmVTaXplKCksIGJ1dCBzdXBwb3J0cyByZWR1Y2lu
ZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IHJlc2l6ZShzaXplX3QgbnVtQml0cyk7CiAgICAgCisgICAgLy8gQ2xlYXJzIHRoZSBzZXQgd2l0
aG91dCBmcmVlaW5nIG1lbW9yeS4gSWYgeW91IHdhbnQgdG8gY2xlYXIgdGhlIHNldCBhbmQgZnJl
ZSBtZW1vcnksIHRoZW4KKyAgICAvLyB5b3Ugd2FudCAqdGhpcyA9IEJpdFZlY3RvcigpLgogICAg
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyQWxsKCk7CiAKICAgICBib29sIHF1aWNrR2V0
KHNpemVfdCBiaXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHJl
dmlzaW9uIDIzMDk3MCkKKysrIFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE1LTIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC02NCw4ICs2NCwxMCBAQCBwdWJsaWM6CiAKICAgICBib29sIHNhdyhO
b2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5jb250YWlucyhub2RlKTsgfQogICAgIAorICAgIGJv
b2wgcHJldGVuZFRvSGF2ZVNlZW4oTm9kZSBub2RlKSB7IHJldHVybiBtX3NlZW4uYWRkKG5vZGUp
OyB9CisgICAgCiAgICAgY29uc3QgU2V0JiBzZWVuKCkgY29uc3QgeyByZXR1cm4gbV9zZWVuOyB9
Ci0KKyAgICAKIHByaXZhdGU6CiAgICAgU2V0IG1fc2VlbjsKICAgICBWZWN0b3I8Tm9kZSwgMTY+
IG1fc3RhY2s7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIzMDk3MCkKKysrIFNvdXJjZS9X
VEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDEyIEBAIHB1Ymxp
YzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRleEtleVR5cGU8VD46Omlu
ZGV4KHZhbHVlKSk7CiAgICAgfQorICAgIAorICAgIC8vIFJlbW92ZXMgZXZlcnl0aGluZyBmcm9t
IHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4KKyAgICB2b2lkIHJlbW92ZUFsbCgpCisg
ICAgeworICAgICAgICBtX3NldC5jbGVhckFsbCgpOworICAgIH0KIAogICAgIGJvb2wgY29udGFp
bnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339050</attachid>
            <date>2018-04-27 19:23:41 -0700</date>
            <delta_ts>2018-04-28 12:46:02 -0700</delta_ts>
            <desc>it might be written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>51375</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE4LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
YSBuZXcgcGhhc2UsIGNhbGxlZCBzcGVjaWFsaXplQnJhbmNoZXMsIHRoYXQgZHVwbGljYXRlcyBj
b2RlIGluIG9yZGVyIHRvIHJlbW92ZQorICAgICAgICBicmFuY2hlcy4gSXQncyBhIHN1cGVyc2V0
IG9mIGxvb3AgdW5zd2l0Y2hpbmcgdGhhdCB3aWxsIGFsc28gaGFuZGxlIHN0cmFpdCBwYXRocyBm
cm9tIG9uZQorICAgICAgICBicmFuY2ggdG8gYW5vdGhlci4gRm9yIGV4YW1wbGUsIGl0IHdpbGwg
Y29udmVydDoKKyAgICAgICAgCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgICBm
b28KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgIHRo
aW5neQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgICAgZnV6egorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1enoKKyAgICAgICAgCisgICAgICAgIGludG86Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICBmb28KKyAgICAg
ICAgICAgICAgICB0aGluZ3kKKyAgICAgICAgICAgICAgICBmdXp6CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJhcgorICAgICAgICAgICAgICAgIHRoaW5neQorICAgICAg
ICAgICAgICAgIGJ1enoKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByb3ZpZGVk
IHRoYXQgdGhlIGJlbmVmaXQgKGVsaW1pbmF0aW9uIG9mIHRoZSBzZWNvbmQgYnJhbmNoKSBvdXR3
ZWlnaHMgdGhlIGNvc3QgKHRoZSBzcGFjZQorICAgICAgICBjb3N0IG9mIHRoaW5neSBiZWluZyBl
bWl0dGVkIHR3aWNlKS4gVGhpcyB3aWxsIGRvIGEgTyhibG9ja3NeMykgc2VhcmNoIHRvIGZpbmQg
dGhlIG1vc3QKKyAgICAgICAgcHJvZml0YWJsZSBzdWNoIHNwZWNpYWxpemF0aW9ucyB0byBkbywg
YW5kIGl0IHdpbGwgb25seSBkbyB0aGUgbW9zdCBwcm9maXRhYmxlIG9mIHRob3NlLiBJdAorICAg
ICAgICB3aWxsIG5ldmVyIGR1cGxpY2F0ZSBjb2RlIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAK
KyAgICAgICAgVGhlIHNlYXJjaCBjb25zaWRlcnMgYWxsIGR1cGxpY2F0aW9uIHBhdGhzIChjYWxs
ZWQgdHJhY2VzIGluIHRoZSBwaGFzZSdzIGNvZGUpIHRoYXQgY2FuIGJlCisgICAgICAgIGZvcm1l
ZCBieToKKyAgICAgICAgCisgICAgICAgIC0gUGFpcnMgb2YgYnJhbmNoZXMgb24gdGhlIHNhbWUg
cHJlZGljYXRlLCB3aGVyZSBvbmUgYnJhbmNoIGRvbWluYXRlcyB0aGUgb3RoZXIuCisgICAgICAg
IAorICAgICAgICAtIEhvaXN0aW5nIGEgYnJhbmNoLCBvciBzb21lIG90aGVyIHRyYWNlLCBvdXQg
b2YgYSBsb29wLgorICAgICAgICAKKyAgICAgICAgSSBiZWxpZXZlIHRoYXQgaW4gdGhlIHdvcnN0
IGNhc2UsIHRoaXMgaXMgYSBPKGJsb2Nrc14zKSBzZWFyY2gsIGlmIHlvdSBjcmVhdGVkIGEgcHJv
Z3JhbQorICAgICAgICB3aG9zZSBsb29wIGRlcHRoIHdhcyBPKGJsb2NrcykgYW5kIHlvdSBoYWQg
TyhibG9ja3MpIGRpZmZlcmVudCB0cmFjZXMgaW5zaWRlIHRoZSBsb29wIGJvZHkuCisgICAgICAg
IFRoYXQncyBjZXJ0YWlubHkgcG9zc2libGUgYnV0IG5vdCB2ZXJ5IHByb2JhYmxlLgorICAgICAg
ICAKKyAgICAgICAgSSBoYXZlbid0IHRlc3RlZCB0aGlzIHlldC4gSXQncyBzdGlsbCBhIHdvcmsg
aW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQnJlYWtD
cml0aWNhbEVkZ2VzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmJyZWFrQ3JpdGljYWxFZGdlcyk6
CisgICAgICAgICogYjMvQjNGaXhTU0EuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToK
KyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRl
VG9BaXIpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjp0YWtlQmxvY2spOgorICAg
ICAgICAqIGIzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OlNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgIChK
U0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpTcGVj
aWFsaXplQnJhbmNoZXM6OmNyZWF0ZUhvaXN0aW5nVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkIz
OjpTcGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCcmFuY2hlcyk6CisgICAgICAgIChKU0M6OkIzOjpT
cGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OmNyZWF0ZVRyYWNlc0J5RG9taW5h
bnRSZWR1bmRhbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6Y3Jl
YXRlVHJhY2VzQnlIb2lzdGluZyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNo
ZXM6OmNsb3NlVHJhY2UpOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpj
aG9vc2VUcmFjZU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6
c2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OlNw
ZWNpYWxpemVCcmFuY2hlczo6ZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpkdXBsaWNhdGVUcmFjZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpUcmFjZTo6YmVuZWZpdE92ZXJDb3N0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OnNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgICogYjMvQjNT
cGVjaWFsaXplQnJhbmNoZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2su
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUluQmxvY2s6OlZhbHVlSW5CbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUlu
QmxvY2s6OmJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6aW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjp2YWx1ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Om9wZXJhdG9yPT0gY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUluQmxvY2s6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVJbkJsb2NrOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZUluQmxvY2tIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5C
bG9ja0hhc2g6OmVxdWFsKToKKwogMjAxOC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtBUk02NF1bTGludXhdIEFkZCBjb2xsZWN0
Q1BVRmVhdHVyZXMgdXNpbmcgYXV4aWxpYXJ5IHZlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDcgQEAgYjMvQjNSZWR1Y2VE
b3VibGVUb0Zsb2F0LmNwcAogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKIGIzL0IzU1NBQ2FsY3Vs
YXRvci5jcHAKIGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKK2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVz
LmNwcAogYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiBiMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKQEAgLTE2NSw2ICsxNjYsNyBAQCBiMy9C
M1Vwc2lsb25WYWx1ZS5jcHAKIGIzL0IzVXNlQ291bnRzLmNwcAogYjMvQjNWYWxpZGF0ZS5jcHAK
IGIzL0IzVmFsdWUuY3BwCitiMy9CM1ZhbHVlSW5CbG9jay5jcHAKIGIzL0IzVmFsdWVLZXkuY3Bw
CiBiMy9CM1ZhbHVlUmVwLmNwcAogYjMvQjNWYXJpYWJsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjk1LDYgKzY5NSw4IEBACiAJCTBGRjRCNEM3MUU4ODkzQzUwMERCQkU4NiAvKiBBaXJD
RkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRC
NEM2MUU4ODkzQkYwMERCQkU4NiAvKiBBaXJDRkcuaCAqLzsgfTsKIAkJMEZGNEI0Q0IxRTg4OUQ3
RTAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNEI0QzkxRTg4OUQ3ODAwREJCRTg2IC8qIEIzVmFy
aWFibGVMaXZlbmVzcy5oICovOyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkY2OEMxRDIw
OTQwRUJDMDBGQzVEREMgLyogQjNTcGVjaWFsaXplQnJhbmNoZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovOyB9OworCQkwRkY2OEMxRTIwOTQwRUJGMDBGQzVE
REMgLyogQjNWYWx1ZUluQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjY4QzFCMjA5NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVlSW5CbG9jay5o
ICovOyB9OwogCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVB
M0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQ
cm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUI5
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OTUxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI5NjEsNiArMjk2MywxMCBAQAogCQkwRkY0QjRDOTFFODg5RDc4MDBE
QkJFODYgLyogQjNWYXJpYWJsZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFyaWFibGVMaXZlbmVzcy5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZUxpdmVuZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZVdoaXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzE5MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxp
emVCcmFuY2hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nw
ZWNpYWxpemVCcmFuY2hlcy5jcHA7IHBhdGggPSBiMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1NwZWNpYWxpemVCcmFuY2hlcy5oOyBwYXRoID0gYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGNjhDMUIyMDk0MEVCNzAwRkM1RERD
IC8qIEIzVmFsdWVJbkJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
VmFsdWVJbkJsb2NrLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5CbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY2OEMxQzIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUluQmxv
Y2suY3BwOyBwYXRoID0gYjMvQjNWYWx1ZUluQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY3MTY4QTE1QTNCMjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlPZmZzZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTMxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE5OCw2ICs1MjA0LDggQEAKIAkJCQkwRkVDODRF
QTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRF
QjFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggKi8sCiAJCQkJMEYyQkJEOTEx
QzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRjY4QzE5
MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAgKi8sCisJCQkJMEZG
NjhDMUEyMDk0MEVCNzAwRkM1RERDIC8qIEIzU3BlY2lhbGl6ZUJyYW5jaGVzLmggKi8sCiAJCQkJ
MEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgKi8sCiAJCQkJ
MEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5oICovLAogCQkJCTBG
MzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAg
Ki8sCkBAIC01MjI2LDYgKzUyMzQsOCBAQAogCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggKi8sCiAJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8s
CisJCQkJMEZGNjhDMUMyMDk0MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmNwcCAqLywK
KwkJCQkwRkY2OEMxQjIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxvY2suaCAqLywKIAkJ
CQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQkw
RjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgKi8sCiAJCQkJMEYzMzhF
MDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLywKQEAgLTg2ODgsNiArODY5OCw3
IEBACiAJCQkJRkVCNThDMTUxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5OEQwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5z
dGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBF
cnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGNjhDMUUyMDk0MEVCRjAwRkM1
RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxQjFCREEw
OEQxMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEFEOTEwQzFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3MzQxRDIxREMwMkUyRTAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkzNTYsNiArOTM2Nyw3IEBACiAJCQkJQTUwM0ZBMjIxODhFRkY2ODAwMTEw
RjE0IC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTI2
MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3MzQxQ0UxREMwMkQ3OTAwQUEyOUJBIC8qIFNjcmlwdEV4ZWN1dGFibGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRjY4QzFEMjA5NDBFQkMwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFu
Y2hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VBRTdEN0I4ODlCNDc3QkE5M0FCQTZDIC8qIFNj
cmlwdEZldGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjAxQzFFMUY4RTgyNEMwMDc2QTAz
MiAvKiBTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0E2
MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCcmVha0NyaXRpY2FsRWRn
ZXMuY3BwCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
cmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHZv
aWQgYnJlYWtDcml0aWNhbEVkZ2VzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgfQogICAgIH0K
IAotICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7Ci0gICAgcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7
CisgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgIHByb2MuaW52YWxpZGF0
ZUNGRygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw2ICsxNzIs
NyBAQCB2b2lkIGZpeFNTQUdsb2JhbGx5KFByb2NlZHVyZSYgcHJvYykKICAgICBUaW1pbmdTY29w
ZSB0aW1pbmdTY29wZSgiZml4U1NBOiBjb252ZXJ0Iik7CiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKICAgICBJbmRleFNwYXJzZVNldDxLZXlWYWx1ZVBhaXI8dW5zaWduZWQs
IFZhbHVlKj4+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4U2V0
PFZhbHVlKj4gdmFsdWVzVG9EZWxldGU7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKICAgICAg
ICAgCkBAIC0yMDcsNiArMjA4LDcgQEAgdm9pZCBmaXhTU0FHbG9iYWxseShQcm9jZWR1cmUmIHBy
b2MpCiAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+
dmFyaWFibGUoKTsKIAogICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KGVuc3VyZU1hcHBpbmcodmFyaWFibGUsIHZhbHVlSW5kZXgsIHZhbHVlLT5vcmlnaW4oKSkpOwor
ICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVsZXRlLmFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yNDYsNiArMjQ4
LDE5IEBAIHZvaWQgZml4U1NBR2xvYmFsbHkoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBp
c24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBsZWF2ZXMgdGhlIElSIG5pY2UgYW5kIHRp
ZHksIHdoaWNoIGlzIHBhcnRpY3VsYXJseQorICAgIC8vIHVzZWZ1bCBmb3IgcGhhc2VzIHRoYXQg
ZG8gc2l6ZSBlc3RpbWF0ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsK
KyAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWVz
VG9EZWxldGUuY29udGFpbnModmFsdWUpICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBOb3ApCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBwcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAogICAgIGlmIChCM0ZpeFNTQUludGVybmFs
Ojp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIFNTQSBjb252ZXJzaW9uOlxu
Iik7CkBAIC0zMjQsNiArMzM5LDkgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogewog
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiZml4U1NBIik7CiAKKyAgICBpZiAocHJv
Yy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICAvLyBMb3RzIG9mIHZhcmlhYmxlcyBoYXZlIHRyaXZpYWwgbG9jYWwgbGl2ZW5lc3MuIFdlIGNh
biBhbGxvY2F0ZSB0aG9zZSB3aXRob3V0IGFueQogICAgIC8vIHRyb3VibGUuCiAgICAgZml4U1NB
TG9jYWxseShwcm9jKTsKQEAgLTMzNiw3ICszNTQsNiBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUm
IHByb2MpCiAgICAgaWYgKHByb2MudmFyaWFibGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgLy8gV2Uga25vdyB0aGF0IHdlIGhhdmUgdmFyaWFibGVzIHRv
IG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBicmVha0NyaXRpY2FsRWRnZXMocHJvYyk7
CiAKICAgICBmaXhTU0FHbG9iYWxseShwcm9jKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAog
I2luY2x1ZGUgIkIzUHVyZUNTRS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlRG91YmxlVG9GbG9hdC5o
IgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKKyNpbmNsdWRlICJCM1NwZWNpYWxpemVC
cmFuY2hlcy5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlk
YXRlLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTkwLDYgKzkxLDggQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgICAgICBmb2xkUGF0
aENvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUp
OwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CisgICAgICAgIHNwZWNpYWxpemVC
cmFuY2hlcyhwcm9jZWR1cmUpOworICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAgICAgICAg
ZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7CiAg
ICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDYgQEAgVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQogICAgIHJldHVy
biBtX3ZhbHVlcy5hZGQoV1RGTW92ZShjbG9uZSkpOwogfQogCi0KIFZhbHVlKiBQcm9jZWR1cmU6
OmFkZEludENvbnN0YW50KE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CiAg
ICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tz
W2luZGV4XS5nZXQoKTsgfQogICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPiB0YWtlQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFdURk1vdmUo
bV9ibG9ja3NbaW5kZXhdKTsgfQogCiAgICAgdHlwZWRlZiBXVEY6OkluZGV4ZWRDb250YWluZXJJ
dGVyYXRvcjxQcm9jZWR1cmU+IGl0ZXJhdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTcGVjaWFs
aXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2NrLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3Bl
Y2lhbGl6ZUJyYW5jaGVzIHsKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMoUHJvY2Vk
dXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgYnJlYWtDcml0aWNhbEVkZ2VzKCk7CisgICAg
ICAgIGNyZWF0ZUhvaXN0aW5nVGFyZ2V0cygpOworICAgICAgICBtX2RvbWluYXRvcnMgPSAmcHJv
Yy5kb21pbmF0b3JzKCk7CisgICAgICAgIG1fcHJvYy5yZXNldFZhbHVlT3duZXJzKCk7CisgICAg
ICAgIGZpbmRCcmFuY2hlcygpOworICAgICAgICBmaW5kQmxvY2tzRHVwbGljYXRlZEZvclByZWRp
Y2F0ZXMoKTsKKyAgICAgICAgY3JlYXRlVHJhY2VzQnlEb21pbmFudFJlZHVuZGFuY3koKTsKKyAg
ICAgICAgY3JlYXRlVHJhY2VzQnlIb2lzdGluZygpOworICAgICAgICBjaG9vc2VUcmFjZU9yZGVy
KCk7CisgICAgICAgIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpOworICAgICAg
ICBkZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpOworICAgICAgICBkdXBsaWNhdGVUcmFjZXMoKTsK
KyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHZvaWQgY3JlYXRlSG9pc3RpbmdUYXJnZXRzKCkK
KyAgICB7CisgICAgICAgIC8vIEFsbCBsb3dlci1mcmVxdWVuY3kgcHJlZGVjZXNzb3JzIG9mIGEg
YmxvY2sgc2hvdWxkIGp1bXAgdG8gdGhhdCBibG9jayB2aWEgYSBob2lzdGluZworICAgICAgICAv
LyB0YXJnZXQgYmxvY2suIElmIHdlIGRvbid0IHVzZSB0aGVzZSBibG9ja3MsIHRoZXknbGwgZ2V0
IGNvbGxlY3RlZCBieSByZWR1Y2VTdHJlbmd0aC4KKyAgICAgICAgCisgICAgICAgIEJsb2NrSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJlck9m
TG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAgZG91YmxlIG1heEZy
ZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZyZXF1
ZW5jeSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzKys7Cisg
ICAgICAgICAgICAgICAgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycyA9
CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVu
Y3lQcmVkZWNlc3NvcnMsIHByZWRlY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJl
ZGVjZXNzb3JzIDwgMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQmFzaWNCbG9jayogaG9pc3RpbmdUYXJnZXQgPSBpbnNlcnRpb25TZXQuaW5z
ZXJ0QmVmb3JlKGJsb2NrLCBtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3Jz
KTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5hcHBlbmROZXc8VmFsdWU+KHByb2MsIEp1
bXAsIGJsb2NrKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5zZXRTdWNjZXNzb3JzKEZy
ZXF1ZW50ZWRCbG9jayhibG9jaykpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmIChw
cmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZyZXF1ZW5jeSgpKQorICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBw
cmVkZWNlc3Nvci0+cmVwbGFjZVN1Y2Nlc3NvcihibG9jaywgaG9pc3RpbmdUYXJnZXQpOworICAg
ICAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7
CisgICAgICAgICAgICAgICAgYmxvY2stPnJlbW92ZVByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJsb2NrLT5hZGRQcmVkZWNlc3Nvcihob2lzdGlu
Z1RhcmdldCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbnNlcnRpb25TZXQu
ZXhlY3V0ZSgpKQorICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVDRkcoKTsKKyAgICB9Cisg
ICAgCisgICAgdm9pZCBmaW5kQnJhbmNoZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gYmxvY2stPmF0KGluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNv
ZGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgICAgIGNh
c2UgQ2hlY2s6IHsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IHZhbHVl
LT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1f
cHJlZGljYXRlVG9CcmFuY2hlcy5hZGQocHJlZGljYXRlLCBWZWN0b3I8VmFsdWUqPigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKFZhbHVlSW5CbG9jayhibG9jaywgaW5kZXgpKTsKKworICAgICAg
ICAgICAgICAgICAgICAvLyBFYWNoIGJsb2NrIGNhbiBvbmx5IGhhdmUgb25lICJicmFuY2giLCBz
aW5jZToKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMSkg
VGhpcyByZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpeGVkOgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAg
ICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8g
ICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAvLyAyKSBUaGlzIHJlZHVuZGFuY3kgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQ6
CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2Zv
bzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyAzKSBUaGlzIHJlZHVuZGFuY3kgaXMgbm90IHZhbGlkIElSOgor
ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286
CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gNCkgVGhpcyByZWR1bmRhbmN5IGlzIG5vdCB2YWxpZCBJUjoKKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgor
ICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZSBmaXJzdCB0d28gYXNzdW1wdGlvbnMgY291
bGQgYmUgdmlvbGF0ZWQgYmVjYXVzZSBvZiBhIG1pc3NlZAorICAgICAgICAgICAgICAgICAgICAv
LyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkuIFRoaXMgcGhhc2UgaXMgcHJlcGFyZWQgZm9yIHRo
YXQuCisgICAgICAgICAgICAgICAgICAgIG1fYmxvY2tzV2l0aEJyYW5jaGVzLmFkZChzdGQ6Om1h
a2VfcGFpcihibG9jaywgcHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJsb2Nr
c0R1cGxpY2F0ZWRGb3JQcmVkaWNhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5vcGNv
ZGUoKSAhPSBCcmFuY2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSBibG9jay0+bGFzdCgpLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBoYW5kbGVTdWNjZXNzb3IgPSBbJl0gKEJh
c2ljQmxvY2sqIHN0YXJ0LCBib29sIHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAg
bV9kb21pbmF0b3JzLT5mb3JBbGxCbG9ja3NEb21pbmF0ZXNCeSgKKyAgICAgICAgICAgICAgICAg
ICAgc3RhcnQsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogZHVwbGljYXRl
ZEJsb2NrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQg
dGhpcyB3aWxsIGhhdmUgY29sbGlzaW9ucyBpZiBhIGJyYW5jaCBkb21pbmF0ZWQgYnkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGFub3RoZXIgYnJhbmNoIHdhc24ndCBlbGltaW5hdGVkIGJ5
IGZvbGRQYXRoQ29uc3RhbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kdXBsaWNhdGVk
Rm9yUHJlZGljYXRlLmFkZChzdGQ6Om1ha2VfcGFpcihkdXBsaWNhdGVkQmxvY2ssIHByZWRpY2F0
ZSksIHByZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9OworICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3IoaW5zZXJ0aW9u
UG9pbnQuYmxvY2soKS0+c3VjY2Vzc29yQmxvY2soMCksIHRydWUpOworICAgICAgICAgICAgaGFu
ZGxlU3VjY2Vzc29yKGluc2VydGlvblBvaW50LmJsb2NrKCktPnN1Y2Nlc3NvckJsb2NrKDEpLCBm
YWxzZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNCeURv
bWluYW50UmVkdW5kYW5jeSgpCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9w
cmVkaWNhdGVUb0JyYW5jaGVzKSB7CisgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0gZW50
cnkua2V5OworICAgICAgICAgICAgVmVjdG9yPFZhbHVlSW5CbG9jaz4mIGJyYW5jaGVzID0gZW50
cnkudmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAoVmFsdWVJbkJsb2NrIGlu
c2VydGlvblBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9u
UG9pbnQudmFsdWUoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlSW5C
bG9jayBicmFuY2hQb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
bV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoaW5zZXJ0aW9uUG9pbnQuYmxvY2soKSwgYnJhbmNoUG9p
bnQuYmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC5ibG9j
aygpID09IGJyYW5jaFBvaW50LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChpbnNlcnRpb25Qb2ludC5pbmRleCgpID4gYnJhbmNoUG9pbnQuaW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnQuaW5k
ZXgoKSA9PSBicmFuY2hQb2ludC5pbmRleCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZSA9IG1fdHJhY2Vz
LmFkZCgpOworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5wcmVkaWNhdGUgPSBwcmVkaWNh
dGU7CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50ID0gaW5zZXJ0
aW9uUG9pbnQuYmxvY2soKTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+YnJhbmNoUG9p
bnQgPSBicmFuY2hQb2ludDsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0ZWRC
cmFuY2hDb3N0ID0gaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFs
dWUoKSA9PSBicmFuY2hQb2ludC52YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBt
X3RyYWNlLT5zcGFjZUNvc3QgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+
YmVuZWZpdCA9IGluc2VydGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+c3Bh
Y2VDb3N0ID0gYnJhbmNoUG9pbnQuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
dHJhY2UtPmJlbmVmaXQgPSBicmFuY2hQb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKSArIG1fdHJh
Y2UtPmluc2VydGVkQnJhbmNoQ29zdC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5z
ZXJ0aW9uUG9pbnQuYmxvY2soKSAhPSBicmFuY2hQb2ludC5ibG9jaygpKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2hBbGwoYnJhbmNoUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3Jz
KCkpOworICAgICAgICAgICAgICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCkKKyAg
ICB7CisgICAgICAgIFZlY3RvcjxUcmFjZSo+IHRyYWNlc1RvUHJvY2VzczsKKyAgICAgICAgZm9y
IChUcmFjZSogdHJhY2UgOiBtX3RyYWNlcykKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5h
cHBlbmQodHJhY2UpOworICAgICAgICB3aGlsZSAoVHJhY2UqIG9sZFRyYWNlID0gdHJhY2VzVG9Q
cm9jZXNzLnRha2VMYXN0KCkpIHsKKyAgICAgICAgICAgIGlmIChvbGRUcmFjZS0+aW5zZXJ0aW9u
UG9pbnQtPmZyZXF1ZW5jeSgpIDw9IG9sZFRyYWNlLT5wcmVkaWNhdGUtPm93bmVyLT5mcmVxdWVu
Y3koKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgQmFzaWNCbG9jayogbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG9sZFRyYWNlLT5pbnNlcnRp
b25Qb2ludDsKKyAgICAgICAgICAgIHdoaWxlIChuZXdJbnNlcnRpb25Qb2ludEJsb2NrLT5mcmVx
dWVuY3koKSA+PSBvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgbmV3
SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9taW5hdG9ycy0+aWRvbShuZXdJbnNlcnRpb25Qb2lu
dEJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMtPmRv
bWluYXRlcyhvbGRUcmFjZS0+cHJlZGljYXRlLT5vd25lciwgbmV3SW5zZXJ0aW9uUG9pbnRCbG9j
aykpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmIChuZXdJbnNlcnRpb25Qb2ludEJsb2NrID09IG9sZFRyYWNlLT5pbnNlcnRpb25Qb2ludCkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
SG9pc3RpbmcgdGFyZ2V0cyBtdXN0IGhhdmUganVtcHMgYXQgdGhlIGVuZCBvZiB0aGVtIGJlY2F1
c2Ugd2UgY3JlYXRlZCBob2lzdGluZworICAgICAgICAgICAgLy8gdGFyZ2V0cyB0aGF0IGhhdmUg
anVtcHMuCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChuZXdJbnNlcnRpb25Qb2ludEJsb2Nr
LT5sYXN0KCktPm9wY29kZSgpID09IEp1bXApOworICAgICAgICAgICAgCisgICAgICAgICAgICBt
X3RyYWNlID0gbV90cmFjZXMuYWRkKCpvbGRUcmFjZSk7CisgICAgICAgICAgICBtX3RyYWNlLT5p
bnNlcnRpb25Qb2ludCA9IFZhbHVlSW5CbG9jaygKKyAgICAgICAgICAgICAgICBuZXdJbnNlcnRp
b25Qb2ludEJsb2NrLAorICAgICAgICAgICAgICAgIG5ld0luc2VydGlvblBvaW50QmxvY2stPnNp
emUoKSAtIDEpOworICAgICAgICAgICAgCisgICAgICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmts
aXN0OworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG9sZFRyYWNlLT5ibG9j
a3MpCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHJldGVuZFRvSGF2ZVNlZW4oYmxvY2spOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKG9sZFRyYWNlLT5pbnNl
cnRpb25Qb2ludC0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3Jr
bGlzdCk7CisgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgdHJhY2VzVG9Qcm9jZXNzLmFwcGVuZChtX3RyYWNlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICB2b2lkIGNsb3NlVHJhY2UoQmxvY2tXb3JrbGlzdCYgd29ya2xpc3QpCisgICAg
eworICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgOiB3b3JrbGlzdC5wb3AoKSkgewor
ICAgICAgICAgICAgaWYgKGJsb2NrID09IG1fdHJhY2UtPmluc2VydGlvblBvaW50KQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3RyYWNlLT5i
bG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKGJsb2Nr
ID09IG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBvbmx5IHdhbnQgdG8gYWRkIHRoZSBlbmQgb2YgdGhpcyBibG9jay4gTm90ZSwgaWYgd2Ugc2Vl
IHRoaXMgYmxvY2ssCisgICAgICAgICAgICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBh
bHJlYWR5IGluIHRoZSBibG9ja3Mgc2V0LiBUaGF0IG1lYW5zIHRoYXQgb2xkVHJhY2Ugd2FzIGEK
KyAgICAgICAgICAgICAgICAvLyBhIGRvbWluYW50IHJlZHVuZGFuY3kgdHJhY2UgcmF0aGVyIHRo
YW4gYSBob2lzdGVkIHRyYWNlLiBJdCBhbHNvIG1lYW5zCisgICAgICAgICAgICAgICAgLy8gdGhh
dCB0aGlzIGJsb2NrIGRvZXNuJ3QgaGF2ZSBhbnkgdW5hY2NvdW50ZWQtZm9yIGJyYW5jaGVzLgor
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgLy8gQnV0IHRoZSBvbmx5IHdheSBm
b3IgdGhlcmUgdG8gYmUgYW55dGhpbmcgYWZ0ZXIgdGhlIGJyYW5jaFBvaW50IGluIHRoZSBibG9j
ayBpcyBpZgorICAgICAgICAgICAgICAgIC8vIHRoZSBicmFuY2hQb2ludCBpcyBhIENoZWNrLiBD
b2RlIGFmdGVyIGEgQ2hlY2sgb25seSBuZWVkcyB0byBiZSBkdXBsaWNhdGVkIGZvcgorICAgICAg
ICAgICAgICAgIC8vIHdoZW4gdGhlIHByZWRpY2F0ZSBpcyBmYWxzZS4gU28sIHRoYXQgY29kZSBk
b2Vzbid0IGdldCBkdXBsaWNhdGVkIGF0IGFsbC4KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZv
cmUsIHRoZXJlIGlzIG5vIGFkZGl0aW9uYWwgY29zdC4KKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2R1cGxp
Y2F0ZWRGb3JQcmVkaWNhdGUuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fdHJhY2Ut
PnByZWRpY2F0ZSkpKSB7CisgICAgICAgICAgICAgICAgbV90cmFjZS0+c3BhY2VDb3N0ICs9IGJs
b2NrLT5zaXplKCk7CisKKyAgICAgICAgICAgICAgICAvLyBUaGlzIGBpZmAgaXMgbmVzdGVkIGJl
Y2F1c2UgaWYgYSBkdXBsaWNhdGVkIGJsb2NrICpkaWQqIGhhdmUgYQorICAgICAgICAgICAgICAg
IC8vIGJyYW5jaCBmb3Igb3VyIHByZWRpY2F0ZSB0aGVuIGl0J3MgcHJvYmFibHkgYmVjYXVzZSB3
ZSBtaXNzZWQgYW4KKyAgICAgICAgICAgICAgICAvLyBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdHkg
aW4gdGhlIGxhc3QgcmVkdWNlU3RyZW5ndGggcGFzcy4gVGhhdCBpcworICAgICAgICAgICAgICAg
IC8vIG1vc3QgbGlrZWx5IHRvIGhhcHBlbiBiZWNhdXNlIHRoaXMgcmVkdW5kYW5jeSB3YXMgcmV2
ZWFsZWQgb25seQorICAgICAgICAgICAgICAgIC8vIGFmdGVyIHNvbWUgcGhhc2UgdGhhdCByYW4g
YWZ0ZXIgcmVkdWNlU3RyZW5ndGgsIGxpa2UKKyAgICAgICAgICAgICAgICAvLyBlbGltaW5hdGVD
b21tb25TdWJleHByZXNzaW9ucy4gVGhlcmVmb3JlLCBhIGZ1dHVyZSBwYXNzIG9mCisgICAgICAg
ICAgICAgICAgLy8gcmVkdWNlU3RyZW5ndGggaXMgdmVyeSBsaWtlbHkgdG8gcmVtb3ZlIGEgZHVw
bGljYXRlZCBicmFuY2ggZm9yCisgICAgICAgICAgICAgICAgLy8gb3VyIHByZWRpY2F0ZSB3aXRo
b3V0IG5lZWRpbmcgdG8gc3BlY2lhbGl6ZS4gVGhlcmVmb3JlLCB3ZSBkb24ndAorICAgICAgICAg
ICAgICAgIC8vIHdhbnQgdG8gY291bGQgaXQgYXMgYSBiZW5lZml0IGhlcmUuIEFsc28sIHdlIGRv
bid0IGR1cGxpY2F0ZQorICAgICAgICAgICAgICAgIC8vIGR1cGxpY2F0ZWQgYmxvY2tzLCBzbyB3
ZSB3b3VsZG4ndCBiZSBjcmVhdGluZyBhbnkgYmVuZWZpdCBhbnl3YXkuCisgICAgICAgICAgICAg
ICAgaWYgKG1fYmxvY2tzV2l0aEJyYW5jaGVzLmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJsb2Nr
LCBtX3RyYWNlLT5wcmVkaWNhdGUoKSkpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5i
ZW5lZml0ICs9IGJsb2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY2hvb3NlVHJhY2VPcmRlcigpCisgICAgewor
ICAgICAgICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJhY2VzKSB7CisgICAgICAgICAgICAvLyBX
ZSBkb24ndCBrbm93IGFueXRoaW5nIGFib3V0IHRoaXMgaGV1cmlzdGljIHlldC4KKyAgICAgICAg
ICAgIGlmICh0cmFjZS0+YmVuZWZpdE92ZXJDb3N0KCkgPiAwLjIpCisgICAgICAgICAgICAgICAg
bV90cmFjZXNJbk9yZGVyLmFwcGVuZCh0cmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fdHJhY2VzSW5PcmRlci5iZWdpbigpLCBtX3Ry
YWNlc0luT3JkZXIuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRyYWNlKiBsZWZ0LCBUcmFjZSog
cmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBv
cmRlciBvZiBiZW5lZml0LgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5iZW5lZml0T3Zl
ckNvc3QoKSA+IHJpZ2h0LT5iZW5lZml0T3ZlckNvc3QoKTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKyAgICAKKyAgICB2b2lkIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpCisg
ICAgeworICAgICAgICBtX3RyYWNlc0luT3JkZXIucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAg
ICAgICBbJl0gKFRyYWNlKiB0cmFjZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKG1f
YWZmZWN0ZWRCbG9ja3MuY29udGFpbnModHJhY2UtPmluc2VydGlvblBvaW50KSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRC
bG9ja3MuY29udGFpbnModHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogdHJhY2UtPmJsb2NrcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3Rl
ZEJsb2Nrcy5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbV9hZmZlY3RlZEJsb2Nrcy5hZGQodHJhY2UtPmluc2VydGlvblBvaW50KTsKKyAgICAgICAg
ICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2soKSk7
CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHRyYWNlLT5ibG9ja3Mp
CisgICAgICAgICAgICAgICAgICAgIG1fYWZmZWN0ZWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpCisgICAgeworICAgICAgICBJbmRleFNl
dDxWYWx1ZSo+IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9wcm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewor
ICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYmIG1fYWZmZWN0ZWRC
bG9ja3MuY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90
ZS5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+
Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPm93bmVyICE9IGJs
b2NrICYmIG1fYWZmZWN0ZWRCbG9ja3MuY29udGFpbnMoY2hpbGQtPm93bmVyKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVtb3RlLmFkZCh2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGRlbW90ZVZhbHVlcyhtX3By
b2MsIHZhbHVlc1RvRGVtb3RlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdXBsaWNhdGVUcmFj
ZXMoKQorICAgIHsKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJv
Yyk7CisgICAgICAgIAorICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+
IGJsb2NrTWFwKG1fcHJvYy5ibG9ja3MoKS5zaXplKCkpOworICAgICAgICBJbmRleE1hcDxWYWx1
ZSosIFZhbHVlKj4gdmFsdWVNYXAobV9wcm9jLnZhbHVlcygpLnNpemUoKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKG1fdHJhY2UgOiBtX3RyYWNlc0luT3JkZXIpIHsKKyAgICAgICAgICAgIGF1
dG8gYWRkQmxvY2tUb0R1cGxpY2F0ZSA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKKyAgICAg
ICAgICAgICAgICBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdC5hcHBlbmQoYmxvY2spOworICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gbV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5hZGQoYmxvY2sp
OworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICB9
OworICAgICAgICAgICAgCisgICAgICAgICAgICBhZGRCbG9ja1RvRHVwbGljYXRlKG1fdHJhY2Ut
PmJyYW5jaFBvaW50LmJsb2NrKCkpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fdHJhY2UtPmJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgaWYgKGJsb2NrICE9IG1f
dHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgICAgIGFkZEJsb2Nr
VG9EdXBsaWNhdGUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICAgICAgYmxvY2tzVG9EdXBsaWNhdGUuYmVnaW4o
KSwgYmxvY2tzVG9EdXBsaWNhdGUuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Js
b2NrKiBsZWZ0LCBCYXNpY0Jsb2NrKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBsZWZ0LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE9yZGVyIG1hdHRlcnMhIFdlIHRy
eSB0byBjcmVhdGUgYSBDRkcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBnYXJiYWdlLiBUaGF0J3MK
KyAgICAgICAgICAgIC8vIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHRoZSBwZXJmb3JtYW5j
ZSBvZiBsaW5lYXIgc2Nhbi4gSXQgZG9lc24ndCBtYXR0ZXIgZm9yCisgICAgICAgICAgICAvLyBn
cmFwaCBjb2xvcmluZyB0aG91Z2guIEl0IGRlZmluaXRlbHkgbWF0dGVycyBmb3IgZGVidWdnaW5n
IHRoZSBjb21waWxlci4KKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrQmVmb3JlSW5zZXJ0
aW9uUG9pbnQgPSBibG9ja3NUb0R1cGxpY2F0ZS5sYXN0KCk7CisgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzVG9EdXBsaWNhdGUpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihi
bG9jaywgbV90cmFjZS0+cHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0g
bV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGRvbid0IGR1cGxpY2F0ZSB0aGVuL2Vsc2UgYmxvY2tzLiBOb3RlIHRoYXQgYmVjYXVzZSBv
ZiBob3cKKyAgICAgICAgICAgICAgICAgICAgLy8gbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlIHdv
cmtzLCB0aGlzIGNvdWxkIGJlIGJvdGggYSB0aGVuIGFuZCBhIGVsc2UgYmxvY2sgaWY6CisgICAg
ICAgICAgICAgICAgICAgIC8vIC0gVGhpcyBpcyBkb21pbmF0ZWQgYnkgKGFuZCBkdXBsaWNhdGVk
IGZvcikgYSBicmFuY2ggdGhhdCBpcyBkb21pbmF0ZWQgYnkgb3VyCisgICAgICAgICAgICAgICAg
ICAgIC8vICAgaW5zZXJ0aW9uIHBvaW50LCBhbmQgYSBicmFuY2ggZG9taW5hdGVkIGJ5IG91ciBp
bnNlcnRpb24gcG9pbnQuCisgICAgICAgICAgICAgICAgICAgIC8vIC0gT3VyIGluc2VydGlvbiBw
b2ludCBpcyBkb21pbmF0ZWQgYnkgKGFuZCBkdXBsaWNhdGVkIGZvcikgYW5vdGhlciBicmFuY2gg
b24KKyAgICAgICAgICAgICAgICAgICAgLy8gICBvdXIgcHJlZGljYXRlLgorICAgICAgICAgICAg
ICAgICAgICAvLyBCdXQgaWYgdGhpcyBibG9jayBpcyBpbiB0aGUgdGhlbiBhbmQgZWxzZSBjYXNl
IG9mIHRoZSBzYW1lIHByZWRpY2F0ZSwgdGhlbiBpdAorICAgICAgICAgICAgICAgICAgICAvLyBp
cyB1bnJlYWNoYWJsZS4gU28sIHdlIGNhbiBkbyB3aGF0ZXZlciB3ZSB3YW50IHdpdGggaXQuCisK
KyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbGVhdmUgdGhlbiBibG9ja3Mgd2hlcmUgdGhleSBh
cmUuCisgICAgICAgICAgICAgICAgICAgIGlmICgqaXRlcikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTW92ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJsb2NrIGluIHRoZSBwcm9ncmFtIGZsb3cuIEdv
dHRhIGtlZXAgdGhlIENGRyBzYW5lLgorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0QWZ0ZXIoCisgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldDo6
QmxvY2tJbnNlcnRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tCZWZvcmVJ
bnNlcnRpb25Qb2ludC0+aW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3By
b2MudGFrZUJsb2NrKGJsb2NrLT5pbmRleCgpKSkpOworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogbmV3QmxvY2sgPQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0QWZ0ZXIoYmxvY2tCZWZvcmVJbnNlcnRpb25Qb2ludCwgYmxvY2stPmZyZXF1ZW5j
eSgpKTsKKyAgICAgICAgICAgICAgICBibG9ja01hcFtibG9ja10gPSBuZXdCbG9jazsKKyAgICAg
ICAgICAgICAgICBuZXdCbG9jay0+cHJlZGVjZXNzb3JzKCkgPSBibG9jay0+cHJlZGVjZXNzb3Jz
KCk7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IGJsb2NrLT5zdWNj
ZXNzb3JzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8g
ZWxzZUJsb2NrRm9yID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgLT4gQmFzaWNCbG9jayogewor
ICAgICAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9ja01hcFtibG9ja10p
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmV0
dXJuIGJsb2NrOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nrc1RvRHVwbGljYXRlKSB7CisgICAgICAgICAgICAg
ICAgYXV0byBmb2xkVmFsdWVGb3IgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogdmFs
dWUsIGJvb2wgcHJlZGljYXRlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2
YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApICE9IG1fdHJhY2UtPnByZWRp
Y2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLCBwcmVkaWNhdGVWYWx1ZSA/IGJsb2NrLT50YWtlbigpIDogdGFrZW4tPm5v
dFRha2VuKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5j
aGlsZCgwKSAhPSBtX3RyYWNlLT5wcmVkaWNhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGVWYWx1ZSkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgYXV0byByZXdpcmVCbG9ja0ZvciA9IFsmXSAoQmFzaWNC
bG9jayogYmxvY2ssIGJvb2wgcHJlZGljYXRlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUg
Y3VycmVudCByZXdpcmluZyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGZvciB0aGVuIGJs
b2Nrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiYgcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGR1cGxpY2F0aW5nIGNvZGUgZG9taW5hdGVkIGJ5IHRo
ZSBpbnNlcnRpb24gcG9pbnQuIFRoZXJlZm9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBwcmVkZWNlc3NvcnMgc2hvdWxkIGVpdGhlciBiZSB0aGUgaW5zZXJ0aW9uIHBvaW50LCBv
ciBpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgYmxvY2sgaW4gdGhl
IHNldCBvZiBkdXBsaWNhdGVkIGJsb2Nrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChw
cmVkZWNlc3NvciA9PSBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5jb250
YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3Ig
PSBlbHNlQmxvY2tGb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqJiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LmNvbnRhaW5zKHN1Y2Nlc3NvcikpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yID0gZWxzZUJsb2NrRm9yKHN1Y2Nl
c3Nvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc3VjY2Vzc29yLT5hZGRQcmVkZWVzc29yKGJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgYXV0byBpdGVyID0gbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlLmZpbmQoc3RkOjptYWtl
X3BhaXIoYmxvY2ssIG1fdHJhY2UtPnByZWRpY2F0ZSkpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5lbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICByZXdpcmVCbG9ja0ZvcihibG9jaywgKml0ZXIpOworICAgICAgICAgICAgICAgICAgICBm
b2xkVmFsdWVGb3IoYmxvY2ssIGJsb2NrLT5sYXN0KCksICppdGVyKTsKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IGVsc2VCbG9ja0ZvcihibG9jayk7
CisgICAgICAgICAgICAgICAgcmV3aXJlQmxvY2tGb3IoYmxvY2ssIHRydWUpOworICAgICAgICAg
ICAgICAgIHJld2lyZUJsb2NrRm9yKGVsc2VCbG9jaywgZmFsc2UpOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIC8vIEZ1biBmYWN0OiB0aGlzIGxvb3Agd2lsbCBkdXBsaWNhdGUg
Y29kZSBhZnRlciB0aGUgdGhlbiBjYXNlIG9mIGEgQ2hlY2suIFRoYXQncworICAgICAgICAgICAg
ICAgIC8vIGRlYWQgY29kZS4gQW5kIHRoYXQncyBPSy4KKyAgICAgICAgICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2xvbmUg
PSBtX3Byb2MuY2xvbmUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYg
Y2hpbGQgPSBjbG9uZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
KFZhbHVlKiByZXBsYWNlbWVudCA9IHZhbHVlTWFwW2NoaWxkXSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZCA9IHJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAg
ICAgICAgICAgICAgICBub2RlTWFwW3ZhbHVlXSA9IGNsb25lOworICAgICAgICAgICAgICAgICAg
ICBlbHNlQmxvY2stPmFwcGVuZChjbG9uZSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxvY2ssIHZhbHVlLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgZm9sZFZhbHVlRm9yKGVsc2VCbG9jaywgY2xvbmUsIGZhbHNlKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZh
bHVlKiBpbnNlcnRpb25Qb2ludEp1bXAgPSBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludC0+bGFzdCgp
OworICAgICAgICAgICAgc3dpdGNoIChpbnNlcnRpb25Qb2ludEp1bXAtPm9wY29kZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChp
bnNlcnRpb25Qb2ludEp1bXAtPmNoaWxkKDApID09IG1fdHJhY2UtPnByZWRpY2F0ZSk7CisgICAg
ICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkbid0IGJlIGFueXRoaW5nIGxlZnQgdG8gZG8gaWYg
d2UncmUgaW4gdGhpcyBzaXR1YXRpb24uCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgICAgICAgICAgbV90cmFj
ZS0+aW5zZXJ0aW9uUG9pbnQtPnJlcGxhY2VMYXN0V2l0aE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgICAgIG1fcHJvYywgaW5zZXJ0aW9uUG9pbnRKdW1wLT5vcmlnaW4oKSwgbV90cmFjZS0+
cHJlZGljYXRlKTsKKyAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludC0+YXBw
ZW5kU3VjY2Vzc29yKAorICAgICAgICAgICAgICAgICAgICBlbHNlQmxvY2tGb3IobV90cmFjZS0+
aW5zZXJ0aW9uUG9pbnQtPnN1Y2Nlc3NvcigwKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSBtX2Jsb2Nrc1RvRHVwbGlj
YXRlTGlzdC50YWtlTGFzdCgpKQorICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9EdXBsaWNhdGVT
ZXQucmVtb3ZlKGJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluc2Vy
dGlvblNldC5leGVjdXRlKCkpCisgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOwor
ICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIG1fcHJvYzsKKyAgICBEb21pbmF0b3JzKiBtX2Rv
bWluYXRvcnMgeyBudWxscHRyIH07CisgICAgCisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxW
YWx1ZUluQmxvY2s+PiBtX3ByZWRpY2F0ZVRvQnJhbmNoZXM7CisgICAgCisgICAgSGFzaFNldDxz
dGQ6OnBhaXI8QmFzaWNCbG9jayosIFZhbHVlKj4+IG1fYmxvY2tzV2l0aEJyYW5jaGVzOworICAg
IAorICAgIC8vIFdlIHNheSB0aGF0IGEgYmxvY2sgaXMgZHVwbGljYXRlZCBmb3IgYSBicmFuY2gg
aWYgaXQncyBkb21pbmF0ZWQgYnkgdGhlIHN1Y2Nlc3NvciBvZiBvbmUgb2YKKyAgICAvLyB0aG9z
ZSBicmFuY2hlcy4gVGhlIGJvb2wgdmFsdWUgaXMgdGhlIHByZWRpY2F0ZSdzIHZhbHVlIHdoZW4g
d2UgYXJlIGluIHRoYXQgYmxvY2suCisgICAgSGFzaE1hcDxzdGQ6OnBhaXI8QmFzaWNCbG9jayos
IFZhbHVlKj4sIGJvb2w+IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZTsKKyAgICAKKyAgICBUcmFj
ZSogbV90cmFjZTsKKworICAgIHN0cnVjdCBUcmFjZSB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0
T3ZlckNvc3QoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJs
ZToKKyAgICAgICAgICAgIC8vIDEpIFBhaXIgb2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBj
b2RlIHRvIGR1cGxpY2F0ZSBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2gg
aW5zaWRlIG9mIHNtYWxsIGxvb3AuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90
IHZhbHVhYmxlOgorICAgICAgICAgICAgLy8gMykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQg
bG9vcCB0byBob2lzdCBhbiBpbm5lciBicmFuY2guCisgICAgICAgICAgICAvLworICAgICAgICAg
ICAgLy8gSW4gY2FzZSBvZiAoMSksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0
aGUgYmVuZWZpdCB0byBiZSAxLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNh
c2Ugb2YgKDIpLCB3ZSBleHBlY3Qgc3BhY2VDb3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0
IHRvIGJlIDkuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyks
IHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgPjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEw
MC4KKyAgICAgICAgICAgIHJldHVybiAoYmVuZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCkgLyBz
cGFjZUNvc3Q7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwcmVkaWNhdGU7
CisgICAgICAgIEJhc2ljQmxvY2sqIGluc2VydGlvblBvaW50OyAvLyBUaGlzIGlzIGEgYmxvY2sg
dGhhdCBlbmRzIGluIGEgYnJhbmNoIHRoYXQgd2UncmUgc3BlY2lhbGl6aW5nLCBvciBpdCBlbmRz
IGluIGEgSnVtcCBiZWNhdXNlIHRoaXMgaXMgYSBob2lzdGluZyB0YXJnZXQuCisgICAgICAgIFZh
bHVlSW5CbG9jayBicmFuY2hQb2ludDsKKyAgICAgICAgZG91YmxlIGJlbmVmaXQgeyAwIH07Cisg
ICAgICAgIGRvdWJsZSBpbnNlcnRlZEJyYW5jaENvc3QgeyAwIH07CisgICAgICAgIGRvdWJsZSBz
cGFjZUNvc3QgeyAwIH07CisgICAgICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzOyAvLyBU
aGUgbGlzdCBvZiBkdXBsaWNhdGVkIGJsb2NrcyBub3QgaW5jbHVkaW5nIHRoZSBicmFuY2hQb2lu
dC4KKyAgICB9OworICAgIAorICAgIEJhZzxUcmFjZT4gbV90cmFjZXM7CisgICAgVmVjdG9yPFRy
YWNlKj4gbV90cmFjZXNJbk9yZGVyOworICAgIAorICAgIEluZGV4U2V0PEJhc2ljQmxvY2sqPiBt
X2FmZmVjdGVkQmxvY2tzOworICAgIAorICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gbV9ibG9ja3NU
b0R1cGxpY2F0ZUxpc3Q7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IG1fYmxvY2tzVG9EdXBs
aWNhdGVTZXQ7Cit9OworCitib29sIHNwZWNpYWxpemVCcmFuY2hlcyhQcm9jZWR1cmUmIHByb2Mp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJzcGVjaWFsaXplQnJhbmNoZXMi
KTsKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMgc3BlY2lhbGl6ZUJyYW5jaGVzKHByb2MpOworICAg
IHJldHVybiBzcGVjaWFsaXplQnJhbmNoZXMucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKG5vbmV4aXN0ZW50KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIER1
cGxpY2F0ZXMgY29kZSB0byByZW1vdmUgYnJhbmNoZXMuIEVhY2ggcGllY2Ugb2YgY29kZSBnZXRz
IGR1cGxpY2F0ZWQgYXQgbW9zdCBvbmNlLCBzbyB0aGVyZQorLy8gaXMgbm8gZXhwb25lbnRpYWwg
Ymxvdy11cC4KKworYm9vbCBzcGVjaWFsaXplQnJhbmNoZXMoUHJvY2VkdXJlJik7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkobm9uZXhpc3RlbnQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbkJs
b2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordm9pZCBWYWx1ZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jayksICI6IiwgbV9pbmRleCwgIi0+
IiwgcG9pbnRlckR1bXAobV92YWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlSW5CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlSW5CbG9jay5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFZhbHVlSW5CbG9jayB7CitwdWJsaWM6CisgICAgVmFsdWVJbkJsb2NrKCkgeyB9Cisg
ICAgCisgICAgVmFsdWVJbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV92YWx1ZShibG9jay0+YXQoaW5kZXgpKSAvLyBXZSBzYXZlIHRoaXMgYmVjYXVzZSB0
aGF0J3MgdXNlZnVsIGFmdGVyIHRoZSBwaGFzZSBtZXNzZXMgdXAgaW5kaWNlcy4KKyAgICB7Cisg
ICAgfQorICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAg
IFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVmFsdWVJbkJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3Zh
bHVlOworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVJbkJsb2Nr
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gVmFsdWVJbkJsb2NrKCk7CisgICAgfQorICAgIAorICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8QmFzaWNCbG9j
ayo+OjpoYXNoKG1fYmxvY2spICsgbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgVmFsdWVJbkJs
b2NrKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1faW5k
ZXgtLTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVJbkJsb2NrKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFY
IH07CisgICAgVmFsdWUqIG1fdmFsdWUgeyBudWxscHRyIH07Cit9OworCitzdHJ1Y3QgVmFsdWVJ
bkJsb2NrSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVmFsdWVJbkJsb2Nr
JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBWYWx1ZUluQmxvY2smIGEsIGNvbnN0IFZhbHVlSW5CbG9jayYgYikgeyByZXR1cm4gYSA9PSBi
OyB9CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8
PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6VmFsdWVJbkJsb2NrPiB7CisgICAgdHlwZWRl
ZiBKU0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZT4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6
QjM6OlZhbHVlSW5CbG9jaz4gOiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6
OlZhbHVlSW5CbG9jaz4geworICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNa
ZXJvID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE4LTA0LTI3ICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGhhdmUgZ2VuZXJh
bGl6ZWQgcGF0aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisgICAgICAgIAorICAgICAgICBBZGQgc29tZSBjb21tZW50cyBhbmQgc29tZSBzdXBw
b3J0aW5nIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdXNlZnVsIGZvciB0aGUgbmV3IHBoYXNlLgorCisg
ICAgICAgICogd3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oOgorICAgICAgICAoV1RGOjpHcmFwaE5vZGVXb3JrbGlzdDo6cHJldGVuZFRvSGF2ZVNlZW4p
OgorICAgICAgICAqIHd0Zi9JbmRleFNldC5oOgorICAgICAgICAoV1RGOjpJbmRleFNldDo6cmVt
b3ZlQWxsKToKKwogMjAxOC0wNC0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAK
ICAgICAgICAgR2FyZGVuaW5nOiBTcGVjdWxhdGl2ZSBidWlsZCBmaXggZm9yIFdpbmRvd3MuCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBwdWJsaWM6IAogICAg
IC8vIExpa2UgZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2Yg
dGhlIGJpdHZlY3Rvci4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUoc2l6ZV90
IG51bUJpdHMpOwogICAgIAorICAgIC8vIENsZWFycyB0aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBt
ZW1vcnkuIElmIHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZXQgYW5kIGZyZWUgbWVtb3J5LCB0aGVu
CisgICAgLy8geW91IHdhbnQgKnRoaXMgPSBCaXRWZWN0b3IoKS4KICAgICBXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjbGVhckFsbCgpOwogCiAgICAgYm9vbCBxdWlja0dldChzaXplX3QgYml0KSBj
b25zdApJbmRleDogU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMzExMjgp
CisrKyBTb3VyY2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtNjQsOCArNjQsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBzYXcoTm9kZSBub2RlKSB7IHJl
dHVybiBtX3NlZW4uY29udGFpbnMobm9kZSk7IH0KICAgICAKKyAgICBib29sIHByZXRlbmRUb0hh
dmVTZWVuKE5vZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVuLmFkZChub2RlKTsgfQorICAgIAogICAg
IGNvbnN0IFNldCYgc2VlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbjsgfQotCisgICAgCiBwcml2
YXRlOgogICAgIFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRl
eDogU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9JbmRleFNldC5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwog
ICAgIH0KKyAgICAKKyAgICAvLyBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2V0IHdpdGhv
dXQgZnJlZWluZyBtZW1vcnkuCisgICAgdm9pZCByZW1vdmVBbGwoKQorICAgIHsKKyAgICAgICAg
bV9zZXQuY2xlYXJBbGwoKTsKKyAgICB9CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZh
bHVlKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339075</attachid>
            <date>2018-04-28 12:46:02 -0700</date>
            <delta_ts>2018-04-28 19:24:26 -0700</delta_ts>
            <desc>it&apos;s starting to compile</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>53922</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE4LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
YSBuZXcgcGhhc2UsIGNhbGxlZCBzcGVjaWFsaXplQnJhbmNoZXMsIHRoYXQgZHVwbGljYXRlcyBj
b2RlIGluIG9yZGVyIHRvIHJlbW92ZQorICAgICAgICBicmFuY2hlcy4gSXQncyBhIHN1cGVyc2V0
IG9mIGxvb3AgdW5zd2l0Y2hpbmcgdGhhdCB3aWxsIGFsc28gaGFuZGxlIHN0cmFpdCBwYXRocyBm
cm9tIG9uZQorICAgICAgICBicmFuY2ggdG8gYW5vdGhlci4gRm9yIGV4YW1wbGUsIGl0IHdpbGwg
Y29udmVydDoKKyAgICAgICAgCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgICBm
b28KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgIHRo
aW5neQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgICAgZnV6egorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1enoKKyAgICAgICAgCisgICAgICAgIGludG86Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICBmb28KKyAgICAg
ICAgICAgICAgICB0aGluZ3kKKyAgICAgICAgICAgICAgICBmdXp6CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJhcgorICAgICAgICAgICAgICAgIHRoaW5neQorICAgICAg
ICAgICAgICAgIGJ1enoKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByb3ZpZGVk
IHRoYXQgdGhlIGJlbmVmaXQgKGVsaW1pbmF0aW9uIG9mIHRoZSBzZWNvbmQgYnJhbmNoKSBvdXR3
ZWlnaHMgdGhlIGNvc3QgKHRoZSBzcGFjZQorICAgICAgICBjb3N0IG9mIHRoaW5neSBiZWluZyBl
bWl0dGVkIHR3aWNlKS4gVGhpcyB3aWxsIGRvIGEgTyhibG9ja3NeMykgc2VhcmNoIHRvIGZpbmQg
dGhlIG1vc3QKKyAgICAgICAgcHJvZml0YWJsZSBzdWNoIHNwZWNpYWxpemF0aW9ucyB0byBkbywg
YW5kIGl0IHdpbGwgb25seSBkbyB0aGUgbW9zdCBwcm9maXRhYmxlIG9mIHRob3NlLiBJdAorICAg
ICAgICB3aWxsIG5ldmVyIGR1cGxpY2F0ZSBjb2RlIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAK
KyAgICAgICAgVGhlIHNlYXJjaCBjb25zaWRlcnMgYWxsIGR1cGxpY2F0aW9uIHBhdGhzIChjYWxs
ZWQgdHJhY2VzIGluIHRoZSBwaGFzZSdzIGNvZGUpIHRoYXQgY2FuIGJlCisgICAgICAgIGZvcm1l
ZCBieToKKyAgICAgICAgCisgICAgICAgIC0gUGFpcnMgb2YgYnJhbmNoZXMgb24gdGhlIHNhbWUg
cHJlZGljYXRlLCB3aGVyZSBvbmUgYnJhbmNoIGRvbWluYXRlcyB0aGUgb3RoZXIuCisgICAgICAg
IAorICAgICAgICAtIEhvaXN0aW5nIGEgYnJhbmNoLCBvciBzb21lIG90aGVyIHRyYWNlLCBvdXQg
b2YgYSBsb29wLgorICAgICAgICAKKyAgICAgICAgSSBiZWxpZXZlIHRoYXQgaW4gdGhlIHdvcnN0
IGNhc2UsIHRoaXMgaXMgYSBPKGJsb2Nrc14zKSBzZWFyY2gsIGlmIHlvdSBjcmVhdGVkIGEgcHJv
Z3JhbQorICAgICAgICB3aG9zZSBsb29wIGRlcHRoIHdhcyBPKGJsb2NrcykgYW5kIHlvdSBoYWQg
TyhibG9ja3MpIGRpZmZlcmVudCB0cmFjZXMgaW5zaWRlIHRoZSBsb29wIGJvZHkuCisgICAgICAg
IFRoYXQncyBjZXJ0YWlubHkgcG9zc2libGUgYnV0IG5vdCB2ZXJ5IHByb2JhYmxlLgorICAgICAg
ICAKKyAgICAgICAgSSBoYXZlbid0IHRlc3RlZCB0aGlzIHlldC4gSXQncyBzdGlsbCBhIHdvcmsg
aW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQnJlYWtD
cml0aWNhbEVkZ2VzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmJyZWFrQ3JpdGljYWxFZGdlcyk6
CisgICAgICAgICogYjMvQjNGaXhTU0EuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToK
KyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRl
VG9BaXIpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjp0YWtlQmxvY2spOgorICAg
ICAgICAqIGIzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OlNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgIChK
U0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpTcGVj
aWFsaXplQnJhbmNoZXM6OmNyZWF0ZUhvaXN0aW5nVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkIz
OjpTcGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCcmFuY2hlcyk6CisgICAgICAgIChKU0M6OkIzOjpT
cGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OmNyZWF0ZVRyYWNlc0J5RG9taW5h
bnRSZWR1bmRhbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6Y3Jl
YXRlVHJhY2VzQnlIb2lzdGluZyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNo
ZXM6OmNsb3NlVHJhY2UpOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpj
aG9vc2VUcmFjZU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6
c2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OlNw
ZWNpYWxpemVCcmFuY2hlczo6ZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpkdXBsaWNhdGVUcmFjZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpUcmFjZTo6YmVuZWZpdE92ZXJDb3N0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OnNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgICogYjMvQjNT
cGVjaWFsaXplQnJhbmNoZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2su
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUluQmxvY2s6OlZhbHVlSW5CbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUlu
QmxvY2s6OmJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6aW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjp2YWx1ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Om9wZXJhdG9yPT0gY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUluQmxvY2s6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVJbkJsb2NrOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZUluQmxvY2tIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5C
bG9ja0hhc2g6OmVxdWFsKToKKwogMjAxOC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtBUk02NF1bTGludXhdIEFkZCBjb2xsZWN0
Q1BVRmVhdHVyZXMgdXNpbmcgYXV4aWxpYXJ5IHZlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDcgQEAgYjMvQjNSZWR1Y2VE
b3VibGVUb0Zsb2F0LmNwcAogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKIGIzL0IzU1NBQ2FsY3Vs
YXRvci5jcHAKIGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKK2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVz
LmNwcAogYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiBiMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKQEAgLTE2NSw2ICsxNjYsNyBAQCBiMy9C
M1Vwc2lsb25WYWx1ZS5jcHAKIGIzL0IzVXNlQ291bnRzLmNwcAogYjMvQjNWYWxpZGF0ZS5jcHAK
IGIzL0IzVmFsdWUuY3BwCitiMy9CM1ZhbHVlSW5CbG9jay5jcHAKIGIzL0IzVmFsdWVLZXkuY3Bw
CiBiMy9CM1ZhbHVlUmVwLmNwcAogYjMvQjNWYXJpYWJsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjk1LDYgKzY5NSw4IEBACiAJCTBGRjRCNEM3MUU4ODkzQzUwMERCQkU4NiAvKiBBaXJD
RkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRC
NEM2MUU4ODkzQkYwMERCQkU4NiAvKiBBaXJDRkcuaCAqLzsgfTsKIAkJMEZGNEI0Q0IxRTg4OUQ3
RTAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNEI0QzkxRTg4OUQ3ODAwREJCRTg2IC8qIEIzVmFy
aWFibGVMaXZlbmVzcy5oICovOyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkY2OEMxRDIw
OTQwRUJDMDBGQzVEREMgLyogQjNTcGVjaWFsaXplQnJhbmNoZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovOyB9OworCQkwRkY2OEMxRTIwOTQwRUJGMDBGQzVE
REMgLyogQjNWYWx1ZUluQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjY4QzFCMjA5NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVlSW5CbG9jay5o
ICovOyB9OwogCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVB
M0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQ
cm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUI5
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OTUxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI5NjEsNiArMjk2MywxMCBAQAogCQkwRkY0QjRDOTFFODg5RDc4MDBE
QkJFODYgLyogQjNWYXJpYWJsZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFyaWFibGVMaXZlbmVzcy5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZUxpdmVuZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZVdoaXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzE5MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxp
emVCcmFuY2hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nw
ZWNpYWxpemVCcmFuY2hlcy5jcHA7IHBhdGggPSBiMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1NwZWNpYWxpemVCcmFuY2hlcy5oOyBwYXRoID0gYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGNjhDMUIyMDk0MEVCNzAwRkM1RERD
IC8qIEIzVmFsdWVJbkJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
VmFsdWVJbkJsb2NrLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5CbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY2OEMxQzIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUluQmxv
Y2suY3BwOyBwYXRoID0gYjMvQjNWYWx1ZUluQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY3MTY4QTE1QTNCMjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlPZmZzZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTMxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE5OCw2ICs1MjA0LDggQEAKIAkJCQkwRkVDODRF
QTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRF
QjFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggKi8sCiAJCQkJMEYyQkJEOTEx
QzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRjY4QzE5
MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAgKi8sCisJCQkJMEZG
NjhDMUEyMDk0MEVCNzAwRkM1RERDIC8qIEIzU3BlY2lhbGl6ZUJyYW5jaGVzLmggKi8sCiAJCQkJ
MEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgKi8sCiAJCQkJ
MEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5oICovLAogCQkJCTBG
MzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAg
Ki8sCkBAIC01MjI2LDYgKzUyMzQsOCBAQAogCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggKi8sCiAJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8s
CisJCQkJMEZGNjhDMUMyMDk0MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmNwcCAqLywK
KwkJCQkwRkY2OEMxQjIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxvY2suaCAqLywKIAkJ
CQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQkw
RjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgKi8sCiAJCQkJMEYzMzhF
MDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLywKQEAgLTg2ODgsNiArODY5OCw3
IEBACiAJCQkJRkVCNThDMTUxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5OEQwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5z
dGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBF
cnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGNjhDMUUyMDk0MEVCRjAwRkM1
RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxQjFCREEw
OEQxMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEFEOTEwQzFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3MzQxRDIxREMwMkUyRTAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkzNTYsNiArOTM2Nyw3IEBACiAJCQkJQTUwM0ZBMjIxODhFRkY2ODAwMTEw
RjE0IC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTI2
MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3MzQxQ0UxREMwMkQ3OTAwQUEyOUJBIC8qIFNjcmlwdEV4ZWN1dGFibGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRjY4QzFEMjA5NDBFQkMwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFu
Y2hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VBRTdEN0I4ODlCNDc3QkE5M0FCQTZDIC8qIFNj
cmlwdEZldGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjAxQzFFMUY4RTgyNEMwMDc2QTAz
MiAvKiBTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0E2
MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCcmVha0NyaXRpY2FsRWRn
ZXMuY3BwCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
cmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHZv
aWQgYnJlYWtDcml0aWNhbEVkZ2VzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgfQogICAgIH0K
IAotICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7Ci0gICAgcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7
CisgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgIHByb2MuaW52YWxpZGF0
ZUNGRygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw2ICsxNzIs
NyBAQCB2b2lkIGZpeFNTQUdsb2JhbGx5KFByb2NlZHVyZSYgcHJvYykKICAgICBUaW1pbmdTY29w
ZSB0aW1pbmdTY29wZSgiZml4U1NBOiBjb252ZXJ0Iik7CiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKICAgICBJbmRleFNwYXJzZVNldDxLZXlWYWx1ZVBhaXI8dW5zaWduZWQs
IFZhbHVlKj4+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4U2V0
PFZhbHVlKj4gdmFsdWVzVG9EZWxldGU7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKICAgICAg
ICAgCkBAIC0yMDcsNiArMjA4LDcgQEAgdm9pZCBmaXhTU0FHbG9iYWxseShQcm9jZWR1cmUmIHBy
b2MpCiAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+
dmFyaWFibGUoKTsKIAogICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KGVuc3VyZU1hcHBpbmcodmFyaWFibGUsIHZhbHVlSW5kZXgsIHZhbHVlLT5vcmlnaW4oKSkpOwor
ICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVsZXRlLmFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yNDYsNiArMjQ4
LDE5IEBAIHZvaWQgZml4U1NBR2xvYmFsbHkoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBp
c24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBsZWF2ZXMgdGhlIElSIG5pY2UgYW5kIHRp
ZHksIHdoaWNoIGlzIHBhcnRpY3VsYXJseQorICAgIC8vIHVzZWZ1bCBmb3IgcGhhc2VzIHRoYXQg
ZG8gc2l6ZSBlc3RpbWF0ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsK
KyAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWVz
VG9EZWxldGUuY29udGFpbnModmFsdWUpICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBOb3ApCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBwcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAogICAgIGlmIChCM0ZpeFNTQUludGVybmFs
Ojp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIFNTQSBjb252ZXJzaW9uOlxu
Iik7CkBAIC0zMjQsNiArMzM5LDkgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogewog
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiZml4U1NBIik7CiAKKyAgICBpZiAocHJv
Yy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICAvLyBMb3RzIG9mIHZhcmlhYmxlcyBoYXZlIHRyaXZpYWwgbG9jYWwgbGl2ZW5lc3MuIFdlIGNh
biBhbGxvY2F0ZSB0aG9zZSB3aXRob3V0IGFueQogICAgIC8vIHRyb3VibGUuCiAgICAgZml4U1NB
TG9jYWxseShwcm9jKTsKQEAgLTMzNiw3ICszNTQsNiBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUm
IHByb2MpCiAgICAgaWYgKHByb2MudmFyaWFibGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgLy8gV2Uga25vdyB0aGF0IHdlIGhhdmUgdmFyaWFibGVzIHRv
IG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBicmVha0NyaXRpY2FsRWRnZXMocHJvYyk7
CiAKICAgICBmaXhTU0FHbG9iYWxseShwcm9jKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAog
I2luY2x1ZGUgIkIzUHVyZUNTRS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlRG91YmxlVG9GbG9hdC5o
IgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKKyNpbmNsdWRlICJCM1NwZWNpYWxpemVC
cmFuY2hlcy5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlk
YXRlLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTkwLDYgKzkxLDggQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgICAgICBmb2xkUGF0
aENvbnN0YW50cyhwcm9jZWR1cmUpOwogICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUp
OwogICAgICAgICBpbmZlclN3aXRjaGVzKHByb2NlZHVyZSk7CisgICAgICAgIHNwZWNpYWxpemVC
cmFuY2hlcyhwcm9jZWR1cmUpOworICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKICAgICAgICAg
ZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKICAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7CiAg
ICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDYgQEAgVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQogICAgIHJldHVy
biBtX3ZhbHVlcy5hZGQoV1RGTW92ZShjbG9uZSkpOwogfQogCi0KIFZhbHVlKiBQcm9jZWR1cmU6
OmFkZEludENvbnN0YW50KE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CiAg
ICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tz
W2luZGV4XS5nZXQoKTsgfQogICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPiB0YWtlQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFdURk1vdmUo
bV9ibG9ja3NbaW5kZXhdKTsgfQogCiAgICAgdHlwZWRlZiBXVEY6OkluZGV4ZWRDb250YWluZXJJ
dGVyYXRvcjxQcm9jZWR1cmU+IGl0ZXJhdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTcGVjaWFs
aXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJCM0JyZWFrQ3JpdGljYWxFZGdlcy5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgor
I2luY2x1ZGUgIkIzRml4U1NBLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUluQmxvY2suaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbmRleFNldC5oPgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFNwZWNpYWxpemVCcmFuY2hlcyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSB0cnVlOworICAgIAorICAgIHN0cnVjdCBU
cmFjZSB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0T3ZlckNvc3QoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJsZToKKyAgICAgICAgICAgIC8vIDEpIFBhaXIg
b2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBjb2RlIHRvIGR1cGxpY2F0ZSBiZXR3ZWVuIHRo
ZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2ggaW5zaWRlIG9mIHNtYWxsIGxvb3AuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IHZhbHVhYmxlOgorICAgICAgICAgICAgLy8g
MykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQgbG9vcCB0byBob2lzdCBhbiBpbm5lciBicmFu
Y2guCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMSksIHdlIGV4
cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0aGUgYmVuZWZpdCB0byBiZSAxLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDIpLCB3ZSBleHBlY3Qgc3BhY2VD
b3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0IHRvIGJlIDkuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUg
PjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEwMC4KKyAgICAgICAgICAgIHJldHVybiAoYmVu
ZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCkgLyBzcGFjZUNvc3Q7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAgICAgIntwcmVkaWNhdGUgPSAi
LCBwb2ludGVyRHVtcChwcmVkaWNhdGUpLCAiLCIKKyAgICAgICAgICAgICAgICAiIGluc2VydGlv
blBvaW50ID0gIiwgcG9pbnRlckR1bXAoaW5zZXJ0aW9uUG9pbnQpLCAiLCIKKyAgICAgICAgICAg
ICAgICAiIGJyYW5jaFBvaW50ID0gIiwgYnJhbmNoUG9pbnQsICIsIgorICAgICAgICAgICAgICAg
ICIgYmVuZWZpdCA9ICIsIGJlbmVmaXQsICIsIgorICAgICAgICAgICAgICAgICIgaW5zZXJ0ZWRC
cmFuY2hDb3N0ID0gIiwgaW5zZXJ0ZWRCcmFuY2hDb3N0LCAiLCIKKyAgICAgICAgICAgICAgICAi
IHNwYWNlQ29zdCA9ICIsIHNwYWNlQ29zdCwgIiwiCisgICAgICAgICAgICAgICAgIiBiZW5lZml0
T3ZlckNvc3QgPSAiLCBiZW5lZml0T3ZlckNvc3QoKSwgIiwiCisgICAgICAgICAgICAgICAgIiBi
bG9ja3MgPSBbIiwgcG9pbnRlckxpc3REdW1wKGJsb2NrcyksICJdfSIpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZSogcHJlZGljYXRlIHsgbnVsbHB0ciB9OworICAgICAgICBC
YXNpY0Jsb2NrKiBpbnNlcnRpb25Qb2ludCB7IG51bGxwdHIgfTsgLy8gVGhpcyBpcyBhIGJsb2Nr
IHRoYXQgZW5kcyBpbiBhIGJyYW5jaCB0aGF0IHdlJ3JlIHNwZWNpYWxpemluZywgb3IgaXQgZW5k
cyBpbiBhIEp1bXAgYmVjYXVzZSB0aGlzIGlzIGEgaG9pc3RpbmcgdGFyZ2V0LgorICAgICAgICBW
YWx1ZUluQmxvY2sgYnJhbmNoUG9pbnQ7CisgICAgICAgIGRvdWJsZSBiZW5lZml0IHsgMCB9Owor
ICAgICAgICBkb3VibGUgaW5zZXJ0ZWRCcmFuY2hDb3N0IHsgMCB9OworICAgICAgICBkb3VibGUg
c3BhY2VDb3N0IHsgMCB9OworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2NrczsgLy8g
VGhlIGxpc3Qgb2YgZHVwbGljYXRlZCBibG9ja3Mgbm90IGluY2x1ZGluZyB0aGUgYnJhbmNoUG9p
bnQuCisgICAgfTsKKyAgICAKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMoUHJvY2Vk
dXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJTdGFydGluZyBzcGVjaWFsaXplQnJhbmNoZXMuIElSIGJlZm9yZSBhbnkgY2hhbmdl
czpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBicmVha0NyaXRpY2FsRWRnZXMobV9w
cm9jKTsKKyAgICAgICAgY3JlYXRlSG9pc3RpbmdUYXJnZXRzKCk7CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJUiBhZnRlciBob2lzdGluZyB0YXJnZXQgY3Jl
YXRpb24sIGJlZm9yZSBhbmFseXNpczpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBt
X2RvbWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMoKTsKKyAgICAgICAgbV9wcm9jLnJlc2V0
VmFsdWVPd25lcnMoKTsKKyAgICAgICAgZmluZEJyYW5jaGVzKCk7CisgICAgICAgIGZpbmRCbG9j
a3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpOworICAgICAgICBjcmVhdGVUcmFjZXNCeURvbWlu
YW50UmVkdW5kYW5jeSgpOworICAgICAgICBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCk7CisgICAg
ICAgIGNob29zZVRyYWNlT3JkZXIoKTsKKyAgICAgICAgc2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBy
dW5lVHJhY2VzKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV90cmFjZXNJbk9yZGVyLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRGlkIG5vdCBzZWxlY3QgYW55IHRyYWNlcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgdHJhY2VzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgYmVu
ZWZpdE92ZXJDb3N0OlxuIik7CisgICAgICAgICAgICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJh
Y2VzSW5PcmRlcikKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKnRyYWNlLCAiXG4i
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMo
KTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIklSIGFmdGVy
IGRlbW90aW5nIGFwcHJvcHJpYXRlIHZhbHVlczpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAg
ICAgICBkdXBsaWNhdGVUcmFjZXMoKTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIklSIGFmdGVyIHNwZWNpYWxpemVCcmFuY2hlczpcbiIsIG1fcHJvYyk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQgY3JlYXRlSG9pc3RpbmdUYXJnZXRzKCkKKyAgICB7CisgICAgICAgIC8vIEFsbCBsb3dl
ci1mcmVxdWVuY3kgcHJlZGVjZXNzb3JzIG9mIGEgYmxvY2sgc2hvdWxkIGp1bXAgdG8gdGhhdCBi
bG9jayB2aWEgYSBob2lzdGluZworICAgICAgICAvLyB0YXJnZXQgYmxvY2suIElmIHdlIGRvbid0
IHVzZSB0aGVzZSBibG9ja3MsIHRoZXknbGwgZ2V0IGNvbGxlY3RlZCBieSByZWR1Y2VTdHJlbmd0
aC4KKyAgICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3By
b2MpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykg
eworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29y
cyA9IDA7CisgICAgICAgICAgICBkb3VibGUgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVBy
ZWRlY2Vzc29ycyA9IDA7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
IDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vz
c29yLT5mcmVxdWVuY3koKSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG51bWJlck9m
TG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMrKzsKKyAgICAgICAgICAgICAgICBtYXhGcmVxdWVu
Y3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0KKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycywgcHJlZGVjZXNz
b3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG51bWJlck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPCAyKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBo
b2lzdGluZ1RhcmdldCA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2ssIG1heEZyZXF1
ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMpOworICAgICAgICAgICAgaG9pc3RpbmdU
YXJnZXQtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBKdW1wLCBibG9jay0+YXQoMCktPm9yaWdp
bigpKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5zZXRTdWNjZXNzb3JzKGJsb2NrKTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgp
ID49IGJsb2NrLT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNj
ZXNzb3IoYmxvY2ssIGhvaXN0aW5nVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBob2lzdGluZ1Rh
cmdldC0+YWRkUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGJsb2Nr
LT5yZW1vdmVQcmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBibG9jay0+YWRkUHJlZGVjZXNzb3IoaG9pc3RpbmdUYXJnZXQpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAg
IG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJyYW5j
aGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbmRleC0t
OykgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrOiB7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMuYWRk
KHByZWRpY2F0ZSwgVmVjdG9yPFZhbHVlSW5CbG9jaz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChWYWx1ZUluQmxvY2soYmxvY2ssIGluZGV4KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RWFjaCBibG9jayBjYW4gb25seSBoYXZlIG9uZSAiYnJhbmNoIiwgc2luY2U6CisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDEpIFRoaXMgcmVkdW5kYW5jeSB3
b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmaXhlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhpcyBy
ZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpeGVkOgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gMykgVGhpcyByZWR1bmRhbmN5IGlzIG5vdCB2YWxpZCBJUjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
Q2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
IDQpIFRoaXMgcmVkdW5kYW5jeSBpcyBub3QgdmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJy
YW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8g
T2YgY291cnNlLCB0aGUgZmlyc3QgdHdvIGFzc3VtcHRpb25zIGNvdWxkIGJlIHZpb2xhdGVkIGJl
Y2F1c2Ugb2YgYSBtaXNzZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uIG9w
cG9ydHVuaXR5LiBUaGlzIHBoYXNlIGlzIHByZXBhcmVkIGZvciB0aGF0LgorICAgICAgICAgICAg
ICAgICAgICBtX2Jsb2Nrc1dpdGhCcmFuY2hlcy5hZGQoc3RkOjptYWtlX3BhaXIoYmxvY2ssIHBy
ZWRpY2F0ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJl
ZGljYXRlcygpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1
ZSogcHJlZGljYXRlID0gYmxvY2stPmxhc3QoKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGF1dG8gaGFuZGxlU3VjY2Vzc29yID0gWyZdIChCYXNpY0Jsb2NrKiBzdGFydCwg
Ym9vbCBwcmVkaWNhdGVWYWx1ZSkgeworICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycy0+Zm9y
QWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGR1cGxpY2F0ZWRCbG9jaykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBoYXZlIGNv
bGxpc2lvbnMgaWYgYSBicmFuY2ggZG9taW5hdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbm90aGVyIGJyYW5jaCB3YXNuJ3QgZWxpbWluYXRlZCBieSBmb2xkUGF0aENvbnN0YW50
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5hZGQo
c3RkOjptYWtlX3BhaXIoZHVwbGljYXRlZEJsb2NrLCBwcmVkaWNhdGUpLCBwcmVkaWNhdGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKGJsb2NrLT50YWtlbigpLmJsb2NrKCksIHRy
dWUpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKGJsb2NrLT5ub3RUYWtlbigpLmJsb2Nr
KCksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNyZWF0ZVRyYWNl
c0J5RG9taW5hbnRSZWR1bmRhbmN5KCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMpIHsKKyAgICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUg
PSBlbnRyeS5rZXk7CisgICAgICAgICAgICBWZWN0b3I8VmFsdWVJbkJsb2NrPiYgYnJhbmNoZXMg
PSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChWYWx1ZUluQmxv
Y2sgaW5zZXJ0aW9uUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAgICAgICAgIGlmIChpbnNl
cnRpb25Qb2ludC52YWx1ZSgpLT5vcGNvZGUoKSAhPSBCcmFuY2gpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoVmFs
dWVJbkJsb2NrIGJyYW5jaFBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhpbnNlcnRpb25Qb2ludC5ibG9jaygpLCBicmFu
Y2hQb2ludC5ibG9jaygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydGlvblBvaW50
LmJsb2NrKCkgPT0gYnJhbmNoUG9pbnQuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc2VydGlvblBvaW50LmluZGV4KCkgPiBicmFuY2hQb2ludC5pbmRleCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2lu
dC5pbmRleCgpID09IGJyYW5jaFBvaW50LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlID0gbV90
cmFjZXMuYWRkKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnByZWRpY2F0ZSA9IHBy
ZWRpY2F0ZTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBp
bnNlcnRpb25Qb2ludC5ibG9jaygpOworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5icmFu
Y2hQb2ludCA9IGJyYW5jaFBvaW50OworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNl
cnRlZEJyYW5jaENvc3QgPSBpbnNlcnRpb25Qb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2lu
dC52YWx1ZSgpID09IGJyYW5jaFBvaW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdHJhY2UtPnNwYWNlQ29zdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Ry
YWNlLT5iZW5lZml0ID0gaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNl
LT5zcGFjZUNvc3QgPSBicmFuY2hQb2ludC5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV90cmFjZS0+YmVuZWZpdCA9IGJyYW5jaFBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpICsg
aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBv
aW50LmJsb2NrKCkgIT0gYnJhbmNoUG9pbnQuYmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoQWxsKGJyYW5jaFBvaW50LmJsb2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb3NlVHJhY2Uod29ya2xpc3QpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyB0cmFjZSBi
eSBkb21pbmFudCByZWR1bmRhbmN5OiAiLCAqbV90cmFjZSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY3Jl
YXRlVHJhY2VzQnlIb2lzdGluZygpCisgICAgeworICAgICAgICBWZWN0b3I8VHJhY2UqPiB0cmFj
ZXNUb1Byb2Nlc3M7CisgICAgICAgIGZvciAoVHJhY2UqIHRyYWNlIDogbV90cmFjZXMpCisgICAg
ICAgICAgICB0cmFjZXNUb1Byb2Nlc3MuYXBwZW5kKHRyYWNlKTsKKyAgICAgICAgd2hpbGUgKFRy
YWNlKiBvbGRUcmFjZSA9IHRyYWNlc1RvUHJvY2Vzcy50YWtlTGFzdCgpKSB7CisgICAgICAgICAg
ICBpZiAob2xkVHJhY2UtPmluc2VydGlvblBvaW50LT5mcmVxdWVuY3koKSA8PSBvbGRUcmFjZS0+
cHJlZGljYXRlLT5vd25lci0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0luc2VydGlvblBvaW50
QmxvY2sgPSBvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgICAgICB3aGlsZSAobmV3
SW5zZXJ0aW9uUG9pbnRCbG9jay0+ZnJlcXVlbmN5KCkgPj0gb2xkVHJhY2UtPmluc2VydGlvblBv
aW50LT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICBuZXdJbnNlcnRpb25Qb2ludEJsb2Nr
ID0gbV9kb21pbmF0b3JzLT5pZG9tKG5ld0luc2VydGlvblBvaW50QmxvY2spOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiAoIW1fZG9taW5hdG9ycy0+ZG9taW5hdGVzKG9sZFRyYWNlLT5w
cmVkaWNhdGUtPm93bmVyLCBuZXdJbnNlcnRpb25Qb2ludEJsb2NrKSkKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5ld0luc2VydGlvblBv
aW50QmxvY2sgPT0gb2xkVHJhY2UtPmluc2VydGlvblBvaW50KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBIb2lzdGluZyB0YXJnZXRzIG11
c3QgaGF2ZSBqdW1wcyBhdCB0aGUgZW5kIG9mIHRoZW0gYmVjYXVzZSB3ZSBjcmVhdGVkIGhvaXN0
aW5nCisgICAgICAgICAgICAvLyB0YXJnZXRzIHRoYXQgaGF2ZSBqdW1wcy4KKyAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKG5ld0luc2VydGlvblBvaW50QmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkg
PT0gSnVtcCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdHJhY2UgPSBtX3RyYWNlcy5h
ZGQoKm9sZFRyYWNlKTsKKyAgICAgICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50ID0gbmV3
SW5zZXJ0aW9uUG9pbnRCbG9jazsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgQmxvY2tXb3Jr
bGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBvbGRU
cmFjZS0+YmxvY2tzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnByZXRlbmRUb0hhdmVTZWVu
KGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVzaEFsbChvbGRU
cmFjZS0+aW5zZXJ0aW9uUG9pbnQtPnByZWRlY2Vzc29ycygpKTsKKyAgICAgICAgICAgIGNsb3Nl
VHJhY2Uod29ya2xpc3QpOworICAgICAgICAgICAgCisgICAgICAgICAgICB0cmFjZXNUb1Byb2Nl
c3MuYXBwZW5kKG1fdHJhY2UpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyB0cmFjZSBieSBob2lzdGluZzpc
biIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPbGQgdHJhY2U6ICIsICpvbGRUcmFj
ZSwgIlxuIik7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIE5ldyB0cmFjZTogIiwgKm1f
dHJhY2UsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xvc2VUcmFjZShCbG9ja1dvcmtsaXN0JiB3b3JrbGlzdCkKKyAgICB7CisgICAgICAg
IHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgICAg
ICBpZiAoYmxvY2sgPT0gbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fdHJhY2UtPmJsb2Nrcy5hcHBl
bmQoYmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV90cmFj
ZS0+YnJhbmNoUG9pbnQuYmxvY2soKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgd2Fu
dCB0byBhZGQgdGhlIGVuZCBvZiB0aGlzIGJsb2NrLiBOb3RlLCBpZiB3ZSBzZWUgdGhpcyBibG9j
aywKKyAgICAgICAgICAgICAgICAvLyBpdCdzIGJlY2F1c2UgaXQgd2Fzbid0IGFscmVhZHkgaW4g
dGhlIGJsb2NrcyBzZXQuIFRoYXQgbWVhbnMgdGhhdCBvbGRUcmFjZSB3YXMgYQorICAgICAgICAg
ICAgICAgIC8vIGEgZG9taW5hbnQgcmVkdW5kYW5jeSB0cmFjZSByYXRoZXIgdGhhbiBhIGhvaXN0
ZWQgdHJhY2UuIEl0IGFsc28gbWVhbnMKKyAgICAgICAgICAgICAgICAvLyB0aGF0IHRoaXMgYmxv
Y2sgZG9lc24ndCBoYXZlIGFueSB1bmFjY291bnRlZC1mb3IgYnJhbmNoZXMuCisgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAvLyBCdXQgdGhlIG9ubHkgd2F5IGZvciB0aGVyZSB0
byBiZSBhbnl0aGluZyBhZnRlciB0aGUgYnJhbmNoUG9pbnQgaW4gdGhlIGJsb2NrIGlzIGlmCisg
ICAgICAgICAgICAgICAgLy8gdGhlIGJyYW5jaFBvaW50IGlzIGEgQ2hlY2suIENvZGUgYWZ0ZXIg
YSBDaGVjayBvbmx5IG5lZWRzIHRvIGJlIGR1cGxpY2F0ZWQgZm9yCisgICAgICAgICAgICAgICAg
Ly8gd2hlbiB0aGUgcHJlZGljYXRlIGlzIGZhbHNlLiBTbywgdGhhdCBjb2RlIGRvZXNuJ3QgZ2V0
IGR1cGxpY2F0ZWQgYXQgYWxsLgorICAgICAgICAgICAgICAgIC8vIFRoZXJlZm9yZSwgdGhlcmUg
aXMgbm8gYWRkaXRpb25hbCBjb3N0LgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIW1fZHVwbGljYXRlZEZvclBy
ZWRpY2F0ZS5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihibG9jaywgbV90cmFjZS0+cHJlZGljYXRl
KSkpIHsKKyAgICAgICAgICAgICAgICBtX3RyYWNlLT5zcGFjZUNvc3QgKz0gYmxvY2stPnNpemUo
KTsKKworICAgICAgICAgICAgICAgIC8vIFRoaXMgYGlmYCBpcyBuZXN0ZWQgYmVjYXVzZSBpZiBh
IGR1cGxpY2F0ZWQgYmxvY2sgKmRpZCogaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gYnJhbmNo
IGZvciBvdXIgcHJlZGljYXRlIHRoZW4gaXQncyBwcm9iYWJseSBiZWNhdXNlIHdlIG1pc3NlZCBh
bgorICAgICAgICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSBpbiB0aGUgbGFz
dCByZWR1Y2VTdHJlbmd0aCBwYXNzLiBUaGF0IGlzCisgICAgICAgICAgICAgICAgLy8gbW9zdCBs
aWtlbHkgdG8gaGFwcGVuIGJlY2F1c2UgdGhpcyByZWR1bmRhbmN5IHdhcyByZXZlYWxlZCBvbmx5
CisgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgc29tZSBwaGFzZSB0aGF0IHJhbiBhZnRlciByZWR1
Y2VTdHJlbmd0aCwgbGlrZQorICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZUNvbW1vblN1YmV4
cHJlc3Npb25zLiBUaGVyZWZvcmUsIGEgZnV0dXJlIHBhc3Mgb2YKKyAgICAgICAgICAgICAgICAv
LyByZWR1Y2VTdHJlbmd0aCBpcyB2ZXJ5IGxpa2VseSB0byByZW1vdmUgYSBkdXBsaWNhdGVkIGJy
YW5jaCBmb3IKKyAgICAgICAgICAgICAgICAvLyBvdXIgcHJlZGljYXRlIHdpdGhvdXQgbmVlZGlu
ZyB0byBzcGVjaWFsaXplLiBUaGVyZWZvcmUsIHdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8g
d2FudCB0byBjb3VsZCBpdCBhcyBhIGJlbmVmaXQgaGVyZS4gQWxzbywgd2UgZG9uJ3QgZHVwbGlj
YXRlCisgICAgICAgICAgICAgICAgLy8gZHVwbGljYXRlZCBibG9ja3MsIHNvIHdlIHdvdWxkbid0
IGJlIGNyZWF0aW5nIGFueSBiZW5lZml0IGFueXdheS4KKyAgICAgICAgICAgICAgICBpZiAobV9i
bG9ja3NXaXRoQnJhbmNoZXMuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fdHJhY2Ut
PnByZWRpY2F0ZSkpKQorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5iZW5lZml0ICs9IGJs
b2NrLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgd29ya2xpc3QucHVzaEFsbChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY2hvb3NlVHJhY2VPcmRlcigpCisgICAgeworICAgICAgICBm
b3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJhY2VzKSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBr
bm93IGFueXRoaW5nIGFib3V0IHRoaXMgaGV1cmlzdGljIHlldC4KKyAgICAgICAgICAgIGlmICh0
cmFjZS0+YmVuZWZpdE92ZXJDb3N0KCkgPiAwLjIpCisgICAgICAgICAgICAgICAgbV90cmFjZXNJ
bk9yZGVyLmFwcGVuZCh0cmFjZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6
c29ydCgKKyAgICAgICAgICAgIG1fdHJhY2VzSW5PcmRlci5iZWdpbigpLCBtX3RyYWNlc0luT3Jk
ZXIuZW5kKCksCisgICAgICAgICAgICBbJl0gKFRyYWNlKiBsZWZ0LCBUcmFjZSogcmlnaHQpIC0+
IGJvb2wgeworICAgICAgICAgICAgICAgIC8vIFNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBi
ZW5lZml0LgorICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5iZW5lZml0T3ZlckNvc3QoKSA+
IHJpZ2h0LT5iZW5lZml0T3ZlckNvc3QoKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKyAgICAK
KyAgICB2b2lkIHNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVuZVRyYWNlcygpCisgICAgeworICAg
ICAgICBtX3RyYWNlc0luT3JkZXIucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0g
KFRyYWNlKiB0cmFjZSkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRC
bG9ja3MuY29udGFpbnModHJhY2UtPmluc2VydGlvblBvaW50KSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRCbG9ja3MuY29u
dGFpbnModHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogdHJh
Y2UtPmJsb2NrcykgeworICAgICAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3RlZEJsb2Nrcy5j
b250YWlucyhibG9jaykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgbV9hZmZl
Y3RlZEJsb2Nrcy5hZGQodHJhY2UtPmluc2VydGlvblBvaW50KTsKKyAgICAgICAgICAgICAgICBt
X2FmZmVjdGVkQmxvY2tzLmFkZCh0cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2soKSk7CisgICAgICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHRyYWNlLT5ibG9ja3MpCisgICAgICAg
ICAgICAgICAgICAgIG1fYWZmZWN0ZWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBk
ZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpCisgICAgeworICAgICAgICBJbmRleFNldDxWYWx1ZSo+
IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYmIG1fYWZmZWN0ZWRCbG9ja3MuY29u
dGFpbnMoYmxvY2spKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQodmFs
dWUpOworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVu
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jayAmJiBt
X2FmZmVjdGVkQmxvY2tzLmNvbnRhaW5zKGNoaWxkLT5vd25lcikpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZW1vdGVWYWx1ZXMobV9wcm9jLCB2YWx1
ZXNUb0RlbW90ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVwbGljYXRlVHJhY2VzKCkKKyAg
ICB7CisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3Byb2MpOworICAg
ICAgICAKKyAgICAgICAgSW5kZXhNYXA8QmFzaWNCbG9jayosIEJhc2ljQmxvY2sqPiBibG9ja01h
cChtX3Byb2Muc2l6ZSgpKTsKKyAgICAgICAgSW5kZXhNYXA8VmFsdWUqLCBWYWx1ZSo+IHZhbHVl
TWFwKG1fcHJvYy52YWx1ZXMoKS5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yIChUcmFj
ZSogdHJhY2UgOiBtX3RyYWNlc0luT3JkZXIpIHsKKyAgICAgICAgICAgIG1fdHJhY2UgPSB0cmFj
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBhZGRCbG9ja1RvRHVwbGljYXRlID0g
WyZdIChCYXNpY0Jsb2NrKiBibG9jaykgeworICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9EdXBs
aWNhdGVMaXN0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBt
X2Jsb2Nrc1RvRHVwbGljYXRlU2V0LmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUobV90cmFjZS0+YnJhbmNoUG9pbnQuYmxvY2soKSk7Cisg
ICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV90cmFjZS0+YmxvY2tzKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGJsb2NrICE9IG1fdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCkp
CisgICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUoYmxvY2spOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAg
ICAgICAgbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QuYmVnaW4oKSwgbV9ibG9ja3NUb0R1cGxpY2F0
ZUxpc3QuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsZWZ0LCBCYXNp
Y0Jsb2NrKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0
LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIE9yZGVyIG1hdHRlcnMhIFdlIHRyeSB0byBjcmVhdGUgYSBD
RkcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBnYXJiYWdlLiBUaGF0J3MKKyAgICAgICAgICAgIC8v
IHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHRoZSBwZXJmb3JtYW5jZSBvZiBsaW5lYXIgc2Nh
bi4gSXQgZG9lc24ndCBtYXR0ZXIgZm9yCisgICAgICAgICAgICAvLyBncmFwaCBjb2xvcmluZyB0
aG91Z2guIEl0IGRlZmluaXRlbHkgbWF0dGVycyBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlci4K
KyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrQmVmb3JlSW5zZXJ0aW9uUG9pbnQgPSBtX2Js
b2Nrc1RvRHVwbGljYXRlTGlzdC5sYXN0KCk7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QpIHsKKyAgICAgICAgICAgICAgICBhdXRv
IGl0ZXIgPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihibG9j
aywgbV90cmFjZS0+cHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgIT0gbV9k
dXBsaWNhdGVkRm9yUHJlZGljYXRlLmVuZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGJvb2wg
cHJlZGljYXRlVmFsdWUgPSBpdGVyLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGRvbid0IGR1cGxpY2F0ZSB0aGVuL2Vsc2UgYmxvY2tzLiBO
b3RlIHRoYXQgYmVjYXVzZSBvZiBob3cKKyAgICAgICAgICAgICAgICAgICAgLy8gbV9kdXBsaWNh
dGVkRm9yUHJlZGljYXRlIHdvcmtzLCB0aGlzIGNvdWxkIGJlIGJvdGggYSB0aGVuIGFuZCBhIGVs
c2UgYmxvY2sgaWY6CisgICAgICAgICAgICAgICAgICAgIC8vIC0gVGhpcyBpcyBkb21pbmF0ZWQg
YnkgKGFuZCBkdXBsaWNhdGVkIGZvcikgYSBicmFuY2ggdGhhdCBpcyBkb21pbmF0ZWQgYnkgb3Vy
CisgICAgICAgICAgICAgICAgICAgIC8vICAgaW5zZXJ0aW9uIHBvaW50LCBhbmQgYSBicmFuY2gg
ZG9taW5hdGVkIGJ5IG91ciBpbnNlcnRpb24gcG9pbnQuCisgICAgICAgICAgICAgICAgICAgIC8v
IC0gT3VyIGluc2VydGlvbiBwb2ludCBpcyBkb21pbmF0ZWQgYnkgKGFuZCBkdXBsaWNhdGVkIGZv
cikgYW5vdGhlciBicmFuY2ggb24KKyAgICAgICAgICAgICAgICAgICAgLy8gICBvdXIgcHJlZGlj
YXRlLgorICAgICAgICAgICAgICAgICAgICAvLyBCdXQgaWYgdGhpcyBibG9jayBpcyBpbiB0aGUg
dGhlbiBhbmQgZWxzZSBjYXNlIG9mIHRoZSBzYW1lIHByZWRpY2F0ZSwgdGhlbiBpdAorICAgICAg
ICAgICAgICAgICAgICAvLyBpcyB1bnJlYWNoYWJsZS4gU28sIHdlIGNhbiBkbyB3aGF0ZXZlciB3
ZSB3YW50IHdpdGggaXQuCisKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgbGVhdmUgdGhlbiBi
bG9ja3Mgd2hlcmUgdGhleSBhcmUuCisgICAgICAgICAgICAgICAgICAgIGlmIChwcmVkaWNhdGVW
YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gTW92ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGJs
b2NrIGluIHRoZSBwcm9ncmFtIGZsb3cuIEdvdHRhIGtlZXAgdGhlIENGRyBzYW5lLgorICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgQmxvY2tJbnNlcnRpb25TZXQ6OkJsb2NrSW5zZXJ0aW9uKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrQmVmb3JlSW5zZXJ0aW9uUG9pbnQtPmluZGV4KCkgKyAxLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy50YWtlQmxvY2soYmxvY2stPmluZGV4KCkpKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdCbG9jayA9CisgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRBZnRlcihibG9ja0JlZm9yZUluc2Vy
dGlvblBvaW50LCBibG9jay0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgICAgIGJsb2NrTWFw
W2Jsb2NrXSA9IG5ld0Jsb2NrOworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5wcmVkZWNlc3Nv
cnMoKSA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+
c3VjY2Vzc29ycygpID0gYmxvY2stPnN1Y2Nlc3NvcnMoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYXV0byBlbHNlQmxvY2tGb3IgPSBbJl0gKEJhc2ljQmxvY2sq
IGJsb2NrKSAtPiBCYXNpY0Jsb2NrKiB7CisgICAgICAgICAgICAgICAgaWYgKEJhc2ljQmxvY2sq
IHJlc3VsdCA9IGJsb2NrTWFwW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxvY2s7CisgICAgICAgICAgICB9OworICAg
ICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ibG9ja3NU
b0R1cGxpY2F0ZUxpc3QpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGZvbGRWYWx1ZUZvciA9IFsm
XSAoQmFzaWNCbG9jayogYmxvY2ssIFZhbHVlKiB2YWx1ZSwgYm9vbCBwcmVkaWNhdGVWYWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2
YWx1ZS0+Y2hpbGQoMCkgIT0gbV90cmFjZS0+cHJlZGljYXRlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNl
V2l0aEp1bXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHByZWRpY2F0ZVZh
bHVlID8gYmxvY2stPnRha2VuKCkgOiBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2s6CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApICE9IG1fdHJhY2UtPnByZWRp
Y2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIXByZWRpY2F0ZVZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIHJld2lyZUJsb2NrRm9yID0gWyZd
IChCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBwcmVkaWNhdGVWYWx1ZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAocHJlZGljYXRlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEluIHRoZSBjdXJyZW50IHJld2lyaW5nIHdlIGRvbid0IGhhdmUgdG8gZG8gYW55dGhpbmcgZm9y
IHRoZW4gYmxvY2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqJiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2UncmUgZHVwbGljYXRpbmcgY29kZSBkb21pbmF0
ZWQgYnkgdGhlIGluc2VydGlvbiBwb2ludC4gVGhlcmVmb3JlLAorICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gdGhlIHByZWRlY2Vzc29ycyBzaG91bGQgZWl0aGVyIGJlIHRoZSBpbnNlcnRpb24g
cG9pbnQsIG9yIGl0IHNob3VsZCBiZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYSBibG9j
ayBpbiB0aGUgc2V0IG9mIGR1cGxpY2F0ZWQgYmxvY2tzLgorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHByZWRlY2Vzc29yID09IG1fdHJhY2UtPmluc2VydGlvblBvaW50KQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChtX2Jsb2Nrc1RvRHVwbGljYXRl
U2V0LmNvbnRhaW5zKHByZWRlY2Vzc29yKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVk
ZWNlc3NvciA9IGVsc2VCbG9ja0ZvcihwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayomIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fYmxvY2tzVG9EdXBsaWNhdGVTZXQuY29udGFpbnMoc3VjY2Vz
c29yKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzb3IgPSBlbHNlQmxvY2tG
b3Ioc3VjY2Vzc29yKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPmFkZFByZWRlY2Vzc29yKGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgYXV0byBpdGVyID0gbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlLmZpbmQo
c3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fdHJhY2UtPnByZWRpY2F0ZSkpOworICAgICAgICAgICAg
ICAgIGlmIChpdGVyICE9IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5lbmQoKSkgeworICAgICAg
ICAgICAgICAgICAgICBib29sIHByZWRpY2F0ZVZhbHVlID0gaXRlci0+dmFsdWU7CisgICAgICAg
ICAgICAgICAgICAgIHJld2lyZUJsb2NrRm9yKGJsb2NrLCBwcmVkaWNhdGVWYWx1ZSk7CisgICAg
ICAgICAgICAgICAgICAgIGZvbGRWYWx1ZUZvcihibG9jaywgYmxvY2stPmxhc3QoKSwgcHJlZGlj
YXRlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogZWxzZUJs
b2NrID0gZWxzZUJsb2NrRm9yKGJsb2NrKTsKKyAgICAgICAgICAgICAgICByZXdpcmVCbG9ja0Zv
cihibG9jaywgdHJ1ZSk7CisgICAgICAgICAgICAgICAgcmV3aXJlQmxvY2tGb3IoZWxzZUJsb2Nr
LCBmYWxzZSk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gRnVuIGZhY3Q6
IHRoaXMgbG9vcCB3aWxsIGR1cGxpY2F0ZSBjb2RlIGFmdGVyIHRoZSB0aGVuIGNhc2Ugb2YgYSBD
aGVjay4gVGhhdCdzCisgICAgICAgICAgICAgICAgLy8gZGVhZCBjb2RlLiBBbmQgdGhhdCdzIE9L
LgorICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKSB7CisgICAgICAg
ICAgICAgICAgICAgIFZhbHVlKiBjbG9uZSA9IG1fcHJvYy5jbG9uZSh2YWx1ZSk7CisgICAgICAg
ICAgICAgICAgICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IGNsb25lLT5jaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIHJlcGxhY2VtZW50ID0gdmFsdWVNYXBb
Y2hpbGRdKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gcmVwbGFjZW1lbnQ7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT50
eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlTWFwW3ZhbHVlXSA9
IGNsb25lOworICAgICAgICAgICAgICAgICAgICBlbHNlQmxvY2stPmFwcGVuZChjbG9uZSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxv
Y2ssIHZhbHVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9sZFZhbHVlRm9yKGVsc2VC
bG9jaywgY2xvbmUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIFZhbHVlKiBpbnNlcnRpb25Qb2ludEp1bXAgPSBtX3Ry
YWNlLT5pbnNlcnRpb25Qb2ludC0+bGFzdCgpOworICAgICAgICAgICAgc3dpdGNoIChpbnNlcnRp
b25Qb2ludEp1bXAtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2ludEp1bXAtPmNoaWxkKDApID09
IG1fdHJhY2UtPnByZWRpY2F0ZSk7CisgICAgICAgICAgICAgICAgLy8gVGhlcmUgc2hvdWxkbid0
IGJlIGFueXRoaW5nIGxlZnQgdG8gZG8gaWYgd2UncmUgaW4gdGhpcyBzaXR1YXRpb24uCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEp1
bXA6CisgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQtPnJlcGxhY2VMYXN0
V2l0aE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIG1fcHJvYywgQnJhbmNoLCBpbnNl
cnRpb25Qb2ludEp1bXAtPm9yaWdpbigpLCBtX3RyYWNlLT5wcmVkaWNhdGUpOworICAgICAgICAg
ICAgICAgIC8vIFRoZSB1bmR1cGxpY2F0ZWQgY29kZSB0aGF0IHRoaXMganVtcCBhbHJlYWR5IGhh
cyBhcyBpdHMgc3VjY2Vzc29yIGlzIHdoYXQgd2UKKyAgICAgICAgICAgICAgICAvLyB3YW50IHRv
IGJlIHRoZSBgdGhlbmAgY2FzZSBvZiB0aGUgYnJhbmNoLiBTbywgd2Ugd2FudCB0byBhcHBlbmQg
dGhlIGBlbHNlYAorICAgICAgICAgICAgICAgIC8vIChub3RUYWtlbikgY2FzZS4KKyAgICAgICAg
ICAgICAgICBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludC0+YXBwZW5kU3VjY2Vzc29yKAorICAgICAg
ICAgICAgICAgICAgICBlbHNlQmxvY2tGb3IobV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQtPnN1Y2Nl
c3NvckJsb2NrKDApKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdo
aWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LnRha2VMYXN0
KCkpCisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5yZW1vdmUoYmxvY2sp
OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
KSkKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgfQorICAgIAorICAg
IFByb2NlZHVyZSYgbV9wcm9jOworICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9ycyB7IG51bGxw
dHIgfTsKKyAgICAKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlSW5CbG9jaz4+IG1f
cHJlZGljYXRlVG9CcmFuY2hlczsKKyAgICAKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxCYXNpY0Js
b2NrKiwgVmFsdWUqPj4gbV9ibG9ja3NXaXRoQnJhbmNoZXM7CisgICAgCisgICAgLy8gV2Ugc2F5
IHRoYXQgYSBibG9jayBpcyBkdXBsaWNhdGVkIGZvciBhIGJyYW5jaCBpZiBpdCdzIGRvbWluYXRl
ZCBieSB0aGUgc3VjY2Vzc29yIG9mIG9uZSBvZgorICAgIC8vIHRob3NlIGJyYW5jaGVzLiBUaGUg
Ym9vbCB2YWx1ZSBpcyB0aGUgcHJlZGljYXRlJ3MgdmFsdWUgd2hlbiB3ZSBhcmUgaW4gdGhhdCBi
bG9jay4KKyAgICBIYXNoTWFwPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPiwgYm9vbD4g
bV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlOworICAgIAorICAgIFRyYWNlKiBtX3RyYWNlOworCisg
ICAgQmFnPFRyYWNlPiBtX3RyYWNlczsKKyAgICBWZWN0b3I8VHJhY2UqPiBtX3RyYWNlc0luT3Jk
ZXI7CisgICAgCisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jayo+IG1fYWZmZWN0ZWRCbG9ja3M7Cisg
ICAgCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdDsKKyAg
ICBJbmRleFNldDxCYXNpY0Jsb2NrKj4gbV9ibG9ja3NUb0R1cGxpY2F0ZVNldDsKK307CisKK2Jv
b2wgc3BlY2lhbGl6ZUJyYW5jaGVzKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3Bl
IHBoYXNlU2NvcGUocHJvYywgInNwZWNpYWxpemVCcmFuY2hlcyIpOworICAgIFNwZWNpYWxpemVC
cmFuY2hlcyBzcGVjaWFsaXplQnJhbmNoZXMocHJvYyk7CisgICAgcmV0dXJuIHNwZWNpYWxpemVC
cmFuY2hlcy5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVj
aWFsaXplQnJhbmNoZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTcGVjaWFsaXplQnJhbmNoZXMuaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworLy8gRHVwbGljYXRlcyBjb2RlIHRvIHJl
bW92ZSBicmFuY2hlcy4gRWFjaCBwaWVjZSBvZiBjb2RlIGdldHMgZHVwbGljYXRlZCBhdCBtb3N0
IG9uY2UsIHNvIHRoZXJlCisvLyBpcyBubyBleHBvbmVudGlhbCBibG93LXVwLgorCitib29sIHNw
ZWNpYWxpemVCcmFuY2hlcyhQcm9jZWR1cmUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVJbkJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUluQmxvY2suaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVl
SW5CbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChw
b2ludGVyRHVtcChtX2Jsb2NrKSwgIjoiLCBtX2luZGV4LCAiLT4iLCBwb2ludGVyRHVtcChtX3Zh
bHVlKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2Nr
LmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWVJbkJsb2Nr
IHsKK3B1YmxpYzoKKyAgICBWYWx1ZUluQmxvY2soKSB7IH0KKyAgICAKKyAgICBWYWx1ZUluQmxv
Y2soQmFzaWNCbG9jayogYmxvY2ssIHVuc2lnbmVkIGluZGV4KQorICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX3ZhbHVlKGJsb2Nr
LT5hdChpbmRleCkpIC8vIFdlIHNhdmUgdGhpcyBiZWNhdXNlIHRoYXQncyB1c2VmdWwgYWZ0ZXIg
dGhlIHBoYXNlIG1lc3NlcyB1cCBpbmRpY2VzLgorICAgIHsKKyAgICB9CisgICAgCisgICAgQmFz
aWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgVmFsdWUqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBW
YWx1ZUluQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2sg
PT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
CisgICAgICAgICAgICAmJiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBWYWx1ZUluQmxvY2smIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKyAgICAKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhp
cyAhPSBWYWx1ZUluQmxvY2soKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIAorICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxCYXNpY0Jsb2NrKj46Omhhc2gobV9ibG9jaykg
KyBtX2luZGV4OworICAgIH0KKyAgICAKKyAgICBWYWx1ZUluQmxvY2soV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgIHsKKyAgICAgICAgbV9pbmRleC0tOworICAgIH0KKyAgICAK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9PSBWYWx1ZUluQmxvY2soV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jayB7IG51bGxw
dHIgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBWYWx1ZSogbV92
YWx1ZSB7IG51bGxwdHIgfTsKK307CisKK3N0cnVjdCBWYWx1ZUluQmxvY2tIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBWYWx1ZUluQmxvY2smIGtleSkgeyByZXR1cm4ga2V5
Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFZhbHVlSW5CbG9jayYgYSwg
Y29uc3QgVmFsdWVJbkJsb2NrJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3RleHByIGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZT4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhh
c2g8SlNDOjpCMzo6VmFsdWVJbkJsb2NrPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpWYWx1ZUlu
QmxvY2tIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZT4gc3RydWN0IEhhc2hUcmFp
dHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4g
OiBwdWJsaWMgU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4gewor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE4IEBACisyMDE4LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0aCBzcGVjaWFs
aXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTg1MDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAor
ICAgICAgICBBZGQgc29tZSBjb21tZW50cyBhbmQgc29tZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyB0
aGF0IHdlcmUgdXNlZnVsIGZvciB0aGUgbmV3IHBoYXNlLgorCisgICAgICAgICogd3RmL0JpdFZl
Y3Rvci5oOgorICAgICAgICAqIHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oOgorICAgICAgICAoV1RG
OjpHcmFwaE5vZGVXb3JrbGlzdDo6cHJldGVuZFRvSGF2ZVNlZW4pOgorICAgICAgICAqIHd0Zi9J
bmRleFNldC5oOgorICAgICAgICAoV1RGOjpJbmRleFNldDo6cmVtb3ZlQWxsKToKKwogMjAxOC0w
NC0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgR2FyZGVuaW5n
OiBTcGVjdWxhdGl2ZSBidWlsZCBmaXggZm9yIFdpbmRvd3MuCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAko
cmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBwdWJsaWM6IAogICAgIC8vIExpa2UgZW5zdXJlU2l6
ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZlY3Rvci4KICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMpOwogICAgIAor
ICAgIC8vIENsZWFycyB0aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBtZW1vcnkuIElmIHlvdSB3YW50
IHRvIGNsZWFyIHRoZSBzZXQgYW5kIGZyZWUgbWVtb3J5LCB0aGVuCisgICAgLy8geW91IHdhbnQg
KnRoaXMgPSBCaXRWZWN0b3IoKS4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBjbGVhckFs
bCgpOwogCiAgICAgYm9vbCBxdWlja0dldChzaXplX3QgYml0KSBjb25zdApJbmRleDogU291cmNl
L1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL3d0
Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsOCArNjQsMTAgQEAg
cHVibGljOgogCiAgICAgYm9vbCBzYXcoTm9kZSBub2RlKSB7IHJldHVybiBtX3NlZW4uY29udGFp
bnMobm9kZSk7IH0KICAgICAKKyAgICBib29sIHByZXRlbmRUb0hhdmVTZWVuKE5vZGUgbm9kZSkg
eyByZXR1cm4gbV9zZWVuLmFkZChub2RlKTsgfQorICAgIAogICAgIGNvbnN0IFNldCYgc2Vlbigp
IGNvbnN0IHsgcmV0dXJuIG1fc2VlbjsgfQotCisgICAgCiBwcml2YXRlOgogICAgIFNldCBtX3Nl
ZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRleDogU291cmNlL1dURi93dGYv
SW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCShyZXZp
c2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC02MSw2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1cm4gbV9zZXQu
Y2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KKyAgICAKKyAgICAv
LyBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBtZW1vcnku
CisgICAgdm9pZCByZW1vdmVBbGwoKQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xlYXJBbGwoKTsK
KyAgICB9CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25zdAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339087</attachid>
            <date>2018-04-28 19:24:26 -0700</date>
            <delta_ts>2018-04-29 21:29:29 -0700</delta_ts>
            <desc>it specialized something without crashing or emitting broken code</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>54995</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE4LTA0LTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
YSBuZXcgcGhhc2UsIGNhbGxlZCBzcGVjaWFsaXplQnJhbmNoZXMsIHRoYXQgZHVwbGljYXRlcyBj
b2RlIGluIG9yZGVyIHRvIHJlbW92ZQorICAgICAgICBicmFuY2hlcy4gSXQncyBhIHN1cGVyc2V0
IG9mIGxvb3AgdW5zd2l0Y2hpbmcgdGhhdCB3aWxsIGFsc28gaGFuZGxlIHN0cmFpdCBwYXRocyBm
cm9tIG9uZQorICAgICAgICBicmFuY2ggdG8gYW5vdGhlci4gRm9yIGV4YW1wbGUsIGl0IHdpbGwg
Y29udmVydDoKKyAgICAgICAgCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgICBm
b28KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgIHRo
aW5neQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgICAgZnV6egorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGJ1enoKKyAgICAgICAgCisgICAgICAgIGludG86Cisg
ICAgICAgIAorICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICBmb28KKyAgICAg
ICAgICAgICAgICB0aGluZ3kKKyAgICAgICAgICAgICAgICBmdXp6CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIGJhcgorICAgICAgICAgICAgICAgIHRoaW5neQorICAgICAg
ICAgICAgICAgIGJ1enoKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByb3ZpZGVk
IHRoYXQgdGhlIGJlbmVmaXQgKGVsaW1pbmF0aW9uIG9mIHRoZSBzZWNvbmQgYnJhbmNoKSBvdXR3
ZWlnaHMgdGhlIGNvc3QgKHRoZSBzcGFjZQorICAgICAgICBjb3N0IG9mIHRoaW5neSBiZWluZyBl
bWl0dGVkIHR3aWNlKS4gVGhpcyB3aWxsIGRvIGEgTyhibG9ja3NeMykgc2VhcmNoIHRvIGZpbmQg
dGhlIG1vc3QKKyAgICAgICAgcHJvZml0YWJsZSBzdWNoIHNwZWNpYWxpemF0aW9ucyB0byBkbywg
YW5kIGl0IHdpbGwgb25seSBkbyB0aGUgbW9zdCBwcm9maXRhYmxlIG9mIHRob3NlLiBJdAorICAg
ICAgICB3aWxsIG5ldmVyIGR1cGxpY2F0ZSBjb2RlIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAK
KyAgICAgICAgVGhlIHNlYXJjaCBjb25zaWRlcnMgYWxsIGR1cGxpY2F0aW9uIHBhdGhzIChjYWxs
ZWQgdHJhY2VzIGluIHRoZSBwaGFzZSdzIGNvZGUpIHRoYXQgY2FuIGJlCisgICAgICAgIGZvcm1l
ZCBieToKKyAgICAgICAgCisgICAgICAgIC0gUGFpcnMgb2YgYnJhbmNoZXMgb24gdGhlIHNhbWUg
cHJlZGljYXRlLCB3aGVyZSBvbmUgYnJhbmNoIGRvbWluYXRlcyB0aGUgb3RoZXIuCisgICAgICAg
IAorICAgICAgICAtIEhvaXN0aW5nIGEgYnJhbmNoLCBvciBzb21lIG90aGVyIHRyYWNlLCBvdXQg
b2YgYSBsb29wLgorICAgICAgICAKKyAgICAgICAgSSBiZWxpZXZlIHRoYXQgaW4gdGhlIHdvcnN0
IGNhc2UsIHRoaXMgaXMgYSBPKGJsb2Nrc14zKSBzZWFyY2gsIGlmIHlvdSBjcmVhdGVkIGEgcHJv
Z3JhbQorICAgICAgICB3aG9zZSBsb29wIGRlcHRoIHdhcyBPKGJsb2NrcykgYW5kIHlvdSBoYWQg
TyhibG9ja3MpIGRpZmZlcmVudCB0cmFjZXMgaW5zaWRlIHRoZSBsb29wIGJvZHkuCisgICAgICAg
IFRoYXQncyBjZXJ0YWlubHkgcG9zc2libGUgYnV0IG5vdCB2ZXJ5IHByb2JhYmxlLgorICAgICAg
ICAKKyAgICAgICAgSSBoYXZlbid0IHRlc3RlZCB0aGlzIHlldC4gSXQncyBzdGlsbCBhIHdvcmsg
aW4gcHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQnJlYWtD
cml0aWNhbEVkZ2VzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmJyZWFrQ3JpdGljYWxFZGdlcyk6
CisgICAgICAgICogYjMvQjNGaXhTU0EuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToK
KyAgICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRl
VG9BaXIpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKiBiMy9CM1By
b2NlZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjp0YWtlQmxvY2spOgorICAg
ICAgICAqIGIzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OlNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgIChK
U0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpTcGVj
aWFsaXplQnJhbmNoZXM6OmNyZWF0ZUhvaXN0aW5nVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkIz
OjpTcGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCcmFuY2hlcyk6CisgICAgICAgIChKU0M6OkIzOjpT
cGVjaWFsaXplQnJhbmNoZXM6OmZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNoZXM6OmNyZWF0ZVRyYWNlc0J5RG9taW5h
bnRSZWR1bmRhbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6Y3Jl
YXRlVHJhY2VzQnlIb2lzdGluZyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplQnJhbmNo
ZXM6OmNsb3NlVHJhY2UpOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpj
aG9vc2VUcmFjZU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVCcmFuY2hlczo6
c2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OlNw
ZWNpYWxpemVCcmFuY2hlczo6ZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpkdXBsaWNhdGVUcmFjZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZUJyYW5jaGVzOjpUcmFjZTo6YmVuZWZpdE92ZXJDb3N0IGNvbnN0KToK
KyAgICAgICAgKEpTQzo6QjM6OnNwZWNpYWxpemVCcmFuY2hlcyk6CisgICAgICAgICogYjMvQjNT
cGVjaWFsaXplQnJhbmNoZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2su
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6ZHVtcCBjb25zdCk6
CisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZUluQmxvY2s6OlZhbHVlSW5CbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUlu
QmxvY2s6OmJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6aW5k
ZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjp2YWx1ZSBjb25zdCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Om9wZXJhdG9yPT0gY29uc3QpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUluQmxvY2s6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWVJbkJsb2NrOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZUluQmxvY2tIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5C
bG9ja0hhc2g6OmVxdWFsKToKKwogMjAxOC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUu
dGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtBUk02NF1bTGludXhdIEFkZCBjb2xsZWN0
Q1BVRmVhdHVyZXMgdXNpbmcgYXV4aWxpYXJ5IHZlY3RvcgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9T
b3VyY2VzLnR4dAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL1Nv
dXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDcgQEAgYjMvQjNSZWR1Y2VE
b3VibGVUb0Zsb2F0LmNwcAogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKIGIzL0IzU1NBQ2FsY3Vs
YXRvci5jcHAKIGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKK2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVz
LmNwcAogYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiBiMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKQEAgLTE2NSw2ICsxNjYsNyBAQCBiMy9C
M1Vwc2lsb25WYWx1ZS5jcHAKIGIzL0IzVXNlQ291bnRzLmNwcAogYjMvQjNWYWxpZGF0ZS5jcHAK
IGIzL0IzVmFsdWUuY3BwCitiMy9CM1ZhbHVlSW5CbG9jay5jcHAKIGIzL0IzVmFsdWVLZXkuY3Bw
CiBiMy9CM1ZhbHVlUmVwLmNwcAogYjMvQjNWYXJpYWJsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjk1LDYgKzY5NSw4IEBACiAJCTBGRjRCNEM3MUU4ODkzQzUwMERCQkU4NiAvKiBBaXJD
RkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRC
NEM2MUU4ODkzQkYwMERCQkU4NiAvKiBBaXJDRkcuaCAqLzsgfTsKIAkJMEZGNEI0Q0IxRTg4OUQ3
RTAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNEI0QzkxRTg4OUQ3ODAwREJCRTg2IC8qIEIzVmFy
aWFibGVMaXZlbmVzcy5oICovOyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkY2OEMxRDIw
OTQwRUJDMDBGQzVEREMgLyogQjNTcGVjaWFsaXplQnJhbmNoZXMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovOyB9OworCQkwRkY2OEMxRTIwOTQwRUJGMDBGQzVE
REMgLyogQjNWYWx1ZUluQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRjY4QzFCMjA5NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVlSW5CbG9jay5o
ICovOyB9OwogCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVB
M0IyMzEwMDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQ
cm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUI5
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OTUxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTI5NjEsNiArMjk2MywxMCBAQAogCQkwRkY0QjRDOTFFODg5RDc4MDBE
QkJFODYgLyogQjNWYXJpYWJsZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFyaWFibGVMaXZlbmVzcy5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZUxpdmVuZXNz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3
OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFJlZHVjZVdoaXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRkY2MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzE5MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxp
emVCcmFuY2hlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nw
ZWNpYWxpemVCcmFuY2hlcy5jcHA7IHBhdGggPSBiMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAv
KiBCM1NwZWNpYWxpemVCcmFuY2hlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1NwZWNpYWxpemVCcmFuY2hlcy5oOyBwYXRoID0gYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGNjhDMUIyMDk0MEVCNzAwRkM1RERD
IC8qIEIzVmFsdWVJbkJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
VmFsdWVJbkJsb2NrLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5CbG9jay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkY2OEMxQzIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxv
Y2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUluQmxv
Y2suY3BwOyBwYXRoID0gYjMvQjNWYWx1ZUluQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkY3MTY4QTE1QTNCMjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvcGVydHlPZmZzZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5jcHA7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5OTMxNjZBRDM0NzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJv
ZmlsZXJCeXRlY29kZS5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNTE5OCw2ICs1MjA0LDggQEAKIAkJCQkwRkVDODRF
QTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRF
QjFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggKi8sCiAJCQkJMEYyQkJEOTEx
QzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRjY4QzE5
MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAgKi8sCisJCQkJMEZG
NjhDMUEyMDk0MEVCNzAwRkM1RERDIC8qIEIzU3BlY2lhbGl6ZUJyYW5jaGVzLmggKi8sCiAJCQkJ
MEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgKi8sCiAJCQkJ
MEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5oICovLAogCQkJCTBG
MzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAg
Ki8sCkBAIC01MjI2LDYgKzUyMzQsOCBAQAogCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggKi8sCiAJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovLAogCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8s
CisJCQkJMEZGNjhDMUMyMDk0MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmNwcCAqLywK
KwkJCQkwRkY2OEMxQjIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxvY2suaCAqLywKIAkJ
CQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQkw
RjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleS5jcHAgKi8sCiAJCQkJMEYzMzhF
MDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXkuaCAqLywKQEAgLTg2ODgsNiArODY5OCw3
IEBACiAJCQkJRkVCNThDMTUxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5OEQwRTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5z
dGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBF
cnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGNjhDMUUyMDk0MEVCRjAwRkM1
RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxQjFCREEw
OEQxMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkx
NEFEOTEwQzFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZhbENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3MzQxRDIxREMwMkUyRTAwQUEyOUJBIC8qIEV2YWxFeGVjdXRhYmxlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTkzNTYsNiArOTM2Nyw3IEBACiAJCQkJQTUwM0ZBMjIxODhFRkY2ODAwMTEw
RjE0IC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1MDNGQTI2
MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3MzQxQ0UxREMwMkQ3OTAwQUEyOUJBIC8qIFNjcmlwdEV4ZWN1dGFibGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRjY4QzFEMjA5NDBFQkMwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVCcmFu
Y2hlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VBRTdEN0I4ODlCNDc3QkE5M0FCQTZDIC8qIFNj
cmlwdEZldGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMjAxQzFFMUY4RTgyNEMwMDc2QTAz
MiAvKiBTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NUQ5M0E2
MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlvbkNhbGwuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCcmVha0NyaXRpY2FsRWRn
ZXMuY3BwCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
cmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHZv
aWQgYnJlYWtDcml0aWNhbEVkZ2VzKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgfQogICAgIH0K
IAotICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7Ci0gICAgcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7
CisgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkpCisgICAgICAgIHByb2MuaW52YWxpZGF0
ZUNGRygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE3Miw2ICsxNzIs
NyBAQCB2b2lkIGZpeFNTQUdsb2JhbGx5KFByb2NlZHVyZSYgcHJvYykKICAgICBUaW1pbmdTY29w
ZSB0aW1pbmdTY29wZSgiZml4U1NBOiBjb252ZXJ0Iik7CiAgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKICAgICBJbmRleFNwYXJzZVNldDxLZXlWYWx1ZVBhaXI8dW5zaWduZWQs
IFZhbHVlKj4+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOworICAgIEluZGV4U2V0
PFZhbHVlKj4gdmFsdWVzVG9EZWxldGU7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKICAgICAg
ICAgCkBAIC0yMDcsNiArMjA4LDcgQEAgdm9pZCBmaXhTU0FHbG9iYWxseShQcm9jZWR1cmUmIHBy
b2MpCiAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+
dmFyaWFibGUoKTsKIAogICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5
KGVuc3VyZU1hcHBpbmcodmFyaWFibGUsIHZhbHVlSW5kZXgsIHZhbHVlLT5vcmlnaW4oKSkpOwor
ICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVsZXRlLmFkZCh2YWx1ZSk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCkBAIC0yNDYsNiArMjQ4
LDE5IEBAIHZvaWQgZml4U1NBR2xvYmFsbHkoUHJvY2VkdXJlJiBwcm9jKQogCiAgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBp
c24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBsZWF2ZXMgdGhlIElSIG5pY2UgYW5kIHRp
ZHksIHdoaWNoIGlzIHBhcnRpY3VsYXJseQorICAgIC8vIHVzZWZ1bCBmb3IgcGhhc2VzIHRoYXQg
ZG8gc2l6ZSBlc3RpbWF0ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsK
KyAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlbW92ZUFsbE1hdGNoaW5nKAorICAgICAgICAgICAg
WyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgIGlmICghdmFsdWVz
VG9EZWxldGUuY29udGFpbnModmFsdWUpICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBOb3ApCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBwcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAogICAgIGlmIChCM0ZpeFNTQUludGVybmFs
Ojp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyIFNTQSBjb252ZXJzaW9uOlxu
Iik7CkBAIC0zMjQsNiArMzM5LDkgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogewog
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiZml4U1NBIik7CiAKKyAgICBpZiAocHJv
Yy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKICAg
ICAvLyBMb3RzIG9mIHZhcmlhYmxlcyBoYXZlIHRyaXZpYWwgbG9jYWwgbGl2ZW5lc3MuIFdlIGNh
biBhbGxvY2F0ZSB0aG9zZSB3aXRob3V0IGFueQogICAgIC8vIHRyb3VibGUuCiAgICAgZml4U1NB
TG9jYWxseShwcm9jKTsKQEAgLTMzNiw3ICszNTQsNiBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUm
IHByb2MpCiAgICAgaWYgKHByb2MudmFyaWFibGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCi0gICAgLy8gV2Uga25vdyB0aGF0IHdlIGhhdmUgdmFyaWFibGVzIHRv
IG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBicmVha0NyaXRpY2FsRWRnZXMocHJvYyk7
CiAKICAgICBmaXhTU0FHbG9iYWxseShwcm9jKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsNiArNDcsNyBAQAog
I2luY2x1ZGUgIkIzUHVyZUNTRS5oIgogI2luY2x1ZGUgIkIzUmVkdWNlRG91YmxlVG9GbG9hdC5o
IgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKKyNpbmNsdWRlICJCM1NwZWNpYWxpemVC
cmFuY2hlcy5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUuaCIKICNpbmNsdWRlICJCM1ZhbGlk
YXRlLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAuaCIKQEAgLTg3LDggKzg4LDYgQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogICAgICAgICBob2lzdExv
b3BJbnZhcmlhbnRWYWx1ZXMocHJvY2VkdXJlKTsKICAgICAgICAgaWYgKGVsaW1pbmF0ZUNvbW1v
blN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSkpCiAgICAgICAgICAgICBlbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucyhwcm9jZWR1cmUpOwotICAgICAgICBmb2xkUGF0aENvbnN0YW50cyhwcm9j
ZWR1cmUpOwotICAgICAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOwogICAgICAgICBpbmZl
clN3aXRjaGVzKHByb2NlZHVyZSk7CiAgICAgICAgIGR1cGxpY2F0ZVRhaWxzKHByb2NlZHVyZSk7
CiAgICAgICAgIGZpeFNTQShwcm9jZWR1cmUpOwpAQCAtMTA2LDYgKzEwNSw5IEBAIHZvaWQgZ2Vu
ZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKIAogICAgIGlmIChwcm9jZWR1cmUub3B0
TGV2ZWwoKSA+PSAyKSB7CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7CisgICAg
ICAgIHNwZWNpYWxpemVCcmFuY2hlcyhwcm9jZWR1cmUpOworICAgICAgICBmaXhTU0EocHJvY2Vk
dXJlKTsKKyAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBG
SVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgogICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcg
KzkzLDYgQEAgVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQogICAgIHJldHVy
biBtX3ZhbHVlcy5hZGQoV1RGTW92ZShjbG9uZSkpOwogfQogCi0KIFZhbHVlKiBQcm9jZWR1cmU6
OmFkZEludENvbnN0YW50KE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkK
IHsKICAgICBzd2l0Y2ggKHR5cGUpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDYgKzE0Miw4IEBAIHB1YmxpYzoK
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CiAg
ICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tz
W2luZGV4XS5nZXQoKTsgfQogICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPiB0YWtlQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFdURk1vdmUo
bV9ibG9ja3NbaW5kZXhdKTsgfQogCiAgICAgdHlwZWRlZiBXVEY6OkluZGV4ZWRDb250YWluZXJJ
dGVyYXRvcjxQcm9jZWR1cmU+IGl0ZXJhdG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTcGVjaWFsaXplQnJhbmNoZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFuY2hlcy5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZUJyYW5jaGVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTcGVjaWFs
aXplQnJhbmNoZXMuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNs
dWRlICJCM0JyZWFrQ3JpdGljYWxFZGdlcy5oIgorI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgor
I2luY2x1ZGUgIkIzRml4U1NBLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUluQmxvY2suaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9JbmRleE1hcC5oPgorI2lu
Y2x1ZGUgPHd0Zi9JbmRleFNldC5oPgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFNwZWNpYWxpemVCcmFuY2hlcyB7CisgICAg
c3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSB0cnVlOworICAgIAorICAgIHN0cnVjdCBU
cmFjZSB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0T3ZlckNvc3QoKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJsZToKKyAgICAgICAgICAgIC8vIDEpIFBhaXIg
b2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBjb2RlIHRvIGR1cGxpY2F0ZSBiZXR3ZWVuIHRo
ZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2ggaW5zaWRlIG9mIHNtYWxsIGxvb3AuCisgICAg
ICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IHZhbHVhYmxlOgorICAgICAgICAgICAgLy8g
MykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQgbG9vcCB0byBob2lzdCBhbiBpbm5lciBicmFu
Y2guCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMSksIHdlIGV4
cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0aGUgYmVuZWZpdCB0byBiZSAxLgorICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDIpLCB3ZSBleHBlY3Qgc3BhY2VD
b3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0IHRvIGJlIDkuCisgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUg
PjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEwMC4KKyAgICAgICAgICAgIHJldHVybiAoYmVu
ZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCkgLyBzcGFjZUNvc3Q7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAgICAgIntwcmVkaWNhdGUgPSAi
LCBwb2ludGVyRHVtcChwcmVkaWNhdGUpLCAiLCIKKyAgICAgICAgICAgICAgICAiIGluc2VydGlv
blBvaW50ID0gIiwgcG9pbnRlckR1bXAoaW5zZXJ0aW9uUG9pbnQpLCAiLCIKKyAgICAgICAgICAg
ICAgICAiIGJyYW5jaFBvaW50ID0gIiwgYnJhbmNoUG9pbnQsICIsIgorICAgICAgICAgICAgICAg
ICIgYmVuZWZpdCA9ICIsIGJlbmVmaXQsICIsIgorICAgICAgICAgICAgICAgICIgaW5zZXJ0ZWRC
cmFuY2hDb3N0ID0gIiwgaW5zZXJ0ZWRCcmFuY2hDb3N0LCAiLCIKKyAgICAgICAgICAgICAgICAi
IHNwYWNlQ29zdCA9ICIsIHNwYWNlQ29zdCwgIiwiCisgICAgICAgICAgICAgICAgIiBiZW5lZml0
T3ZlckNvc3QgPSAiLCBiZW5lZml0T3ZlckNvc3QoKSwgIiwiCisgICAgICAgICAgICAgICAgIiBi
bG9ja3MgPSBbIiwgcG9pbnRlckxpc3REdW1wKGJsb2NrcyksICJdfSIpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBWYWx1ZSogcHJlZGljYXRlIHsgbnVsbHB0ciB9OworICAgICAgICBC
YXNpY0Jsb2NrKiBpbnNlcnRpb25Qb2ludCB7IG51bGxwdHIgfTsgLy8gVGhpcyBpcyBhIGJsb2Nr
IHRoYXQgZW5kcyBpbiBhIGJyYW5jaCB0aGF0IHdlJ3JlIHNwZWNpYWxpemluZywgb3IgaXQgZW5k
cyBpbiBhIEp1bXAgYmVjYXVzZSB0aGlzIGlzIGEgaG9pc3RpbmcgdGFyZ2V0LgorICAgICAgICBW
YWx1ZUluQmxvY2sgYnJhbmNoUG9pbnQ7CisgICAgICAgIGRvdWJsZSBiZW5lZml0IHsgMCB9Owor
ICAgICAgICBkb3VibGUgaW5zZXJ0ZWRCcmFuY2hDb3N0IHsgMCB9OworICAgICAgICBkb3VibGUg
c3BhY2VDb3N0IHsgMCB9OworICAgICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2NrczsgLy8g
VGhlIGxpc3Qgb2YgZHVwbGljYXRlZCBibG9ja3Mgbm90IGluY2x1ZGluZyB0aGUgYnJhbmNoUG9p
bnQuCisgICAgfTsKKyAgICAKK3B1YmxpYzoKKyAgICBTcGVjaWFsaXplQnJhbmNoZXMoUHJvY2Vk
dXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBk
YXRhTG9nKCJTdGFydGluZyBzcGVjaWFsaXplQnJhbmNoZXMuIElSIGJlZm9yZSBhbnkgY2hhbmdl
czpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBicmVha0NyaXRpY2FsRWRnZXMobV9w
cm9jKTsKKyAgICAgICAgY3JlYXRlSG9pc3RpbmdUYXJnZXRzKCk7CisKKyAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJUiBhZnRlciBob2lzdGluZyB0YXJnZXQgY3Jl
YXRpb24sIGJlZm9yZSBhbmFseXNpczpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBt
X2RvbWluYXRvcnMgPSAmbV9wcm9jLmRvbWluYXRvcnMoKTsKKyAgICAgICAgbV9wcm9jLnJlc2V0
VmFsdWVPd25lcnMoKTsKKyAgICAgICAgZmluZEJyYW5jaGVzKCk7CisgICAgICAgIGZpbmRCbG9j
a3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcygpOworICAgICAgICBjcmVhdGVUcmFjZXNCeURvbWlu
YW50UmVkdW5kYW5jeSgpOworICAgICAgICBjcmVhdGVUcmFjZXNCeUhvaXN0aW5nKCk7CisgICAg
ICAgIGNob29zZVRyYWNlT3JkZXIoKTsKKyAgICAgICAgc2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBy
dW5lVHJhY2VzKCk7CisgICAgICAgIAorICAgICAgICBpZiAobV90cmFjZXNJbk9yZGVyLmlzRW1w
dHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxv
ZygiRGlkIG5vdCBzZWxlY3QgYW55IHRyYWNlcy5cbiIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAodmVyYm9zZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiU2VsZWN0ZWQgdHJhY2VzIGluIGRlc2NlbmRpbmcgb3JkZXIgb2YgYmVu
ZWZpdE92ZXJDb3N0OlxuIik7CisgICAgICAgICAgICBmb3IgKFRyYWNlKiB0cmFjZSA6IG1fdHJh
Y2VzSW5PcmRlcikKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgIiwgKnRyYWNlLCAiXG4i
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMo
KTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIklSIGFmdGVy
IGRlbW90aW5nIGFwcHJvcHJpYXRlIHZhbHVlczpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAg
ICAgICBkdXBsaWNhdGVUcmFjZXMoKTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIklSIGFmdGVyIHNwZWNpYWxpemVCcmFuY2hlczpcbiIsIG1fcHJvYyk7Cisg
ICAgICAgIAorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQgY3JlYXRlSG9pc3RpbmdUYXJnZXRzKCkKKyAgICB7CisgICAgICAgIC8vIEFsbCBsb3dl
ci1mcmVxdWVuY3kgcHJlZGVjZXNzb3JzIG9mIGEgYmxvY2sgc2hvdWxkIGp1bXAgdG8gdGhhdCBi
bG9jayB2aWEgYSBob2lzdGluZworICAgICAgICAvLyB0YXJnZXQgYmxvY2suIElmIHdlIGRvbid0
IHVzZSB0aGVzZSBibG9ja3MsIHRoZXknbGwgZ2V0IGNvbGxlY3RlZCBieSByZWR1Y2VTdHJlbmd0
aC4KKyAgICAgICAgCisgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChtX3By
b2MpOworICAgICAgICAKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykg
eworICAgICAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29y
cyA9IDA7CisgICAgICAgICAgICBkb3VibGUgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVBy
ZWRlY2Vzc29ycyA9IDA7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
IDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vz
c29yLT5mcmVxdWVuY3koKSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG51bWJlck9m
TG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMrKzsKKyAgICAgICAgICAgICAgICBtYXhGcmVxdWVu
Y3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzID0KKyAgICAgICAgICAgICAgICAgICAgc3Rk
OjptYXgobWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycywgcHJlZGVjZXNz
b3ItPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKG51bWJlck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPCAyKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBo
b2lzdGluZ1RhcmdldCA9IGluc2VydGlvblNldC5pbnNlcnRCZWZvcmUoYmxvY2ssIG1heEZyZXF1
ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMpOworICAgICAgICAgICAgaG9pc3RpbmdU
YXJnZXQtPmFwcGVuZE5ldzxWYWx1ZT4obV9wcm9jLCBKdW1wLCBibG9jay0+YXQoMCktPm9yaWdp
bigpKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5zZXRTdWNjZXNzb3JzKGJsb2NrKTsK
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgp
ID49IGJsb2NrLT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgcHJlZGVjZXNzb3ItPnJlcGxhY2VTdWNj
ZXNzb3IoYmxvY2ssIGhvaXN0aW5nVGFyZ2V0KTsKKyAgICAgICAgICAgICAgICBob2lzdGluZ1Rh
cmdldC0+YWRkUHJlZGVjZXNzb3IocHJlZGVjZXNzb3IpOworICAgICAgICAgICAgICAgIGJsb2Nr
LT5yZW1vdmVQcmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBibG9jay0+YWRkUHJlZGVjZXNzb3IoaG9pc3RpbmdUYXJnZXQpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoKSkKKyAgICAgICAgICAg
IG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJyYW5j
aGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbmRleC0t
OykgeworICAgICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdChpbmRleCk7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgICAg
ICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICBjYXNlIENoZWNrOiB7CisgICAgICAgICAg
ICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSB2YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMuYWRk
KHByZWRpY2F0ZSwgVmVjdG9yPFZhbHVlSW5CbG9jaz4oKSkuaXRlcmF0b3ItPnZhbHVlLmFwcGVu
ZChWYWx1ZUluQmxvY2soYmxvY2ssIGluZGV4KSk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
RWFjaCBibG9jayBjYW4gb25seSBoYXZlIG9uZSAiYnJhbmNoIiwgc2luY2U6CisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDEpIFRoaXMgcmVkdW5kYW5jeSB3
b3VsZCBoYXZlIGFscmVhZHkgYmVlbiBmaXhlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBDaGVjayhAcCkK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMikgVGhpcyBy
ZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpeGVkOgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gMykgVGhpcyByZWR1bmRhbmN5IGlzIG5vdCB2YWxpZCBJUjoKKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAg
ICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAg
Q2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
IDQpIFRoaXMgcmVkdW5kYW5jeSBpcyBub3QgdmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAg
ICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJy
YW5jaChAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8g
T2YgY291cnNlLCB0aGUgZmlyc3QgdHdvIGFzc3VtcHRpb25zIGNvdWxkIGJlIHZpb2xhdGVkIGJl
Y2F1c2Ugb2YgYSBtaXNzZWQKKyAgICAgICAgICAgICAgICAgICAgLy8gb3B0aW1pemF0aW9uIG9w
cG9ydHVuaXR5LiBUaGlzIHBoYXNlIGlzIHByZXBhcmVkIGZvciB0aGF0LgorICAgICAgICAgICAg
ICAgICAgICBtX2Jsb2Nrc1dpdGhCcmFuY2hlcy5hZGQoc3RkOjptYWtlX3BhaXIoYmxvY2ssIHBy
ZWRpY2F0ZSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmRCbG9ja3NEdXBsaWNhdGVkRm9yUHJl
ZGljYXRlcygpCisgICAgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CisgICAgICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1
ZSogcHJlZGljYXRlID0gYmxvY2stPmxhc3QoKS0+Y2hpbGQoMCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGF1dG8gaGFuZGxlU3VjY2Vzc29yID0gWyZdIChCYXNpY0Jsb2NrKiBzdGFydCwg
Ym9vbCBwcmVkaWNhdGVWYWx1ZSkgeworICAgICAgICAgICAgICAgIG1fZG9taW5hdG9ycy0+Zm9y
QWxsQmxvY2tzRG9taW5hdGVkQnkoCisgICAgICAgICAgICAgICAgICAgIHN0YXJ0LAorICAgICAg
ICAgICAgICAgICAgICBbJl0gKEJhc2ljQmxvY2sqIGR1cGxpY2F0ZWRCbG9jaykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gSXQncyBwb3NzaWJsZSB0aGF0IHRoaXMgd2lsbCBoYXZlIGNv
bGxpc2lvbnMgaWYgYSBicmFuY2ggZG9taW5hdGVkIGJ5CisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBhbm90aGVyIGJyYW5jaCB3YXNuJ3QgZWxpbWluYXRlZCBieSBmb2xkUGF0aENvbnN0YW50
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5hZGQo
c3RkOjptYWtlX3BhaXIoZHVwbGljYXRlZEJsb2NrLCBwcmVkaWNhdGUpLCBwcmVkaWNhdGVWYWx1
ZSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKGJsb2NrLT50YWtlbigpLmJsb2NrKCksIHRy
dWUpOworICAgICAgICAgICAgaGFuZGxlU3VjY2Vzc29yKGJsb2NrLT5ub3RUYWtlbigpLmJsb2Nr
KCksIGZhbHNlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNyZWF0ZVRyYWNl
c0J5RG9taW5hbnRSZWR1bmRhbmN5KCkKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgZW50cnkg
OiBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMpIHsKKyAgICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUg
PSBlbnRyeS5rZXk7CisgICAgICAgICAgICBWZWN0b3I8VmFsdWVJbkJsb2NrPiYgYnJhbmNoZXMg
PSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChWYWx1ZUluQmxv
Y2sgaW5zZXJ0aW9uUG9pbnQgOiBicmFuY2hlcykgeworICAgICAgICAgICAgICAgIGlmIChpbnNl
cnRpb25Qb2ludC52YWx1ZSgpLT5vcGNvZGUoKSAhPSBCcmFuY2gpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAoVmFs
dWVJbkJsb2NrIGJyYW5jaFBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhpbnNlcnRpb25Qb2ludC5ibG9jaygpLCBicmFu
Y2hQb2ludC5ibG9jaygpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydGlvblBvaW50
LmJsb2NrKCkgPT0gYnJhbmNoUG9pbnQuYmxvY2soKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKGluc2VydGlvblBvaW50LmluZGV4KCkgPiBicmFuY2hQb2ludC5pbmRleCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2lu
dC5pbmRleCgpID09IGJyYW5jaFBvaW50LmluZGV4KCkpOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBtX3RyYWNlID0gbV90
cmFjZXMuYWRkKCk7CisgICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPnByZWRpY2F0ZSA9IHBy
ZWRpY2F0ZTsKKyAgICAgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBp
bnNlcnRpb25Qb2ludC5ibG9jaygpOworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5icmFu
Y2hQb2ludCA9IGJyYW5jaFBvaW50OworICAgICAgICAgICAgICAgICAgICBtX3RyYWNlLT5pbnNl
cnRlZEJyYW5jaENvc3QgPSBpbnNlcnRpb25Qb2ludC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2lu
dC52YWx1ZSgpID09IGJyYW5jaFBvaW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fdHJhY2UtPnNwYWNlQ29zdCA9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3Ry
YWNlLT5iZW5lZml0ID0gaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAg
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3RyYWNl
LT5zcGFjZUNvc3QgPSBicmFuY2hQb2ludC5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV90cmFjZS0+YmVuZWZpdCA9IGJyYW5jaFBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpICsg
aW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBv
aW50LmJsb2NrKCkgIT0gYnJhbmNoUG9pbnQuYmxvY2soKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICAgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoQWxsKGJyYW5jaFBvaW50LmJsb2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNsb3NlVHJhY2Uod29ya2xpc3QpOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyB0cmFjZSBi
eSBkb21pbmFudCByZWR1bmRhbmN5OiAiLCAqbV90cmFjZSwgIlxuIik7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgY3Jl
YXRlVHJhY2VzQnlIb2lzdGluZygpCisgICAgeworICAgICAgICBWZWN0b3I8VHJhY2UqPiB0cmFj
ZXNUb1Byb2Nlc3M7CisgICAgICAgIGZvciAoVHJhY2UqIHRyYWNlIDogbV90cmFjZXMpCisgICAg
ICAgICAgICB0cmFjZXNUb1Byb2Nlc3MuYXBwZW5kKHRyYWNlKTsKKyAgICAgICAgd2hpbGUgKCF0
cmFjZXNUb1Byb2Nlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBUcmFjZSogb2xkVHJhY2Ug
PSB0cmFjZXNUb1Byb2Nlc3MudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlmIChvbGRUcmFjZS0+
aW5zZXJ0aW9uUG9pbnQtPmZyZXF1ZW5jeSgpIDw9IG9sZFRyYWNlLT5wcmVkaWNhdGUtPm93bmVy
LT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG9sZFRyYWNl
LT5pbnNlcnRpb25Qb2ludDsKKyAgICAgICAgICAgIHdoaWxlIChuZXdJbnNlcnRpb25Qb2ludEJs
b2NrLT5mcmVxdWVuY3koKSA+PSBvbGRUcmFjZS0+aW5zZXJ0aW9uUG9pbnQtPmZyZXF1ZW5jeSgp
KQorICAgICAgICAgICAgICAgIG5ld0luc2VydGlvblBvaW50QmxvY2sgPSBtX2RvbWluYXRvcnMt
Pmlkb20obmV3SW5zZXJ0aW9uUG9pbnRCbG9jayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICghbV9kb21pbmF0b3JzLT5kb21pbmF0ZXMob2xkVHJhY2UtPnByZWRpY2F0ZS0+b3duZXIs
IG5ld0luc2VydGlvblBvaW50QmxvY2spKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiAobmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9PSBvbGRU
cmFjZS0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEhvaXN0aW5nIHRhcmdldHMgbXVzdCBoYXZlIGp1bXBzIGF0
IHRoZSBlbmQgb2YgdGhlbSBiZWNhdXNlIHdlIGNyZWF0ZWQgaG9pc3RpbmcKKyAgICAgICAgICAg
IC8vIHRhcmdldHMgdGhhdCBoYXZlIGp1bXBzLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3SW5zZXJ0aW9uUG9pbnRCbG9jay0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV90cmFjZSA9IG1fdHJhY2VzLmFkZCgqb2xkVHJhY2UpOwor
ICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQgPSBuZXdJbnNlcnRpb25Qb2ludEJs
b2NrOworICAgICAgICAgICAgCisgICAgICAgICAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0Owor
ICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG9sZFRyYWNlLT5ibG9ja3MpCisg
ICAgICAgICAgICAgICAgd29ya2xpc3QucHJldGVuZFRvSGF2ZVNlZW4oYmxvY2spOworICAgICAg
ICAgICAgCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKG9sZFRyYWNlLT5pbnNlcnRpb25Q
b2ludC0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAgICAgY2xvc2VUcmFjZSh3b3JrbGlzdCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHRyYWNlc1RvUHJvY2Vzcy5hcHBlbmQobV90cmFj
ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiQWRkaW5nIHRyYWNlIGJ5IGhvaXN0aW5nOlxuIik7CisgICAgICAgICAg
ICAgICAgZGF0YUxvZygiICAgIE9sZCB0cmFjZTogIiwgKm9sZFRyYWNlLCAiXG4iKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCIgICAgTmV3IHRyYWNlOiAiLCAqbV90cmFjZSwgIlxuIik7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9pZCBjbG9zZVRyYWNl
KEJsb2NrV29ya2xpc3QmIHdvcmtsaXN0KQorICAgIHsKKyAgICAgICAgd2hpbGUgKEJhc2ljQmxv
Y2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBt
X3RyYWNlLT5pbnNlcnRpb25Qb2ludCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV90cmFjZS0+YmxvY2tzLmFwcGVuZChibG9jayk7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBtX3RyYWNlLT5icmFuY2hQb2ludC5i
bG9jaygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRvIGFkZCB0aGUgZW5k
IG9mIHRoaXMgYmxvY2suIE5vdGUsIGlmIHdlIHNlZSB0aGlzIGJsb2NrLAorICAgICAgICAgICAg
ICAgIC8vIGl0J3MgYmVjYXVzZSBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0aGUgYmxvY2tzIHNldC4g
VGhhdCBtZWFucyB0aGF0IG9sZFRyYWNlIHdhcyBhCisgICAgICAgICAgICAgICAgLy8gYSBkb21p
bmFudCByZWR1bmRhbmN5IHRyYWNlIHJhdGhlciB0aGFuIGEgaG9pc3RlZCB0cmFjZS4gSXQgYWxz
byBtZWFucworICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhpcyBibG9jayBkb2Vzbid0IGhhdmUg
YW55IHVuYWNjb3VudGVkLWZvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgIC8vIEJ1dCB0aGUgb25seSB3YXkgZm9yIHRoZXJlIHRvIGJlIGFueXRoaW5nIGFm
dGVyIHRoZSBicmFuY2hQb2ludCBpbiB0aGUgYmxvY2sgaXMgaWYKKyAgICAgICAgICAgICAgICAv
LyB0aGUgYnJhbmNoUG9pbnQgaXMgYSBDaGVjay4gQ29kZSBhZnRlciBhIENoZWNrIG9ubHkgbmVl
ZHMgdG8gYmUgZHVwbGljYXRlZCBmb3IKKyAgICAgICAgICAgICAgICAvLyB3aGVuIHRoZSBwcmVk
aWNhdGUgaXMgZmFsc2UuIFNvLCB0aGF0IGNvZGUgZG9lc24ndCBnZXQgZHVwbGljYXRlZCBhdCBh
bGwuCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBhZGRpdGlvbmFs
IGNvc3QuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmICghbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlLmNvbnRhaW5z
KHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3RyYWNlLT5wcmVkaWNhdGUpKSkgeworICAgICAgICAg
ICAgICAgIG1fdHJhY2UtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6ZSgpOworCisgICAgICAgICAg
ICAgICAgLy8gVGhpcyBgaWZgIGlzIG5lc3RlZCBiZWNhdXNlIGlmIGEgZHVwbGljYXRlZCBibG9j
ayAqZGlkKiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyBicmFuY2ggZm9yIG91ciBwcmVkaWNh
dGUgdGhlbiBpdCdzIHByb2JhYmx5IGJlY2F1c2Ugd2UgbWlzc2VkIGFuCisgICAgICAgICAgICAg
ICAgLy8gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGluIHRoZSBsYXN0IHJlZHVjZVN0cmVuZ3Ro
IHBhc3MuIFRoYXQgaXMKKyAgICAgICAgICAgICAgICAvLyBtb3N0IGxpa2VseSB0byBoYXBwZW4g
YmVjYXVzZSB0aGlzIHJlZHVuZGFuY3kgd2FzIHJldmVhbGVkIG9ubHkKKyAgICAgICAgICAgICAg
ICAvLyBhZnRlciBzb21lIHBoYXNlIHRoYXQgcmFuIGFmdGVyIHJlZHVjZVN0cmVuZ3RoLCBsaWtl
CisgICAgICAgICAgICAgICAgLy8gZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuIFRoZXJl
Zm9yZSwgYSBmdXR1cmUgcGFzcyBvZgorICAgICAgICAgICAgICAgIC8vIHJlZHVjZVN0cmVuZ3Ro
IGlzIHZlcnkgbGlrZWx5IHRvIHJlbW92ZSBhIGR1cGxpY2F0ZWQgYnJhbmNoIGZvcgorICAgICAg
ICAgICAgICAgIC8vIG91ciBwcmVkaWNhdGUgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpYWxpemUu
IFRoZXJlZm9yZSwgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyB3YW50IHRvIGNvdWxkIGl0
IGFzIGEgYmVuZWZpdCBoZXJlLiBBbHNvLCB3ZSBkb24ndCBkdXBsaWNhdGUKKyAgICAgICAgICAg
ICAgICAvLyBkdXBsaWNhdGVkIGJsb2Nrcywgc28gd2Ugd291bGRuJ3QgYmUgY3JlYXRpbmcgYW55
IGJlbmVmaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIGlmIChtX2Jsb2Nrc1dpdGhCcmFuY2hl
cy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihibG9jaywgbV90cmFjZS0+cHJlZGljYXRlKSkpCisg
ICAgICAgICAgICAgICAgICAgIG1fdHJhY2UtPmJlbmVmaXQgKz0gYmxvY2stPmZyZXF1ZW5jeSgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
QWxsKGJsb2NrLT5wcmVkZWNlc3NvcnMoKSk7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
dm9pZCBjaG9vc2VUcmFjZU9yZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoVHJhY2UqIHRyYWNl
IDogbV90cmFjZXMpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJv
dXQgdGhpcyBoZXVyaXN0aWMgeWV0LgorICAgICAgICAgICAgaWYgKHRyYWNlLT5iZW5lZml0T3Zl
ckNvc3QoKSA+IDAuMikKKyAgICAgICAgICAgICAgICBtX3RyYWNlc0luT3JkZXIuYXBwZW5kKHRy
YWNlKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc3RkOjpzb3J0KAorICAgICAgICAg
ICAgbV90cmFjZXNJbk9yZGVyLmJlZ2luKCksIG1fdHJhY2VzSW5PcmRlci5lbmQoKSwKKyAgICAg
ICAgICAgIFsmXSAoVHJhY2UqIGxlZnQsIFRyYWNlKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAg
ICAgICAgICAgLy8gU29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGJlbmVmaXQuCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGxlZnQtPmJlbmVmaXRPdmVyQ29zdCgpID4gcmlnaHQtPmJlbmVmaXRP
dmVyQ29zdCgpOworICAgICAgICAgICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2ltdWxh
dGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKCkKKyAgICB7CisgICAgICAgIG1fYWZmZWN0ZWRC
bG9ja3MucmVzaXplKG1fcHJvYy5zaXplKCkpOworCisgICAgICAgIG1fdHJhY2VzSW5PcmRlci5y
ZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoVHJhY2UqIHRyYWNlKSAtPiBib29s
IHsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3RlZEJsb2Nrc1t0cmFjZS0+cHJlZGljYXRl
LT5vd25lcl0gIT0gSG93QWZmZWN0ZWQ6Ok5vdEFmZmVjdGVkKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3RlZEJsb2Nrc1t0cmFj
ZS0+aW5zZXJ0aW9uUG9pbnRdICE9IEhvd0FmZmVjdGVkOjpOb3RBZmZlY3RlZCkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRC
bG9ja3NbdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCldICE9IEhvd0FmZmVjdGVkOjpOb3RBZmZl
Y3RlZCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHRyYWNlLT5ibG9ja3MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fYWZmZWN0ZWRCbG9ja3NbYmxvY2tdICE9IEhvd0FmZmVjdGVkOjpOb3RBZmZl
Y3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tz
W3RyYWNlLT5wcmVkaWNhdGUtPm93bmVyXSA9IEhvd0FmZmVjdGVkOjpQcmVkaWNhdGU7CisgICAg
ICAgICAgICAgICAgbV9hZmZlY3RlZEJsb2Nrc1t0cmFjZS0+aW5zZXJ0aW9uUG9pbnRdID0gSG93
QWZmZWN0ZWQ6Okluc2VydGlvblBvaW50OworICAgICAgICAgICAgICAgIG1fYWZmZWN0ZWRCbG9j
a3NbdHJhY2UtPmJyYW5jaFBvaW50LmJsb2NrKCldID0gSG93QWZmZWN0ZWQ6OkR1cGxpY2F0ZWQ7
CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHRyYWNlLT5ibG9ja3Mp
CisgICAgICAgICAgICAgICAgICAgIG1fYWZmZWN0ZWRCbG9ja3NbYmxvY2tdID0gSG93QWZmZWN0
ZWQ6OkR1cGxpY2F0ZWQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMoKQor
ICAgIHsKKyAgICAgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbW90ZTsKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiAqYmxvY2spIHsKKyAgICAgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgp
ID09IFBoaSAmJiBtX2FmZmVjdGVkQmxvY2tzW2Jsb2NrXSA9PSBIb3dBZmZlY3RlZDo6RHVwbGlj
YXRlZCkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVzVG9EZW1vdGUuYWRkKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+b3duZXIgIT0gYmxvY2sgJiYgbV9hZmZlY3Rl
ZEJsb2Nrc1tjaGlsZC0+b3duZXJdID09IEhvd0FmZmVjdGVkOjpEdXBsaWNhdGVkKQorICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVzVG9EZW1vdGUuYWRkKGNoaWxkKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZGVtb3RlVmFsdWVzKG1f
cHJvYywgdmFsdWVzVG9EZW1vdGUpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1cGxpY2F0ZVRy
YWNlcygpCisgICAgeworICAgICAgICBCbG9ja0luc2VydGlvblNldCBpbnNlcnRpb25TZXQobV9w
cm9jKTsKKyAgICAgICAgCisgICAgICAgIEluZGV4TWFwPEJhc2ljQmxvY2sqLCBCYXNpY0Jsb2Nr
Kj4gYmxvY2tNYXAobV9wcm9jLnNpemUoKSk7CisgICAgICAgIEluZGV4TWFwPFZhbHVlKiwgVmFs
dWUqPiB2YWx1ZU1hcChtX3Byb2MudmFsdWVzKCkuc2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAg
IGZvciAoVHJhY2UqIHRyYWNlIDogbV90cmFjZXNJbk9yZGVyKSB7CisgICAgICAgICAgICBtX3Ry
YWNlID0gdHJhY2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gYWRkQmxvY2tUb0R1
cGxpY2F0ZSA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2spIHsKKyAgICAgICAgICAgICAgICBtX2Js
b2Nrc1RvRHVwbGljYXRlTGlzdC5hcHBlbmQoYmxvY2spOworICAgICAgICAgICAgICAgIGJvb2wg
cmVzdWx0ID0gbV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5hZGQoYmxvY2spOworICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdCk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
CisgICAgICAgICAgICBhZGRCbG9ja1RvRHVwbGljYXRlKG1fdHJhY2UtPmJyYW5jaFBvaW50LmJs
b2NrKCkpOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fdHJhY2UtPmJs
b2NrcykgeworICAgICAgICAgICAgICAgIGlmIChibG9jayAhPSBtX3RyYWNlLT5icmFuY2hQb2lu
dC5ibG9jaygpKQorICAgICAgICAgICAgICAgICAgICBhZGRCbG9ja1RvRHVwbGljYXRlKGJsb2Nr
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgc3RkOjpzb3J0KAor
ICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LmJlZ2luKCksIG1fYmxvY2tz
VG9EdXBsaWNhdGVMaXN0LmVuZCgpLAorICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayog
bGVmdCwgQmFzaWNCbG9jayogcmlnaHQpIC0+IGJvb2wgeworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gbGVmdC0+aW5kZXgoKSA8IHJpZ2h0LT5pbmRleCgpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBPcmRlciBtYXR0ZXJzISBXZSB0cnkgdG8g
Y3JlYXRlIGEgQ0ZHIHRoYXQgZG9lc24ndCBsb29rIGxpa2UgZ2FyYmFnZS4gVGhhdCdzCisgICAg
ICAgICAgICAvLyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGZvciB0aGUgcGVyZm9ybWFuY2Ugb2Yg
bGluZWFyIHNjYW4uIEl0IGRvZXNuJ3QgbWF0dGVyIGZvcgorICAgICAgICAgICAgLy8gZ3JhcGgg
Y29sb3JpbmcgdGhvdWdoLiBJdCBkZWZpbml0ZWx5IG1hdHRlcnMgZm9yIGRlYnVnZ2luZyB0aGUg
Y29tcGlsZXIuCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9ja0JlZm9yZUluc2VydGlvblBv
aW50ID0gbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QubGFzdCgpOworICAgICAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0KSB7CisgICAgICAgICAg
ICAgICAgYXV0byBpdGVyID0gbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRlLmZpbmQoc3RkOjptYWtl
X3BhaXIoYmxvY2ssIG1fdHJhY2UtPnByZWRpY2F0ZSkpOworICAgICAgICAgICAgICAgIGlmIChp
dGVyICE9IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZS5lbmQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBib29sIHByZWRpY2F0ZVZhbHVlID0gaXRlci0+dmFsdWU7CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBkdXBsaWNhdGUgdGhlbi9lbHNl
IGJsb2Nrcy4gTm90ZSB0aGF0IGJlY2F1c2Ugb2YgaG93CisgICAgICAgICAgICAgICAgICAgIC8v
IG1fZHVwbGljYXRlZEZvclByZWRpY2F0ZSB3b3JrcywgdGhpcyBjb3VsZCBiZSBib3RoIGEgdGhl
biBhbmQgYSBlbHNlIGJsb2NrIGlmOgorICAgICAgICAgICAgICAgICAgICAvLyAtIFRoaXMgaXMg
ZG9taW5hdGVkIGJ5IChhbmQgZHVwbGljYXRlZCBmb3IpIGEgYnJhbmNoIHRoYXQgaXMgZG9taW5h
dGVkIGJ5IG91cgorICAgICAgICAgICAgICAgICAgICAvLyAgIGluc2VydGlvbiBwb2ludCwgYW5k
IGEgYnJhbmNoIGRvbWluYXRlZCBieSBvdXIgaW5zZXJ0aW9uIHBvaW50LgorICAgICAgICAgICAg
ICAgICAgICAvLyAtIE91ciBpbnNlcnRpb24gcG9pbnQgaXMgZG9taW5hdGVkIGJ5IChhbmQgZHVw
bGljYXRlZCBmb3IpIGFub3RoZXIgYnJhbmNoIG9uCisgICAgICAgICAgICAgICAgICAgIC8vICAg
b3VyIHByZWRpY2F0ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gQnV0IGlmIHRoaXMgYmxvY2sg
aXMgaW4gdGhlIHRoZW4gYW5kIGVsc2UgY2FzZSBvZiB0aGUgc2FtZSBwcmVkaWNhdGUsIHRoZW4g
aXQKKyAgICAgICAgICAgICAgICAgICAgLy8gaXMgdW5yZWFjaGFibGUuIFNvLCB3ZSBjYW4gZG8g
d2hhdGV2ZXIgd2Ugd2FudCB3aXRoIGl0LgorCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGxl
YXZlIHRoZW4gYmxvY2tzIHdoZXJlIHRoZXkgYXJlLgorICAgICAgICAgICAgICAgICAgICBpZiAo
cHJlZGljYXRlVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIC8vIE1vdmUgdGhlIGxvY2F0aW9u
IG9mIHRoZSBibG9jayBpbiB0aGUgcHJvZ3JhbSBmbG93LiBHb3R0YSBrZWVwIHRoZSBDRkcgc2Fu
ZS4KKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIEJsb2NrSW5zZXJ0aW9uU2V0OjpCbG9ja0luc2VydGlvbigKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBibG9ja0JlZm9yZUluc2VydGlvblBvaW50LT5pbmRleCgpICsg
MSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3Byb2MudGFrZUJsb2NrKGJsb2NrLT5p
bmRleCgpKSkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogbmV3Qmxv
Y2sgPQorICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0QWZ0ZXIoYmxvY2tC
ZWZvcmVJbnNlcnRpb25Qb2ludCwgYmxvY2stPmZyZXF1ZW5jeSgpKTsKKyAgICAgICAgICAgICAg
ICBibG9ja01hcFtibG9ja10gPSBuZXdCbG9jazsKKyAgICAgICAgICAgICAgICBuZXdCbG9jay0+
cHJlZGVjZXNzb3JzKCkgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgICAgICAgICAgICAg
bmV3QmxvY2stPnN1Y2Nlc3NvcnMoKSA9IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGF1dG8gZWxzZUJsb2NrRm9yID0gWyZdIChC
YXNpY0Jsb2NrKiBibG9jaykgLT4gQmFzaWNCbG9jayogeworICAgICAgICAgICAgICAgIGlmIChC
YXNpY0Jsb2NrKiByZXN1bHQgPSBibG9ja01hcFtibG9ja10pCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0KSB7CisgICAgICAgICAgICAgICAgYXV0byBmb2xkVmFs
dWVGb3IgPSBbJl0gKEJhc2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogdmFsdWUsIGJvb2wgcHJlZGlj
YXRlVmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUtPmNoaWxkKDApICE9IG1fdHJhY2UtPnByZWRpY2F0ZSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBw
cmVkaWNhdGVWYWx1ZSA/IGJsb2NrLT50YWtlbigpIDogYmxvY2stPm5vdFRha2VuKCkpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBjYXNlIENo
ZWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKSAhPSBtX3Ry
YWNlLT5wcmVkaWNhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmVkaWNhdGVWYWx1ZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH07CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgYXV0byByZXdpcmVCbG9j
a0ZvciA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2ssIGJvb2wgcHJlZGljYXRlVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAvLyBJbiB0aGUgY3VycmVudCByZXdpcmluZyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFu
eXRoaW5nIGZvciB0aGVuIGJsb2Nrcy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNz
b3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdlJ3JlIGR1cGxpY2F0aW5nIGNv
ZGUgZG9taW5hdGVkIGJ5IHRoZSBpbnNlcnRpb24gcG9pbnQuIFRoZXJlZm9yZSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIHRoZSBwcmVkZWNlc3NvcnMgc2hvdWxkIGVpdGhlciBiZSB0aGUg
aW5zZXJ0aW9uIHBvaW50LCBvciBpdCBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGEgYmxvY2sgaW4gdGhlIHNldCBvZiBkdXBsaWNhdGVkIGJsb2Nrcy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChwcmVkZWNlc3NvciA9PSBtX3RyYWNlLT5pbnNlcnRpb25Qb2ludCkK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobV9ibG9ja3NU
b0R1cGxpY2F0ZVNldC5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgICAgICAg
ICAgICAgcHJlZGVjZXNzb3IgPSBlbHNlQmxvY2tGb3IocHJlZGVjZXNzb3IpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LmNvbnRh
aW5zKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yID0g
ZWxzZUJsb2NrRm9yKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5hZGRQcmVkZWNlc3NvcihibG9j
ayk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fZHVwbGljYXRlZEZvclByZWRp
Y2F0ZS5maW5kKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3RyYWNlLT5wcmVkaWNhdGUpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVkaWNhdGVWYWx1ZSA9IGl0ZXItPnZhbHVl
OworICAgICAgICAgICAgICAgICAgICByZXdpcmVCbG9ja0ZvcihibG9jaywgcHJlZGljYXRlVmFs
dWUpOworICAgICAgICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxvY2ssIGJsb2NrLT5sYXN0
KCksIHByZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIGVsc2VCbG9jayA9IGVsc2VCbG9ja0ZvcihibG9jayk7CisgICAgICAgICAgICAgICAgcmV3
aXJlQmxvY2tGb3IoYmxvY2ssIHRydWUpOworICAgICAgICAgICAgICAgIHJld2lyZUJsb2NrRm9y
KGVsc2VCbG9jaywgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8v
IEZ1biBmYWN0OiB0aGlzIGxvb3Agd2lsbCBkdXBsaWNhdGUgY29kZSBhZnRlciB0aGUgdGhlbiBj
YXNlIG9mIGEgQ2hlY2suIFRoYXQncworICAgICAgICAgICAgICAgIC8vIGRlYWQgY29kZS4gQW5k
IHRoYXQncyBPSy4KKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykg
eworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2xvbmUgPSBtX3Byb2MuY2xvbmUodmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiBjbG9uZS0+Y2hpbGRy
ZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9
IHZhbHVlTWFwW2NoaWxkXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IHJl
cGxhY2VtZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZU1h
cFt2YWx1ZV0gPSBjbG9uZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZUJsb2NrLT5hcHBlbmQo
Y2xvbmUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9sZFZh
bHVlRm9yKGJsb2NrLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGZvbGRWYWx1
ZUZvcihlbHNlQmxvY2ssIGNsb25lLCBmYWxzZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSogaW5zZXJ0aW9uUG9pbnRK
dW1wID0gbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQtPmxhc3QoKTsKKyAgICAgICAgICAgIHN3aXRj
aCAoaW5zZXJ0aW9uUG9pbnRKdW1wLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBCcmFu
Y2g6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnRKdW1wLT5j
aGlsZCgwKSA9PSBtX3RyYWNlLT5wcmVkaWNhdGUpOworICAgICAgICAgICAgICAgIC8vIFRoZXJl
IHNob3VsZG4ndCBiZSBhbnl0aGluZyBsZWZ0IHRvIGRvIGlmIHdlJ3JlIGluIHRoaXMgc2l0dWF0
aW9uLgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBKdW1wOgorICAgICAgICAgICAgICAgIG1fdHJhY2UtPmluc2VydGlvblBvaW50LT5y
ZXBsYWNlTGFzdFdpdGhOZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3Byb2MsIEJy
YW5jaCwgaW5zZXJ0aW9uUG9pbnRKdW1wLT5vcmlnaW4oKSwgbV90cmFjZS0+cHJlZGljYXRlKTsK
KyAgICAgICAgICAgICAgICAvLyBUaGUgdW5kdXBsaWNhdGVkIGNvZGUgdGhhdCB0aGlzIGp1bXAg
YWxyZWFkeSBoYXMgYXMgaXRzIHN1Y2Nlc3NvciBpcyB3aGF0IHdlCisgICAgICAgICAgICAgICAg
Ly8gd2FudCB0byBiZSB0aGUgYHRoZW5gIGNhc2Ugb2YgdGhlIGJyYW5jaC4gU28sIHdlIHdhbnQg
dG8gYXBwZW5kIHRoZSBgZWxzZWAKKyAgICAgICAgICAgICAgICAvLyAobm90VGFrZW4pIGNhc2Uu
CisgICAgICAgICAgICAgICAgbV90cmFjZS0+aW5zZXJ0aW9uUG9pbnQtPmFwcGVuZFN1Y2Nlc3Nv
cigKKyAgICAgICAgICAgICAgICAgICAgZWxzZUJsb2NrRm9yKG1fdHJhY2UtPmluc2VydGlvblBv
aW50LT5zdWNjZXNzb3JCbG9jaygwKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICB3aGlsZSAoIW1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LmlzRW1wdHkoKSkgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LnJlbW92
ZShibG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
IChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVD
RkcoKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgRG9taW5hdG9y
cyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OworICAgIAorICAgIEhhc2hNYXA8VmFsdWUqLCBW
ZWN0b3I8VmFsdWVJbkJsb2NrPj4gbV9wcmVkaWNhdGVUb0JyYW5jaGVzOworICAgIAorICAgIEhh
c2hTZXQ8c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBWYWx1ZSo+PiBtX2Jsb2Nrc1dpdGhCcmFuY2hl
czsKKyAgICAKKyAgICAvLyBXZSBzYXkgdGhhdCBhIGJsb2NrIGlzIGR1cGxpY2F0ZWQgZm9yIGEg
YnJhbmNoIGlmIGl0J3MgZG9taW5hdGVkIGJ5IHRoZSBzdWNjZXNzb3Igb2Ygb25lIG9mCisgICAg
Ly8gdGhvc2UgYnJhbmNoZXMuIFRoZSBib29sIHZhbHVlIGlzIHRoZSBwcmVkaWNhdGUncyB2YWx1
ZSB3aGVuIHdlIGFyZSBpbiB0aGF0IGJsb2NrLgorICAgIEhhc2hNYXA8c3RkOjpwYWlyPEJhc2lj
QmxvY2sqLCBWYWx1ZSo+LCBib29sPiBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGU7CisgICAgCisg
ICAgVHJhY2UqIG1fdHJhY2U7CisKKyAgICBCYWc8VHJhY2U+IG1fdHJhY2VzOworICAgIFZlY3Rv
cjxUcmFjZSo+IG1fdHJhY2VzSW5PcmRlcjsKKyAgICAKKyAgICBlbnVtIGNsYXNzIEhvd0FmZmVj
dGVkIHsKKyAgICAgICAgTm90QWZmZWN0ZWQsCisgICAgICAgIFByZWRpY2F0ZSwKKyAgICAgICAg
SW5zZXJ0aW9uUG9pbnQsCisgICAgICAgIER1cGxpY2F0ZWQKKyAgICB9OworICAgIEluZGV4TWFw
PEJhc2ljQmxvY2sqLCBIb3dBZmZlY3RlZD4gbV9hZmZlY3RlZEJsb2NrczsKKyAgICAKKyAgICBW
ZWN0b3I8QmFzaWNCbG9jayo+IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0OworICAgIEluZGV4U2V0
PEJhc2ljQmxvY2sqPiBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0OworfTsKKworYm9vbCBzcGVjaWFs
aXplQnJhbmNoZXMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29w
ZShwcm9jLCAic3BlY2lhbGl6ZUJyYW5jaGVzIik7CisgICAgU3BlY2lhbGl6ZUJyYW5jaGVzIHNw
ZWNpYWxpemVCcmFuY2hlcyhwcm9jKTsKKyAgICByZXR1cm4gc3BlY2lhbGl6ZUJyYW5jaGVzLnJ1
bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVCcmFu
Y2hlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxp
emVCcmFuY2hlcy5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1NwZWNpYWxpemVCcmFuY2hlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgUHJvY2VkdXJlOworCisvLyBEdXBsaWNhdGVzIGNvZGUgdG8gcmVtb3ZlIGJyYW5j
aGVzLiBFYWNoIHBpZWNlIG9mIGNvZGUgZ2V0cyBkdXBsaWNhdGVkIGF0IG1vc3Qgb25jZSwgc28g
dGhlcmUKKy8vIGlzIG5vIGV4cG9uZW50aWFsIGJsb3ctdXAuCisKK2Jvb2wgc3BlY2lhbGl6ZUJy
YW5jaGVzKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZUluQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlSW5CbG9jay5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVJbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5CbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVJbkJsb2NrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KHBvaW50ZXJEdW1w
KG1fYmxvY2spLCAiOiIsIG1faW5kZXgsICItPiIsIHBvaW50ZXJEdW1wKG1fdmFsdWUpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suaAkobm9uZXhp
c3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZUluQmxvY2sgeworcHVibGlj
OgorICAgIFZhbHVlSW5CbG9jaygpIHsgfQorICAgIAorICAgIFZhbHVlSW5CbG9jayhCYXNpY0Js
b2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fdmFsdWUoYmxvY2stPmF0KGluZGV4
KSkgLy8gV2Ugc2F2ZSB0aGlzIGJlY2F1c2UgdGhhdCdzIHVzZWZ1bCBhZnRlciB0aGUgcGhhc2Ug
bWVzc2VzIHVwIGluZGljZXMuCisgICAgeworICAgIH0KKyAgICAKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFZhbHVlSW5CbG9j
ayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5t
X2Jsb2NrCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAg
ICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFZhbHVlSW5CbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IFZhbHVl
SW5CbG9jaygpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGOjpQdHJIYXNoPEJhc2ljQmxvY2sqPjo6aGFzaChtX2Jsb2NrKSArIG1faW5kZXg7
CisgICAgfQorICAgIAorICAgIFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZVR5cGUpCisgICAgeworICAgICAgICBtX2luZGV4LS07CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0
aGlzID09IFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrIHsgbnVsbHB0ciB9OworICAg
IHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OworICAgIFZhbHVlKiBtX3ZhbHVlIHsgbnVs
bHB0ciB9OworfTsKKworc3RydWN0IFZhbHVlSW5CbG9ja0hhc2ggeworICAgIHN0YXRpYyB1bnNp
Z25lZCBoYXNoKGNvbnN0IFZhbHVlSW5CbG9jayYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFsdWVJbkJsb2NrJiBhLCBjb25zdCBWYWx1
ZUluQmxvY2smIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdGV4cHIgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIz
OjpWYWx1ZUluQmxvY2s+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OlZhbHVlSW5CbG9ja0hhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6VmFsdWVJbkJsb2NrPiA6IHB1YmxpYyBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6VmFsdWVJbkJsb2NrPiB7CisgICAgc3RhdGlj
IGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDIzMTEyOCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTgtMDQtMjcgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBCMyBzaG91bGQgaGF2ZSBnZW5lcmFsaXplZCBwYXRoIHNwZWNpYWxpemF0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODUwNjAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIEFk
ZCBzb21lIGNvbW1lbnRzIGFuZCBzb21lIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHRoYXQgd2VyZSB1
c2VmdWwgZm9yIHRoZSBuZXcgcGhhc2UuCisKKyAgICAgICAgKiB3dGYvQml0VmVjdG9yLmg6Cisg
ICAgICAgICogd3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg6CisgICAgICAgIChXVEY6OkdyYXBoTm9k
ZVdvcmtsaXN0OjpwcmV0ZW5kVG9IYXZlU2Vlbik6CisgICAgICAgICogd3RmL0luZGV4U2V0Lmg6
CisgICAgICAgIChXVEY6OkluZGV4U2V0OjpyZW1vdmVBbGwpOgorCiAyMDE4LTA0LTI2ICBNYXJr
IExhbSAgPG1hcmsubGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBHYXJkZW5pbmc6IFNwZWN1bGF0
aXZlIGJ1aWxkIGZpeCBmb3IgV2luZG93cy4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAy
MzExMjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAt
MTEwLDYgKzExMCw4IEBAIHB1YmxpYzogCiAgICAgLy8gTGlrZSBlbnN1cmVTaXplKCksIGJ1dCBz
dXBwb3J0cyByZWR1Y2luZyB0aGUgc2l6ZSBvZiB0aGUgYml0dmVjdG9yLgogICAgIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHJlc2l6ZShzaXplX3QgbnVtQml0cyk7CiAgICAgCisgICAgLy8gQ2xl
YXJzIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4gSWYgeW91IHdhbnQgdG8gY2xlYXIg
dGhlIHNldCBhbmQgZnJlZSBtZW1vcnksIHRoZW4KKyAgICAvLyB5b3Ugd2FudCAqdGhpcyA9IEJp
dFZlY3RvcigpLgogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGNsZWFyQWxsKCk7CiAKICAg
ICBib29sIHF1aWNrR2V0KHNpemVfdCBiaXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9k
ZVdvcmtsaXN0LmgJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9k
ZVdvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDE1LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02NCw4ICs2NCwxMCBAQCBwdWJsaWM6CiAK
ICAgICBib29sIHNhdyhOb2RlIG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5jb250YWlucyhub2RlKTsg
fQogICAgIAorICAgIGJvb2wgcHJldGVuZFRvSGF2ZVNlZW4oTm9kZSBub2RlKSB7IHJldHVybiBt
X3NlZW4uYWRkKG5vZGUpOyB9CisgICAgCiAgICAgY29uc3QgU2V0JiBzZWVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWVuOyB9Ci0KKyAgICAKIHByaXZhdGU6CiAgICAgU2V0IG1fc2VlbjsKICAgICBW
ZWN0b3I8Tm9kZSwgMTY+IG1fc3RhY2s7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHJldmlzaW9uIDIzMTEy
OCkKKysrIFNvdXJjZS9XVEYvd3RmL0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDYg
KzYxLDEyIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBtX3NldC5jbGVhcihJbmRl
eEtleVR5cGU8VD46OmluZGV4KHZhbHVlKSk7CiAgICAgfQorICAgIAorICAgIC8vIFJlbW92ZXMg
ZXZlcnl0aGluZyBmcm9tIHRoZSBzZXQgd2l0aG91dCBmcmVlaW5nIG1lbW9yeS4KKyAgICB2b2lk
IHJlbW92ZUFsbCgpCisgICAgeworICAgICAgICBtX3NldC5jbGVhckFsbCgpOworICAgIH0KIAog
ICAgIGJvb2wgY29udGFpbnMoY29uc3QgVCYgdmFsdWUpIGNvbnN0CiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339104</attachid>
            <date>2018-04-29 21:29:29 -0700</date>
            <delta_ts>2018-04-30 17:03:10 -0700</delta_ts>
            <desc>it&apos;s starting to come to life</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>56040</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDk2IEBA
CisyMDE4LTA0LTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
QjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlzIGFkZHMg
YSBuZXcgcGhhc2UsIGNhbGxlZCBzcGVjaWFsaXplUGF0aHMsIHRoYXQgZHVwbGljYXRlcyBjb2Rl
IGluIG9yZGVyIHRvIHJlbW92ZQorICAgICAgICBicmFuY2hlcy4gSXQncyBhIHN1cGVyc2V0IG9m
IGxvb3AgdW5zd2l0Y2hpbmcgdGhhdCB3aWxsIGFsc28gaGFuZGxlIHN0cmFpdCBwYXRocyBmcm9t
IG9uZQorICAgICAgICBicmFuY2ggdG8gYW5vdGhlci4gRm9yIGV4YW1wbGUsIGl0IHdpbGwgY29u
dmVydDoKKyAgICAgICAgCisgICAgICAgICAgICBpZiAocCkKKyAgICAgICAgICAgICAgICBmb28K
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgIHRoaW5n
eQorICAgICAgICAgICAgaWYgKHApCisgICAgICAgICAgICAgICAgZnV6egorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGJ1enoKKyAgICAgICAgCisgICAgICAgIGludG86CisgICAg
ICAgIAorICAgICAgICAgICAgaWYgKHApIHsKKyAgICAgICAgICAgICAgICBmb28KKyAgICAgICAg
ICAgICAgICB0aGluZ3kKKyAgICAgICAgICAgICAgICBmdXp6CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIGJhcgorICAgICAgICAgICAgICAgIHRoaW5neQorICAgICAgICAg
ICAgICAgIGJ1enoKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFByb3ZpZGVkIHRo
YXQgdGhlIGJlbmVmaXQgKGVsaW1pbmF0aW9uIG9mIHRoZSBzZWNvbmQgYnJhbmNoKSBvdXR3ZWln
aHMgdGhlIGNvc3QgKHRoZSBzcGFjZQorICAgICAgICBjb3N0IG9mIHRoaW5neSBiZWluZyBlbWl0
dGVkIHR3aWNlKS4gVGhpcyB3aWxsIGRvIGEgTyhibG9ja3NeMykgc2VhcmNoIHRvIGZpbmQgdGhl
IG1vc3QKKyAgICAgICAgcHJvZml0YWJsZSBzdWNoIHNwZWNpYWxpemF0aW9ucyB0byBkbywgYW5k
IGl0IHdpbGwgb25seSBkbyB0aGUgbW9zdCBwcm9maXRhYmxlIG9mIHRob3NlLiBJdAorICAgICAg
ICB3aWxsIG5ldmVyIGR1cGxpY2F0ZSBjb2RlIG1vcmUgdGhhbiBvbmNlLgorICAgICAgICAKKyAg
ICAgICAgVGhlIHNlYXJjaCBjb25zaWRlcnMgYWxsIGR1cGxpY2F0aW9uIHBhdGhzIChjYWxsZWQg
dHJhY2VzIGluIHRoZSBwaGFzZSdzIGNvZGUpIHRoYXQgY2FuIGJlCisgICAgICAgIGZvcm1lZCBi
eToKKyAgICAgICAgCisgICAgICAgIC0gUGFpcnMgb2YgYnJhbmNoZXMgb24gdGhlIHNhbWUgcHJl
ZGljYXRlLCB3aGVyZSBvbmUgYnJhbmNoIGRvbWluYXRlcyB0aGUgb3RoZXIuCisgICAgICAgIAor
ICAgICAgICAtIEhvaXN0aW5nIGEgYnJhbmNoLCBvciBzb21lIG90aGVyIHRyYWNlLCBvdXQgb2Yg
YSBsb29wLgorICAgICAgICAKKyAgICAgICAgSSBiZWxpZXZlIHRoYXQgaW4gdGhlIHdvcnN0IGNh
c2UsIHRoaXMgaXMgYSBPKGJsb2Nrc14zKSBzZWFyY2gsIGlmIHlvdSBjcmVhdGVkIGEgcHJvZ3Jh
bQorICAgICAgICB3aG9zZSBsb29wIGRlcHRoIHdhcyBPKGJsb2NrcykgYW5kIHlvdSBoYWQgTyhi
bG9ja3MpIGRpZmZlcmVudCB0cmFjZXMgaW5zaWRlIHRoZSBsb29wIGJvZHkuCisgICAgICAgIFRo
YXQncyBjZXJ0YWlubHkgcG9zc2libGUgYnV0IG5vdCB2ZXJ5IHByb2JhYmxlLgorICAgICAgICAK
KyAgICAgICAgSSBoYXZlbid0IHRlc3RlZCB0aGlzIHlldC4gSXQncyBzdGlsbCBhIHdvcmsgaW4g
cHJvZ3Jlc3MuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGIzL0IzQnJlYWtDcml0
aWNhbEVkZ2VzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmJyZWFrQ3JpdGljYWxFZGdlcyk6Cisg
ICAgICAgICogYjMvQjNGaXhTU0EuY3BwOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToKKyAg
ICAgICAgKiBiMy9CM0dlbmVyYXRlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OmdlbmVyYXRlVG9B
aXIpOgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKiBiMy9CM1Byb2Nl
ZHVyZS5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjp0YWtlQmxvY2spOgorICAgICAg
ICAqIGIzL0IzU3BlY2lhbGl6ZVBhdGhzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpT
cGVjaWFsaXplUGF0aHM6OlNwZWNpYWxpemVQYXRocyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVj
aWFsaXplUGF0aHM6OnJ1bik6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OmNy
ZWF0ZUhvaXN0aW5nVGFyZ2V0cyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6
OmZpbmRCcmFuY2hlcyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OmZpbmRC
bG9ja3NEdXBsaWNhdGVkRm9yUHJlZGljYXRlcyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFs
aXplUGF0aHM6OmNyZWF0ZVRyYWNlc0J5RG9taW5hbnRSZWR1bmRhbmN5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlNwZWNpYWxpemVQYXRoczo6Y3JlYXRlVHJhY2VzQnlIb2lzdGluZyk6CisgICAgICAg
IChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OmNsb3NlVHJhY2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3BlY2lhbGl6ZVBhdGhzOjpjaG9vc2VUcmFjZU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6
OlNwZWNpYWxpemVQYXRoczo6c2ltdWxhdGVEdXBsaWNhdGlvbkFuZFBydW5lVHJhY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVQYXRoczo6ZGVtb3RlQXBwcm9wcmlhdGVWYWx1ZXMp
OgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpkdXBsaWNhdGVUcmFjZXMpOgor
ICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpUcmFjZTo6YmVuZWZpdE92ZXJDb3N0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OnNwZWNpYWxpemVQYXRocyk6CisgICAgICAgICog
YjMvQjNTcGVjaWFsaXplUGF0aHMuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1ZUluQmxv
Y2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6ZHVtcCBjb25z
dCk6CisgICAgICAgICogYjMvQjNWYWx1ZUluQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpWYWx1ZUluQmxvY2s6OlZhbHVlSW5CbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZUluQmxvY2s6OmJsb2NrIGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6
aW5kZXggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjp2YWx1ZSBjb25z
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Om9wZXJhdG9yPT0gY29uc3QpOgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpvcGVyYXRvciE9IGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Omhhc2ggY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVJbkJsb2NrOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
SW5CbG9ja0hhc2g6OmVxdWFsKToKKwogMjAxOC0wNC0yNyAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBbSlNDXVtBUk02NF1bTGludXhdIEFkZCBjb2xs
ZWN0Q1BVRmVhdHVyZXMgdXNpbmcgYXV4aWxpYXJ5IHZlY3RvcgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL1NvdXJjZXMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9Tb3VyY2VzLnR4dAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDcgQEAgYjMvQjNSZWR1
Y2VEb3VibGVUb0Zsb2F0LmNwcAogYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKIGIzL0IzU1NBQ2Fs
Y3VsYXRvci5jcHAKIGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHAKK2IzL0IzU3BlY2lhbGl6ZVBhdGhz
LmNwcAogYjMvQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwCiBiMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKQEAgLTE2NSw2ICsxNjYsNyBAQCBiMy9C
M1Vwc2lsb25WYWx1ZS5jcHAKIGIzL0IzVXNlQ291bnRzLmNwcAogYjMvQjNWYWxpZGF0ZS5jcHAK
IGIzL0IzVmFsdWUuY3BwCitiMy9CM1ZhbHVlSW5CbG9jay5jcHAKIGIzL0IzVmFsdWVLZXkuY3Bw
CiBiMy9CM1ZhbHVlUmVwLmNwcAogYjMvQjNWYXJpYWJsZS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtNjk1LDYgKzY5NSw4IEBACiAJCTBGRjRCNEM3MUU4ODkzQzUwMERCQkU4NiAvKiBBaXJD
RkcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRC
NEM2MUU4ODkzQkYwMERCQkU4NiAvKiBBaXJDRkcuaCAqLzsgfTsKIAkJMEZGNEI0Q0IxRTg4OUQ3
RTAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNEI0QzkxRTg4OUQ3ODAwREJCRTg2IC8qIEIzVmFy
aWFibGVMaXZlbmVzcy5oICovOyB9OwogCQkwRkY2MEFDMjE2NzQwRjgzMDAwMjk3NzkgLyogUmVk
dWNlV2hpdGVzcGFjZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRkY2OEMxRDIw
OTQwRUJDMDBGQzVEREMgLyogQjNTcGVjaWFsaXplUGF0aHMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAvKiBC
M1NwZWNpYWxpemVQYXRocy5oICovOyB9OworCQkwRkY2OEMxRTIwOTQwRUJGMDBGQzVEREMgLyog
QjNWYWx1ZUluQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjY4QzFCMjA5NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVlSW5CbG9jay5oICovOyB9
OwogCQkwRkY3MTY4QzE1QTNCMjM1MDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcxNjhBMTVBM0IyMzEw
MDhGNURBQSAvKiBQcm9wZXJ0eU9mZnNldC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY3Mjk5MzE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUI5MTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OTUxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2Zp
bGVyQnl0ZWNvZGVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTI5NjEsNiArMjk2MywxMCBAQAogCQkwRkY0QjRDOTFFODg5RDc4MDBEQkJFODYg
LyogQjNWYXJpYWJsZUxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFyaWFibGVMaXZlbmVzcy5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZUxpdmVuZXNzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjYwQUJGMTY3NDBGODEwMDAyOTc3OSAvKiBS
ZWR1Y2VXaGl0ZXNwYWNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFJlZHVjZVdoaXRlc3BhY2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY2
MEFDMDE2NzQwRjgxMDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRjY4QzE5MjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVQYXRo
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1NwZWNpYWxpemVQ
YXRocy5jcHA7IHBhdGggPSBiMy9CM1NwZWNpYWxpemVQYXRocy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRjY4QzFBMjA5NDBFQjcwMEZDNUREQyAvKiBCM1NwZWNpYWxpemVQ
YXRocy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1NwZWNpYWxpemVQYXRo
cy5oOyBwYXRoID0gYjMvQjNTcGVjaWFsaXplUGF0aHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZGNjhDMUIyMDk0MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbkJsb2NrLmg7IHBhdGggPSBi
My9CM1ZhbHVlSW5CbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY2OEMx
QzIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUluQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZUluQmxvY2suY3BwOyBwYXRoID0gYjMvQjNWYWx1
ZUluQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3MTY4QTE1QTNC
MjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvcGVydHlPZmZzZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGNzI5OTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gUHJvZmlsZXJCeXRlY29kZS5jcHA7IHBhdGgg
PSBwcm9maWxlci9Qcm9maWxlckJ5dGVjb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZGNzI5OTMxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJCeXRlY29kZS5oOyBwYXRoID0g
cHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtNTE5OCw2ICs1MjA0LDggQEAKIAkJCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
bG90QmFzZVZhbHVlLmNwcCAqLywKIAkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNT
bG90QmFzZVZhbHVlLmggKi8sCiAJCQkJMEYyQkJEOTExQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3Bh
cnNlQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRjY4QzE5MjA5NDBFQjcwMEZDNUREQyAvKiBCM1Nw
ZWNpYWxpemVQYXRocy5jcHAgKi8sCisJCQkJMEZGNjhDMUEyMDk0MEVCNzAwRkM1RERDIC8qIEIz
U3BlY2lhbGl6ZVBhdGhzLmggKi8sCiAJCQkJMEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIz
U1NBQ2FsY3VsYXRvci5jcHAgKi8sCiAJCQkJMEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIz
U1NBQ2FsY3VsYXRvci5oICovLAogCQkJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi8sCkBAIC01MjI2LDYgKzUyMzQsOCBAQAogCQkJ
CTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8sCiAJCQkJMEZFQzg0
RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEZBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCisJCQkJMEZGNjhDMUMyMDk0MEVCNzAwRkM1RERD
IC8qIEIzVmFsdWVJbkJsb2NrLmNwcCAqLywKKwkJCQkwRkY2OEMxQjIwOTQwRUI3MDBGQzVEREMg
LyogQjNWYWx1ZUluQmxvY2suaCAqLywKIAkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQkwRjMzOEUwODFCRjAyNzZDMDAxM0M4OEYgLyogQjNW
YWx1ZUtleS5jcHAgKi8sCiAJCQkJMEYzMzhFMDkxQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVL
ZXkuaCAqLywKQEAgLTg2ODgsNiArODY5OCw3IEBACiAJCQkJRkVCNThDMTUxODdCOEIxNjAwOThF
RjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5OEQw
RTE4M0UzODAwMEY5Mjk3IC8qIEVycm9ySW5zdGFuY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDJFOTBGMEUxODM5REIwMDBGOTI5NyAvKiBFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZGNjhDMUUyMDk0MEVCRjAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTZCNzMxQjFCREEwOEQxMDAzMzFCODQgLyogRXJyb3JQcm90b3R5cGUu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEFEOTEwQzFEQ0E5Mjk0MDAxNEY5RkUgLyogRXZh
bENvZGVCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3MzQxRDIxREMwMkUyRTAwQUEyOUJB
IC8qIEV2YWxFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTkzNTYsNiArOTM2Nyw3IEBA
CiAJCQkJQTUwM0ZBMjIxODhFRkY2ODAwMTEwRjE0IC8qIFNjcmlwdERlYnVnTGlzdGVuZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1MDNGQTI2MTg4RUZGRkQwMDExMEYxNCAvKiBTY3JpcHREZWJ1
Z1NlcnZlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3MzQxQ0UxREMwMkQ3OTAwQUEyOUJBIC8q
IFNjcmlwdEV4ZWN1dGFibGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRjY4QzFEMjA5NDBFQkMw
MEZDNUREQyAvKiBCM1NwZWNpYWxpemVQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0VBRTdE
N0I4ODlCNDc3QkE5M0FCQTZDIC8qIFNjcmlwdEZldGNoZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzMjAxQzFFMUY4RTgyNEMwMDc2QTAzMiAvKiBTY3JpcHRGZXRjaFBhcmFtZXRlcnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE1NUQ5M0E2MTg1MDEyQTgwMDQwMERFRCAvKiBTY3JpcHRGdW5jdGlv
bkNhbGwuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QnJlYWtDcml0aWNhbEVkZ2VzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCcmVha0NyaXRpY2FsRWRnZXMuY3BwCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCcmVha0NyaXRpY2FsRWRnZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHZvaWQgYnJlYWtDcml0aWNhbEVkZ2VzKFByb2NlZHVyZSYg
cHJvYykKICAgICAgICAgfQogICAgIH0KIAotICAgIGluc2VydGlvblNldC5leGVjdXRlKCk7Ci0g
ICAgcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAgaWYgKGluc2VydGlvblNldC5leGVjdXRlKCkp
CisgICAgICAgIHByb2MuaW52YWxpZGF0ZUNGRygpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24g
MjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAx
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE3Miw2ICsxNzIsNyBAQCB2b2lkIGZpeFNTQUdsb2JhbGx5KFByb2NlZHVy
ZSYgcHJvYykKICAgICBUaW1pbmdTY29wZSB0aW1pbmdTY29wZSgiZml4U1NBOiBjb252ZXJ0Iik7
CiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAgICBJbmRleFNwYXJzZVNl
dDxLZXlWYWx1ZVBhaXI8dW5zaWduZWQsIFZhbHVlKj4+IG1hcHBpbmcocHJvYy52YXJpYWJsZXMo
KS5zaXplKCkpOworICAgIEluZGV4U2V0PFZhbHVlKj4gdmFsdWVzVG9EZWxldGU7CiAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAg
IG1hcHBpbmcuY2xlYXIoKTsKICAgICAgICAgCkBAIC0yMDcsNiArMjA4LDcgQEAgdm9pZCBmaXhT
U0FHbG9iYWxseShQcm9jZWR1cmUmIHByb2MpCiAgICAgICAgICAgICAgICAgVmFyaWFibGUqIHZh
cmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKIAogICAgICAgICAgICAgICAgIHZh
bHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGVuc3VyZU1hcHBpbmcodmFyaWFibGUsIHZhbHVlSW5k
ZXgsIHZhbHVlLT5vcmlnaW4oKSkpOworICAgICAgICAgICAgICAgIHZhbHVlc1RvRGVsZXRlLmFk
ZCh2YWx1ZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgCkBAIC0yNDYsNiArMjQ4LDE5IEBAIHZvaWQgZml4U1NBR2xvYmFsbHkoUHJvY2Vk
dXJlJiBwcm9jKQogCiAgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKICAgICB9
CisgICAgCisgICAgLy8gVGhpcyBpcyBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksIGJ1dCBpdCBs
ZWF2ZXMgdGhlIElSIG5pY2UgYW5kIHRpZHksIHdoaWNoIGlzIHBhcnRpY3VsYXJseQorICAgIC8v
IHVzZWZ1bCBmb3IgcGhhc2VzIHRoYXQgZG8gc2l6ZSBlc3RpbWF0ZXMuCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IHByb2MpIHsKKyAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlbW92ZUFs
bE1hdGNoaW5nKAorICAgICAgICAgICAgWyZdIChWYWx1ZSogdmFsdWUpIC0+IGJvb2wgeworICAg
ICAgICAgICAgICAgIGlmICghdmFsdWVzVG9EZWxldGUuY29udGFpbnModmFsdWUpICYmIHZhbHVl
LT5vcGNvZGUoKSAhPSBOb3ApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0pOworICAgIH0KIAog
ICAgIGlmIChCM0ZpeFNTQUludGVybmFsOjp2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkIz
IGFmdGVyIFNTQSBjb252ZXJzaW9uOlxuIik7CkBAIC0zMjQsNiArMzM5LDkgQEAgYm9vbCBmaXhT
U0EoUHJvY2VkdXJlJiBwcm9jKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAi
Zml4U1NBIik7CiAKKyAgICBpZiAocHJvYy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAKICAgICAvLyBMb3RzIG9mIHZhcmlhYmxlcyBoYXZlIHRyaXZp
YWwgbG9jYWwgbGl2ZW5lc3MuIFdlIGNhbiBhbGxvY2F0ZSB0aG9zZSB3aXRob3V0IGFueQogICAg
IC8vIHRyb3VibGUuCiAgICAgZml4U1NBTG9jYWxseShwcm9jKTsKQEAgLTMzNiw3ICszNTQsNiBA
QCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAgICAgaWYgKHByb2MudmFyaWFibGVzKCku
aXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgLy8gV2Uga25vdyB0
aGF0IHdlIGhhdmUgdmFyaWFibGVzIHRvIG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBi
cmVha0NyaXRpY2FsRWRnZXMocHJvYyk7CiAKICAgICBmaXhTU0FHbG9iYWxseShwcm9jKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDIzMTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsNiArNDcsNyBAQAogI2luY2x1ZGUgIkIzUHVyZUNTRS5oIgogI2luY2x1ZGUg
IkIzUmVkdWNlRG91YmxlVG9GbG9hdC5oIgogI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIK
KyNpbmNsdWRlICJCM1NwZWNpYWxpemVQYXRocy5oIgogI2luY2x1ZGUgIkIzVGltaW5nU2NvcGUu
aCIKICNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCiAjaW5jbHVkZSAiUENUb0NvZGVPcmlnaW5NYXAu
aCIKQEAgLTg3LDEyICs4OCw3IEBAIHZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKICAgICAgICAgaG9pc3RMb29wSW52YXJpYW50VmFsdWVzKHByb2NlZHVyZSk7CiAgICAg
ICAgIGlmIChlbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucyhwcm9jZWR1cmUpKQogICAgICAg
ICAgICAgZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKTsKLSAgICAgICAg
Zm9sZFBhdGhDb25zdGFudHMocHJvY2VkdXJlKTsKLSAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJv
Y2VkdXJlKTsKICAgICAgICAgaW5mZXJTd2l0Y2hlcyhwcm9jZWR1cmUpOwotICAgICAgICBkdXBs
aWNhdGVUYWlscyhwcm9jZWR1cmUpOwotICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKLSAgICAg
ICAgZm9sZFBhdGhDb25zdGFudHMocHJvY2VkdXJlKTsKICAgICAgICAgCiAgICAgICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCiAgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKQEAgLTEwNiw2ICsxMDIsMTMgQEAg
dm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlKQogCiAgICAgaWYgKHByb2Nl
ZHVyZS5vcHRMZXZlbCgpID49IDIpIHsKICAgICAgICAgcmVkdWNlU3RyZW5ndGgocHJvY2VkdXJl
KTsKKyAgICAgICAgZm9sZFBhdGhDb25zdGFudHMocHJvY2VkdXJlKTsKKyAgICAgICAgc3BlY2lh
bGl6ZVBhdGhzKHByb2NlZHVyZSk7CisgICAgICAgIGZpeFNTQShwcm9jZWR1cmUpOworICAgICAg
ICBkdXBsaWNhdGVUYWlscyhwcm9jZWR1cmUpOworICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsK
KyAgICAgICAgZm9sZFBhdGhDb25zdGFudHMocHJvY2VkdXJlKTsKKyAgICAgICAgcmVkdWNlU3Ry
ZW5ndGgocHJvY2VkdXJlKTsKIAogICAgICAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0
aW9ucyBoZXJlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNTA3CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5j
cHAJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkzLDcgKzkzLDYgQEAgVmFsdWUqIFByb2NlZHVy
ZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQogICAgIHJldHVybiBtX3ZhbHVlcy5hZGQoV1RGTW92ZShj
bG9uZSkpOwogfQogCi0KIFZhbHVlKiBQcm9jZWR1cmU6OmFkZEludENvbnN0YW50KE9yaWdpbiBv
cmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkKIHsKICAgICBzd2l0Y2ggKHR5cGUpIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAyMzEx
MjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQyLDYgKzE0Miw4IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CiAgICAgQmFzaWNCbG9jayogYXQodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQogICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorICAgIAorICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiB0YWtlQmxvY2so
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIFdURk1vdmUobV9ibG9ja3NbaW5kZXhdKTsgfQogCiAg
ICAgdHlwZWRlZiBXVEY6OkluZGV4ZWRDb250YWluZXJJdGVyYXRvcjxQcm9jZWR1cmU+IGl0ZXJh
dG9yOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplUGF0aHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVQ
YXRocy5jcHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Bl
Y2lhbGl6ZVBhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNTcGVjaWFsaXplUGF0aHMuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0JyZWFrQ3JpdGljYWxFZGdlcy5oIgorI2luY2x1
ZGUgIkIzRG9taW5hdG9ycy5oIgorI2luY2x1ZGUgIkIzRml4U1NBLmgiCisjaW5jbHVkZSAiQjNQ
aGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZUluQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
PHd0Zi9JbmRleE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9JbmRleFNldC5oPgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFNwZWNp
YWxpemVQYXRocyB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHZlcmJvc2UgPSBmYWxzZTsK
KyAgICAKKyAgICBzdHJ1Y3QgUGF0aCB7CisgICAgICAgIGRvdWJsZSBiZW5lZml0T3ZlckNvc3Qo
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICAvLyBTdXBlciB2YWx1YWJsZToKKyAgICAg
ICAgICAgIC8vIDEpIFBhaXIgb2YgYnJhbmNoZXMgd2l0aCB2ZXJ5IGxpdHRsZSBjb2RlIHRvIGR1
cGxpY2F0ZSBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAgICAvLyAyKSBCcmFuY2ggaW5zaWRlIG9m
IHNtYWxsIGxvb3AuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gTm90IHZhbHVhYmxl
OgorICAgICAgICAgICAgLy8gMykgRHVwbGljYXRpbmcgYSBsYXJnZSBuZXN0ZWQgbG9vcCB0byBo
b2lzdCBhbiBpbm5lciBicmFuY2guCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4g
Y2FzZSBvZiAoMSksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgPiAxIGJ1dCB0aGUgYmVuZWZp
dCB0byBiZSAxLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIEluIGNhc2Ugb2YgKDIp
LCB3ZSBleHBlY3Qgc3BhY2VDb3N0IHRvIGJlIDUtMjAgYnV0IHRoZSBiZW5lZml0IHRvIGJlIDku
CisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBvZiAoMyksIHdlIGV4cGVj
dCBzcGFjZUNvc3QgdG8gYmUgPjEwMCBidXQgdGhlIGJlbmVmaXQgdG8gYmUgPjEwMC4KKyAgICAg
ICAgICAgIHJldHVybiBuZXRCZW5lZml0KCkgLyBzcGFjZUNvc3Q7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGRvdWJsZSBuZXRCZW5lZml0KCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGJlbmVmaXQgLSBpbnNlcnRlZEJyYW5jaENvc3QoKTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZG91YmxlIGluc2VydGVkQnJhbmNoQ29zdCgpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnNlcnRpb25Qb2ludC0+ZnJlcXVlbmN5KCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICBvdXQucHJpbnQoCisgICAgICAgICAgICAgICAg
IntwcmVkaWNhdGUgPSAiLCBwb2ludGVyRHVtcChwcmVkaWNhdGUpLCAiLCIKKyAgICAgICAgICAg
ICAgICAiIGluc2VydGlvblBvaW50ID0gIiwgcG9pbnRlckR1bXAoaW5zZXJ0aW9uUG9pbnQpLCAi
LCIKKyAgICAgICAgICAgICAgICAiIGJyYW5jaFBvaW50ID0gIiwgYnJhbmNoUG9pbnQsICIsIgor
ICAgICAgICAgICAgICAgICIgYmVuZWZpdCA9ICIsIGJlbmVmaXQsICIsIgorICAgICAgICAgICAg
ICAgICIgaW5zZXJ0ZWRCcmFuY2hDb3N0ID0gIiwgaW5zZXJ0ZWRCcmFuY2hDb3N0KCksICIsIgor
ICAgICAgICAgICAgICAgICIgc3BhY2VDb3N0ID0gIiwgc3BhY2VDb3N0LCAiLCIKKyAgICAgICAg
ICAgICAgICAiIGJlbmVmaXRPdmVyQ29zdCA9ICIsIGJlbmVmaXRPdmVyQ29zdCgpLCAiLCIKKyAg
ICAgICAgICAgICAgICAiIGJsb2NrcyA9IFsiLCBwb2ludGVyTGlzdER1bXAoYmxvY2tzKSwgIl19
Iik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgeyBudWxs
cHRyIH07CisgICAgICAgIEJhc2ljQmxvY2sqIGluc2VydGlvblBvaW50IHsgbnVsbHB0ciB9OyAv
LyBUaGlzIGlzIGEgYmxvY2sgdGhhdCBlbmRzIGluIGEgYnJhbmNoIHRoYXQgd2UncmUgc3BlY2lh
bGl6aW5nLCBvciBpdCBlbmRzIGluIGEgSnVtcCBiZWNhdXNlIHRoaXMgaXMgYSBob2lzdGluZyB0
YXJnZXQuCisgICAgICAgIFZhbHVlSW5CbG9jayBicmFuY2hQb2ludDsKKyAgICAgICAgZG91Ymxl
IGJlbmVmaXQgeyAwIH07CisgICAgICAgIGRvdWJsZSBzcGFjZUNvc3QgeyAwIH07CisgICAgICAg
IFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzOyAvLyBUaGUgbGlzdCBvZiBkdXBsaWNhdGVkIGJs
b2NrcyBub3QgaW5jbHVkaW5nIHRoZSBicmFuY2hQb2ludC4KKyAgICB9OworICAgIAorcHVibGlj
OgorICAgIFNwZWNpYWxpemVQYXRocyhQcm9jZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9j
KHByb2MpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIHJ1bigpCisgICAgeworICAgICAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIlN0YXJ0aW5nIHNwZWNpYWxpemVQ
YXRocy4gSVIgYmVmb3JlIGFueSBjaGFuZ2VzOlxuIiwgbV9wcm9jKTsKKyAgICAgICAgCisgICAg
ICAgIGJyZWFrQ3JpdGljYWxFZGdlcyhtX3Byb2MpOworICAgICAgICBjcmVhdGVIb2lzdGluZ1Rh
cmdldHMoKTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIklS
IGFmdGVyIGhvaXN0aW5nIHRhcmdldCBjcmVhdGlvbiwgYmVmb3JlIGFuYWx5c2lzOlxuIiwgbV9w
cm9jKTsKKyAgICAgICAgCisgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2MuZG9taW5hdG9y
cygpOworICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOworICAgICAgICBmaW5kQnJh
bmNoZXMoKTsKKyAgICAgICAgZmluZEJsb2Nrc0R1cGxpY2F0ZWRGb3JQcmVkaWNhdGVzKCk7Cisg
ICAgICAgIGNyZWF0ZVBhdGhzQnlEb21pbmFudFJlZHVuZGFuY3koKTsKKyAgICAgICAgY3JlYXRl
UGF0aHNCeUhvaXN0aW5nKCk7CisgICAgICAgIGNob29zZVBhdGhPcmRlcigpOworICAgICAgICBz
aW11bGF0ZUR1cGxpY2F0aW9uQW5kUHJ1bmVQYXRocygpOworICAgICAgICAKKyAgICAgICAgaWYg
KG1fcGF0aHNJbk9yZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRGlkIG5vdCBzZWxlY3QgYW55IHBhdGhzLlxuIik7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlm
ICh2ZXJib3NlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJTZWxlY3RlZCBwYXRocyBpbiBkZXNj
ZW5kaW5nIG9yZGVyIG9mIGJlbmVmaXRPdmVyQ29zdDpcbiIpOworICAgICAgICAgICAgZm9yIChQ
YXRoKiBwYXRoIDogbV9wYXRoc0luT3JkZXIpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAg
ICIsICpwYXRoLCAiXG4iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZGVtb3RlQXBw
cm9wcmlhdGVWYWx1ZXMoKTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIklSIGFmdGVyIGRlbW90aW5nIGFwcHJvcHJpYXRlIHZhbHVlczpcbiIsIG1fcHJvYyk7
CisgICAgICAgIAorICAgICAgICBkdXBsaWNhdGVQYXRocygpOworCisgICAgICAgIGlmICh2ZXJi
b3NlKQorICAgICAgICAgICAgZGF0YUxvZygiSVIgYWZ0ZXIgc3BlY2lhbGl6ZVBhdGhzOlxuIiwg
bV9wcm9jKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCBjcmVhdGVIb2lzdGluZ1RhcmdldHMoKQorICAgIHsKKyAgICAgICAg
Ly8gQWxsIGxvd2VyLWZyZXF1ZW5jeSBwcmVkZWNlc3NvcnMgb2YgYSBibG9jayBzaG91bGQganVt
cCB0byB0aGF0IGJsb2NrIHZpYSBhIGhvaXN0aW5nCisgICAgICAgIC8vIHRhcmdldCBibG9jay4g
SWYgd2UgZG9uJ3QgdXNlIHRoZXNlIGJsb2NrcywgdGhleSdsbCBnZXQgY29sbGVjdGVkIGJ5IHJl
ZHVjZVN0cmVuZ3RoLgorICAgICAgICAKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0
aW9uU2V0KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9wcm9jKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkxvd2VyRnJlcXVlbmN5
UHJlZGVjZXNzb3JzID0gMDsKKyAgICAgICAgICAgIGRvdWJsZSBtYXhGcmVxdWVuY3lPZkxvd2Vy
RnJlcXVlbmN5UHJlZGVjZXNzb3JzID0gMDsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICBp
ZiAocHJlZGVjZXNzb3ItPmZyZXF1ZW5jeSgpID49IGJsb2NrLT5mcmVxdWVuY3koKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgbnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycysrOworICAgICAgICAgICAgICAg
IG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPQorICAgICAgICAgICAg
ICAgICAgICBzdGQ6Om1heChtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3Jz
LCBwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAobnVtYmVyT2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycyA8IDIp
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGhvaXN0aW5nVGFyZ2V0ID0gaW5zZXJ0aW9uU2V0Lmluc2VydEJlZm9yZShibG9j
aywgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29ycyk7CisgICAgICAgICAg
ICBob2lzdGluZ1RhcmdldC0+YXBwZW5kTmV3PFZhbHVlPihtX3Byb2MsIEp1bXAsIGJsb2NrLT5h
dCgwKS0+b3JpZ2luKCkpOworICAgICAgICAgICAgaG9pc3RpbmdUYXJnZXQtPnNldFN1Y2Nlc3Nv
cnMoYmxvY2spOworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJs
b2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+
ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZyZXF1ZW5jeSgpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBwcmVkZWNlc3Nvci0+
cmVwbGFjZVN1Y2Nlc3NvcihibG9jaywgaG9pc3RpbmdUYXJnZXQpOworICAgICAgICAgICAgICAg
IGhvaXN0aW5nVGFyZ2V0LT5hZGRQcmVkZWNlc3NvcihwcmVkZWNlc3Nvcik7CisgICAgICAgICAg
ICAgICAgYmxvY2stPnJlbW92ZVByZWRlY2Vzc29yKHByZWRlY2Vzc29yKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJsb2NrLT5hZGRQcmVkZWNlc3Nvcihob2lzdGluZ1RhcmdldCk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQor
ICAgICAgICAgICAgbV9wcm9jLmludmFsaWRhdGVDRkcoKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaW5kQnJhbmNoZXMoKQorICAgIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IG1fcHJvYykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGJsb2NrLT5zaXpl
KCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0
KGluZGV4KTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2s6IHsK
KyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IHZhbHVlLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG1fcHJlZGljYXRlVG9C
cmFuY2hlcy5hZGQocHJlZGljYXRlLCBWZWN0b3I8VmFsdWVJbkJsb2NrPigpKS5pdGVyYXRvci0+
dmFsdWUuYXBwZW5kKFZhbHVlSW5CbG9jayhibG9jaywgaW5kZXgpKTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBFYWNoIGJsb2NrIGNhbiBvbmx5IGhhdmUgb25lICJicmFuY2giLCBzaW5jZToK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gMSkgVGhpcyBy
ZWR1bmRhbmN5IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIGZpeGVkOgorICAgICAgICAgICAgICAg
ICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAgICAgICAgICAg
ICAgICAgIC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAg
IENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAv
LyAyKSBUaGlzIHJlZHVuZGFuY3kgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQ6CisgICAg
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2ZvbzoKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAg
ICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAvLyAzKSBUaGlzIHJlZHVuZGFuY3kgaXMgbm90IHZhbGlkIElSOgorICAgICAg
ICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAgICBCQiNmb286CisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAgICAgICAg
IC8vICAgICAgICBDaGVjayhAcCkKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAg
ICAgICAgICAgLy8gNCkgVGhpcyByZWR1bmRhbmN5IGlzIG5vdCB2YWxpZCBJUjoKKyAgICAgICAg
ICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgQkIjZm9vOgorICAgICAg
ICAgICAgICAgICAgICAvLyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAv
LyAgICAgICAgQnJhbmNoKEBwKQorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAg
ICAgICAgICAvLyBPZiBjb3Vyc2UsIHRoZSBmaXJzdCB0d28gYXNzdW1wdGlvbnMgY291bGQgYmUg
dmlvbGF0ZWQgYmVjYXVzZSBvZiBhIG1pc3NlZAorICAgICAgICAgICAgICAgICAgICAvLyBvcHRp
bWl6YXRpb24gb3Bwb3J0dW5pdHkuIFRoaXMgcGhhc2UgaXMgcHJlcGFyZWQgZm9yIHRoYXQuCisg
ICAgICAgICAgICAgICAgICAgIG1fYmxvY2tzV2l0aEJyYW5jaGVzLmFkZChzdGQ6Om1ha2VfcGFp
cihibG9jaywgcHJlZGljYXRlKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQgZmluZEJsb2Nrc0R1cGxp
Y2F0ZWRGb3JQcmVkaWNhdGVzKCkKKyAgICB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIGlmIChibG9jay0+bGFzdCgpLT5vcGNvZGUoKSAh
PSBCcmFuY2gpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSBibG9jay0+bGFzdCgpLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgYXV0byBoYW5kbGVTdWNjZXNzb3IgPSBbJl0gKEJhc2ljQmxv
Y2sqIHN0YXJ0LCBib29sIHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgbV9kb21p
bmF0b3JzLT5mb3JBbGxCbG9ja3NEb21pbmF0ZWRCeSgKKyAgICAgICAgICAgICAgICAgICAgc3Rh
cnQsCisgICAgICAgICAgICAgICAgICAgIFsmXSAoQmFzaWNCbG9jayogZHVwbGljYXRlZEJsb2Nr
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIHBvc3NpYmxlIHRoYXQgdGhpcyB3
aWxsIGhhdmUgY29sbGlzaW9ucyBpZiBhIGJyYW5jaCBkb21pbmF0ZWQgYnkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIGFub3RoZXIgYnJhbmNoIHdhc24ndCBlbGltaW5hdGVkIGJ5IGZvbGRQ
YXRoQ29uc3RhbnRzLgorICAgICAgICAgICAgICAgICAgICAgICAgbV9kdXBsaWNhdGVkRm9yUHJl
ZGljYXRlLmFkZChzdGQ6Om1ha2VfcGFpcihkdXBsaWNhdGVkQmxvY2ssIHByZWRpY2F0ZSksIHBy
ZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9Owor
ICAgICAgICAgICAgCisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3IoYmxvY2stPnRha2VuKCku
YmxvY2soKSwgdHJ1ZSk7CisgICAgICAgICAgICBoYW5kbGVTdWNjZXNzb3IoYmxvY2stPm5vdFRh
a2VuKCkuYmxvY2soKSwgZmFsc2UpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHZvaWQg
Y3JlYXRlUGF0aHNCeURvbWluYW50UmVkdW5kYW5jeSgpCisgICAgeworICAgICAgICBmb3IgKGF1
dG8mIGVudHJ5IDogbV9wcmVkaWNhdGVUb0JyYW5jaGVzKSB7CisgICAgICAgICAgICBWYWx1ZSog
cHJlZGljYXRlID0gZW50cnkua2V5OworICAgICAgICAgICAgVmVjdG9yPFZhbHVlSW5CbG9jaz4m
IGJyYW5jaGVzID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
VmFsdWVJbkJsb2NrIGluc2VydGlvblBvaW50IDogYnJhbmNoZXMpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFsdWUoKS0+b3Bjb2RlKCkgIT0gQnJhbmNoKQorICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBmb3IgKFZhbHVlSW5CbG9jayBicmFuY2hQb2ludCA6IGJyYW5jaGVzKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghbV9kb21pbmF0b3JzLT5kb21pbmF0ZXMoaW5zZXJ0aW9uUG9pbnQuYmxv
Y2soKSwgYnJhbmNoUG9pbnQuYmxvY2soKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNl
cnRpb25Qb2ludC5ibG9jaygpID09IGJyYW5jaFBvaW50LmJsb2NrKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC5pbmRleCgpID4gYnJhbmNoUG9pbnQuaW5k
ZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5z
ZXJ0aW9uUG9pbnQuaW5kZXgoKSA9PSBicmFuY2hQb2ludC5pbmRleCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgbV9w
YXRoID0gbV9wYXRocy5hZGQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wYXRoLT5wcmVkaWNh
dGUgPSBwcmVkaWNhdGU7CisgICAgICAgICAgICAgICAgICAgIG1fcGF0aC0+aW5zZXJ0aW9uUG9p
bnQgPSBpbnNlcnRpb25Qb2ludC5ibG9jaygpOworICAgICAgICAgICAgICAgICAgICBtX3BhdGgt
PmJyYW5jaFBvaW50ID0gYnJhbmNoUG9pbnQ7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBpZiAoaW5zZXJ0aW9uUG9pbnQudmFsdWUoKSA9PSBicmFuY2hQb2ludC52
YWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhdGgtPnNwYWNlQ29zdCA9IDA7
CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BhdGgtPmJlbmVmaXQgPSBpbnNlcnRpb25Qb2lu
dC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fcGF0aC0+c3BhY2VDb3N0ID0gYnJhbmNoUG9pbnQuaW5k
ZXgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGF0aC0+YmVuZWZpdCA9IGJyYW5jaFBv
aW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpICsgaW5zZXJ0aW9uUG9pbnQuYmxvY2soKS0+ZnJlcXVl
bmN5KCk7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKGluc2VydGlvblBvaW50LmJsb2NrKCkgIT0gYnJhbmNoUG9pbnQuYmxv
Y2soKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7
CisgICAgICAgICAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoQWxsKGJyYW5jaFBvaW50LmJs
b2NrKCktPnByZWRlY2Vzc29ycygpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNsb3NlUGF0
aCh3b3JrbGlzdCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgZGF0YUxvZygiQWRkaW5nIHBhdGggYnkgZG9taW5hbnQgcmVkdW5kYW5jeTogIiwgKm1fcGF0
aCwgIlxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIHZvaWQgY3JlYXRlUGF0aHNCeUhvaXN0aW5nKCkKKyAgICB7CisgICAg
ICAgIFZlY3RvcjxQYXRoKj4gcGF0aHNUb1Byb2Nlc3M7CisgICAgICAgIGZvciAoUGF0aCogcGF0
aCA6IG1fcGF0aHMpCisgICAgICAgICAgICBwYXRoc1RvUHJvY2Vzcy5hcHBlbmQocGF0aCk7Cisg
ICAgICAgIHdoaWxlICghcGF0aHNUb1Byb2Nlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBQ
YXRoKiBvbGRQYXRoID0gcGF0aHNUb1Byb2Nlc3MudGFrZUxhc3QoKTsKKyAgICAgICAgICAgIGlm
IChvbGRQYXRoLT5pbnNlcnRpb25Qb2ludC0+ZnJlcXVlbmN5KCkgPD0gb2xkUGF0aC0+cHJlZGlj
YXRlLT5vd25lci0+ZnJlcXVlbmN5KCkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0luc2VydGlvblBvaW50QmxvY2sg
PSBvbGRQYXRoLT5pbnNlcnRpb25Qb2ludDsKKyAgICAgICAgICAgIHdoaWxlIChuZXdJbnNlcnRp
b25Qb2ludEJsb2NrLT5mcmVxdWVuY3koKSA+PSBvbGRQYXRoLT5pbnNlcnRpb25Qb2ludC0+ZnJl
cXVlbmN5KCkpCisgICAgICAgICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1fZG9t
aW5hdG9ycy0+aWRvbShuZXdJbnNlcnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhvbGRQYXRoLT5wcmVkaWNhdGUt
Pm93bmVyLCBuZXdJbnNlcnRpb25Qb2ludEJsb2NrKSkKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5ld0luc2VydGlvblBvaW50QmxvY2sg
PT0gb2xkUGF0aC0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEhvaXN0aW5nIHRhcmdldHMgbXVzdCBoYXZlIGp1
bXBzIGF0IHRoZSBlbmQgb2YgdGhlbSBiZWNhdXNlIHdlIGNyZWF0ZWQgaG9pc3RpbmcKKyAgICAg
ICAgICAgIC8vIHRhcmdldHMgdGhhdCBoYXZlIGp1bXBzLgorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobmV3SW5zZXJ0aW9uUG9pbnRCbG9jay0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgbV9wYXRoID0gbV9wYXRocy5hZGQoKm9sZFBhdGgp
OworICAgICAgICAgICAgbV9wYXRoLT5pbnNlcnRpb25Qb2ludCA9IG5ld0luc2VydGlvblBvaW50
QmxvY2s7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcGF0aC0+c3BhY2VDb3N0ICs9IG9s
ZFBhdGgtPmluc2VydGlvblBvaW50LT5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogb2xkUGF0aC0+YmxvY2tzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnByZXRlbmRU
b0hhdmVTZWVuKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVz
aEFsbChvbGRQYXRoLT5pbnNlcnRpb25Qb2ludC0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAg
ICAgY2xvc2VQYXRoKHdvcmtsaXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGF0aHNU
b1Byb2Nlc3MuYXBwZW5kKG1fcGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2
ZXJib3NlKSB7CisgICAgICAgICAgICAgICAgZGF0YUxvZygiQWRkaW5nIHBhdGggYnkgaG9pc3Rp
bmc6XG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgT2xkIHBhdGg6ICIsICpvbGRQ
YXRoLCAiXG4iKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgTmV3IHBhdGg6ICIsICpt
X3BhdGgsICJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgY2xvc2VQYXRoKEJsb2NrV29ya2xpc3QmIHdvcmtsaXN0KQorICAgIHsKKyAgICAgICAg
d2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgICAg
IGlmIChibG9jayA9PSBtX3BhdGgtPmluc2VydGlvblBvaW50KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBtX3BhdGgtPmJsb2Nrcy5hcHBlbmQo
YmxvY2spOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoYmxvY2sgPT0gbV9wYXRoLT5i
cmFuY2hQb2ludC5ibG9jaygpKSB7CisgICAgICAgICAgICAgICAgLy8gV2Ugb25seSB3YW50IHRv
IGFkZCB0aGUgZW5kIG9mIHRoaXMgYmxvY2suIE5vdGUsIGlmIHdlIHNlZSB0aGlzIGJsb2NrLAor
ICAgICAgICAgICAgICAgIC8vIGl0J3MgYmVjYXVzZSBpdCB3YXNuJ3QgYWxyZWFkeSBpbiB0aGUg
YmxvY2tzIHNldC4gVGhhdCBtZWFucyB0aGF0IG9sZFBhdGggd2FzIGEKKyAgICAgICAgICAgICAg
ICAvLyBhIGRvbWluYW50IHJlZHVuZGFuY3kgcGF0aCByYXRoZXIgdGhhbiBhIGhvaXN0ZWQgcGF0
aC4gSXQgYWxzbyBtZWFucworICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhpcyBibG9jayBkb2Vz
bid0IGhhdmUgYW55IHVuYWNjb3VudGVkLWZvciBicmFuY2hlcy4KKyAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgIC8vIEJ1dCB0aGUgb25seSB3YXkgZm9yIHRoZXJlIHRvIGJlIGFu
eXRoaW5nIGFmdGVyIHRoZSBicmFuY2hQb2ludCBpbiB0aGUgYmxvY2sgaXMgaWYKKyAgICAgICAg
ICAgICAgICAvLyB0aGUgYnJhbmNoUG9pbnQgaXMgYSBDaGVjay4gQ29kZSBhZnRlciBhIENoZWNr
IG9ubHkgbmVlZHMgdG8gYmUgZHVwbGljYXRlZCBmb3IKKyAgICAgICAgICAgICAgICAvLyB3aGVu
IHRoZSBwcmVkaWNhdGUgaXMgZmFsc2UuIFNvLCB0aGF0IGNvZGUgZG9lc24ndCBnZXQgZHVwbGlj
YXRlZCBhdCBhbGwuCisgICAgICAgICAgICAgICAgLy8gVGhlcmVmb3JlLCB0aGVyZSBpcyBubyBh
ZGRpdGlvbmFsIGNvc3QuCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbV9kdXBsaWNhdGVkRm9yUHJlZGljYXRl
LmNvbnRhaW5zKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBtX3BhdGgtPnByZWRpY2F0ZSkpKSB7Cisg
ICAgICAgICAgICAgICAgbV9wYXRoLT5zcGFjZUNvc3QgKz0gYmxvY2stPnNpemUoKTsKKworICAg
ICAgICAgICAgICAgIC8vIFRoaXMgYGlmYCBpcyBuZXN0ZWQgYmVjYXVzZSBpZiBhIGR1cGxpY2F0
ZWQgYmxvY2sgKmRpZCogaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gYnJhbmNoIGZvciBvdXIg
cHJlZGljYXRlIHRoZW4gaXQncyBwcm9iYWJseSBiZWNhdXNlIHdlIG1pc3NlZCBhbgorICAgICAg
ICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eSBpbiB0aGUgbGFzdCByZWR1Y2VT
dHJlbmd0aCBwYXNzLiBUaGF0IGlzCisgICAgICAgICAgICAgICAgLy8gbW9zdCBsaWtlbHkgdG8g
aGFwcGVuIGJlY2F1c2UgdGhpcyByZWR1bmRhbmN5IHdhcyByZXZlYWxlZCBvbmx5CisgICAgICAg
ICAgICAgICAgLy8gYWZ0ZXIgc29tZSBwaGFzZSB0aGF0IHJhbiBhZnRlciByZWR1Y2VTdHJlbmd0
aCwgbGlrZQorICAgICAgICAgICAgICAgIC8vIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25z
LiBUaGVyZWZvcmUsIGEgZnV0dXJlIHBhc3Mgb2YKKyAgICAgICAgICAgICAgICAvLyByZWR1Y2VT
dHJlbmd0aCBpcyB2ZXJ5IGxpa2VseSB0byByZW1vdmUgYSBkdXBsaWNhdGVkIGJyYW5jaCBmb3IK
KyAgICAgICAgICAgICAgICAvLyBvdXIgcHJlZGljYXRlIHdpdGhvdXQgbmVlZGluZyB0byBzcGVj
aWFsaXplLiBUaGVyZWZvcmUsIHdlIGRvbid0CisgICAgICAgICAgICAgICAgLy8gd2FudCB0byBj
b3VsZCBpdCBhcyBhIGJlbmVmaXQgaGVyZS4gQWxzbywgd2UgZG9uJ3QgZHVwbGljYXRlCisgICAg
ICAgICAgICAgICAgLy8gZHVwbGljYXRlZCBibG9ja3MsIHNvIHdlIHdvdWxkbid0IGJlIGNyZWF0
aW5nIGFueSBiZW5lZml0IGFueXdheS4KKyAgICAgICAgICAgICAgICBpZiAobV9ibG9ja3NXaXRo
QnJhbmNoZXMuY29udGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fcGF0aC0+cHJlZGljYXRl
KSkpCisgICAgICAgICAgICAgICAgICAgIG1fcGF0aC0+YmVuZWZpdCArPSBibG9jay0+ZnJlcXVl
bmN5KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2hBbGwoYmxvY2stPnByZWRlY2Vzc29ycygpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICB2b2lkIGNob29zZVBhdGhPcmRlcigpCisgICAgeworICAgICAgICBmb3IgKFBhdGgqIHBh
dGggOiBtX3BhdGhzKSB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCBrbm93IGFueXRoaW5nIGFi
b3V0IHRoaXMgaGV1cmlzdGljIHlldC4KKyAgICAgICAgICAgIGlmIChwYXRoLT5iZW5lZml0T3Zl
ckNvc3QoKSA+IDAuMikKKyAgICAgICAgICAgICAgICBtX3BhdGhzSW5PcmRlci5hcHBlbmQocGF0
aCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAg
IG1fcGF0aHNJbk9yZGVyLmJlZ2luKCksIG1fcGF0aHNJbk9yZGVyLmVuZCgpLAorICAgICAgICAg
ICAgWyZdIChQYXRoKiBsZWZ0LCBQYXRoKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAg
ICAgLy8gU29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIGJlbmVmaXQuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGxlZnQtPm5ldEJlbmVmaXQoKSA+IHJpZ2h0LT5uZXRCZW5lZml0KCk7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzaW11bGF0ZUR1cGxpY2F0aW9uQW5k
UHJ1bmVQYXRocygpCisgICAgeworICAgICAgICBtX2FmZmVjdGVkQmxvY2tzLnJlc2l6ZShtX3By
b2Muc2l6ZSgpKTsKKworICAgICAgICBtX3BhdGhzSW5PcmRlci5yZW1vdmVBbGxNYXRjaGluZygK
KyAgICAgICAgICAgIFsmXSAoUGF0aCogcGF0aCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAg
aWYgKG1fYWZmZWN0ZWRCbG9ja3NbcGF0aC0+cHJlZGljYXRlLT5vd25lcl0gIT0gSG93QWZmZWN0
ZWQ6Ok5vdEFmZmVjdGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9hZmZlY3RlZEJsb2Nrc1twYXRoLT5pbnNlcnRpb25Qb2ludF0gIT0g
SG93QWZmZWN0ZWQ6Ok5vdEFmZmVjdGVkKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3RlZEJsb2Nrc1twYXRoLT5icmFuY2hQb2lu
dC5ibG9jaygpXSAhPSBIb3dBZmZlY3RlZDo6Tm90QWZmZWN0ZWQpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBwYXRoLT5ibG9ja3MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRCbG9j
a3NbYmxvY2tdICE9IEhvd0FmZmVjdGVkOjpOb3RBZmZlY3RlZCkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzW3BhdGgtPnByZWRpY2F0ZS0+b3duZXJd
ID0gSG93QWZmZWN0ZWQ6OlByZWRpY2F0ZTsKKyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxv
Y2tzW3BhdGgtPmluc2VydGlvblBvaW50XSA9IEhvd0FmZmVjdGVkOjpJbnNlcnRpb25Qb2ludDsK
KyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzW3BhdGgtPmJyYW5jaFBvaW50LmJsb2Nr
KCldID0gSG93QWZmZWN0ZWQ6OkR1cGxpY2F0ZWQ7CisgICAgICAgICAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IHBhdGgtPmJsb2NrcykKKyAgICAgICAgICAgICAgICAgICAgbV9hZmZl
Y3RlZEJsb2Nrc1tibG9ja10gPSBIb3dBZmZlY3RlZDo6RHVwbGljYXRlZDsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCBkZW1vdGVBcHByb3ByaWF0ZVZhbHVlcygpCisgICAgeworICAgICAgICBJbmRleFNldDxWYWx1
ZSo+IHZhbHVlc1RvRGVtb3RlOworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAg
ICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpICYmIG1fYWZmZWN0ZWRCbG9ja3Nb
YmxvY2tdID09IEhvd0FmZmVjdGVkOjpEdXBsaWNhdGVkKQorICAgICAgICAgICAgICAgICAgICB2
YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUpOworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNo
aWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxk
LT5vd25lciAhPSBibG9jayAmJiBtX2FmZmVjdGVkQmxvY2tzW2NoaWxkLT5vd25lcl0gPT0gSG93
QWZmZWN0ZWQ6OkR1cGxpY2F0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0Rl
bW90ZS5hZGQoY2hpbGQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBkZW1vdGVWYWx1ZXMobV9wcm9jLCB2YWx1ZXNUb0RlbW90ZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgZHVwbGljYXRlUGF0aHMoKQorICAgIHsKKyAgICAgICAgQmxvY2tJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNCbG9jayo+IGJsb2NrTWFwKG1fcHJvYy5zaXplKCkpOwor
ICAgICAgICBJbmRleE1hcDxWYWx1ZSosIFZhbHVlKj4gdmFsdWVNYXAobV9wcm9jLnZhbHVlcygp
LnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKFBhdGgqIHBhdGggOiBtX3BhdGhzSW5P
cmRlcikgeworICAgICAgICAgICAgbV9wYXRoID0gcGF0aDsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgYXV0byBhZGRCbG9ja1RvRHVwbGljYXRlID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaykg
eworICAgICAgICAgICAgICAgIG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LmFwcGVuZChibG9jayk7
CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LmFk
ZChibG9jayk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAg
ICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUo
bV9wYXRoLT5icmFuY2hQb2ludC5ibG9jaygpKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3BhdGgtPmJsb2NrcykgeworICAgICAgICAgICAgICAgIGlmIChibG9jayAh
PSBtX3BhdGgtPmJyYW5jaFBvaW50LmJsb2NrKCkpCisgICAgICAgICAgICAgICAgICAgIGFkZEJs
b2NrVG9EdXBsaWNhdGUoYmxvY2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICBzdGQ6OnNvcnQoCisgICAgICAgICAgICAgICAgbV9ibG9ja3NUb0R1cGxpY2F0ZUxp
c3QuYmVnaW4oKSwgbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QuZW5kKCksCisgICAgICAgICAgICAg
ICAgWyZdIChCYXNpY0Jsb2NrKiBsZWZ0LCBCYXNpY0Jsb2NrKiByaWdodCkgLT4gYm9vbCB7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBsZWZ0LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE9yZGVy
IG1hdHRlcnMhIFdlIHRyeSB0byBjcmVhdGUgYSBDRkcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBn
YXJiYWdlLiBUaGF0J3MKKyAgICAgICAgICAgIC8vIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9y
IHRoZSBwZXJmb3JtYW5jZSBvZiBsaW5lYXIgc2Nhbi4gSXQgZG9lc24ndCBtYXR0ZXIgZm9yCisg
ICAgICAgICAgICAvLyBncmFwaCBjb2xvcmluZyB0aG91Z2guIEl0IGRlZmluaXRlbHkgbWF0dGVy
cyBmb3IgZGVidWdnaW5nIHRoZSBjb21waWxlci4KKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrQmVmb3JlSW5zZXJ0aW9uUG9pbnQgPSBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdC5sYXN0KCk7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9ibG9ja3NUb0R1cGxpY2F0
ZUxpc3QpIHsKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX2R1cGxpY2F0ZWRGb3JQcmVk
aWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihibG9jaywgbV9wYXRoLT5wcmVkaWNhdGUpKTsKKyAg
ICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVkaWNhdGVWYWx1ZSA9IGl0ZXItPnZhbHVl
OworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3Qg
ZHVwbGljYXRlIHRoZW4vZWxzZSBibG9ja3MuIE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdworICAg
ICAgICAgICAgICAgICAgICAvLyBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUgd29ya3MsIHRoaXMg
Y291bGQgYmUgYm90aCBhIHRoZW4gYW5kIGEgZWxzZSBibG9jayBpZjoKKyAgICAgICAgICAgICAg
ICAgICAgLy8gLSBUaGlzIGlzIGRvbWluYXRlZCBieSAoYW5kIGR1cGxpY2F0ZWQgZm9yKSBhIGJy
YW5jaCB0aGF0IGlzIGRvbWluYXRlZCBieSBvdXIKKyAgICAgICAgICAgICAgICAgICAgLy8gICBp
bnNlcnRpb24gcG9pbnQsIGFuZCBhIGJyYW5jaCBkb21pbmF0ZWQgYnkgb3VyIGluc2VydGlvbiBw
b2ludC4KKyAgICAgICAgICAgICAgICAgICAgLy8gLSBPdXIgaW5zZXJ0aW9uIHBvaW50IGlzIGRv
bWluYXRlZCBieSAoYW5kIGR1cGxpY2F0ZWQgZm9yKSBhbm90aGVyIGJyYW5jaCBvbgorICAgICAg
ICAgICAgICAgICAgICAvLyAgIG91ciBwcmVkaWNhdGUuCisgICAgICAgICAgICAgICAgICAgIC8v
IEJ1dCBpZiB0aGlzIGJsb2NrIGlzIGluIHRoZSB0aGVuIGFuZCBlbHNlIGNhc2Ugb2YgdGhlIHNh
bWUgcHJlZGljYXRlLCB0aGVuIGl0CisgICAgICAgICAgICAgICAgICAgIC8vIGlzIHVucmVhY2hh
YmxlLiBTbywgd2UgY2FuIGRvIHdoYXRldmVyIHdlIHdhbnQgd2l0aCBpdC4KKworICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBsZWF2ZSB0aGVuIGJsb2NrcyB3aGVyZSB0aGV5IGFyZS4KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHByZWRpY2F0ZVZhbHVlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAv
LyBNb3ZlIHRoZSBsb2NhdGlvbiBvZiB0aGUgYmxvY2sgaW4gdGhlIHByb2dyYW0gZmxvdy4gR290
dGEga2VlcCB0aGUgQ0ZHIHNhbmUuCisgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICBCbG9ja0luc2VydGlvblNldDo6QmxvY2tJ
bnNlcnRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tCZWZvcmVJbnNlcnRp
b25Qb2ludC0+aW5kZXgoKSArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9j
LnRha2VCbG9jayhibG9jay0+aW5kZXgoKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0KKyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0
Lmluc2VydEFmdGVyKGJsb2NrQmVmb3JlSW5zZXJ0aW9uUG9pbnQsIGJsb2NrLT5mcmVxdWVuY3ko
KSk7CisgICAgICAgICAgICAgICAgYmxvY2tNYXBbYmxvY2tdID0gbmV3QmxvY2s7CisgICAgICAg
ICAgICAgICAgbmV3QmxvY2stPnByZWRlY2Vzc29ycygpID0gYmxvY2stPnByZWRlY2Vzc29ycygp
OworICAgICAgICAgICAgICAgIG5ld0Jsb2NrLT5zdWNjZXNzb3JzKCkgPSBibG9jay0+c3VjY2Vz
c29ycygpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIGVs
c2VCbG9ja0ZvciA9IFsmXSAoQmFzaWNCbG9jayogYmxvY2spIC0+IEJhc2ljQmxvY2sqIHsKKyAg
ICAgICAgICAgICAgICBpZiAoQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2tNYXBbYmxvY2tdKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICAgICAgICAgIHJldHVy
biBibG9jazsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdCkgeworICAgICAgICAg
ICAgICAgIGF1dG8gZm9sZFZhbHVlRm9yID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgVmFsdWUq
IHZhbHVlLCBib29sIHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAodmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQnJhbmNoOgor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5jaGlsZCgwKSAhPSBtX3BhdGgtPnBy
ZWRpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhKdW1wKAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGJsb2NrLCBwcmVkaWNhdGVWYWx1ZSA/IGJsb2NrLT50YWtlbigpIDogYmxvY2st
Pm5vdFRha2VuKCkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVl
LT5jaGlsZCgwKSAhPSBtX3BhdGgtPnByZWRpY2F0ZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZVZhbHVl
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBhdXRvIHJld2lyZUJsb2NrRm9yID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaywgYm9vbCBwcmVk
aWNhdGVWYWx1ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAocHJlZGljYXRlVmFsdWUpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEluIHRoZSBjdXJyZW50IHJld2lyaW5nIHdlIGRv
bid0IGhhdmUgdG8gZG8gYW55dGhpbmcgZm9yIHRoZW4gYmxvY2tzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqJiBwcmVkZWNlc3NvciA6
IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8gV2Un
cmUgZHVwbGljYXRpbmcgY29kZSBkb21pbmF0ZWQgYnkgdGhlIGluc2VydGlvbiBwb2ludC4gVGhl
cmVmb3JlLAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHByZWRlY2Vzc29ycyBzaG91
bGQgZWl0aGVyIGJlIHRoZSBpbnNlcnRpb24gcG9pbnQsIG9yIGl0IHNob3VsZCBiZQorICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYSBibG9jayBpbiB0aGUgc2V0IG9mIGR1cGxpY2F0ZWQgYmxv
Y2tzLgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRlY2Vzc29yID09IG1fcGF0aC0+
aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKG1fYmxvY2tzVG9EdXBsaWNhdGVTZXQuY29udGFpbnMocHJlZGVjZXNzb3IpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yID0gZWxzZUJsb2NrRm9yKHByZWRlY2Vz
c29yKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9ibG9ja3NUb0R1
cGxpY2F0ZVNldC5jb250YWlucyhzdWNjZXNzb3IpKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Y2Nlc3NvciA9IGVsc2VCbG9ja0ZvcihzdWNjZXNzb3IpOworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+YWRk
UHJlZGVjZXNzb3IoYmxvY2spOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX2R1
cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihibG9jaywgbV9wYXRoLT5w
cmVkaWNhdGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtX2R1cGxpY2F0ZWRGb3JQ
cmVkaWNhdGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVkaWNhdGVWYWx1
ZSA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICByZXdpcmVCbG9ja0ZvcihibG9j
aywgcHJlZGljYXRlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxv
Y2ssIGJsb2NrLT5sYXN0KCksIHByZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IGVsc2VCbG9ja0ZvcihibG9jayk7CisgICAg
ICAgICAgICAgICAgcmV3aXJlQmxvY2tGb3IoYmxvY2ssIHRydWUpOworICAgICAgICAgICAgICAg
IHJld2lyZUJsb2NrRm9yKGVsc2VCbG9jaywgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIC8vIEZ1biBmYWN0OiB0aGlzIGxvb3Agd2lsbCBkdXBsaWNhdGUgY29kZSBh
ZnRlciB0aGUgdGhlbiBjYXNlIG9mIGEgQ2hlY2suIFRoYXQncworICAgICAgICAgICAgICAgIC8v
IGRlYWQgY29kZS4gQW5kIHRoYXQncyBPSy4KKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2xvbmUgPSBtX3By
b2MuY2xvbmUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQg
OiBjbG9uZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVl
KiByZXBsYWNlbWVudCA9IHZhbHVlTWFwW2NoaWxkXSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZCA9IHJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAgICAg
ICAgICAgICB2YWx1ZU1hcFt2YWx1ZV0gPSBjbG9uZTsKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZUJsb2NrLT5hcHBlbmQoY2xvbmUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgZm9sZFZhbHVlRm9yKGJsb2NrLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAg
ICAgICAgIGZvbGRWYWx1ZUZvcihlbHNlQmxvY2ssIGNsb25lLCBmYWxzZSk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSog
aW5zZXJ0aW9uUG9pbnRKdW1wID0gbV9wYXRoLT5pbnNlcnRpb25Qb2ludC0+bGFzdCgpOworICAg
ICAgICAgICAgc3dpdGNoIChpbnNlcnRpb25Qb2ludEp1bXAtPm9wY29kZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRp
b25Qb2ludEp1bXAtPmNoaWxkKDApID09IG1fcGF0aC0+cHJlZGljYXRlKTsKKyAgICAgICAgICAg
ICAgICAvLyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55dGhpbmcgbGVmdCB0byBkbyBpZiB3ZSdyZSBp
biB0aGlzIHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgICAgICAgICBtX3BhdGgtPmluc2Vy
dGlvblBvaW50LT5yZXBsYWNlTGFzdFdpdGhOZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAg
ICBtX3Byb2MsIEJyYW5jaCwgaW5zZXJ0aW9uUG9pbnRKdW1wLT5vcmlnaW4oKSwgbV9wYXRoLT5w
cmVkaWNhdGUpOworICAgICAgICAgICAgICAgIC8vIFRoZSB1bmR1cGxpY2F0ZWQgY29kZSB0aGF0
IHRoaXMganVtcCBhbHJlYWR5IGhhcyBhcyBpdHMgc3VjY2Vzc29yIGlzIHdoYXQgd2UKKyAgICAg
ICAgICAgICAgICAvLyB3YW50IHRvIGJlIHRoZSBgdGhlbmAgY2FzZSBvZiB0aGUgYnJhbmNoLiBT
bywgd2Ugd2FudCB0byBhcHBlbmQgdGhlIGBlbHNlYAorICAgICAgICAgICAgICAgIC8vIChub3RU
YWtlbikgY2FzZS4KKyAgICAgICAgICAgICAgICBtX3BhdGgtPmluc2VydGlvblBvaW50LT5hcHBl
bmRTdWNjZXNzb3IoCisgICAgICAgICAgICAgICAgICAgIGVsc2VCbG9ja0ZvcihtX3BhdGgtPmlu
c2VydGlvblBvaW50LT5zdWNjZXNzb3JCbG9jaygwKSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgCisgICAgICAgICAgICB3aGlsZSAoIW1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LmlzRW1wdHko
KSkgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NUb0R1cGxp
Y2F0ZUxpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvRHVwbGljYXRl
U2V0LnJlbW92ZShibG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKQorICAgICAgICAgICAgbV9wcm9jLmlu
dmFsaWRhdGVDRkcoKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAg
RG9taW5hdG9ycyogbV9kb21pbmF0b3JzIHsgbnVsbHB0ciB9OworICAgIAorICAgIEhhc2hNYXA8
VmFsdWUqLCBWZWN0b3I8VmFsdWVJbkJsb2NrPj4gbV9wcmVkaWNhdGVUb0JyYW5jaGVzOworICAg
IAorICAgIEhhc2hTZXQ8c3RkOjpwYWlyPEJhc2ljQmxvY2sqLCBWYWx1ZSo+PiBtX2Jsb2Nrc1dp
dGhCcmFuY2hlczsKKyAgICAKKyAgICAvLyBXZSBzYXkgdGhhdCBhIGJsb2NrIGlzIGR1cGxpY2F0
ZWQgZm9yIGEgYnJhbmNoIGlmIGl0J3MgZG9taW5hdGVkIGJ5IHRoZSBzdWNjZXNzb3Igb2Ygb25l
IG9mCisgICAgLy8gdGhvc2UgYnJhbmNoZXMuIFRoZSBib29sIHZhbHVlIGlzIHRoZSBwcmVkaWNh
dGUncyB2YWx1ZSB3aGVuIHdlIGFyZSBpbiB0aGF0IGJsb2NrLgorICAgIEhhc2hNYXA8c3RkOjpw
YWlyPEJhc2ljQmxvY2sqLCBWYWx1ZSo+LCBib29sPiBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGU7
CisgICAgCisgICAgUGF0aCogbV9wYXRoOworCisgICAgQmFnPFBhdGg+IG1fcGF0aHM7CisgICAg
VmVjdG9yPFBhdGgqPiBtX3BhdGhzSW5PcmRlcjsKKyAgICAKKyAgICBlbnVtIGNsYXNzIEhvd0Fm
ZmVjdGVkIHsKKyAgICAgICAgTm90QWZmZWN0ZWQsCisgICAgICAgIFByZWRpY2F0ZSwgLy8gTmVl
ZCB0byB0cmFjayB0aGVzZSBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gZHVwbGljYXRlLCBhbmQg
c28gZGVtb3RlLCB0aGUgcHJlZGljYXRlcyBvZiBvdGhlciBwYXRocy4KKyAgICAgICAgSW5zZXJ0
aW9uUG9pbnQsCisgICAgICAgIER1cGxpY2F0ZWQKKyAgICB9OworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2sqLCBIb3dBZmZlY3RlZD4gbV9hZmZlY3RlZEJsb2NrczsKKyAgICAKKyAgICBWZWN0b3I8
QmFzaWNCbG9jayo+IG1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0OworICAgIEluZGV4U2V0PEJhc2lj
QmxvY2sqPiBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0OworfTsKKworYm9vbCBzcGVjaWFsaXplUGF0
aHMoUHJvY2VkdXJlJiBwcm9jKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAi
c3BlY2lhbGl6ZVBhdGhzIik7CisgICAgU3BlY2lhbGl6ZVBhdGhzIHNwZWNpYWxpemVQYXRocyhw
cm9jKTsKKyAgICByZXR1cm4gc3BlY2lhbGl6ZVBhdGhzLnJ1bigpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVQYXRocy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVQYXRocy5oCShub25leGlzdGVudCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNpYWxpemVQYXRocy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBEdXBs
aWNhdGVzIGNvZGUgdG8gcmVtb3ZlIGJyYW5jaGVzLiBFYWNoIHBpZWNlIG9mIGNvZGUgZ2V0cyBk
dXBsaWNhdGVkIGF0IG1vc3Qgb25jZSwgc28gdGhlcmUKKy8vIGlzIG5vIGV4cG9uZW50aWFsIGJs
b3ctdXAuCisKK2Jvb2wgc3BlY2lhbGl6ZVBhdGhzKFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAJKG5vbmV4aXN0ZW50KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5CbG9jay5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3ZvaWQgVmFsdWVJbkJsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spLCAiOiIsIG1faW5kZXgsICItPiIsIHBv
aW50ZXJEdW1wKG1fdmFsdWUpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUluQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUluQmxvY2suaAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUluQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBWYWx1ZUluQmxvY2sgeworcHVibGljOgorICAgIFZhbHVlSW5CbG9jaygpIHsgfQorICAgIAor
ICAgIFZhbHVlSW5CbG9jayhCYXNpY0Jsb2NrKiBibG9jaywgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1fdmFsdWUoYmxvY2stPmF0KGluZGV4KSkgLy8gV2Ugc2F2ZSB0aGlzIGJlY2F1c2UgdGhhdCdz
IHVzZWZ1bCBhZnRlciB0aGUgcGhhc2UgbWVzc2VzIHVwIGluZGljZXMuCisgICAgeworICAgIH0K
KyAgICAKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0K
KyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICBWYWx1
ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisgICAgCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFZhbHVlSW5CbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFZhbHVlSW5CbG9jayYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
fQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzICE9IFZhbHVlSW5CbG9jaygpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCisgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpQdHJIYXNoPEJhc2ljQmxvY2sqPjo6
aGFzaChtX2Jsb2NrKSArIG1faW5kZXg7CisgICAgfQorICAgIAorICAgIFZhbHVlSW5CbG9jayhX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgeworICAgICAgICBtX2luZGV4LS07
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IFZhbHVlSW5CbG9jayhXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBt
X2Jsb2NrIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9Owor
ICAgIFZhbHVlKiBtX3ZhbHVlIHsgbnVsbHB0ciB9OworfTsKKworc3RydWN0IFZhbHVlSW5CbG9j
a0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFZhbHVlSW5CbG9jayYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVmFs
dWVJbkJsb2NrJiBhLCBjb25zdCBWYWx1ZUluQmxvY2smIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdGV4cHIgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9
IHRydWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpWYWx1ZUluQmxvY2s+IHsKKyAgICB0eXBlZGVmIEpT
Qzo6QjM6OlZhbHVlSW5CbG9ja0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lPiBz
dHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6
VmFsdWVJbkJsb2NrPiA6IHB1YmxpYyBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6VmFs
dWVJbkJsb2NrPiB7CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTElDTVBoYXNlLmNw
cAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNN
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgxLDcgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgICYmICFtX2dyYXBoLm1fY29udHJvbEVxdWl2YWxlbmNlQW5hbHlzaXMtPmRvbWlu
YXRlc0VxdWl2YWxlbnRseShkYXRhLnByZUhlYWRlciwgZnJvbUJsb2NrKTsKICAgICAgICAgCiAg
ICAgICAgIGlmIChhZGRzQmxpbmRTcGVjdWxhdGlvbgotICAgICAgICAgICAgJiYgbV9ncmFwaC5o
YXNFeGl0U2l0ZShvcmlnaW5hbE9yaWdpbi5zZW1hbnRpYywgSG9pc3RpbmdGYWlsZWQpKSB7Cisg
ICAgICAgICAgICAmJiBtX2dyYXBoLmhhc0dsb2JhbEV4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNl
bWFudGljLCBIb2lzdGluZ0ZhaWxlZCkpIHsKICAgICAgICAgICAgIGlmICh2ZXJib3NlKSB7CiAg
ICAgICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAgICAgIiAgICBOb3QgaG9p
c3RpbmcgIiwgbm9kZSwgIiBiZWNhdXNlIGl0IG1heSBleGl0IGFuZCB0aGUgcHJlLWhlYWRlciAo
IiwKSW5kZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE4LTA0LTI4ICBGaWxpcCBQaXpsbyAgPGZw
aXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAgQjMgc2hvdWxkIGhhdmUgZ2VuZXJhbGl6ZWQgcGF0
aCBzcGVjaWFsaXphdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTg1MDYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisg
ICAgICAgIAorICAgICAgICBBZGQgc29tZSBjb21tZW50cyBhbmQgc29tZSBzdXBwb3J0aW5nIGZ1
bmN0aW9ucyB0aGF0IHdlcmUgdXNlZnVsIGZvciB0aGUgbmV3IHBoYXNlLgorCisgICAgICAgICog
d3RmL0JpdFZlY3Rvci5oOgorICAgICAgICAqIHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oOgorICAg
ICAgICAoV1RGOjpHcmFwaE5vZGVXb3JrbGlzdDo6cHJldGVuZFRvSGF2ZVNlZW4pOgorICAgICAg
ICAqIHd0Zi9JbmRleFNldC5oOgorICAgICAgICAoV1RGOjpJbmRleFNldDo6cmVtb3ZlQWxsKToK
KwogMjAxOC0wNC0yNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAg
R2FyZGVuaW5nOiBTcGVjdWxhdGl2ZSBidWlsZCBmaXggZm9yIFdpbmRvd3MuCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRW
ZWN0b3IuaAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExMCw2ICsxMTAsOCBAQCBwdWJsaWM6IAogICAgIC8vIExpa2Ug
ZW5zdXJlU2l6ZSgpLCBidXQgc3VwcG9ydHMgcmVkdWNpbmcgdGhlIHNpemUgb2YgdGhlIGJpdHZl
Y3Rvci4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCByZXNpemUoc2l6ZV90IG51bUJpdHMp
OwogICAgIAorICAgIC8vIENsZWFycyB0aGUgc2V0IHdpdGhvdXQgZnJlZWluZyBtZW1vcnkuIElm
IHlvdSB3YW50IHRvIGNsZWFyIHRoZSBzZXQgYW5kIGZyZWUgbWVtb3J5LCB0aGVuCisgICAgLy8g
eW91IHdhbnQgKnRoaXMgPSBCaXRWZWN0b3IoKS4KICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjbGVhckFsbCgpOwogCiAgICAgYm9vbCBxdWlja0dldChzaXplX3QgYml0KSBjb25zdApJbmRl
eDogU291cmNlL1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNjQsOCAr
NjQsMTAgQEAgcHVibGljOgogCiAgICAgYm9vbCBzYXcoTm9kZSBub2RlKSB7IHJldHVybiBtX3Nl
ZW4uY29udGFpbnMobm9kZSk7IH0KICAgICAKKyAgICBib29sIHByZXRlbmRUb0hhdmVTZWVuKE5v
ZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVuLmFkZChub2RlKTsgfQorICAgIAogICAgIGNvbnN0IFNl
dCYgc2VlbigpIGNvbnN0IHsgcmV0dXJuIG1fc2VlbjsgfQotCisgICAgCiBwcml2YXRlOgogICAg
IFNldCBtX3NlZW47CiAgICAgVmVjdG9yPE5vZGUsIDE2PiBtX3N0YWNrOwpJbmRleDogU291cmNl
L1dURi93dGYvSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9JbmRleFNl
dC5oCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvV1RGL3d0Zi9JbmRleFNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02MSw2ICs2MSwxMiBAQCBwdWJsaWM6CiAgICAgewogICAgICAgICByZXR1
cm4gbV9zZXQuY2xlYXIoSW5kZXhLZXlUeXBlPFQ+OjppbmRleCh2YWx1ZSkpOwogICAgIH0KKyAg
ICAKKyAgICAvLyBSZW1vdmVzIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgc2V0IHdpdGhvdXQgZnJlZWlu
ZyBtZW1vcnkuCisgICAgdm9pZCByZW1vdmVBbGwoKQorICAgIHsKKyAgICAgICAgbV9zZXQuY2xl
YXJBbGwoKTsKKyAgICB9CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IFQmIHZhbHVlKSBjb25z
dAogICAgIHsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>339163</attachid>
            <date>2018-04-30 17:03:10 -0700</date>
            <delta_ts>2018-04-30 17:03:10 -0700</delta_ts>
            <desc>mostly works, not a speed-up</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>66241</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3BhdGgtc3BlY2lhbGl6YXRpb24tbG9vcC11
bnN3aXRjaGluZy1iaWcuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
cGF0aC1zcGVjaWFsaXphdGlvbi1sb29wLXVuc3dpdGNoaW5nLWJpZy5qcwkobm9uZXhpc3RlbnQp
CisrKyBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wYXRoLXNwZWNpYWxpemF0aW9uLWxvb3AtdW5z
d2l0Y2hpbmctYmlnLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKy8vIGJlbmVm
aXRPdmVyQ29zdCA9IDEKKworZnVuY3Rpb24gZm9vKG8pCit7CisgICAgdmFyIGEgPSAwOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgdmFyIHZhbHVlOworICAg
ICAgICBpZiAoby5wKQorICAgICAgICAgICAgdmFsdWUgPSBvLmY7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHZhbHVlID0gby5nOworICAgICAgICBhICs9IHZhbHVlOworICAgICAgICBhICo9
IDEuNTsKKyAgICAgICAgYSArPSBvLng7CisgICAgICAgIGlmIChvLnApCisgICAgICAgICAgICBv
LmYgPSBpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvLmcgPSBpOworICAgIH0KKyAgICBy
ZXR1cm4gYTsKK30KKworbm9JbmxpbmUoZm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oaSAmIDEgPyB7cDp0cnVlLCBmOjQyLCB4
OjF9IDoge3A6ZmFsc2UsIHg6MSwgZzo0Mn0pOworICAgIGlmIChyZXN1bHQgIT0gMTk1MTQ5MzY1
MjE2OTAzMjUwMDApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3Vs
dDsKK30KSW5kZXg6IEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3BhdGgtc3BlY2lhbGl6YXRpb24t
bG9vcC11bnN3aXRjaGluZy1pbXBvc3NpYmxlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvbWlj
cm9iZW5jaG1hcmtzL3BhdGgtc3BlY2lhbGl6YXRpb24tbG9vcC11bnN3aXRjaGluZy1pbXBvc3Np
YmxlLmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3BhdGgtc3Bl
Y2lhbGl6YXRpb24tbG9vcC11bnN3aXRjaGluZy1pbXBvc3NpYmxlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzQgQEAKKy8vIGJlbmVmaXRPdmVyQ29zdCA9IDEuMTg3NQorCitmdW5jdGlv
biBiYXIodmFsdWUpCit7CisgICAgcmV0dXJuIHZhbHVlOworfQorCitub0lubGluZShiYXIpOwor
CitmdW5jdGlvbiBmb28obykKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDA7ICsraSkgeworICAgICAgICB2YXIgdmFsdWU7CisgICAgICAgIGlmIChvLnApCisg
ICAgICAgICAgICB2YWx1ZSA9IG8uZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdmFsdWUg
PSBvLmc7CisgICAgICAgIGEgKz0gYmFyKHZhbHVlKTsKKyAgICAgICAgaWYgKG8ucCkKKyAgICAg
ICAgICAgIG8uZiA9IGk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG8uZyA9IGk7CisgICAg
fQorICAgIHJldHVybiBhOworfQorCitub0lubGluZShmb28pOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyhpICYgMSA/IHtwOnRydWUs
IGY6NDJ9IDoge3A6ZmFsc2UsIGc6NDJ9KTsKKyAgICBpZiAocmVzdWx0ICE9IDQ4OTMpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3BhdGgtc3BlY2lhbGl6YXRpb24tbG9vcC11bnN3aXRjaGluZy5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wYXRoLXNwZWNpYWxpemF0
aW9uLWxvb3AtdW5zd2l0Y2hpbmcuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2Jl
bmNobWFya3MvcGF0aC1zcGVjaWFsaXphdGlvbi1sb29wLXVuc3dpdGNoaW5nLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjkgQEAKKy8vIGJlbmVmaXRPdmVyQ29zdCA9IDEuMTg3NQorCitm
dW5jdGlvbiBmb28obykKK3sKKyAgICB2YXIgYSA9IDA7CisgICAgdmFyIGIgPSAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgdmFyIHZhbHVlOworICAgICAg
ICBpZiAoby5wKQorICAgICAgICAgICAgdmFsdWUgPSBvLmY7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHZhbHVlID0gby5nOworICAgICAgICBhICs9IHZhbHVlOworICAgICAgICBiICs9IGk7
CisgICAgICAgIGlmIChvLnApCisgICAgICAgICAgICBvLmYgPSBpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvLmcgPSBpOworICAgIH0KKyAgICByZXR1cm4gYSAtIGI7Cit9CisKK25vSW5s
aW5lKGZvbyk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIg
cmVzdWx0ID0gZm9vKGkgJiAxID8ge3A6dHJ1ZSwgZjo0Mn0gOiB7cDpmYWxzZSwgZzo0Mn0pOwor
ICAgIGlmIChyZXN1bHQgIT0gLTU3KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBKU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9wYXRoLXNwZWNp
YWxpemF0aW9uLW11bHRpLWJ5LW9mZnNldC1zbWFsbGVyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL3BhdGgtc3BlY2lhbGl6YXRpb24tbXVsdGktYnktb2Zmc2V0LXNt
YWxsZXIuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcGF0aC1z
cGVjaWFsaXphdGlvbi1tdWx0aS1ieS1vZmZzZXQtc21hbGxlci5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE4IEBACisvLyBiZW5lZml0T3ZlckNvc3QgPSAyCisKK2Z1bmN0aW9uIGZvbyhv
KSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsr
aSkgeworICAgICAgICByZXN1bHQgPSAocmVzdWx0ICsgby5mKSB8IDA7CisgICAgICAgIG8uZiA9
IGk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKGkg
JiAxID8ge2Y6NDJ9IDoge2U6NDEsIGY6NDJ9KTsKKyAgICBpZiAocmVzdWx0ICE9ICg5OSAqIDk4
KSAvIDIgKyA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0
OworfQpJbmRleDogSlNUZXN0cy9taWNyb2JlbmNobWFya3MvcGF0aC1zcGVjaWFsaXphdGlvbi1t
dWx0aS1ieS1vZmZzZXQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy9taWNyb2JlbmNobWFya3Mv
cGF0aC1zcGVjaWFsaXphdGlvbi1tdWx0aS1ieS1vZmZzZXQuanMJKG5vbmV4aXN0ZW50KQorKysg
SlNUZXN0cy9taWNyb2JlbmNobWFya3MvcGF0aC1zcGVjaWFsaXphdGlvbi1tdWx0aS1ieS1vZmZz
ZXQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOCBAQAorLy8gYmVuZWZpdE92ZXJDb3N0
ID0gMgorCitmdW5jdGlvbiBmb28obykgeworICAgIHZhciByZXN1bHQgPSAwOworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICAgICAgcmVzdWx0ICs9IG8uZjsKKyAgICAg
ICAgby5mID0gaTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9v
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQg
PSBmb28oaSAmIDEgPyB7Zjo0Mn0gOiB7ZTo0MSwgZjo0Mn0pOworICAgIGlmIChyZXN1bHQgIT0g
KDk5ICogOTgpIC8gMiArIDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQ7Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzMTEy
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSw5NiBAQAorMjAxOC0wNC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEIzIHNob3VsZCBoYXZlIGdlbmVyYWxpemVkIHBhdGggc3BlY2lhbGl6YXRp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTA2
MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhZGRzIGEgbmV3IHBoYXNlLCBjYWxsZWQgc3BlY2lhbGl6ZVBhdGhzLCB0aGF0IGR1
cGxpY2F0ZXMgY29kZSBpbiBvcmRlciB0byByZW1vdmUKKyAgICAgICAgYnJhbmNoZXMuIEl0J3Mg
YSBzdXBlcnNldCBvZiBsb29wIHVuc3dpdGNoaW5nIHRoYXQgd2lsbCBhbHNvIGhhbmRsZSBzdHJh
aXQgcGF0aHMgZnJvbSBvbmUKKyAgICAgICAgYnJhbmNoIHRvIGFub3RoZXIuIEZvciBleGFtcGxl
LCBpdCB3aWxsIGNvbnZlcnQ6CisgICAgICAgIAorICAgICAgICAgICAgaWYgKHApCisgICAgICAg
ICAgICAgICAgZm9vCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYmFyCisgICAg
ICAgICAgICB0aGluZ3kKKyAgICAgICAgICAgIGlmIChwKQorICAgICAgICAgICAgICAgIGZ1enoK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBidXp6CisgICAgICAgIAorICAgICAg
ICBpbnRvOgorICAgICAgICAKKyAgICAgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICAgICAg
Zm9vCisgICAgICAgICAgICAgICAgdGhpbmd5CisgICAgICAgICAgICAgICAgZnV6egorICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBiYXIKKyAgICAgICAgICAgICAgICB0aGlu
Z3kKKyAgICAgICAgICAgICAgICBidXp6CisgICAgICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBQcm92aWRlZCB0aGF0IHRoZSBiZW5lZml0IChlbGltaW5hdGlvbiBvZiB0aGUgc2Vjb25kIGJy
YW5jaCkgb3V0d2VpZ2hzIHRoZSBjb3N0ICh0aGUgc3BhY2UKKyAgICAgICAgY29zdCBvZiB0aGlu
Z3kgYmVpbmcgZW1pdHRlZCB0d2ljZSkuIFRoaXMgd2lsbCBkbyBhIE8oYmxvY2tzXjMpIHNlYXJj
aCB0byBmaW5kIHRoZSBtb3N0CisgICAgICAgIHByb2ZpdGFibGUgc3VjaCBzcGVjaWFsaXphdGlv
bnMgdG8gZG8sIGFuZCBpdCB3aWxsIG9ubHkgZG8gdGhlIG1vc3QgcHJvZml0YWJsZSBvZiB0aG9z
ZS4gSXQKKyAgICAgICAgd2lsbCBuZXZlciBkdXBsaWNhdGUgY29kZSBtb3JlIHRoYW4gb25jZS4K
KyAgICAgICAgCisgICAgICAgIFRoZSBzZWFyY2ggY29uc2lkZXJzIGFsbCBkdXBsaWNhdGlvbiBw
YXRocyAoY2FsbGVkIHRyYWNlcyBpbiB0aGUgcGhhc2UncyBjb2RlKSB0aGF0IGNhbiBiZQorICAg
ICAgICBmb3JtZWQgYnk6CisgICAgICAgIAorICAgICAgICAtIFBhaXJzIG9mIGJyYW5jaGVzIG9u
IHRoZSBzYW1lIHByZWRpY2F0ZSwgd2hlcmUgb25lIGJyYW5jaCBkb21pbmF0ZXMgdGhlIG90aGVy
LgorICAgICAgICAKKyAgICAgICAgLSBIb2lzdGluZyBhIGJyYW5jaCwgb3Igc29tZSBvdGhlciB0
cmFjZSwgb3V0IG9mIGEgbG9vcC4KKyAgICAgICAgCisgICAgICAgIEkgYmVsaWV2ZSB0aGF0IGlu
IHRoZSB3b3JzdCBjYXNlLCB0aGlzIGlzIGEgTyhibG9ja3NeMykgc2VhcmNoLCBpZiB5b3UgY3Jl
YXRlZCBhIHByb2dyYW0KKyAgICAgICAgd2hvc2UgbG9vcCBkZXB0aCB3YXMgTyhibG9ja3MpIGFu
ZCB5b3UgaGFkIE8oYmxvY2tzKSBkaWZmZXJlbnQgdHJhY2VzIGluc2lkZSB0aGUgbG9vcCBib2R5
LgorICAgICAgICBUaGF0J3MgY2VydGFpbmx5IHBvc3NpYmxlIGJ1dCBub3QgdmVyeSBwcm9iYWJs
ZS4KKyAgICAgICAgCisgICAgICAgIEkgaGF2ZW4ndCB0ZXN0ZWQgdGhpcyB5ZXQuIEl0J3Mgc3Rp
bGwgYSB3b3JrIGluIHByb2dyZXNzLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBi
My9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpicmVha0NyaXRp
Y2FsRWRnZXMpOgorICAgICAgICAqIGIzL0IzRml4U1NBLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6
OmZpeFNTQSk6CisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6CisgICAgICAgIChKU0M6OkIz
OjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6CisgICAgICAg
ICogYjMvQjNQcm9jZWR1cmUuaDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dGFrZUJs
b2NrKToKKyAgICAgICAgKiBiMy9CM1NwZWNpYWxpemVQYXRocy5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpTcGVjaWFsaXplUGF0aHMpOgorICAgICAgICAo
SlNDOjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lh
bGl6ZVBhdGhzOjpjcmVhdGVIb2lzdGluZ1RhcmdldHMpOgorICAgICAgICAoSlNDOjpCMzo6U3Bl
Y2lhbGl6ZVBhdGhzOjpmaW5kQnJhbmNoZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6
ZVBhdGhzOjpmaW5kQmxvY2tzRHVwbGljYXRlZEZvclByZWRpY2F0ZXMpOgorICAgICAgICAoSlND
OjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpjcmVhdGVUcmFjZXNCeURvbWluYW50UmVkdW5kYW5jeSk6
CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OmNyZWF0ZVRyYWNlc0J5SG9pc3Rp
bmcpOgorICAgICAgICAoSlNDOjpCMzo6U3BlY2lhbGl6ZVBhdGhzOjpjbG9zZVRyYWNlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVQYXRoczo6Y2hvb3NlVHJhY2VPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OnNpbXVsYXRlRHVwbGljYXRpb25BbmRQcnVu
ZVRyYWNlcyk6CisgICAgICAgIChKU0M6OkIzOjpTcGVjaWFsaXplUGF0aHM6OmRlbW90ZUFwcHJv
cHJpYXRlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVQYXRoczo6ZHVwbGlj
YXRlVHJhY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OlNwZWNpYWxpemVQYXRoczo6VHJhY2U6OmJl
bmVmaXRPdmVyQ29zdCBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpzcGVjaWFsaXplUGF0aHMp
OgorICAgICAgICAqIGIzL0IzU3BlY2lhbGl6ZVBhdGhzLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L0IzVmFsdWVJbkJsb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxv
Y2s6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGIzL0IzVmFsdWVJbkJsb2NrLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpWYWx1ZUluQmxvY2spOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpibG9jayBjb25zdCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZUluQmxvY2s6OmluZGV4IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9j
azo6dmFsdWUgY29uc3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpvcGVyYXRv
cj09IGNvbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6b3BlcmF0b3IhPSBj
b25zdCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZUluQmxvY2s6Om9wZXJhdG9yIGJvb2wgY29u
c3QpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrOjpoYXNoIGNvbnN0KToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlSW5CbG9jazo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUgY29uc3Qp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVJbkJsb2NrSGFzaDo6aGFzaCk6CisgICAgICAgIChK
U0M6OkIzOjpWYWx1ZUluQmxvY2tIYXNoOjplcXVhbCk6CisKIDIwMTgtMDQtMjcgIFl1c3VrZSBT
dXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAgICAgW0pTQ11bQVJNNjRdW0xp
bnV4XSBBZGQgY29sbGVjdENQVUZlYXR1cmVzIHVzaW5nIGF1eGlsaWFyeSB2ZWN0b3IKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDYgKzE1Myw3
IEBAIGIzL0IzUmVkdWNlRG91YmxlVG9GbG9hdC5jcHAKIGIzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CiBiMy9CM1NTQUNhbGN1bGF0b3IuY3BwCiBiMy9CM1Nsb3RCYXNlVmFsdWUuY3BwCitiMy9CM1Nw
ZWNpYWxpemVQYXRocy5jcHAKIGIzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAogYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwCiBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwCkBAIC0xNjUsNiAr
MTY2LDcgQEAgYjMvQjNVcHNpbG9uVmFsdWUuY3BwCiBiMy9CM1VzZUNvdW50cy5jcHAKIGIzL0Iz
VmFsaWRhdGUuY3BwCiBiMy9CM1ZhbHVlLmNwcAorYjMvQjNWYWx1ZUluQmxvY2suY3BwCiBiMy9C
M1ZhbHVlS2V5LmNwcAogYjMvQjNWYWx1ZVJlcC5jcHAKIGIzL0IzVmFyaWFibGUuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTY5NSw2ICs2OTUsOCBAQAogCQkwRkY0QjRDNzFFODg5M0M1MDBE
QkJFODYgLyogQWlyQ0ZHLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkY0QjRDNjFFODg5M0JGMDBEQkJFODYgLyogQWlyQ0ZHLmggKi87IH07CiAJCTBG
RjRCNENCMUU4ODlEN0UwMERCQkU4NiAvKiBCM1ZhcmlhYmxlTGl2ZW5lc3MuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjRCNEM5MUU4ODlENzgwMERC
QkU4NiAvKiBCM1ZhcmlhYmxlTGl2ZW5lc3MuaCAqLzsgfTsKIAkJMEZGNjBBQzIxNjc0MEY4MzAw
MDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjYwQUMwMTY3NDBGODEwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0
ZXNwYWNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJMEZGNjhDMUQyMDk0MEVCQzAwRkM1RERDIC8qIEIzU3BlY2lhbGl6ZVBhdGhzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY2OEMxQTIwOTQwRUI3
MDBGQzVEREMgLyogQjNTcGVjaWFsaXplUGF0aHMuaCAqLzsgfTsKKwkJMEZGNjhDMUUyMDk0MEVC
RjAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY2OEMxQjIwOTQwRUI3MDBGQzVEREMgLyogQjNWYWx1ZUlu
QmxvY2suaCAqLzsgfTsKIAkJMEZGNzE2OEMxNUEzQjIzNTAwOEY1REFBIC8qIFByb3BlcnR5T2Zm
c2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY3
MTY4QTE1QTNCMjMxMDA4RjVEQUEgLyogUHJvcGVydHlPZmZzZXQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVC
QTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGNzI5OTMxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOTk1MTY2QUQzNDcwMDBG
NUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC0yOTYxLDYgKzI5NjMsMTAgQEAKIAkJMEZGNEI0QzkxRTg4
OUQ3ODAwREJCRTg2IC8qIEIzVmFyaWFibGVMaXZlbmVzcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1ZhcmlhYmxlTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL0IzVmFyaWFibGVM
aXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY2MEFCRjE2NzQwRjgx
MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBSZWR1Y2VXaGl0ZXNwYWNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGNjBBQzAxNjc0MEY4MTAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVkdWNlV2hpdGVzcGFjZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY2OEMxOTIwOTQwRUI3MDBGQzVEREMgLyogQjNT
cGVjaWFsaXplUGF0aHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNTcGVjaWFsaXplUGF0aHMuY3BwOyBwYXRoID0gYjMvQjNTcGVjaWFsaXplUGF0aHMuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY2OEMxQTIwOTQwRUI3MDBGQzVEREMgLyog
QjNTcGVjaWFsaXplUGF0aHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
cGVjaWFsaXplUGF0aHMuaDsgcGF0aCA9IGIzL0IzU3BlY2lhbGl6ZVBhdGhzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjY4QzFCMjA5NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVl
SW5CbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5CbG9j
ay5oOyBwYXRoID0gYjMvQjNWYWx1ZUluQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZGNjhDMUMyMDk0MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVJbkJsb2NrLmNwcDsgcGF0
aCA9IGIzL0IzVmFsdWVJbkJsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGNzE2OEExNUEzQjIzMTAwOEY1REFBIC8qIFByb3BlcnR5T2Zmc2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFByb3BlcnR5T2Zmc2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRjcyOTkyMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFByb2ZpbGVyQnl0ZWNv
ZGUuY3BwOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJCeXRlY29kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGRjcyOTkzMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlckJ5
dGVjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyQnl0ZWNv
ZGUuaDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyQnl0ZWNvZGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTUxOTgsNiArNTIwNCw4IEBACiAJCQkJMEZFQzg0RUExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovLAogCQkJCTBGMkJCRDkxMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkY2OEMxOTIwOTQwRUI3MDBG
QzVEREMgLyogQjNTcGVjaWFsaXplUGF0aHMuY3BwICovLAorCQkJCTBGRjY4QzFBMjA5NDBFQjcw
MEZDNUREQyAvKiBCM1NwZWNpYWxpemVQYXRocy5oICovLAogCQkJCTBGNkI4QURBMUM0RUZBQzMw
MDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuY3BwICovLAogCQkJCTBGNkI4QURCMUM0RUZBQzMw
MDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCAqLywKIAkJCQkwRjMzRkNGNTFDMTM2RTI1MDAz
MjNGNjcgLyogQjNTdGFja21hcEdlbmVyYXRpb25QYXJhbXMuY3BwICovLApAQCAtNTIyNiw2ICs1
MjM0LDggQEAKIAkJCQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICov
LAogCQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLywKIAkJCQkw
RkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovLAorCQkJCTBGRjY4QzFDMjA5
NDBFQjcwMEZDNUREQyAvKiBCM1ZhbHVlSW5CbG9jay5jcHAgKi8sCisJCQkJMEZGNjhDMUIyMDk0
MEVCNzAwRkM1RERDIC8qIEIzVmFsdWVJbkJsb2NrLmggKi8sCiAJCQkJMEZFQzg0RkIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCiAJCQkJMEYzMzhFMDgxQkYwMjc2QzAw
MTNDODhGIC8qIEIzVmFsdWVLZXkuY3BwICovLAogCQkJCTBGMzM4RTA5MUJGMDI3NkMwMDEzQzg4
RiAvKiBCM1ZhbHVlS2V5LmggKi8sCkBAIC04Njg4LDYgKzg2OTgsNyBAQAogCQkJCUZFQjU4QzE1
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMDJFOThEMEUxODNFMzgwMDBGOTI5NyAvKiBFcnJvckluc3RhbmNlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzAyRTkwRjBFMTgzOURCMDAwRjkyOTcgLyogRXJyb3JQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRjY4QzFFMjA5NDBFQkYwMEZDNUREQyAvKiBCM1ZhbHVlSW5C
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUIxQkRBMDhEMTAwMzMxQjg0IC8qIEVy
cm9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRBRDkxMEMxRENBOTI5NDAw
MTRGOUZFIC8qIEV2YWxDb2RlQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzM0MUQyMURD
MDJFMkUwMEFBMjlCQSAvKiBFdmFsRXhlY3V0YWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MzU2
LDYgKzkzNjcsNyBAQAogCQkJCUE1MDNGQTIyMTg4RUZGNjgwMDExMEYxNCAvKiBTY3JpcHREZWJ1
Z0xpc3RlbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkEyNjE4OEVGRkZEMDAxMTBGMTQg
LyogU2NyaXB0RGVidWdTZXJ2ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzM0MUNFMURDMDJE
NzkwMEFBMjlCQSAvKiBTY3JpcHRFeGVjdXRhYmxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY2
OEMxRDIwOTQwRUJDMDBGQzVEREMgLyogQjNTcGVjaWFsaXplUGF0aHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUNFQUU3RDdCODg5QjQ3N0JBOTNBQkE2QyAvKiBTY3JpcHRGZXRjaGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzIwMUMxRTFGOEU4MjRDMDA3NkEwMzIgLyogU2NyaXB0RmV0Y2hQYXJh
bWV0ZXJzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTVEOTNBNjE4NTAxMkE4MDA0MDBERUQgLyog
U2NyaXB0RnVuY3Rpb25DYWxsLmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0JyZWFrQ3JpdGljYWxFZGdlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVkZ2VzLmNwcAkocmV2aXNpb24gMjMx
MTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQnJlYWtDcml0aWNhbEVkZ2VzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2
LTIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC00MCw3ICs0MCwxMCBAQCB2b2lkIGJyZWFrQ3JpdGljYWxFZGdlcyhQ
cm9jZWR1cmUmIHByb2MpCiAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2Mp
OwogICAgIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7Ci0gICAgICAgIGlm
IChibG9jay0+bnVtU3VjY2Vzc29ycygpIDw9IDEpCisgICAgICAgIC8vIE5vbi12b2lkIHRlcm1p
bmFscyB0aGF0IGFyZSB0aGUgbW9yYWwgZXF1aXZhbGVudCBvZiBqdW1wcyB0cmlnZ2VyIGNyaXRp
Y2FsIGVkZ2UgYnJha2luZworICAgICAgICAvLyBiZWNhdXNlIG9mIGZpeFNTQSdzIGRlbW90ZVZh
bHVlcy4KKyAgICAgICAgaWYgKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkgPD0gMQorICAgICAgICAg
ICAgJiYgYmxvY2stPmxhc3QoKS0+dHlwZSgpID09IFZvaWQpCiAgICAgICAgICAgICBjb250aW51
ZTsKIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29yQmxvY2tzKCkpIHsKQEAgLTU3LDggKzYwLDggQEAgdm9pZCBicmVha0NyaXRpY2FsRWRnZXMo
UHJvY2VkdXJlJiBwcm9jKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoKTsKLSAgICBwcm9jLmludmFsaWRhdGVDRkcoKTsKKyAgICBpZiAoaW5zZXJ0aW9uU2V0
LmV4ZWN1dGUoKSkKKyAgICAgICAgcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NB
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3Bw
CShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0Eu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxNi0yMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTcyLDYgKzE3Miw3IEBAIHZvaWQgZml4U1NBR2xvYmFs
bHkoUHJvY2VkdXJlJiBwcm9jKQogICAgIFRpbWluZ1Njb3BlIHRpbWluZ1Njb3BlKCJmaXhTU0E6
IGNvbnZlcnQiKTsKICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwogICAgIElu
ZGV4U3BhcnNlU2V0PEtleVZhbHVlUGFpcjx1bnNpZ25lZCwgVmFsdWUqPj4gbWFwcGluZyhwcm9j
LnZhcmlhYmxlcygpLnNpemUoKSk7CisgICAgSW5kZXhTZXQ8VmFsdWUqPiB2YWx1ZXNUb0RlbGV0
ZTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkp
IHsKICAgICAgICAgbWFwcGluZy5jbGVhcigpOwogICAgICAgICAKQEAgLTIwNyw2ICsyMDgsNyBA
QCB2b2lkIGZpeFNTQUdsb2JhbGx5KFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgICAgICAgICBW
YXJpYWJsZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpOwogCiAgICAgICAg
ICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoZW5zdXJlTWFwcGluZyh2YXJpYWJs
ZSwgdmFsdWVJbmRleCwgdmFsdWUtPm9yaWdpbigpKSk7CisgICAgICAgICAgICAgICAgdmFsdWVz
VG9EZWxldGUuYWRkKHZhbHVlKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAKQEAgLTI0MCwxMiArMjQyLDI1IEBAIHZvaWQgZml4U1NBR2xv
YmFsbHkoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFVwc2lsb25WYWx1ZT4oCi0g
ICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Qb2ludCwgdXBzaWxvbk9yaWdpbiwg
bWFwcGVkVmFsdWUsIHBoaSk7CisgICAgICAgICAgICAgICAgICAgIHVwc2lsb25JbnNlcnRpb25Q
b2ludCwgdXBzaWxvbk9yaWdpbiwgbWFwcGVkVmFsdWUtPmZvbGRJZGVudGl0eSgpLCBwaGkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CiAKICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOwogICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGlzbid0IHN0cmljdGx5IG5lY2Vz
c2FyeSwgYnV0IGl0IGxlYXZlcyB0aGUgSVIgbmljZSBhbmQgdGlkeSwgd2hpY2ggaXMgcGFydGlj
dWxhcmx5CisgICAgLy8gdXNlZnVsIGZvciBwaGFzZXMgdGhhdCBkbyBzaXplIGVzdGltYXRlcy4K
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgeworICAgICAgICBibG9jay0+dmFs
dWVzKCkucmVtb3ZlQWxsTWF0Y2hpbmcoCisgICAgICAgICAgICBbJl0gKFZhbHVlKiB2YWx1ZSkg
LT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZXNUb0RlbGV0ZS5jb250YWlucyh2
YWx1ZSkgJiYgdmFsdWUtPm9wY29kZSgpICE9IE5vcCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHByb2MuZGVsZXRl
VmFsdWUodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fSk7CisgICAgfQogCiAgICAgaWYgKEIzRml4U1NBSW50ZXJuYWw6OnZlcmJvc2UpIHsKICAgICAg
ICAgZGF0YUxvZygiQjMgYWZ0ZXIgU1NBIGNvbnZlcnNpb246XG4iKTsKQEAgLTI4NSw2ICszMDAs
MTUgQEAgdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdAogICAgIC8vIENo
YW5nZSBhY2Nlc3NlcyB0byB0aGUgdmFsdWVzIHRvIGFjY2Vzc2VzIHRvIHRoZSBzdGFjayBzbG90
cy4KICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwogICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBwcm9jKSB7CisgICAgICAgIGlmIChibG9jay0+bnVtUHJlZGVjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5wcmVkZWNlc3NvcigwKS0+
bGFzdCgpOworICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gbWFwLmdldCh2YWx1ZSk7
CisgICAgICAgICAgICBpZiAodmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChibG9jay0+bnVtUHJlZGVjZXNzb3JzKCkgPT0gMSk7IC8vIENyaXRpY2FsIGVkZ2VzIGJl
dHRlciBiZSBicm9rZW4uCisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJp
YWJsZVZhbHVlPigwLCBTZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUsIHZhbHVlKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZm9yICh1bnNpZ25lZCB2
YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkg
ewogICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwogCkBA
IC0zMTIsOCArMzM2LDEwIEBAIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29u
c3QKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9
IG1hcC5nZXQodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxW
YXJpYWJsZVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEsIFNldCwg
dmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSwgdmFsdWUpOworICAgICAgICAgICAgICAgIGlmICh2
YWx1ZUluZGV4ICsgMSA8IGJsb2NrLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlSW5kZXggKyAxLCBTZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUsIHZhbHVlKTsK
KyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgaW5z
ZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpAQCAtMzI0LDYgKzM1MCw5IEBAIGJvb2wgZml4U1NB
KFByb2NlZHVyZSYgcHJvYykKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywgImZp
eFNTQSIpOwogCisgICAgaWYgKHByb2MudmFyaWFibGVzKCkuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCiAgICAgLy8gTG90cyBvZiB2YXJpYWJsZXMgaGF2ZSB0cml2aWFs
IGxvY2FsIGxpdmVuZXNzLiBXZSBjYW4gYWxsb2NhdGUgdGhvc2Ugd2l0aG91dCBhbnkKICAgICAv
LyB0cm91YmxlLgogICAgIGZpeFNTQUxvY2FsbHkocHJvYyk7CkBAIC0zMzYsNyArMzY1LDYgQEAg
Ym9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgIGlmIChwcm9jLnZhcmlhYmxlcygpLmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIAotICAgIC8vIFdlIGtub3cgdGhh
dCB3ZSBoYXZlIHZhcmlhYmxlcyB0byBvcHRpbWl6ZSwgc28gZG8gdGhhdCBub3cuCiAgICAgYnJl
YWtDcml0aWNhbEVkZ2VzKHByb2MpOwogCiAgICAgZml4U1NBR2xvYmFsbHkocHJvYyk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAyMzExMjgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ3LDYgKzQ3LDcgQEAKICNpbmNsdWRlICJCM1B1cmVDU0UuaCIKICNpbmNsdWRlICJC
M1JlZHVjZURvdWJsZVRvRmxvYXQuaCIKICNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCisj
aW5jbHVkZSAiQjNTcGVjaWFsaXplUGF0aHMuaCIKICNpbmNsdWRlICJCM1RpbWluZ1Njb3BlLmgi
CiAjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgogI2luY2x1ZGUgIlBDVG9Db2RlT3JpZ2luTWFwLmgi
CkBAIC04NywxMiArODgsNyBAQCB2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUpCiAgICAgICAgIGhvaXN0TG9vcEludmFyaWFudFZhbHVlcyhwcm9jZWR1cmUpOwogICAgICAg
ICBpZiAoZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMocHJvY2VkdXJlKSkKICAgICAgICAg
ICAgIGVsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zKHByb2NlZHVyZSk7Ci0gICAgICAgIGZv
bGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7Ci0gICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2Nl
ZHVyZSk7CiAgICAgICAgIGluZmVyU3dpdGNoZXMocHJvY2VkdXJlKTsKLSAgICAgICAgZHVwbGlj
YXRlVGFpbHMocHJvY2VkdXJlKTsKLSAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7Ci0gICAgICAg
IGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CiAgICAgICAgIAogICAgICAgICAvLyBGSVhN
RTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgogICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CkBAIC0xMDYsNiArMTAyLDEzIEBAIHZv
aWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSkKIAogICAgIGlmIChwcm9jZWR1
cmUub3B0TGV2ZWwoKSA+PSAyKSB7CiAgICAgICAgIHJlZHVjZVN0cmVuZ3RoKHByb2NlZHVyZSk7
CisgICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CisgICAgICAgIHNwZWNpYWxp
emVQYXRocyhwcm9jZWR1cmUpOworICAgICAgICBmaXhTU0EocHJvY2VkdXJlKTsKKyAgICAgICAg
ZHVwbGljYXRlVGFpbHMocHJvY2VkdXJlKTsKKyAgICAgICAgZml4U1NBKHByb2NlZHVyZSk7Cisg
ICAgICAgIGZvbGRQYXRoQ29uc3RhbnRzKHByb2NlZHVyZSk7CisgICAgICAgIHJlZHVjZVN0cmVu
Z3RoKHByb2NlZHVyZSk7CiAKICAgICAgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlv
bnMgaGVyZS4KICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDUwNwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
CShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Myw3ICs5Myw2IEBAIFZhbHVlKiBQcm9jZWR1cmU6
OmNsb25lKFZhbHVlKiB2YWx1ZSkKICAgICByZXR1cm4gbV92YWx1ZXMuYWRkKFdURk1vdmUoY2xv
bmUpKTsKIH0KIAotCiBWYWx1ZSogUHJvY2VkdXJlOjphZGRJbnRDb25zdGFudChPcmlnaW4gb3Jp
Z2luLCBUeXBlIHR5cGUsIGludDY0X3QgdmFsdWUpCiB7CiAgICAgc3dpdGNoICh0eXBlKSB7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMjMxMTI4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE0Miw2ICsxNDIsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQogICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KICAgICBCYXNp
Y0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KKyAgICAKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gdGFrZUJsb2NrKHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBXVEZNb3ZlKG1fYmxvY2tzW2luZGV4XSk7IH0KIAogICAg
IHR5cGVkZWYgV1RGOjpJbmRleGVkQ29udGFpbmVySXRlcmF0b3I8UHJvY2VkdXJlPiBpdGVyYXRv
cjsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BlY2lhbGl6ZVBhdGhzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplUGF0
aHMuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwZWNp
YWxpemVQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OTEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzU3BlY2lhbGl6ZVBhdGhzLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCcmVha0NyaXRpY2FsRWRnZXMuaCIKKyNpbmNsdWRl
ICJCM0RvbWluYXRvcnMuaCIKKyNpbmNsdWRlICJCM0ZpeFNTQS5oIgorI2luY2x1ZGUgIkIzUGhh
c2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
VmFsdWVJbkJsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvSW5kZXhNYXAuaD4KKyNpbmNsdWRlIDx3dGYvSW5kZXhTZXQuaD4KKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTcGVjaWFs
aXplUGF0aHMgeworICAgIHN0cnVjdCBQYXRoIHsKKyAgICAgICAgZG91YmxlIGJlbmVmaXRPdmVy
Q29zdCgpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFN1cGVyIHZhbHVhYmxlOgor
ICAgICAgICAgICAgLy8gMSkgUGFpciBvZiBicmFuY2hlcyB3aXRoIHZlcnkgbGl0dGxlIGNvZGUg
dG8gZHVwbGljYXRlIGJldHdlZW4gdGhlbS4KKyAgICAgICAgICAgIC8vIDIpIEJyYW5jaCBpbnNp
ZGUgb2Ygc21hbGwgbG9vcC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBOb3QgdmFs
dWFibGU6CisgICAgICAgICAgICAvLyAzKSBEdXBsaWNhdGluZyBhIGxhcmdlIG5lc3RlZCBsb29w
IHRvIGhvaXN0IGFuIGlubmVyIGJyYW5jaC4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAv
LyBJbiBjYXNlIG9mICgxKSwgd2UgZXhwZWN0IHNwYWNlQ29zdCB0byBiZSA+IDEgYnV0IHRoZSBi
ZW5lZml0IHRvIGJlIDEuCisgICAgICAgICAgICAvLworICAgICAgICAgICAgLy8gSW4gY2FzZSBv
ZiAoMiksIHdlIGV4cGVjdCBzcGFjZUNvc3QgdG8gYmUgNS0yMCBidXQgdGhlIGJlbmVmaXQgdG8g
YmUgOS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJbiBjYXNlIG9mICgzKSwgd2Ug
ZXhwZWN0IHNwYWNlQ29zdCB0byBiZSA+MTAwIGJ1dCB0aGUgYmVuZWZpdCB0byBiZSA+MTAwLgor
ICAgICAgICAgICAgcmV0dXJuIG5ldEJlbmVmaXQoKSAvIHNwYWNlQ29zdDsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgZG91YmxlIG5ldEJlbmVmaXQoKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gYmVuZWZpdCAtIGluc2VydGVkQnJhbmNoQ29zdCgpOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBkb3VibGUgaW5zZXJ0ZWRCcmFuY2hDb3N0KCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGluc2VydGlvblBvaW50LT5mcmVxdWVuY3ko
KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIG91dC5wcmludCgKKyAgICAgICAgICAg
ICAgICAie3ByZWRpY2F0ZSA9ICIsIHBvaW50ZXJEdW1wKHByZWRpY2F0ZSksICIsIgorICAgICAg
ICAgICAgICAgICIgaW5zZXJ0aW9uUG9pbnQgPSAiLCBwb2ludGVyRHVtcChpbnNlcnRpb25Qb2lu
dCksICIsIgorICAgICAgICAgICAgICAgICIgYnJhbmNoUG9pbnQgPSAiLCBicmFuY2hQb2ludCwg
IiwiCisgICAgICAgICAgICAgICAgIiBiZW5lZml0ID0gIiwgYmVuZWZpdCwgIiwiCisgICAgICAg
ICAgICAgICAgIiBpbnNlcnRlZEJyYW5jaENvc3QgPSAiLCBpbnNlcnRlZEJyYW5jaENvc3QoKSwg
IiwiCisgICAgICAgICAgICAgICAgIiBzcGFjZUNvc3QgPSAiLCBzcGFjZUNvc3QsICIsIgorICAg
ICAgICAgICAgICAgICIgYmVuZWZpdE92ZXJDb3N0ID0gIiwgYmVuZWZpdE92ZXJDb3N0KCksICIs
IgorICAgICAgICAgICAgICAgICIgYmxvY2tzID0gWyIsIHBvaW50ZXJMaXN0RHVtcChibG9ja3Mp
LCAiXX0iKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSB7
IG51bGxwdHIgfTsKKyAgICAgICAgQmFzaWNCbG9jayogaW5zZXJ0aW9uUG9pbnQgeyBudWxscHRy
IH07IC8vIFRoaXMgaXMgYSBibG9jayB0aGF0IGVuZHMgaW4gYSBicmFuY2ggdGhhdCB3ZSdyZSBz
cGVjaWFsaXppbmcsIG9yIGl0IGVuZHMgaW4gYSBKdW1wIGJlY2F1c2UgdGhpcyBpcyBhIGhvaXN0
aW5nIHRhcmdldC4KKyAgICAgICAgVmFsdWVJbkJsb2NrIGJyYW5jaFBvaW50OworICAgICAgICBk
b3VibGUgYmVuZWZpdCB7IDAgfTsKKyAgICAgICAgZG91YmxlIHNwYWNlQ29zdCB7IDAgfTsKKyAg
ICAgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3M7IC8vIFRoZSBsaXN0IG9mIGR1cGxpY2F0
ZWQgYmxvY2tzIG5vdCBpbmNsdWRpbmcgdGhlIGJyYW5jaFBvaW50LgorICAgIH07CisgICAgCitw
dWJsaWM6CisgICAgU3BlY2lhbGl6ZVBhdGhzKFByb2NlZHVyZSYgcHJvYykKKyAgICAgICAgOiBt
X3Byb2MocHJvYykKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgcnVuKCkKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJTdGFydGluZyBzcGVj
aWFsaXplUGF0aHMuIElSIGJlZm9yZSBhbnkgY2hhbmdlczpcbiIsIG1fcHJvYyk7CisgICAgICAg
IAorICAgICAgICBicmVha0NyaXRpY2FsRWRnZXMobV9wcm9jKTsKKyAgICAgICAgY3JlYXRlSG9p
c3RpbmdUYXJnZXRzKCk7CisKKyAgICAgICAgaWYgKG1fdmVyYm9zZSkKKyAgICAgICAgICAgIGRh
dGFMb2coIklSIGFmdGVyIGhvaXN0aW5nIHRhcmdldCBjcmVhdGlvbiwgYmVmb3JlIGFuYWx5c2lz
OlxuIiwgbV9wcm9jKTsKKyAgICAgICAgCisgICAgICAgIG1fZG9taW5hdG9ycyA9ICZtX3Byb2Mu
ZG9taW5hdG9ycygpOworICAgICAgICBtX3Byb2MucmVzZXRWYWx1ZU93bmVycygpOworICAgICAg
ICBmaW5kQnJhbmNoZXMoKTsKKyAgICAgICAgZmluZEJsb2Nrc0R1cGxpY2F0ZWRGb3JQcmVkaWNh
dGVzKCk7CisgICAgICAgIGNyZWF0ZVBhdGhzQnlEb21pbmFudFJlZHVuZGFuY3koKTsKKyAgICAg
ICAgY3JlYXRlUGF0aHNCeUhvaXN0aW5nKCk7CisgICAgICAgIGNob29zZVBhdGhPcmRlcigpOwor
ICAgICAgICBzaW11bGF0ZUR1cGxpY2F0aW9uQW5kUHJ1bmVQYXRocygpOworICAgICAgICAKKyAg
ICAgICAgaWYgKG1fcGF0aHNJbk9yZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKG1f
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJEaWQgbm90IHNlbGVjdCBhbnkgcGF0
aHMuXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKG1fdmVyYm9zZSkgeworICAgICAgICAgICAgZGF0YUxvZygiU2VsZWN0ZWQg
cGF0aHMgaW4gZGVzY2VuZGluZyBvcmRlciBvZiBiZW5lZml0T3ZlckNvc3Q6XG4iKTsKKyAgICAg
ICAgICAgIGZvciAoUGF0aCogcGF0aCA6IG1fcGF0aHNJbk9yZGVyKQorICAgICAgICAgICAgICAg
IGRhdGFMb2coIiAgICAiLCAqcGF0aCwgIlxuIik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGRlbW90ZUFwcHJvcHJpYXRlVmFsdWVzKCk7CisKKyAgICAgICAgaWYgKG1fdmVyYm9zZSkK
KyAgICAgICAgICAgIGRhdGFMb2coIklSIGFmdGVyIGRlbW90aW5nIGFwcHJvcHJpYXRlIHZhbHVl
czpcbiIsIG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBkdXBsaWNhdGVQYXRocygpOworCisg
ICAgICAgIGlmIChtX3ZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nKCJJUiBhZnRlciBzcGVj
aWFsaXplUGF0aHM6XG4iLCBtX3Byb2MpOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICB2b2lkIGNyZWF0ZUhvaXN0aW5nVGFyZ2V0cygp
CisgICAgeworICAgICAgICAvLyBBbGwgbG93ZXItZnJlcXVlbmN5IHByZWRlY2Vzc29ycyBvZiBh
IGJsb2NrIHNob3VsZCBqdW1wIHRvIHRoYXQgYmxvY2sgdmlhIGEgaG9pc3RpbmcKKyAgICAgICAg
Ly8gdGFyZ2V0IGJsb2NrLiBJZiB3ZSBkb24ndCB1c2UgdGhlc2UgYmxvY2tzLCB0aGV5J2xsIGdl
dCBjb2xsZWN0ZWQgYnkgcmVkdWNlU3RyZW5ndGguCisgICAgICAgIAorICAgICAgICBCbG9ja0lu
c2VydGlvblNldCBpbnNlcnRpb25TZXQobV9wcm9jKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIG51bWJl
ck9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAgZG91YmxlIG1h
eEZyZXF1ZW5jeU9mTG93ZXJGcmVxdWVuY3lQcmVkZWNlc3NvcnMgPSAwOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+ZnJlcXVlbmN5KCkgPj0gYmxvY2stPmZy
ZXF1ZW5jeSgpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBudW1iZXJPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNzb3JzKys7
CisgICAgICAgICAgICAgICAgbWF4RnJlcXVlbmN5T2ZMb3dlckZyZXF1ZW5jeVByZWRlY2Vzc29y
cyA9CisgICAgICAgICAgICAgICAgICAgIHN0ZDo6bWF4KG1heEZyZXF1ZW5jeU9mTG93ZXJGcmVx
dWVuY3lQcmVkZWNlc3NvcnMsIHByZWRlY2Vzc29yLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChudW1iZXJPZkxvd2VyRnJlcXVlbmN5
UHJlZGVjZXNzb3JzIDwgMikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgQmFzaWNCbG9jayogaG9pc3RpbmdUYXJnZXQgPSBpbnNlcnRpb25TZXQu
aW5zZXJ0QmVmb3JlKGJsb2NrLCBtYXhGcmVxdWVuY3lPZkxvd2VyRnJlcXVlbmN5UHJlZGVjZXNz
b3JzKTsKKyAgICAgICAgICAgIGhvaXN0aW5nVGFyZ2V0LT5hcHBlbmROZXc8VmFsdWU+KG1fcHJv
YywgSnVtcCwgYmxvY2stPmF0KDApLT5vcmlnaW4oKSk7CisgICAgICAgICAgICBob2lzdGluZ1Rh
cmdldC0+c2V0U3VjY2Vzc29ycyhibG9jayk7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAg
aWYgKHByZWRlY2Vzc29yLT5mcmVxdWVuY3koKSA+PSBibG9jay0+ZnJlcXVlbmN5KCkpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIHByZWRlY2Vzc29yLT5yZXBsYWNlU3VjY2Vzc29yKGJsb2NrLCBob2lzdGluZ1RhcmdldCk7
CisgICAgICAgICAgICAgICAgaG9pc3RpbmdUYXJnZXQtPmFkZFByZWRlY2Vzc29yKHByZWRlY2Vz
c29yKTsKKyAgICAgICAgICAgICAgICBibG9jay0+cmVtb3ZlUHJlZGVjZXNzb3IocHJlZGVjZXNz
b3IpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYmxvY2stPmFkZFByZWRlY2Vzc29yKGhv
aXN0aW5nVGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGluc2VydGlv
blNldC5leGVjdXRlKCkpCisgICAgICAgICAgICBtX3Byb2MuaW52YWxpZGF0ZUNGRygpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGZpbmRCcmFuY2hlcygpCisgICAgeworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
ZGV4ID0gYmxvY2stPnNpemUoKTsgaW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBWYWx1ZSog
dmFsdWUgPSBibG9jay0+YXQoaW5kZXgpOworICAgICAgICAgICAgICAgIHN3aXRjaCAodmFsdWUt
Pm9wY29kZSgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAg
ICAgY2FzZSBDaGVjazogeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogcHJlZGljYXRlID0g
dmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgbV9wcmVkaWNhdGVUb0JyYW5jaGVzLmFkZChwcmVkaWNhdGUsIFZlY3RvcjxWYWx1ZUluQmxv
Y2s+KCkpLml0ZXJhdG9yLT52YWx1ZS5hcHBlbmQoVmFsdWVJbkJsb2NrKGJsb2NrLCBpbmRleCkp
OworCisgICAgICAgICAgICAgICAgICAgIC8vIEVhY2ggYmxvY2sgY2FuIG9ubHkgaGF2ZSBvbmUg
ImJyYW5jaCIsIHNpbmNlOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAg
ICAgICAvLyAxKSBUaGlzIHJlZHVuZGFuY3kgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gZml4ZWQ6
CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vICAgIEJCI2Zv
bzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAg
ICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vIDIpIFRoaXMgcmVkdW5kYW5jeSB3b3VsZCBoYXZlIGFscmVhZHkg
YmVlbiBmaXhlZDoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gICAgQkIjZm9vOgorICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgQ2hlY2soQHApCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIDMpIFRoaXMgcmVkdW5kYW5jeSBpcyBub3Qg
dmFsaWQgSVI6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgIEJCI2ZvbzoKKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIEJyYW5jaChAcCkKKyAg
ICAgICAgICAgICAgICAgICAgLy8gICAgICAgIENoZWNrKEBwKQorICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAvLyA0KSBUaGlzIHJlZHVuZGFuY3kgaXMgbm90IHZh
bGlkIElSOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAg
ICBCQiNmb286CisgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAg
ICAgICAgICAgICAgICAgIC8vICAgICAgICBCcmFuY2goQHApCisgICAgICAgICAgICAgICAgICAg
IC8vCisgICAgICAgICAgICAgICAgICAgIC8vIE9mIGNvdXJzZSwgdGhlIGZpcnN0IHR3byBhc3N1
bXB0aW9ucyBjb3VsZCBiZSB2aW9sYXRlZCBiZWNhdXNlIG9mIGEgbWlzc2VkCisgICAgICAgICAg
ICAgICAgICAgIC8vIG9wdGltaXphdGlvbiBvcHBvcnR1bml0eS4gVGhpcyBwaGFzZSBpcyBwcmVw
YXJlZCBmb3IgdGhhdC4KKyAgICAgICAgICAgICAgICAgICAgbV9ibG9ja3NXaXRoQnJhbmNoZXMu
YWRkKHN0ZDo6bWFrZV9wYWlyKGJsb2NrLCBwcmVkaWNhdGUpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBmaW5kQmxvY2tzRHVwbGljYXRlZEZvclByZWRpY2F0ZXMoKQorICAgIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgeworICAgICAgICAgICAgaWYgKGJsb2NrLT5s
YXN0KCktPm9wY29kZSgpICE9IEJyYW5jaCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgVmFsdWUqIHByZWRpY2F0ZSA9IGJsb2NrLT5sYXN0KCkt
PmNoaWxkKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBhdXRvIGhhbmRsZVN1Y2Nlc3Nv
ciA9IFsmXSAoQmFzaWNCbG9jayogc3RhcnQsIGJvb2wgcHJlZGljYXRlVmFsdWUpIHsKKyAgICAg
ICAgICAgICAgICBtX2RvbWluYXRvcnMtPmZvckFsbEJsb2Nrc0RvbWluYXRlZEJ5KAorICAgICAg
ICAgICAgICAgICAgICBzdGFydCwKKyAgICAgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2Nr
KiBkdXBsaWNhdGVkQmxvY2spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIEl0J3MgcG9z
c2libGUgdGhhdCB0aGlzIHdpbGwgaGF2ZSBjb2xsaXNpb25zIGlmIGEgYnJhbmNoIGRvbWluYXRl
ZCBieQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5vdGhlciBicmFuY2ggd2Fzbid0IGVs
aW1pbmF0ZWQgYnkgZm9sZFBhdGhDb25zdGFudHMuCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuYWRkKHN0ZDo6bWFrZV9wYWlyKGR1cGxpY2F0ZWRCbG9j
aywgcHJlZGljYXRlKSwgcHJlZGljYXRlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH07CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nlc3Nv
cihibG9jay0+dGFrZW4oKS5ibG9jaygpLCB0cnVlKTsKKyAgICAgICAgICAgIGhhbmRsZVN1Y2Nl
c3NvcihibG9jay0+bm90VGFrZW4oKS5ibG9jaygpLCBmYWxzZSk7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgdm9pZCBjcmVhdGVQYXRoc0J5RG9taW5hbnRSZWR1bmRhbmN5KCkKKyAgICB7
CisgICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBtX3ByZWRpY2F0ZVRvQnJhbmNoZXMpIHsKKyAg
ICAgICAgICAgIFZhbHVlKiBwcmVkaWNhdGUgPSBlbnRyeS5rZXk7CisgICAgICAgICAgICBWZWN0
b3I8VmFsdWVJbkJsb2NrPiYgYnJhbmNoZXMgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgZm9yIChWYWx1ZUluQmxvY2sgaW5zZXJ0aW9uUG9pbnQgOiBicmFuY2hlcykg
eworICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC52YWx1ZSgpLT5vcGNvZGUoKSAh
PSBCcmFuY2gpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGZvciAoVmFsdWVJbkJsb2NrIGJyYW5jaFBvaW50IDogYnJhbmNo
ZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhp
bnNlcnRpb25Qb2ludC5ibG9jaygpLCBicmFuY2hQb2ludC5ibG9jaygpKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGluc2VydGlvblBvaW50LmJsb2NrKCkgPT0gYnJhbmNoUG9pbnQuYmxvY2so
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc2VydGlvblBvaW50LmluZGV4KCkg
PiBicmFuY2hQb2ludC5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2ludC5pbmRleCgpID09IGJyYW5jaFBvaW50LmluZGV4
KCkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICBtX3BhdGggPSBtX3BhdGhzLmFkZCgpOworICAgICAgICAgICAgICAgICAg
ICBtX3BhdGgtPnByZWRpY2F0ZSA9IHByZWRpY2F0ZTsKKyAgICAgICAgICAgICAgICAgICAgbV9w
YXRoLT5pbnNlcnRpb25Qb2ludCA9IGluc2VydGlvblBvaW50LmJsb2NrKCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fcGF0aC0+YnJhbmNoUG9pbnQgPSBicmFuY2hQb2ludDsKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmIChpbnNlcnRpb25Qb2ludC52YWx1ZSgp
ID09IGJyYW5jaFBvaW50LnZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGF0
aC0+c3BhY2VDb3N0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcGF0aC0+YmVuZWZp
dCA9IGluc2VydGlvblBvaW50LmJsb2NrKCktPmZyZXF1ZW5jeSgpOworICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXRoLT5zcGFjZUNvc3Qg
PSBicmFuY2hQb2ludC5pbmRleCgpOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wYXRoLT5i
ZW5lZml0ID0gYnJhbmNoUG9pbnQuYmxvY2soKS0+ZnJlcXVlbmN5KCkgKyBpbnNlcnRpb25Qb2lu
dC5ibG9jaygpLT5mcmVxdWVuY3koKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaW5zZXJ0aW9uUG9pbnQuYmxvY2soKSAh
PSBicmFuY2hQb2ludC5ibG9jaygpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgQmxvY2tX
b3JrbGlzdCB3b3JrbGlzdDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hB
bGwoYnJhbmNoUG9pbnQuYmxvY2soKS0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2xvc2VQYXRoKHdvcmtsaXN0KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmVyYm9zZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkFkZGluZyBwYXRoIGJ5IGRvbWluYW50IHJl
ZHVuZGFuY3k6ICIsICptX3BhdGgsICJcbiIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICB2b2lkIGNyZWF0ZVBhdGhzQnlIb2lz
dGluZygpCisgICAgeworICAgICAgICBWZWN0b3I8UGF0aCo+IHBhdGhzVG9Qcm9jZXNzOworICAg
ICAgICBmb3IgKFBhdGgqIHBhdGggOiBtX3BhdGhzKQorICAgICAgICAgICAgcGF0aHNUb1Byb2Nl
c3MuYXBwZW5kKHBhdGgpOworICAgICAgICB3aGlsZSAoIXBhdGhzVG9Qcm9jZXNzLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgUGF0aCogb2xkUGF0aCA9IHBhdGhzVG9Qcm9jZXNzLnRha2VMYXN0
KCk7CisgICAgICAgICAgICBpZiAob2xkUGF0aC0+aW5zZXJ0aW9uUG9pbnQtPmZyZXF1ZW5jeSgp
IDw9IG9sZFBhdGgtPnByZWRpY2F0ZS0+b3duZXItPmZyZXF1ZW5jeSgpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgCisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBuZXdJ
bnNlcnRpb25Qb2ludEJsb2NrID0gb2xkUGF0aC0+aW5zZXJ0aW9uUG9pbnQ7CisgICAgICAgICAg
ICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgbmV3SW5zZXJ0aW9uUG9pbnRCbG9jayA9IG1f
ZG9taW5hdG9ycy0+aWRvbShuZXdJbnNlcnRpb25Qb2ludEJsb2NrKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBpZiAoIW5ld0luc2VydGlvblBvaW50QmxvY2spCisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgaWYgKG5ld0luc2VydGlvblBv
aW50QmxvY2stPmxhc3QoKS0+b3Bjb2RlKCkgPT0gSnVtcAorICAgICAgICAgICAgICAgICAgICAm
JiBuZXdJbnNlcnRpb25Qb2ludEJsb2NrLT5mcmVxdWVuY3koKSA8IG9sZFBhdGgtPmluc2VydGlv
blBvaW50LT5mcmVxdWVuY3koKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICghbmV3SW5zZXJ0aW9uUG9pbnRC
bG9jaykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgKCFtX2RvbWluYXRvcnMtPmRvbWluYXRlcyhvbGRQYXRoLT5wcmVkaWNhdGUtPm93bmVy
LCBuZXdJbnNlcnRpb25Qb2ludEJsb2NrKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG5ld0luc2VydGlvblBvaW50QmxvY2sgPT0gb2xk
UGF0aC0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIEhvaXN0aW5nIHRhcmdldHMgbXVzdCBoYXZlIGp1bXBzIGF0
IHRoZSBlbmQgb2YgdGhlbSBiZWNhdXNlIHdlIGNyZWF0ZWQgaG9pc3RpbmcKKyAgICAgICAgICAg
IC8vIHRhcmdldHMgdGhhdCBoYXZlIGp1bXBzLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bmV3SW5zZXJ0aW9uUG9pbnRCbG9jay0+bGFzdCgpLT5vcGNvZGUoKSA9PSBKdW1wKTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbV9wYXRoID0gbV9wYXRocy5hZGQoKm9sZFBhdGgpOworICAg
ICAgICAgICAgbV9wYXRoLT5pbnNlcnRpb25Qb2ludCA9IG5ld0luc2VydGlvblBvaW50QmxvY2s7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcGF0aC0+c3BhY2VDb3N0ICs9IG9sZFBhdGgt
Pmluc2VydGlvblBvaW50LT5zaXplKCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEJsb2Nr
V29ya2xpc3Qgd29ya2xpc3Q7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
b2xkUGF0aC0+YmxvY2tzKQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnByZXRlbmRUb0hhdmVT
ZWVuKGJsb2NrKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVzaEFsbChv
bGRQYXRoLT5pbnNlcnRpb25Qb2ludC0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICAgICAgY2xv
c2VQYXRoKHdvcmtsaXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcGF0aHNUb1Byb2Nl
c3MuYXBwZW5kKG1fcGF0aCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChtX3ZlcmJv
c2UpIHsKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJBZGRpbmcgcGF0aCBieSBob2lzdGluZzpc
biIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBPbGQgcGF0aDogIiwgKm9sZFBhdGgs
ICJcbiIpOworICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBOZXcgcGF0aDogIiwgKm1fcGF0
aCwgIlxuIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgdm9p
ZCBjbG9zZVBhdGgoQmxvY2tXb3JrbGlzdCYgd29ya2xpc3QpCisgICAgeworICAgICAgICB3aGls
ZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICAgICAgaWYg
KGJsb2NrID09IG1fcGF0aC0+aW5zZXJ0aW9uUG9pbnQpCisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG1fcGF0aC0+YmxvY2tzLmFwcGVuZChibG9j
ayk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChibG9jayA9PSBtX3BhdGgtPmJyYW5j
aFBvaW50LmJsb2NrKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IHdhbnQgdG8gYWRk
IHRoZSBlbmQgb2YgdGhpcyBibG9jay4gTm90ZSwgaWYgd2Ugc2VlIHRoaXMgYmxvY2ssCisgICAg
ICAgICAgICAgICAgLy8gaXQncyBiZWNhdXNlIGl0IHdhc24ndCBhbHJlYWR5IGluIHRoZSBibG9j
a3Mgc2V0LiBUaGF0IG1lYW5zIHRoYXQgb2xkUGF0aCB3YXMgYQorICAgICAgICAgICAgICAgIC8v
IGEgZG9taW5hbnQgcmVkdW5kYW5jeSBwYXRoIHJhdGhlciB0aGFuIGEgaG9pc3RlZCBwYXRoLiBJ
dCBhbHNvIG1lYW5zCisgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGlzIGJsb2NrIGRvZXNuJ3Qg
aGF2ZSBhbnkgdW5hY2NvdW50ZWQtZm9yIGJyYW5jaGVzLgorICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgLy8gQnV0IHRoZSBvbmx5IHdheSBmb3IgdGhlcmUgdG8gYmUgYW55dGhp
bmcgYWZ0ZXIgdGhlIGJyYW5jaFBvaW50IGluIHRoZSBibG9jayBpcyBpZgorICAgICAgICAgICAg
ICAgIC8vIHRoZSBicmFuY2hQb2ludCBpcyBhIENoZWNrLiBDb2RlIGFmdGVyIGEgQ2hlY2sgb25s
eSBuZWVkcyB0byBiZSBkdXBsaWNhdGVkIGZvcgorICAgICAgICAgICAgICAgIC8vIHdoZW4gdGhl
IHByZWRpY2F0ZSBpcyBmYWxzZS4gU28sIHRoYXQgY29kZSBkb2Vzbid0IGdldCBkdXBsaWNhdGVk
IGF0IGFsbC4KKyAgICAgICAgICAgICAgICAvLyBUaGVyZWZvcmUsIHRoZXJlIGlzIG5vIGFkZGl0
aW9uYWwgY29zdC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCFtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuY29u
dGFpbnMoc3RkOjptYWtlX3BhaXIoYmxvY2ssIG1fcGF0aC0+cHJlZGljYXRlKSkpIHsKKyAgICAg
ICAgICAgICAgICBtX3BhdGgtPnNwYWNlQ29zdCArPSBibG9jay0+c2l6ZSgpOworCisgICAgICAg
ICAgICAgICAgLy8gVGhpcyBgaWZgIGlzIG5lc3RlZCBiZWNhdXNlIGlmIGEgZHVwbGljYXRlZCBi
bG9jayAqZGlkKiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyBicmFuY2ggZm9yIG91ciBwcmVk
aWNhdGUgdGhlbiBpdCdzIHByb2JhYmx5IGJlY2F1c2Ugd2UgbWlzc2VkIGFuCisgICAgICAgICAg
ICAgICAgLy8gb3B0aW1pemF0aW9uIG9wcG9ydHVuaXR5IGluIHRoZSBsYXN0IHJlZHVjZVN0cmVu
Z3RoIHBhc3MuIFRoYXQgaXMKKyAgICAgICAgICAgICAgICAvLyBtb3N0IGxpa2VseSB0byBoYXBw
ZW4gYmVjYXVzZSB0aGlzIHJlZHVuZGFuY3kgd2FzIHJldmVhbGVkIG9ubHkKKyAgICAgICAgICAg
ICAgICAvLyBhZnRlciBzb21lIHBoYXNlIHRoYXQgcmFuIGFmdGVyIHJlZHVjZVN0cmVuZ3RoLCBs
aWtlCisgICAgICAgICAgICAgICAgLy8gZWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuIFRo
ZXJlZm9yZSwgYSBmdXR1cmUgcGFzcyBvZgorICAgICAgICAgICAgICAgIC8vIHJlZHVjZVN0cmVu
Z3RoIGlzIHZlcnkgbGlrZWx5IHRvIHJlbW92ZSBhIGR1cGxpY2F0ZWQgYnJhbmNoIGZvcgorICAg
ICAgICAgICAgICAgIC8vIG91ciBwcmVkaWNhdGUgd2l0aG91dCBuZWVkaW5nIHRvIHNwZWNpYWxp
emUuIFRoZXJlZm9yZSwgd2UgZG9uJ3QKKyAgICAgICAgICAgICAgICAvLyB3YW50IHRvIGNvdWxk
IGl0IGFzIGEgYmVuZWZpdCBoZXJlLiBBbHNvLCB3ZSBkb24ndCBkdXBsaWNhdGUKKyAgICAgICAg
ICAgICAgICAvLyBkdXBsaWNhdGVkIGJsb2Nrcywgc28gd2Ugd291bGRuJ3QgYmUgY3JlYXRpbmcg
YW55IGJlbmVmaXQgYW55d2F5LgorICAgICAgICAgICAgICAgIGlmIChtX2Jsb2Nrc1dpdGhCcmFu
Y2hlcy5jb250YWlucyhzdGQ6Om1ha2VfcGFpcihibG9jaywgbV9wYXRoLT5wcmVkaWNhdGUpKSkK
KyAgICAgICAgICAgICAgICAgICAgbV9wYXRoLT5iZW5lZml0ICs9IGJsb2NrLT5mcmVxdWVuY3ko
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgd29ya2xpc3QucHVz
aEFsbChibG9jay0+cHJlZGVjZXNzb3JzKCkpOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IHZvaWQgY2hvb3NlUGF0aE9yZGVyKCkKKyAgICB7CisgICAgICAgIGZvciAoUGF0aCogcGF0aCA6
IG1fcGF0aHMpIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IGtub3cgYW55dGhpbmcgYWJvdXQg
dGhpcyBoZXVyaXN0aWMgeWV0LgorICAgICAgICAgICAgaWYgKHBhdGgtPmJlbmVmaXRPdmVyQ29z
dCgpID4gT3B0aW9uczo6YjNQYXRoU3BlY2lhbGl6YXRpb25UaHJlc2hvbGQoKSkKKyAgICAgICAg
ICAgICAgICBtX3BhdGhzSW5PcmRlci5hcHBlbmQocGF0aCk7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHN0ZDo6c29ydCgKKyAgICAgICAgICAgIG1fcGF0aHNJbk9yZGVyLmJlZ2luKCks
IG1fcGF0aHNJbk9yZGVyLmVuZCgpLAorICAgICAgICAgICAgWyZdIChQYXRoKiBsZWZ0LCBQYXRo
KiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgLy8gU29ydCBpbiBkZXNjZW5kaW5n
IG9yZGVyIG9mIGJlbmVmaXQuCisgICAgICAgICAgICAgICAgcmV0dXJuIGxlZnQtPm5ldEJlbmVm
aXQoKSA+IHJpZ2h0LT5uZXRCZW5lZml0KCk7CisgICAgICAgICAgICB9KTsKKyAgICB9CisgICAg
CisgICAgdm9pZCBzaW11bGF0ZUR1cGxpY2F0aW9uQW5kUHJ1bmVQYXRocygpCisgICAgeworICAg
ICAgICBtX2FmZmVjdGVkQmxvY2tzLnJlc2l6ZShtX3Byb2Muc2l6ZSgpKTsKKworICAgICAgICBt
X3BhdGhzSW5PcmRlci5yZW1vdmVBbGxNYXRjaGluZygKKyAgICAgICAgICAgIFsmXSAoUGF0aCog
cGF0aCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRCbG9ja3NbcGF0
aC0+cHJlZGljYXRlLT5vd25lcl0gIT0gSG93QWZmZWN0ZWQ6Ok5vdEFmZmVjdGVkKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAobV9hZmZlY3Rl
ZEJsb2Nrc1twYXRoLT5pbnNlcnRpb25Qb2ludF0gIT0gSG93QWZmZWN0ZWQ6Ok5vdEFmZmVjdGVk
KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAo
bV9hZmZlY3RlZEJsb2Nrc1twYXRoLT5icmFuY2hQb2ludC5ibG9jaygpXSAhPSBIb3dBZmZlY3Rl
ZDo6Tm90QWZmZWN0ZWQpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwYXRoLT5ibG9ja3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fYWZmZWN0ZWRCbG9ja3NbYmxvY2tdICE9IEhvd0FmZmVjdGVk
OjpOb3RBZmZlY3RlZCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtX2FmZmVj
dGVkQmxvY2tzW3BhdGgtPnByZWRpY2F0ZS0+b3duZXJdID0gSG93QWZmZWN0ZWQ6OlByZWRpY2F0
ZTsKKyAgICAgICAgICAgICAgICBtX2FmZmVjdGVkQmxvY2tzW3BhdGgtPmluc2VydGlvblBvaW50
XSA9IEhvd0FmZmVjdGVkOjpJbnNlcnRpb25Qb2ludDsKKyAgICAgICAgICAgICAgICBtX2FmZmVj
dGVkQmxvY2tzW3BhdGgtPmJyYW5jaFBvaW50LmJsb2NrKCldID0gSG93QWZmZWN0ZWQ6OkR1cGxp
Y2F0ZWQ7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBhdGgtPmJs
b2NrcykKKyAgICAgICAgICAgICAgICAgICAgbV9hZmZlY3RlZEJsb2Nrc1tibG9ja10gPSBIb3dB
ZmZlY3RlZDo6RHVwbGljYXRlZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBkZW1vdGVBcHByb3ByaWF0ZVZhbHVl
cygpCisgICAgeworICAgICAgICBJbmRleFNldDxWYWx1ZSo+IHZhbHVlc1RvRGVtb3RlOworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CisgICAgICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gUGhpICYmIG1fYWZmZWN0ZWRCbG9ja3NbYmxvY2tdID09IEhvd0FmZmVjdGVkOjpE
dXBsaWNhdGVkKQorICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQodmFsdWUp
OworICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5vd25lciAhPSBibG9jayAmJiBtX2Fm
ZmVjdGVkQmxvY2tzW2NoaWxkLT5vd25lcl0gPT0gSG93QWZmZWN0ZWQ6OkR1cGxpY2F0ZWQpCisg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZXNUb0RlbW90ZS5hZGQoY2hpbGQpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBkZW1vdGVWYWx1
ZXMobV9wcm9jLCB2YWx1ZXNUb0RlbW90ZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVwbGlj
YXRlUGF0aHMoKQorICAgIHsKKyAgICAgICAgQmxvY2tJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0
KG1fcHJvYyk7CisgICAgICAgIAorICAgICAgICBJbmRleE1hcDxCYXNpY0Jsb2NrKiwgQmFzaWNC
bG9jayo+IGJsb2NrTWFwKG1fcHJvYy5zaXplKCkpOworICAgICAgICBJbmRleE1hcDxWYWx1ZSos
IFZhbHVlKj4gdmFsdWVNYXAobV9wcm9jLnZhbHVlcygpLnNpemUoKSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKFBhdGgqIHBhdGggOiBtX3BhdGhzSW5PcmRlcikgeworICAgICAgICAgICAgbV9w
YXRoID0gcGF0aDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYXV0byBhZGRCbG9ja1RvRHVw
bGljYXRlID0gWyZdIChCYXNpY0Jsb2NrKiBibG9jaykgeworICAgICAgICAgICAgICAgIG1fYmxv
Y2tzVG9EdXBsaWNhdGVMaXN0LmFwcGVuZChibG9jayk7CisgICAgICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LmFkZChibG9jayk7CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0KTsKKyAgICAgICAgICAgIH07CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUobV9wYXRoLT5icmFuY2hQb2ludC5ibG9j
aygpKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3BhdGgtPmJsb2Nr
cykgeworICAgICAgICAgICAgICAgIGlmIChibG9jayAhPSBtX3BhdGgtPmJyYW5jaFBvaW50LmJs
b2NrKCkpCisgICAgICAgICAgICAgICAgICAgIGFkZEJsb2NrVG9EdXBsaWNhdGUoYmxvY2spOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBzdGQ6OnNvcnQoCisgICAg
ICAgICAgICAgICAgbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QuYmVnaW4oKSwgbV9ibG9ja3NUb0R1
cGxpY2F0ZUxpc3QuZW5kKCksCisgICAgICAgICAgICAgICAgWyZdIChCYXNpY0Jsb2NrKiBsZWZ0
LCBCYXNpY0Jsb2NrKiByaWdodCkgLT4gYm9vbCB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBsZWZ0LT5pbmRleCgpIDwgcmlnaHQtPmluZGV4KCk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIE9yZGVyIG1hdHRlcnMhIFdlIHRyeSB0byBjcmVh
dGUgYSBDRkcgdGhhdCBkb2Vzbid0IGxvb2sgbGlrZSBnYXJiYWdlLiBUaGF0J3MKKyAgICAgICAg
ICAgIC8vIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgZm9yIHRoZSBwZXJmb3JtYW5jZSBvZiBsaW5l
YXIgc2Nhbi4gSXQgZG9lc24ndCBtYXR0ZXIgZm9yCisgICAgICAgICAgICAvLyBncmFwaCBjb2xv
cmluZyB0aG91Z2guIEl0IGRlZmluaXRlbHkgbWF0dGVycyBmb3IgZGVidWdnaW5nIHRoZSBjb21w
aWxlci4KKyAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrQmVmb3JlSW5zZXJ0aW9uUG9pbnQg
PSBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdC5sYXN0KCk7CisgICAgICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9ibG9ja3NUb0R1cGxpY2F0ZUxpc3QpIHsKKyAgICAgICAgICAgICAg
ICBhdXRvIGl0ZXIgPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFp
cihibG9jaywgbV9wYXRoLT5wcmVkaWNhdGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciAh
PSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNhdGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ym9vbCBwcmVkaWNhdGVWYWx1ZSA9IGl0ZXItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgZHVwbGljYXRlIHRoZW4vZWxzZSBibG9j
a3MuIE5vdGUgdGhhdCBiZWNhdXNlIG9mIGhvdworICAgICAgICAgICAgICAgICAgICAvLyBtX2R1
cGxpY2F0ZWRGb3JQcmVkaWNhdGUgd29ya3MsIHRoaXMgY291bGQgYmUgYm90aCBhIHRoZW4gYW5k
IGEgZWxzZSBibG9jayBpZjoKKyAgICAgICAgICAgICAgICAgICAgLy8gLSBUaGlzIGlzIGRvbWlu
YXRlZCBieSAoYW5kIGR1cGxpY2F0ZWQgZm9yKSBhIGJyYW5jaCB0aGF0IGlzIGRvbWluYXRlZCBi
eSBvdXIKKyAgICAgICAgICAgICAgICAgICAgLy8gICBpbnNlcnRpb24gcG9pbnQsIGFuZCBhIGJy
YW5jaCBkb21pbmF0ZWQgYnkgb3VyIGluc2VydGlvbiBwb2ludC4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gLSBPdXIgaW5zZXJ0aW9uIHBvaW50IGlzIGRvbWluYXRlZCBieSAoYW5kIGR1cGxpY2F0
ZWQgZm9yKSBhbm90aGVyIGJyYW5jaCBvbgorICAgICAgICAgICAgICAgICAgICAvLyAgIG91ciBw
cmVkaWNhdGUuCisgICAgICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiB0aGlzIGJsb2NrIGlzIGlu
IHRoZSB0aGVuIGFuZCBlbHNlIGNhc2Ugb2YgdGhlIHNhbWUgcHJlZGljYXRlLCB0aGVuIGl0Cisg
ICAgICAgICAgICAgICAgICAgIC8vIGlzIHVucmVhY2hhYmxlLiBTbywgd2UgY2FuIGRvIHdoYXRl
dmVyIHdlIHdhbnQgd2l0aCBpdC4KKworICAgICAgICAgICAgICAgICAgICAvLyBXZSBsZWF2ZSB0
aGVuIGJsb2NrcyB3aGVyZSB0aGV5IGFyZS4KKyAgICAgICAgICAgICAgICAgICAgaWYgKHByZWRp
Y2F0ZVZhbHVlKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBNb3ZlIHRoZSBsb2NhdGlvbiBvZiB0
aGUgYmxvY2sgaW4gdGhlIHByb2dyYW0gZmxvdy4gR290dGEga2VlcCB0aGUgQ0ZHIHNhbmUuCisg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgICAgICBCbG9ja0luc2VydGlvblNldDo6QmxvY2tJbnNlcnRpb24oCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYmxvY2tCZWZvcmVJbnNlcnRpb25Qb2ludC0+aW5kZXgoKSArIDEsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLnRha2VCbG9jayhibG9jay0+aW5kZXgo
KSkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIG5ld0Jsb2NrID0K
KyAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEFmdGVyKGJsb2NrQmVmb3Jl
SW5zZXJ0aW9uUG9pbnQsIGJsb2NrLT5mcmVxdWVuY3koKSk7CisgICAgICAgICAgICAgICAgYmxv
Y2tNYXBbYmxvY2tdID0gbmV3QmxvY2s7CisgICAgICAgICAgICAgICAgbmV3QmxvY2stPnN1Y2Nl
c3NvcnMoKSA9IGJsb2NrLT5zdWNjZXNzb3JzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGF1dG8gZWxzZUJsb2NrRm9yID0gWyZdIChCYXNpY0Jsb2NrKiBibG9j
aykgLT4gQmFzaWNCbG9jayogeworICAgICAgICAgICAgICAgIGlmIChCYXNpY0Jsb2NrKiByZXN1
bHQgPSBibG9ja01hcFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGJsb2NrOworICAgICAgICAgICAgfTsKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fYmxvY2tzVG9EdXBs
aWNhdGVMaXN0KSB7CisgICAgICAgICAgICAgICAgYXV0byBmb2xkVmFsdWVGb3IgPSBbJl0gKEJh
c2ljQmxvY2sqIGJsb2NrLCBWYWx1ZSogdmFsdWUsIGJvb2wgcHJlZGljYXRlVmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUt
PmNoaWxkKDApICE9IG1fcGF0aC0+cHJlZGljYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aEp1
bXAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIHByZWRpY2F0ZVZhbHVlID8g
YmxvY2stPnRha2VuKCkgOiBibG9jay0+bm90VGFrZW4oKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodmFsdWUtPmNoaWxkKDApICE9IG1fcGF0aC0+cHJlZGljYXRlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmICghcHJlZGljYXRlVmFsdWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWUtPnJlcGxhY2VXaXRoTm9wKCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9OworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIGF1dG8gcmV3aXJlQmxvY2tGb3IgPSBbJl0gKEJhc2lj
QmxvY2sqIGJsb2NrLCBib29sIHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIEhlcmUgYXJlIHRoZSBjYXNlcyB3ZSBuZWVkIHRvIHdvcnJ5IGFib3V0OgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAxKSBCZWZvcmU6IHVuZHVwbGlj
YXRlZCwgYWZ0ZXI6IHVuZHVwbGljYXRlZC4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgLT4g
V2UgZG9uJ3Qgc2VlIHRoYXQgaGVyZS4gVGhlIG9ubHkgYmxvY2sgbGlrZSB0aGF0IHRoYXQgd291
bGQgbmVlZCB0bworICAgICAgICAgICAgICAgICAgICAvLyAgICAgICBiZSBjaGFuZ2VkIGlzIHRo
ZSBpbnNlcnRpb25Qb2ludC4gV2UgZWRpdCB0aGUgaW5zZXJ0aW9uUG9pbnQgd2F5IGJlbG93Lgor
ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyAyKSBCZWZvcmU6
IHVuZHVwbGljYXRlZCwgYWZ0ZXI6IGR1cGxpY2F0ZWQuCisgICAgICAgICAgICAgICAgICAgIC8v
ICAgIFMxKSBTdWNjZXNzb3Igd2FzIHVuZHVwbGljYXRlZCBiZWZvcmUsIGlzIHVuZHVwbGljYXRl
ZCBhZnRlci4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIC0+IE5vdGhpbmcgdG8gZG8u
IFRoaXMgaXMgYSBqdW1wIG91dCBvZiBjb2RlIGFmZmVjdGVkIGJ5IHRoZSBwcmVkaWNhdGUuCisg
ICAgICAgICAgICAgICAgICAgIC8vICAgIFMyKSBTdWNjZXNzb3Igd2FzIHVuZHVwbGljYXRlZCBi
ZWZvcmUsIGlzIGR1cGxpY2F0ZWQgYWZ0ZXIuCisgICAgICAgICAgICAgICAgICAgIC8vICAgICAg
ICAtPiBNYWtlIHN1cmUgdGhhdCB3ZSBwb2ludCB0byB0aGUgZWxzZSBzdWNjZXNzb3IgaW4gdGhl
IGVsc2UgZHVwbGljYXRlLgorICAgICAgICAgICAgICAgICAgICAvLyAgICBTMykgU3VjY2Vzc29y
IHdhcyBkdXBsaWNhdGVkIGJlZm9yZSwgaXMgZHVwbGljYXRlZCBhZnRlci4KKyAgICAgICAgICAg
ICAgICAgICAgLy8gICAgICAgIC0+IFRoaXMgcGFydCBpcyB0cmlja3khIFdlIGN1cnJlbnRseSBk
byBub3RoaW5nIGluIHRoaXMgY2FzZS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gMykgQmVmb3JlOiBkdXBsaWNhdGVkLCBhZnRlcjogZHVwbGljYXRlZC4K
KyAgICAgICAgICAgICAgICAgICAgLy8gICAgUzEpIFN1Y2Nlc3NvciB3YXMgdW5kdXBsaWNhdGVk
IGJlZm9yZSwgaXMgdW5kdXBsaWNhdGVkIGFmdGVyLgorICAgICAgICAgICAgICAgICAgICAvLyAg
ICAgICAgLT4gTm90aGluZyB0byBkby4gVGhpcyBpcyBhIGp1bXAgb3V0IG9mIGNvZGUgYWZmZWN0
ZWQgYnkgdGhlIHByZWRpY2F0ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgUzIpIFN1Y2Nl
c3NvciB3YXMgdW5kdXBsaWNhdGVkIGJlZm9yZSwgaXMgZHVwbGljYXRlZCBhZnRlci4KKyAgICAg
ICAgICAgICAgICAgICAgLy8gICAgICAgIC0+IE1ha2Ugc3VyZSB0aGF0IHdlIHBvaW50IHRvIHRo
ZSBlbHNlIGR1cGxpY2F0ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8gICAgUzMpIFN1Y2Nlc3Nv
ciB3YXMgZHVwbGljYXRlZCBiZWZvcmUsIGlzIGR1cGxpY2F0ZWQgYWZ0ZXIuCisgICAgICAgICAg
ICAgICAgICAgIC8vICAgICAgICAtPiBOb3RoaW5nIHRvIGRvLiBKdXN0IHByZXNlcnZlIHdoYXQg
d2FzIHRoZXJlLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHByZWRpY2F0ZVZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBJbiB0aGUgY3Vy
cmVudCByZXdpcmluZyB3ZSBkb24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGZvciB0aGVuIGJsb2Nr
cy4KKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAobV9ibG9ja3NUb0R1cGxpY2F0ZVNldC5jb250YWlucyhzdWNjZXNz
b3IpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NvciA9IGVsc2VCbG9ja0Zv
cihzdWNjZXNzb3IpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfTsK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX2R1cGxpY2F0
ZWRGb3JQcmVkaWNhdGUuZmluZChzdGQ6Om1ha2VfcGFpcihibG9jaywgbV9wYXRoLT5wcmVkaWNh
dGUpKTsKKyAgICAgICAgICAgICAgICBpZiAoaXRlciAhPSBtX2R1cGxpY2F0ZWRGb3JQcmVkaWNh
dGUuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVkaWNhdGVWYWx1ZSA9IGl0
ZXItPnZhbHVlOworICAgICAgICAgICAgICAgICAgICByZXdpcmVCbG9ja0ZvcihibG9jaywgcHJl
ZGljYXRlVmFsdWUpOworICAgICAgICAgICAgICAgICAgICBmb2xkVmFsdWVGb3IoYmxvY2ssIGJs
b2NrLT5sYXN0KCksIHByZWRpY2F0ZVZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IEJhc2ljQmxvY2sqIGVsc2VCbG9jayA9IGVsc2VCbG9ja0ZvcihibG9jayk7CisgICAgICAgICAg
ICAgICAgcmV3aXJlQmxvY2tGb3IoYmxvY2ssIHRydWUpOworICAgICAgICAgICAgICAgIHJld2ly
ZUJsb2NrRm9yKGVsc2VCbG9jaywgZmFsc2UpOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIEZ1biBmYWN0OiB0aGlzIGxvb3Agd2lsbCBkdXBsaWNhdGUgY29kZSBhZnRlciB0
aGUgdGhlbiBjYXNlIG9mIGEgQ2hlY2suIFRoYXQncworICAgICAgICAgICAgICAgIC8vIGRlYWQg
Y29kZS4gQW5kIHRoYXQncyBPSy4KKyAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
ICpibG9jaykgeworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogY2xvbmUgPSBtX3Byb2MuY2xv
bmUodmFsdWUpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiBjbG9u
ZS0+Y2hpbGRyZW4oKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiByZXBs
YWNlbWVudCA9IHZhbHVlTWFwW2NoaWxkXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aGlsZCA9IHJlcGxhY2VtZW50OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZS0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgICAgICAgICAgICAgICAg
ICB2YWx1ZU1hcFt2YWx1ZV0gPSBjbG9uZTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZUJsb2Nr
LT5hcHBlbmQoY2xvbmUpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgZm9sZFZhbHVlRm9yKGJsb2NrLCB2YWx1ZSwgdHJ1ZSk7CisgICAgICAgICAgICAgICAgICAg
IGZvbGRWYWx1ZUZvcihlbHNlQmxvY2ssIGNsb25lLCBmYWxzZSk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBWYWx1ZSogaW5zZXJ0
aW9uUG9pbnRKdW1wID0gbV9wYXRoLT5pbnNlcnRpb25Qb2ludC0+bGFzdCgpOworICAgICAgICAg
ICAgc3dpdGNoIChpbnNlcnRpb25Qb2ludEp1bXAtPm9wY29kZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEJyYW5jaDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpbnNlcnRpb25Qb2lu
dEp1bXAtPmNoaWxkKDApID09IG1fcGF0aC0+cHJlZGljYXRlKTsKKyAgICAgICAgICAgICAgICAv
LyBUaGVyZSBzaG91bGRuJ3QgYmUgYW55dGhpbmcgbGVmdCB0byBkbyBpZiB3ZSdyZSBpbiB0aGlz
IHNpdHVhdGlvbi4KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgICAgICAgICBtX3BhdGgtPmluc2VydGlvblBv
aW50LT5yZXBsYWNlTGFzdFdpdGhOZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBtX3By
b2MsIEJyYW5jaCwgaW5zZXJ0aW9uUG9pbnRKdW1wLT5vcmlnaW4oKSwgbV9wYXRoLT5wcmVkaWNh
dGUpOworICAgICAgICAgICAgICAgIC8vIFRoZSB1bmR1cGxpY2F0ZWQgY29kZSB0aGF0IHRoaXMg
anVtcCBhbHJlYWR5IGhhcyBhcyBpdHMgc3VjY2Vzc29yIGlzIHdoYXQgd2UKKyAgICAgICAgICAg
ICAgICAvLyB3YW50IHRvIGJlIHRoZSBgdGhlbmAgY2FzZSBvZiB0aGUgYnJhbmNoLiBTbywgd2Ug
d2FudCB0byBhcHBlbmQgdGhlIGBlbHNlYAorICAgICAgICAgICAgICAgIC8vIChub3RUYWtlbikg
Y2FzZS4KKyAgICAgICAgICAgICAgICBtX3BhdGgtPmluc2VydGlvblBvaW50LT5hcHBlbmRTdWNj
ZXNzb3IoCisgICAgICAgICAgICAgICAgICAgIGVsc2VCbG9ja0ZvcihtX3BhdGgtPmluc2VydGlv
blBvaW50LT5zdWNjZXNzb3JCbG9jaygwKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICB3aGlsZSAoIW1fYmxvY2tzVG9EdXBsaWNhdGVMaXN0LmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ibG9ja3NUb0R1cGxpY2F0ZUxp
c3QudGFrZUxhc3QoKTsKKyAgICAgICAgICAgICAgICBtX2Jsb2Nrc1RvRHVwbGljYXRlU2V0LnJl
bW92ZShibG9jayk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChpbnNlcnRpb25TZXQuZXhlY3V0ZSgpKSB7CisgICAgICAgICAgICBtX3Byb2MucmVzZXRS
ZWFjaGFiaWxpdHkoKTsKKyAgICAgICAgICAgIG1fcHJvYy5pbnZhbGlkYXRlQ0ZHKCk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAgCisgICAgYm9v
bCBtX3ZlcmJvc2UgeyBPcHRpb25zOjp2ZXJib3NlQjNQYXRoU3BlY2lhbGl6YXRpb24oKSB9Owor
ICAgIAorICAgIERvbWluYXRvcnMqIG1fZG9taW5hdG9ycyB7IG51bGxwdHIgfTsKKyAgICAKKyAg
ICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlSW5CbG9jaz4+IG1fcHJlZGljYXRlVG9CcmFu
Y2hlczsKKyAgICAKKyAgICBIYXNoU2V0PHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPj4g
bV9ibG9ja3NXaXRoQnJhbmNoZXM7CisgICAgCisgICAgLy8gV2Ugc2F5IHRoYXQgYSBibG9jayBp
cyBkdXBsaWNhdGVkIGZvciBhIGJyYW5jaCBpZiBpdCdzIGRvbWluYXRlZCBieSB0aGUgc3VjY2Vz
c29yIG9mIG9uZSBvZgorICAgIC8vIHRob3NlIGJyYW5jaGVzLiBUaGUgYm9vbCB2YWx1ZSBpcyB0
aGUgcHJlZGljYXRlJ3MgdmFsdWUgd2hlbiB3ZSBhcmUgaW4gdGhhdCBibG9jay4KKyAgICBIYXNo
TWFwPHN0ZDo6cGFpcjxCYXNpY0Jsb2NrKiwgVmFsdWUqPiwgYm9vbD4gbV9kdXBsaWNhdGVkRm9y
UHJlZGljYXRlOworICAgIAorICAgIFBhdGgqIG1fcGF0aDsKKworICAgIEJhZzxQYXRoPiBtX3Bh
dGhzOworICAgIFZlY3RvcjxQYXRoKj4gbV9wYXRoc0luT3JkZXI7CisgICAgCisgICAgZW51bSBj
bGFzcyBIb3dBZmZlY3RlZCB7CisgICAgICAgIE5vdEFmZmVjdGVkLAorICAgICAgICBQcmVkaWNh
dGUsIC8vIE5lZWQgdG8gdHJhY2sgdGhlc2UgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGR1cGxp
Y2F0ZSwgYW5kIHNvIGRlbW90ZSwgdGhlIHByZWRpY2F0ZXMgb2Ygb3RoZXIgcGF0aHMuCisgICAg
ICAgIEluc2VydGlvblBvaW50LAorICAgICAgICBEdXBsaWNhdGVkCisgICAgfTsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrKiwgSG93QWZmZWN0ZWQ+IG1fYWZmZWN0ZWRCbG9ja3M7CisgICAgCisg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBtX2Jsb2Nrc1RvRHVwbGljYXRlTGlzdDsKKyAgICBJbmRl
eFNldDxCYXNpY0Jsb2NrKj4gbV9ibG9ja3NUb0R1cGxpY2F0ZVNldDsKK307CisKK2Jvb2wgc3Bl
Y2lhbGl6ZVBhdGhzKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUocHJvYywgInNwZWNpYWxpemVQYXRocyIpOworICAgIFNwZWNpYWxpemVQYXRocyBzcGVjaWFs
aXplUGF0aHMocHJvYyk7CisgICAgcmV0dXJuIHNwZWNpYWxpemVQYXRocy5ydW4oKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplUGF0aHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplUGF0aHMuaAkobm9u
ZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGVjaWFsaXplUGF0aHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
KworLy8gRHVwbGljYXRlcyBjb2RlIHRvIHJlbW92ZSBicmFuY2hlcy4gRWFjaCBwaWVjZSBvZiBj
b2RlIGdldHMgZHVwbGljYXRlZCBhdCBtb3N0IG9uY2UsIHNvIHRoZXJlCisvLyBpcyBubyBleHBv
bmVudGlhbCBibG93LXVwLgorCitib29sIHNwZWNpYWxpemVQYXRocyhQcm9jZWR1cmUmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMjMxMTI4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NzgsMTMgKzc3OCwyMSBAQCBWYWx1ZUtleSBWYWx1ZTo6a2V5KCkgY29uc3QKICAgICB9CiB9CiAK
K1ZhbHVlKiBWYWx1ZTo6Zm9sZElkZW50aXR5KCkgY29uc3QKK3sKKyAgICBWYWx1ZSogY3VycmVu
dCA9IGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKTsKKyAgICB3aGlsZSAoY3VycmVudC0+b3Bjb2Rl
KCkgPT0gSWRlbnRpdHkpCisgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5jaGlsZCgwKTsKKyAg
ICByZXR1cm4gY3VycmVudDsKK30KKwogYm9vbCBWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbigp
CiB7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiBj
aGlsZHJlbigpKSB7Ci0gICAgICAgIHdoaWxlIChjaGlsZC0+b3Bjb2RlKCkgPT0gSWRlbnRpdHkp
IHsKKyAgICAgICAgaWYgKGNoaWxkLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkgewogICAgICAgICAg
ICAgcmVzdWx0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPmNoaWxkKDApOwor
ICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+Zm9sZElkZW50aXR5KCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMjYwLDYgKzI2MCw4IEBAIHB1YmxpYzoKICAgICAvLyBlbXB0
eSBWYWx1ZUtleSBpZiB0aGlzIFZhbHVlIGlzIGltcHVyZS4gTm90ZSB0aGF0IGFuIG9wZXJhdGlv
biB0aGF0IHJldHVybnMgVm9pZCBjb3VsZCBzdGlsbAogICAgIC8vIGhhdmUgYSBub24tZW1wdHkg
VmFsdWVLZXkuIFRoaXMgaGFwcGVucyBmb3IgZXhhbXBsZSB3aXRoIENoZWNrIG9wZXJhdGlvbnMu
CiAgICAgVmFsdWVLZXkga2V5KCkgY29uc3Q7CisgICAgCisgICAgVmFsdWUqIGZvbGRJZGVudGl0
eSgpIGNvbnN0OwogCiAgICAgLy8gTWFrZXMgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIGNoaWxkcmVu
IGFyZSBJZGVudGl0eSdzLiBJZiBhIGNoaWxkIHBvaW50cyB0byBJZGVudGl0eSwgdGhpcyB3aWxs
CiAgICAgLy8gcmVwb2ludCBpdCBhdCB0aGUgSWRlbnRpdHkncyBjaGlsZC4gRm9yIHNpbXBsaWNp
dHksIHRoaXMgd2lsbCBmb2xsb3cgYXJiaXRyYXJpbHkgbG9uZyBjaGFpbnMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5CbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbkJsb2NrLmNwcAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUluQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbkJsb2Nr
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordm9pZCBWYWx1ZUluQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jayksICI6IiwgbV9pbmRleCwgIi0+Iiwg
cG9pbnRlckR1bXAobV92YWx1ZSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlSW5CbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlSW5CbG9jay5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlSW5CbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFZhbHVlSW5CbG9jayB7CitwdWJsaWM6CisgICAgVmFsdWVJbkJsb2NrKCkgeyB9CisgICAg
CisgICAgVmFsdWVJbkJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrLCB1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV92YWx1ZShibG9jay0+YXQoaW5kZXgpKSAvLyBXZSBzYXZlIHRoaXMgYmVjYXVzZSB0aGF0
J3MgdXNlZnVsIGFmdGVyIHRoZSBwaGFzZSBtZXNzZXMgdXAgaW5kaWNlcy4KKyAgICB7CisgICAg
fQorICAgIAorICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsg
fQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIFZh
bHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICAKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgVmFsdWVJbkJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVl
OworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVmFsdWVJbkJsb2NrJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKnRoaXMgIT0gVmFsdWVJbkJsb2NrKCk7CisgICAgfQorICAgIAorICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKKyAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OlB0ckhhc2g8QmFzaWNCbG9jayo+
OjpoYXNoKG1fYmxvY2spICsgbV9pbmRleDsKKyAgICB9CisgICAgCisgICAgVmFsdWVJbkJsb2Nr
KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICB7CisgICAgICAgIG1faW5kZXgt
LTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVmFsdWVJbkJsb2NrKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2sgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07
CisgICAgVmFsdWUqIG1fdmFsdWUgeyBudWxscHRyIH07Cit9OworCitzdHJ1Y3QgVmFsdWVJbkJs
b2NrSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVmFsdWVJbkJsb2NrJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBW
YWx1ZUluQmxvY2smIGEsIGNvbnN0IFZhbHVlSW5CbG9jayYgYikgeyByZXR1cm4gYSA9PSBiOyB9
CisgICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gdHJ1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKwordGVtcGxhdGU8dHlwZW5hbWU+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4g
c3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OlZhbHVlSW5CbG9jaz4geworICAgIHR5cGVkZWYg
SlNDOjpCMzo6VmFsdWVJbkJsb2NrSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWU+
IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIz
OjpWYWx1ZUluQmxvY2s+IDogcHVibGljIFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpW
YWx1ZUluQmxvY2s+IHsKKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgZW1wdHlWYWx1ZUlzWmVy
byA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJQ01QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMSUNNUGhhc2Uu
Y3BwCShyZXZpc2lvbiAyMzExMjgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xJ
Q01QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgJiYgIW1fZ3JhcGgubV9jb250cm9sRXF1aXZhbGVuY2VBbmFseXNpcy0+ZG9t
aW5hdGVzRXF1aXZhbGVudGx5KGRhdGEucHJlSGVhZGVyLCBmcm9tQmxvY2spOwogICAgICAgICAK
ICAgICAgICAgaWYgKGFkZHNCbGluZFNwZWN1bGF0aW9uCi0gICAgICAgICAgICAmJiBtX2dyYXBo
Lmhhc0V4aXRTaXRlKG9yaWdpbmFsT3JpZ2luLnNlbWFudGljLCBIb2lzdGluZ0ZhaWxlZCkpIHsK
KyAgICAgICAgICAgICYmIG1fZ3JhcGguaGFzR2xvYmFsRXhpdFNpdGUob3JpZ2luYWxPcmlnaW4u
c2VtYW50aWMsIEhvaXN0aW5nRmFpbGVkKSkgewogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsK
ICAgICAgICAgICAgICAgICBkYXRhTG9nKAogICAgICAgICAgICAgICAgICAgICAiICAgIE5vdCBo
b2lzdGluZyAiLCBub2RlLCAiIGJlY2F1c2UgaXQgbWF5IGV4aXQgYW5kIHRoZSBwcmUtaGVhZGVy
ICgiLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNp
b24gMjMxMTI4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MzksNiArNDM5LDggQEAgY29uc3RleHByIGJvb2wgZW5hYmxlSW50
bFBsdXJhbFJ1bGVzID0gZgogICAgIHYoYm9vbCwgbG9nQWlyUmVnaXN0ZXJQcmVzc3VyZSwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYodW5zaWduZWQsIG1heEIzVGFpbER1cEJsb2Nr
U2l6ZSwgMywgTm9ybWFsLCBudWxscHRyKSBcCiAgICAgdih1bnNpZ25lZCwgbWF4QjNUYWlsRHVw
QmxvY2tTdWNjZXNzb3JzLCAzLCBOb3JtYWwsIG51bGxwdHIpIFwKKyAgICB2KGJvb2wsIHZlcmJv
c2VCM1BhdGhTcGVjaWFsaXphdGlvbiwgZmFsc2UsIE5vcm1hbCwgbnVsbHB0cikgXAorICAgIHYo
ZG91YmxlLCBiM1BhdGhTcGVjaWFsaXphdGlvblRocmVzaG9sZCwgMS4xLCBOb3JtYWwsIG51bGxw
dHIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VEb2xsYXJWTSwgZmFsc2UsIFJlc3RyaWN0ZWQs
ICJpbnN0YWxscyB0aGUgJHZtIGRlYnVnZ2luZyB0b29sIGluIGdsb2JhbCBvYmplY3RzIikgXAog
ICAgIHYob3B0aW9uU3RyaW5nLCBmdW5jdGlvbk92ZXJyaWRlcywgbnVsbHB0ciwgUmVzdHJpY3Rl
ZCwgImZpbGUgd2l0aCBkZWJ1Z2dpbmcgb3ZlcnJpZGVzIGZvciBmdW5jdGlvbiBib2RpZXMiKSBc
CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0No
YW5nZUxvZwkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtp
bmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0wNC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgorCisgICAgICAgIEIzIHNob3VsZCBoYXZlIGdlbmVyYWxpemVkIHBhdGgg
c3BlY2lhbGl6YXRpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE4NTA2MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAg
ICAgICAKKyAgICAgICAgQWRkIHNvbWUgY29tbWVudHMgYW5kIHNvbWUgc3VwcG9ydGluZyBmdW5j
dGlvbnMgdGhhdCB3ZXJlIHVzZWZ1bCBmb3IgdGhlIG5ldyBwaGFzZS4KKworICAgICAgICAqIHd0
Zi9CaXRWZWN0b3IuaDoKKyAgICAgICAgKiB3dGYvR3JhcGhOb2RlV29ya2xpc3QuaDoKKyAgICAg
ICAgKFdURjo6R3JhcGhOb2RlV29ya2xpc3Q6OnByZXRlbmRUb0hhdmVTZWVuKToKKyAgICAgICAg
KiB3dGYvSW5kZXhTZXQuaDoKKyAgICAgICAgKFdURjo6SW5kZXhTZXQ6OnJlbW92ZUFsbCk6CisK
IDIwMTgtMDQtMjYgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIEdh
cmRlbmluZzogU3BlY3VsYXRpdmUgYnVpbGQgZml4IGZvciBXaW5kb3dzLgpJbmRleDogU291cmNl
L1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgJKHJldmlzaW9uIDIzMTEyOCkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTAsNiArMTEwLDggQEAgcHVibGljOiAKICAgICAvLyBMaWtlIGVu
c3VyZVNpemUoKSwgYnV0IHN1cHBvcnRzIHJlZHVjaW5nIHRoZSBzaXplIG9mIHRoZSBiaXR2ZWN0
b3IuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgcmVzaXplKHNpemVfdCBudW1CaXRzKTsK
ICAgICAKKyAgICAvLyBDbGVhcnMgdGhlIHNldCB3aXRob3V0IGZyZWVpbmcgbWVtb3J5LiBJZiB5
b3Ugd2FudCB0byBjbGVhciB0aGUgc2V0IGFuZCBmcmVlIG1lbW9yeSwgdGhlbgorICAgIC8vIHlv
dSB3YW50ICp0aGlzID0gQml0VmVjdG9yKCkuCiAgICAgV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
Y2xlYXJBbGwoKTsKIAogICAgIGJvb2wgcXVpY2tHZXQoc2l6ZV90IGJpdCkgY29uc3QKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL0dyYXBoTm9kZVdvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNl
L1dURi93dGYvR3JhcGhOb2RlV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY0LDggKzY0
LDEwIEBAIHB1YmxpYzoKIAogICAgIGJvb2wgc2F3KE5vZGUgbm9kZSkgeyByZXR1cm4gbV9zZWVu
LmNvbnRhaW5zKG5vZGUpOyB9CiAgICAgCisgICAgYm9vbCBwcmV0ZW5kVG9IYXZlU2VlbihOb2Rl
IG5vZGUpIHsgcmV0dXJuIG1fc2Vlbi5hZGQobm9kZSk7IH0KKyAgICAKICAgICBjb25zdCBTZXQm
IHNlZW4oKSBjb25zdCB7IHJldHVybiBtX3NlZW47IH0KLQorICAgIAogcHJpdmF0ZToKICAgICBT
ZXQgbV9zZWVuOwogICAgIFZlY3RvcjxOb2RlLCAxNj4gbV9zdGFjazsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSW5kZXhTZXQu
aAkocmV2aXNpb24gMjMxMTI4KQorKysgU291cmNlL1dURi93dGYvSW5kZXhTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjEsNiArNjEsMTIgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fc2V0LmNsZWFyKEluZGV4S2V5VHlwZTxUPjo6aW5kZXgodmFsdWUpKTsKICAgICB9CisgICAg
CisgICAgLy8gUmVtb3ZlcyBldmVyeXRoaW5nIGZyb20gdGhlIHNldCB3aXRob3V0IGZyZWVpbmcg
bWVtb3J5LgorICAgIHZvaWQgcmVtb3ZlQWxsKCkKKyAgICB7CisgICAgICAgIG1fc2V0LmNsZWFy
QWxsKCk7CisgICAgfQogCiAgICAgYm9vbCBjb250YWlucyhjb25zdCBUJiB2YWx1ZSkgY29uc3QK
ICAgICB7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>