<?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>140042</bug_id>
          
          <creation_ts>2015-01-02 10:04:25 -0800</creation_ts>
          <short_desc>REGRESSION(r177859): Caused many assertion failures (Requested by ap on #webkit).</short_desc>
          <delta_ts>2015-01-02 10:07:53 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>140032</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="WebKit Commit Bot">commit-queue</reporter>
          <assigned_to name="WebKit Commit Bot">commit-queue</assigned_to>
          <cc>darin</cc>
    
    <cc>kling</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1058434</commentid>
    <comment_count>0</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 10:04:25 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/177859 broke the build:
Caused many assertion failures (Requested by ap on #webkit).

This is an automatic bug report generated by webkitbot. If this bug
report was created because of a flaky test, please file a bug for the flaky
test (if we don&apos;t already have one on file) and dup this bug against that bug
so that we can track how often these flaky tests fail.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058436</commentid>
    <comment_count>1</comment_count>
      <attachid>243896</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 10:04:53 -0800</bug_when>
    <thetext>Created attachment 243896
ROLLOUT of r177859

Any committer can land this patch automatically by marking it commit-queue+.  The commit-queue will build and test the patch before landing to ensure that the rollout will be successful.  This process takes approximately 15 minutes.

If you would like to land the rollout faster, you can use the following command:

  webkit-patch land-attachment ATTACHMENT_ID

where ATTACHMENT_ID is the ID of this attachment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058437</commentid>
    <comment_count>2</comment_count>
      <attachid>243896</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 10:07:49 -0800</bug_when>
    <thetext>Comment on attachment 243896
ROLLOUT of r177859

Clearing flags on attachment: 243896

Committed r177862: &lt;http://trac.webkit.org/changeset/177862&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1058438</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-02 10:07:53 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>243896</attachid>
            <date>2015-01-02 10:04:53 -0800</date>
            <delta_ts>2015-01-02 10:07:49 -0800</delta_ts>
            <desc>ROLLOUT of r177859</desc>
            <filename>bug-140042-20150102100456.patch</filename>
            <type>text/plain</type>
            <size>152754</size>
            <attacher name="WebKit Commit Bot">commit-queue</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc3ODYxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjZiMDUyOTZkNmFmNDgx
MzNkMThmYWFlZjQwZGVjMTkxMWIzYjQ3Zi4uNThmZTVjM2JiZTQxNDFkNTJmZWUyZjllYTg1OTZi
ZGFkZjA0Mjg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDE1LTAxLTAyICBDb21t
aXQgUXVldWUgIDxjb21taXQtcXVldWVAd2Via2l0Lm9yZz4KKworICAgICAgICBVbnJldmlld2Vk
LCByb2xsaW5nIG91dCByMTc3ODU5IGFuZCByMTc3ODYxLgorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQwMDQyCisKKyAgICAgICAgQ2F1c2VkIG1hbnkg
YXNzZXJ0aW9uIGZhaWx1cmVzIChSZXF1ZXN0ZWQgYnkgYXAgb24gI3dlYmtpdCkuCisKKyAgICAg
ICAgUmV2ZXJ0ZWQgY2hhbmdlc2V0czoKKworICAgICAgICAiTW9kZXJuaXplIGNvZGluZyBzdHls
ZSBvZiBIVE1MVHJlZUJ1aWxkZXIiCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNDAwMzIKKyAgICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFu
Z2VzZXQvMTc3ODU5CisKKyAgICAgICAgIlRyaWVkIHRvIGZpeCB0aGUgaU9TIGJ1aWxkLiIKKyAg
ICAgICAgaHR0cDovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc3ODYxCisKIDIwMTUtMDEt
MDIgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBUcmllZCB0byBm
aXggdGhlIGlPUyBidWlsZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxEb2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1M
RG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4IDIwY2ZmNWMwZmQ3ZWE4OTExNWEwNmNmNDk0ODU2Yjg0
NTU1N2VmZGQuLmUwZmI1ZmNhYjU3ODkzMDQ0ZWJjYTNjMjZkNDRjZjMyNmJmZmU3Y2MgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApA
QCAtOTIsNyArOTIsNyBAQCBIVE1MRG9jdW1lbnRQYXJzZXI6OkhUTUxEb2N1bWVudFBhcnNlcihE
b2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCogY29udAogICAgICwgbV9vcHRpb25z
KGZyYWdtZW50LmRvY3VtZW50KCkpCiAgICAgLCBtX3Rva2VuKHN0ZDo6bWFrZV91bmlxdWU8SFRN
TFRva2VuPigpKQogICAgICwgbV90b2tlbml6ZXIoc3RkOjptYWtlX3VuaXF1ZTxIVE1MVG9rZW5p
emVyPihtX29wdGlvbnMpKQotICAgICwgbV90cmVlQnVpbGRlcihzdGQ6Om1ha2VfdW5pcXVlPEhU
TUxUcmVlQnVpbGRlcj4oKnRoaXMsIGZyYWdtZW50LCAqY29udGV4dEVsZW1lbnQsIHRoaXMtPnBh
cnNlckNvbnRlbnRQb2xpY3koKSwgbV9vcHRpb25zKSkKKyAgICAsIG1fdHJlZUJ1aWxkZXIoc3Rk
OjptYWtlX3VuaXF1ZTxIVE1MVHJlZUJ1aWxkZXI+KCp0aGlzLCBmcmFnbWVudCwgY29udGV4dEVs
ZW1lbnQsIHRoaXMtPnBhcnNlckNvbnRlbnRQb2xpY3koKSwgbV9vcHRpb25zKSkKICAgICAsIG1f
eHNzQXVkaXRvckRlbGVnYXRlKGZyYWdtZW50LmRvY3VtZW50KCkpCiAgICAgLCBtX2VuZFdhc0Rl
bGF5ZWQoZmFsc2UpCiAgICAgLCBtX2hhdmVCYWNrZ3JvdW5kUGFyc2VyKGZhbHNlKQpAQCAtMTE4
LDYgKzExOCw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpkZXRhY2goKQogCiAgICAgaWYg
KG1fc2NyaXB0UnVubmVyKQogICAgICAgICBtX3NjcmlwdFJ1bm5lci0+ZGV0YWNoKCk7CisgICAg
bV90cmVlQnVpbGRlci0+ZGV0YWNoKCk7CiAgICAgLy8gRklYTUU6IEl0IHNlZW1zIHdyb25nIHRo
YXQgd2Ugd291bGQgaGF2ZSBhIHByZWxvYWQgc2Nhbm5lciBoZXJlLgogICAgIC8vIFlldCBkdXJp
bmcgZmFzdC9kb20vSFRNTFNjcmlwdEVsZW1lbnQvc2NyaXB0LWxvYWQtZXZlbnRzLmh0bWwgd2Ug
ZG8uCiAgICAgbV9wcmVsb2FkU2Nhbm5lciA9IG51bGxwdHI7CkBAIC0zNDgsNyArMzQ5LDcgQEAg
dm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OmNvbnN0cnVjdFRyZWVGcm9tSFRNTFRva2VuKEhUTUxU
b2tlbiYgcmF3VG9rZW4pCiAgICAgaWYgKHJhd1Rva2VuLnR5cGUoKSAhPSBIVE1MVG9rZW46OkNo
YXJhY3RlcikKICAgICAgICAgcmF3VG9rZW4uY2xlYXIoKTsKIAotICAgIG1fdHJlZUJ1aWxkZXIt
PmNvbnN0cnVjdFRyZWUodG9rZW4pOworICAgIG1fdHJlZUJ1aWxkZXItPmNvbnN0cnVjdFRyZWUo
JnRva2VuKTsKIAogICAgIGlmICghcmF3VG9rZW4uaXNVbmluaXRpYWxpemVkKCkpIHsKICAgICAg
ICAgQVNTRVJUKHJhd1Rva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3Rlcik7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFRyZWVCdWlsZGVyLmNwcAppbmRleCBmOTgx
MGJmMjVjMGJjZWFjYzg2NGZiNTViMTFjZmU2NDExMTM3M2MzLi4xOTU4OGFlN2NiMTBkNTI1OWVh
N2U3MTlkOWMyN2YwNWVmMzBhNWQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MVHJlZUJ1aWxkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L0hUTUxUcmVlQnVpbGRlci5jcHAKQEAgLTEsNiArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDEwIEdvb2dsZSwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDExLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTMzLDE2ICszMywyMCBAQAogI2luY2x1ZGUgIkhUTUxGb3Jt
Q29udHJvbEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MT3B0R3JvdXBFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIK
ICNpbmNsdWRlICJIVE1MUGFyc2VySWRpb21zLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxUZW1wbGF0ZUVsZW1lbnQuaCIKICNpbmNsdWRlICJMb2NhbGl6
ZWRTdHJpbmdzLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJYTGlu
a05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgi
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95
ZWQuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9DaGFyYWN0ZXJOYW1lcy5oPgogCi0jaWYgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKSAmJiBQTEFURk9STShJT1MpCisjaWYgRU5B
QkxFKFRFTEVQSE9ORV9OVU1CRVJfREVURUNUSU9OKQogI2luY2x1ZGUgIlRlbGVwaG9uZU51bWJl
ckRldGVjdG9yLmgiCiAjZW5kaWYKIApAQCAtNTksNyArNjMsNyBAQCBpbmxpbmUgYm9vbCBpc0hU
TUxTcGFjZU9yUmVwbGFjZW1lbnRDaGFyYWN0ZXIoVUNoYXIgY2hhcmFjdGVyKQogCiB9CiAKLXN0
YXRpYyBpbmxpbmUgVGV4dFBvc2l0aW9uIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCitz
dGF0aWMgVGV4dFBvc2l0aW9uIHVuaW5pdGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpCiB7CiAgICAg
cmV0dXJuIFRleHRQb3NpdGlvbihPcmRpbmFsTnVtYmVyOjpmcm9tT25lQmFzZWRJbnQoLTEpLCBP
cmRpbmFsTnVtYmVyOjpmaXJzdCgpKTsKIH0KQEAgLTg2LDcgKzkwLDkgQEAgc3RhdGljIGJvb2wg
aXNOdW1iZXJlZEhlYWRlclRhZyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiAKIHN0YXRp
YyBib29sIGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdO
YW1lKQogewotICAgIHJldHVybiB0YWdOYW1lID09IGNhcHRpb25UYWcgfHwgdGFnTmFtZSA9PSBj
b2xUYWcgfHwgdGFnTmFtZSA9PSBjb2xncm91cFRhZzsKKyAgICByZXR1cm4gdGFnTmFtZSA9PSBj
YXB0aW9uVGFnCisgICAgICAgIHx8IHRhZ05hbWUgPT0gY29sVGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gY29sZ3JvdXBUYWc7CiB9CiAKIHN0YXRpYyBib29sIGlzVGFibGVDZWxsQ29udGV4dFRh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCkBAIC05Niw3ICsxMDIsOSBAQCBzdGF0aWMg
Ym9vbCBpc1RhYmxlQ2VsbENvbnRleHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQog
CiBzdGF0aWMgYm9vbCBpc1RhYmxlQm9keUNvbnRleHRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewotICAgIHJldHVybiB0YWdOYW1lID09IHRib2R5VGFnIHx8IHRhZ05hbWUgPT0g
dGZvb3RUYWcgfHwgdGFnTmFtZSA9PSB0aGVhZFRhZzsKKyAgICByZXR1cm4gdGFnTmFtZSA9PSB0
Ym9keVRhZworICAgICAgICB8fCB0YWdOYW1lID09IHRmb290VGFnCisgICAgICAgIHx8IHRhZ05h
bWUgPT0gdGhlYWRUYWc7CiB9CiAKIHN0YXRpYyBib29sIGlzTm9uQW5jaG9yTm9uTm9ickZvcm1h
dHRpbmdUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0YWdOYW1lKQpAQCAtMTE3LDI3ICsxMjUsMjkg
QEAgc3RhdGljIGJvb2wgaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9t
aWNTdHJpbmcmIHRhZ05hbWUpCiAKIHN0YXRpYyBib29sIGlzTm9uQW5jaG9yRm9ybWF0dGluZ1Rh
Zyhjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUpCiB7Ci0gICAgcmV0dXJuIHRhZ05hbWUgPT0g
bm9iclRhZyB8fCBpc05vbkFuY2hvck5vbk5vYnJGb3JtYXR0aW5nVGFnKHRhZ05hbWUpOworICAg
IHJldHVybiB0YWdOYW1lID09IG5vYnJUYWcKKyAgICAgICAgfHwgaXNOb25BbmNob3JOb25Ob2Jy
Rm9ybWF0dGluZ1RhZyh0YWdOYW1lKTsKIH0KIAotLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdn
Lm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjZm9ybWF0dGluZworLy8gaHR0cDovL3d3dy53aGF0
d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1s
I2Zvcm1hdHRpbmcKIHN0YXRpYyBib29sIGlzRm9ybWF0dGluZ1RhZyhjb25zdCBBdG9taWNTdHJp
bmcmIHRhZ05hbWUpCiB7CiAgICAgcmV0dXJuIHRhZ05hbWUgPT0gYVRhZyB8fCBpc05vbkFuY2hv
ckZvcm1hdHRpbmdUYWcodGFnTmFtZSk7CiB9CiAKIGNsYXNzIEhUTUxUcmVlQnVpbGRlcjo6RXh0
ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlciB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRXh0
ZXJuYWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRXh0ZXJu
YWxDaGFyYWN0ZXJUb2tlbkJ1ZmZlcihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQotICAgICAgICA6
IG1fdGV4dCh0b2tlbi5jaGFyYWN0ZXJzKCksIHRva2VuLmNoYXJhY3RlcnNMZW5ndGgoKSkKLSAg
ICAgICAgLCBtX2lzQWxsOEJpdERhdGEodG9rZW4uaXNBbGw4Qml0RGF0YSgpKQorICAgIGV4cGxp
Y2l0IEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIoQXRvbWljSFRNTFRva2VuKiB0b2tlbikK
KyAgICAgICAgOiBtX3RleHQodG9rZW4tPmNoYXJhY3RlcnMoKSwgdG9rZW4tPmNoYXJhY3RlcnNM
ZW5ndGgoKSkKKyAgICAgICAgLCBtX2lzQWxsOEJpdERhdGEodG9rZW4tPmlzQWxsOEJpdERhdGEo
KSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICB9CiAKICAgICBleHBs
aWNpdCBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQog
ICAgICAgICA6IG1fdGV4dChzdHJpbmcpCi0gICAgICAgICwgbV9pc0FsbDhCaXREYXRhKG1fdGV4
dC5pczhCaXQoKSkKKyAgICAgICAgLCBtX2lzQWxsOEJpdERhdGEobV90ZXh0Lmxlbmd0aCgpICYm
IG1fdGV4dC5pczhCaXQoKSkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAg
ICB9CkBAIC0xNzUsNyArMTg1LDExIEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyB0YWtlUmVtYWlu
aW5nKCkKICAgICB7Ci0gICAgICAgIFN0cmluZyByZXN1bHQgPSBtYWtlU3RyaW5nKG1fdGV4dCk7
CisgICAgICAgIFN0cmluZyByZXN1bHQ7CisgICAgICAgIGlmIChtX3RleHQuaXM4Qml0KCkgfHwg
IWlzQWxsOEJpdERhdGEoKSkKKyAgICAgICAgICAgIHJlc3VsdCA9IG1fdGV4dC50b1N0cmluZygp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBTdHJpbmc6Om1ha2U4Qml0RnJv
bTE2Qml0U291cmNlKG1fdGV4dC5jaGFyYWN0ZXJzMTYoKSwgbV90ZXh0Lmxlbmd0aCgpKTsKICAg
ICAgICAgbV90ZXh0ID0gU3RyaW5nVmlldygpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KQEAgLTIwNyw3ICsyMjEsOCBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHRl
bXBsYXRlPGJvb2wgY2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4gdm9pZCBza2lwTGVhZGluZygp
CisgICAgdGVtcGxhdGU8Ym9vbCBjaGFyYWN0ZXJQcmVkaWNhdGUoVUNoYXIpPgorICAgIHZvaWQg
c2tpcExlYWRpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCFpc0VtcHR5KCkpOwogICAgICAg
ICB3aGlsZSAoY2hhcmFjdGVyUHJlZGljYXRlKG1fdGV4dFswXSkpIHsKQEAgLTIxNywxMjQgKzIz
MiwxMjIgQEAgcHJpdmF0ZToKICAgICAgICAgfQogICAgIH0KIAotICAgIHRlbXBsYXRlPGJvb2wg
Y2hhcmFjdGVyUHJlZGljYXRlKFVDaGFyKT4gU3RyaW5nIHRha2VMZWFkaW5nKCkKKyAgICB0ZW1w
bGF0ZTxib29sIGNoYXJhY3RlclByZWRpY2F0ZShVQ2hhcik+CisgICAgU3RyaW5nIHRha2VMZWFk
aW5nKCkKICAgICB7CiAgICAgICAgIEFTU0VSVCghaXNFbXB0eSgpKTsKICAgICAgICAgU3RyaW5n
VmlldyBzdGFydCA9IG1fdGV4dDsKICAgICAgICAgc2tpcExlYWRpbmc8Y2hhcmFjdGVyUHJlZGlj
YXRlPigpOwogICAgICAgICBpZiAoc3RhcnQubGVuZ3RoKCkgPT0gbV90ZXh0Lmxlbmd0aCgpKQog
ICAgICAgICAgICAgcmV0dXJuIFN0cmluZygpOwotICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhz
dGFydC5zdWJzdHJpbmcoMCwgc3RhcnQubGVuZ3RoKCkgLSBtX3RleHQubGVuZ3RoKCkpKTsKLSAg
ICB9Ci0KLSAgICBTdHJpbmcgbWFrZVN0cmluZyhTdHJpbmdWaWV3IHN0cmluZ1ZpZXcpIGNvbnN0
Ci0gICAgewotICAgICAgICBpZiAoc3RyaW5nVmlldy5pczhCaXQoKSB8fCAhaXNBbGw4Qml0RGF0
YSgpKQotICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1ZpZXcudG9TdHJpbmcoKTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZzo6bWFrZThCaXRGcm9tMTZCaXRTb3VyY2Uoc3RyaW5nVmlldy5jaGFyYWN0
ZXJzMTYoKSwgc3RyaW5nVmlldy5sZW5ndGgoKSk7CisgICAgICAgIFN0cmluZ1ZpZXcgbGVhZGlu
ZyA9IHN0YXJ0LnN1YnN0cmluZygwLCBzdGFydC5sZW5ndGgoKSAtIG1fdGV4dC5sZW5ndGgoKSk7
CisgICAgICAgIGlmIChsZWFkaW5nLmlzOEJpdCgpIHx8ICFpc0FsbDhCaXREYXRhKCkpCisgICAg
ICAgICAgICByZXR1cm4gbGVhZGluZy50b1N0cmluZygpOworICAgICAgICByZXR1cm4gU3RyaW5n
OjptYWtlOEJpdEZyb20xNkJpdFNvdXJjZShsZWFkaW5nLmNoYXJhY3RlcnMxNigpLCBsZWFkaW5n
Lmxlbmd0aCgpKTsKICAgICB9CiAKICAgICBTdHJpbmdWaWV3IG1fdGV4dDsKICAgICBib29sIG1f
aXNBbGw4Qml0RGF0YTsKIH07CiAKLWlubGluZSBib29sIEhUTUxUcmVlQnVpbGRlcjo6aXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpIGNvbnN0Ci17Ci0jaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1F
TlQpCi0gICAgcmV0dXJuIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJbkhUTUxT
Y29wZSgpOwotI2Vsc2UKLSAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYKLX0KIAotaW5saW5lIGJv
b2wgSFRNTFRyZWVCdWlsZGVyOjppc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIGlzUGFyc2luZ0ZyYWdtZW50KCkgfHwgaXNQYXJzaW5nVGVt
cGxhdGVDb250ZW50cygpOwotfQotCi1IVE1MVHJlZUJ1aWxkZXI6OkhUTUxUcmVlQnVpbGRlcihj
b25zdCBIVE1MRG9jdW1lbnRQYXJzZXImIHBhcnNlciwgSFRNTERvY3VtZW50JiBkb2N1bWVudCwg
UGFyc2VyQ29udGVudFBvbGljeSBwYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2Vy
T3B0aW9ucyYgb3B0aW9ucykKLSAgICA6IG1fcGFyc2VyKHBhcnNlcikKLSAgICAsIG1fb3B0aW9u
cyhvcHRpb25zKQorSFRNTFRyZWVCdWlsZGVyOjpIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50
UGFyc2VyJiBwYXJzZXIsIEhUTUxEb2N1bWVudCYgZG9jdW1lbnQsIFBhcnNlckNvbnRlbnRQb2xp
Y3kgcGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMp
CisgICAgOiBtX2ZyYW1lc2V0T2sodHJ1ZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzQXR0
YWNoZWQodHJ1ZSkKKyNlbmRpZgogICAgICwgbV90cmVlKGRvY3VtZW50LCBwYXJzZXJDb250ZW50
UG9saWN5LCBvcHRpb25zLm1heGltdW1ET01UcmVlRGVwdGgpCisgICAgLCBtX2luc2VydGlvbk1v
ZGUoSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkKKyAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluaXRpYWwpCisgICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGlu
ZShmYWxzZSkKKyAgICAsIG1fcGFyc2VyKHBhcnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNz
U3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVkUG9zaXRpb25WYWx1ZTEoKSkKKyAgICAsIG1fb3B0
aW9ucyhvcHRpb25zKQogewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2Rlc3RydWN0aW9u
UHJvaGliaXRlZCA9IGZhbHNlOwotI2VuZGlmCiB9CiAKLUhUTUxUcmVlQnVpbGRlcjo6SFRNTFRy
ZWVCdWlsZGVyKGNvbnN0IEhUTUxEb2N1bWVudFBhcnNlciYgcGFyc2VyLCBEb2N1bWVudEZyYWdt
ZW50JiBmcmFnbWVudCwgRWxlbWVudCYgY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQb2xp
Y3kgcGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMp
Ci0gICAgOiBtX3BhcnNlcihwYXJzZXIpCi0gICAgLCBtX29wdGlvbnMob3B0aW9ucykKKy8vIEZJ
WE1FOiBNZW1iZXIgdmFyaWFibGVzIHNob3VsZCBiZSBncm91cGVkIGludG8gc2VsZi1pbml0aWFs
aXppbmcgc3RydWN0cyB0bworLy8gbWluaW1pemUgY29kZSBkdXBsaWNhdGlvbiBiZXR3ZWVuIHRo
ZXNlIGNvbnN0cnVjdG9ycy4KK0hUTUxUcmVlQnVpbGRlcjo6SFRNTFRyZWVCdWlsZGVyKEhUTUxE
b2N1bWVudFBhcnNlciYgcGFyc2VyLCBEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVu
dCogY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRlbnRQb2xpY3kgcGFyc2VyQ29udGVudFBvbGlj
eSwgY29uc3QgSFRNTFBhcnNlck9wdGlvbnMmIG9wdGlvbnMpCisgICAgOiBtX2ZyYW1lc2V0T2so
dHJ1ZSkKKyNpZm5kZWYgTkRFQlVHCisgICAgLCBtX2lzQXR0YWNoZWQodHJ1ZSkKKyNlbmRpZgog
ICAgICwgbV9mcmFnbWVudENvbnRleHQoZnJhZ21lbnQsIGNvbnRleHRFbGVtZW50KQogICAgICwg
bV90cmVlKGZyYWdtZW50LCBwYXJzZXJDb250ZW50UG9saWN5LCBvcHRpb25zLm1heGltdW1ET01U
cmVlRGVwdGgpCisgICAgLCBtX2luc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCkK
KyAgICAsIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluaXRpYWwpCisg
ICAgLCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZShmYWxzZSkKKyAgICAsIG1fcGFyc2VyKHBh
cnNlcikKICAgICAsIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbih1bmluaXRpYWxpemVk
UG9zaXRpb25WYWx1ZTEoKSkKKyAgICAsIG1fb3B0aW9ucyhvcHRpb25zKQogewogICAgIEFTU0VS
VChpc01haW5UaHJlYWQoKSk7Ci0KLSAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3Jn
L211bHRpcGFnZS9zeW50YXguaHRtbCNwYXJzaW5nLWh0bWwtZnJhZ21lbnRzCi0gICAgLy8gRm9y
IGVmZmljaWVuY3ksIHdlIHNraXAgc3RlcCA1ICgiTGV0IHJvb3QgYmUgYSBuZXcgaHRtbCBlbGVt
ZW50IHdpdGggbm8gYXR0cmlidXRlcyIpIGFuZCBpbnN0ZWFkIHVzZSB0aGUgRG9jdW1lbnRGcmFn
bWVudCBhcyBhIHJvb3Qgbm9kZS4KLSAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hSb290
Tm9kZShIVE1MU3RhY2tJdGVtOjpjcmVhdGUoJmZyYWdtZW50LCBIVE1MU3RhY2tJdGVtOjpJdGVt
Rm9yRG9jdW1lbnRGcmFnbWVudE5vZGUpKTsKKyAgICAvLyBGSVhNRTogVGhpcyBhc3NlcnRpb24g
d2lsbCBiZWNvbWUgaW52YWxpZCBpZiA8aHR0cDovL3dlYmtpdC5vcmcvYi82MDMxNj4gaXMgZml4
ZWQuCisgICAgQVNTRVJUKGNvbnRleHRFbGVtZW50KTsKKyAgICBpZiAoY29udGV4dEVsZW1lbnQp
IHsKKyAgICAgICAgLy8gU3RlcHMgNC4yLTQuNiBvZiB0aGUgSFRNTDUgRnJhZ21lbnQgQ2FzZSBw
YXJzaW5nIGFsZ29yaXRobToKKyAgICAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNz
L3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdGhlLWVuZC5odG1sI2ZyYWdtZW50LWNh
c2UKKyAgICAgICAgLy8gRm9yIGVmZmljaWVuY3ksIHdlIHNraXAgc3RlcCA0LjIgKCJMZXQgcm9v
dCBiZSBhIG5ldyBodG1sIGVsZW1lbnQgd2l0aCBubyBhdHRyaWJ1dGVzIikKKyAgICAgICAgLy8g
YW5kIGluc3RlYWQgdXNlIHRoZSBEb2N1bWVudEZyYWdtZW50IGFzIGEgcm9vdCBub2RlLgorICAg
ICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnB1c2hSb290Tm9kZShIVE1MU3RhY2tJdGVtOjpj
cmVhdGUoJmZyYWdtZW50LCBIVE1MU3RhY2tJdGVtOjpJdGVtRm9yRG9jdW1lbnRGcmFnbWVudE5v
ZGUpKTsKIAogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIGlmIChjb250ZXh0RWxl
bWVudC5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkKLSAgICAgICAgbV90ZW1wbGF0ZUluc2VydGlv
bk1vZGVzLmFwcGVuZChJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKKyAgICAgICAg
aWYgKGNvbnRleHRFbGVtZW50LT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkKKyAgICAgICAgICAg
IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5hcHBlbmQoSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVD
b250ZW50cyk7CiAjZW5kaWYKIAotICAgIHJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHko
KTsKKyAgICAgICAgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgpOworICAgICAgICBt
X3RyZWUuc2V0Rm9ybSghY29udGV4dEVsZW1lbnQgfHwgaXM8SFRNTEZvcm1FbGVtZW50PigqY29u
dGV4dEVsZW1lbnQpID8gZG93bmNhc3Q8SFRNTEZvcm1FbGVtZW50Pihjb250ZXh0RWxlbWVudCkg
OiBIVE1MRm9ybUVsZW1lbnQ6OmZpbmRDbG9zZXN0Rm9ybUFuY2VzdG9yKCpjb250ZXh0RWxlbWVu
dCkpOworICAgIH0KK30KIAotICAgIG1fdHJlZS5zZXRGb3JtKGlzPEhUTUxGb3JtRWxlbWVudD4o
Y29udGV4dEVsZW1lbnQpID8gJmRvd25jYXN0PEhUTUxGb3JtRWxlbWVudD4oY29udGV4dEVsZW1l
bnQpIDogSFRNTEZvcm1FbGVtZW50OjpmaW5kQ2xvc2VzdEZvcm1BbmNlc3Rvcihjb250ZXh0RWxl
bWVudCkpOworSFRNTFRyZWVCdWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKK3sKK30KIAotI2lm
ICFBU1NFUlRfRElTQUJMRUQKLSAgICBtX2Rlc3RydWN0aW9uUHJvaGliaXRlZCA9IGZhbHNlOwor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRldGFjaCgpCit7CisjaWZuZGVmIE5ERUJVRworICAgIC8v
IFRoaXMgY2FsbCBtYWtlcyBsaXR0bGUgc2Vuc2UgaW4gZnJhZ21lbnQgbW9kZSwgYnV0IGZvciBj
b25zaXN0ZW5jeQorICAgIC8vIERvY3VtZW50UGFyc2VyIGV4cGVjdHMgZGV0YWNoKCkgdG8gYWx3
YXlzIGJlIGNhbGxlZCBiZWZvcmUgaXQncyBkZXN0cm95ZWQuCisgICAgbV9pc0F0dGFjaGVkID0g
ZmFsc2U7CiAjZW5kaWYKKyAgICAvLyBIVE1MQ29uc3RydWN0aW9uU2l0ZSBtaWdodCBiZSBvbiB0
aGUgY2FsbHN0YWNrIHdoZW4gZGV0YWNoKCkgaXMgY2FsbGVkCisgICAgLy8gb3RoZXJ3aXNlIHdl
J2QganVzdCBjYWxsIG1fdHJlZS5jbGVhcigpIGhlcmUgaW5zdGVhZC4KKyAgICBtX3RyZWUuZGV0
YWNoKCk7CiB9CiAKIEhUTUxUcmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJh
Z21lbnRQYXJzaW5nQ29udGV4dCgpCisgICAgOiBtX2ZyYWdtZW50KDApCiB7CiB9CiAKLUhUTUxU
cmVlQnVpbGRlcjo6RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6RnJhZ21lbnRQYXJzaW5nQ29udGV4
dChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgRWxlbWVudCYgY29udGV4dEVsZW1lbnQpCitI
VE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6OkZyYWdtZW50UGFyc2luZ0Nv
bnRleHQoRG9jdW1lbnRGcmFnbWVudCYgZnJhZ21lbnQsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50
KQogICAgIDogbV9mcmFnbWVudCgmZnJhZ21lbnQpCiB7CiAgICAgQVNTRVJUKCFmcmFnbWVudC5o
YXNDaGlsZE5vZGVzKCkpOwotICAgIG1fY29udGV4dEVsZW1lbnRTdGFja0l0ZW0gPSBIVE1MU3Rh
Y2tJdGVtOjpjcmVhdGUoJmNvbnRleHRFbGVtZW50LCBIVE1MU3RhY2tJdGVtOjpJdGVtRm9yQ29u
dGV4dEVsZW1lbnQpOworICAgIG1fY29udGV4dEVsZW1lbnRTdGFja0l0ZW0gPSBIVE1MU3RhY2tJ
dGVtOjpjcmVhdGUoY29udGV4dEVsZW1lbnQsIEhUTUxTdGFja0l0ZW06Okl0ZW1Gb3JDb250ZXh0
RWxlbWVudCk7CiB9CiAKLWlubGluZSBFbGVtZW50JiBIVE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50
UGFyc2luZ0NvbnRleHQ6OmNvbnRleHRFbGVtZW50KCkgY29uc3QKK0hUTUxUcmVlQnVpbGRlcjo6
RnJhZ21lbnRQYXJzaW5nQ29udGV4dDo6fkZyYWdtZW50UGFyc2luZ0NvbnRleHQoKQogewotICAg
IHJldHVybiAqY29udGV4dEVsZW1lbnRTdGFja0l0ZW0oKS5lbGVtZW50KCk7CiB9CiAKLWlubGlu
ZSBIVE1MU3RhY2tJdGVtJiBIVE1MVHJlZUJ1aWxkZXI6OkZyYWdtZW50UGFyc2luZ0NvbnRleHQ6
OmNvbnRleHRFbGVtZW50U3RhY2tJdGVtKCkgY29uc3QKK1Bhc3NSZWZQdHI8RWxlbWVudD4gSFRN
TFRyZWVCdWlsZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbiYgc2NyaXB0U3Rh
cnRQb3NpdGlvbikKIHsKLSAgICBBU1NFUlQobV9mcmFnbWVudCk7Ci0gICAgcmV0dXJuICptX2Nv
bnRleHRFbGVtZW50U3RhY2tJdGVtOwotfQotCi1SZWZQdHI8RWxlbWVudD4gSFRNTFRyZWVCdWls
ZGVyOjp0YWtlU2NyaXB0VG9Qcm9jZXNzKFRleHRQb3NpdGlvbiYgc2NyaXB0U3RhcnRQb3NpdGlv
bikKLXsKLSAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKLQotICAgIGlmICghbV9zY3JpcHRUb1By
b2Nlc3MpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCisgICAgQVNTRVJUKG1fc2NyaXB0VG9Q
cm9jZXNzKTsKICAgICAvLyBVbnBhdXNlIG91cnNlbHZlcywgY2FsbGVycyBtYXkgcGF1c2UgdXMg
YWdhaW4gd2hlbiBwcm9jZXNzaW5nIHRoZSBzY3JpcHQuCi0gICAgLy8gVGhlIEhUTUw1IHNwZWMg
aXMgd3JpdHRlbiBhcyB0aG91Z2ggc2NyaXB0cyBhcmUgZXhlY3V0ZWQgaW5zaWRlIHRoZSB0cmVl
IGJ1aWxkZXIuCi0gICAgLy8gV2UgcGF1c2UgdGhlIHBhcnNlciB0byBleGl0IHRoZSB0cmVlIGJ1
aWxkZXIsIGFuZCB0aGVuIHJlc3VtZSBiZWZvcmUgcnVubmluZyBzY3JpcHRzLgorICAgIC8vIFRo
ZSBIVE1MNSBzcGVjIGlzIHdyaXR0ZW4gYXMgdGhvdWdoIHNjcmlwdHMgYXJlIGV4ZWN1dGVkIGlu
c2lkZSB0aGUgdHJlZQorICAgIC8vIGJ1aWxkZXIuICBXZSBwYXVzZSB0aGUgcGFyc2VyIHRvIGV4
aXQgdGhlIHRyZWUgYnVpbGRlciwgYW5kIHRoZW4gcmVzdW1lCisgICAgLy8gYmVmb3JlIHJ1bm5p
bmcgc2NyaXB0cy4KICAgICBzY3JpcHRTdGFydFBvc2l0aW9uID0gbV9zY3JpcHRUb1Byb2Nlc3NT
dGFydFBvc2l0aW9uOwogICAgIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbiA9IHVuaW5p
dGlhbGl6ZWRQb3NpdGlvblZhbHVlMSgpOwotICAgIHJldHVybiBXVEY6Om1vdmUobV9zY3JpcHRU
b1Byb2Nlc3MpOworICAgIHJldHVybiBtX3NjcmlwdFRvUHJvY2Vzcy5yZWxlYXNlKCk7CiB9CiAK
LXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiYgdG9r
ZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y29uc3RydWN0VHJlZShBdG9taWNIVE1MVG9rZW4q
IHRva2VuKQogewotI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBBU1NFUlQoIW1fZGVzdHJveWVk
KTsKLSAgICBBU1NFUlQoIW1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkKTsKLSAgICBtX2Rlc3RydWN0
aW9uUHJvaGliaXRlZCA9IHRydWU7Ci0jZW5kaWYKLQogICAgIGlmIChzaG91bGRQcm9jZXNzVG9r
ZW5JbkZvcmVpZ25Db250ZW50KHRva2VuKSkKICAgICAgICAgcHJvY2Vzc1Rva2VuSW5Gb3JlaWdu
Q29udGVudCh0b2tlbik7CiAgICAgZWxzZQpAQCAtMzQyLDcgKzM1NSw3IEBAIHZvaWQgSFRNTFRy
ZWVCdWlsZGVyOjpjb25zdHJ1Y3RUcmVlKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAKICAgICBp
ZiAobV9wYXJzZXIudG9rZW5pemVyKCkpIHsKICAgICAgICAgYm9vbCBpbkZvcmVpZ25Db250ZW50
ID0gIW1fdHJlZS5pc0VtcHR5KCkKLSAgICAgICAgICAgICYmICFhZGp1c3RlZEN1cnJlbnRTdGFj
a0l0ZW0oKS5pc0luSFRNTE5hbWVzcGFjZSgpCisgICAgICAgICAgICAmJiAhYWRqdXN0ZWRDdXJy
ZW50U3RhY2tJdGVtKCktPmlzSW5IVE1MTmFtZXNwYWNlKCkKICAgICAgICAgICAgICYmICFIVE1M
RWxlbWVudFN0YWNrOjppc0hUTUxJbnRlZ3JhdGlvblBvaW50KG1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCkpCiAgICAgICAgICAgICAmJiAhSFRNTEVsZW1lbnRTdGFjazo6aXNNYXRoTUxUZXh0SW50
ZWdyYXRpb25Qb2ludChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpKTsKIApAQCAtMzUwLDE3ICsz
NjMsMTMgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNvbnN0cnVjdFRyZWUoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCktPnNldFNob3VsZEFsbG93
Q0RBVEEoaW5Gb3JlaWduQ29udGVudCk7CiAgICAgfQogCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAot
ICAgIG1fZGVzdHJ1Y3Rpb25Qcm9oaWJpdGVkID0gZmFsc2U7Ci0jZW5kaWYKLQogICAgIG1fdHJl
ZS5leGVjdXRlUXVldWVkVGFza3MoKTsKLSAgICAvLyBUaGUgdHJlZSBidWlsZGVyIG1pZ2h0IGhh
dmUgYmVlbiBkZXN0cm95ZWQgYXMgYW4gaW5kaXJlY3QgcmVzdWx0IG9mIGV4ZWN1dGluZyB0aGUg
cXVldWVkIHRhc2tzLgorICAgIC8vIFdlIG1pZ2h0IGJlIGRldGFjaGVkIG5vdy4KIH0KIAotdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2Vu
KQogewotICAgIHN3aXRjaCAodG9rZW4udHlwZSgpKSB7CisgICAgc3dpdGNoICh0b2tlbi0+dHlw
ZSgpKSB7CiAgICAgY2FzZSBIVE1MVG9rZW46OlVuaW5pdGlhbGl6ZWQ6CiAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICBicmVhazsKQEAgLTM5MCwxMiArMzk5LDEyIEBAIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICB9CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRG9jdHlwZVRva2VuKEF0
b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0RvY3R5
cGVUb2tlbihBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBl
KCkgPT0gSFRNTFRva2VuOjpET0NUWVBFKTsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBI
VE1MVG9rZW46OkRPQ1RZUEUpOwogICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9u
TW9kZTo6SW5pdGlhbCkgewotICAgICAgICBtX3RyZWUuaW5zZXJ0RG9jdHlwZSgmdG9rZW4pOwot
ICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOworICAg
ICAgICBtX3RyZWUuaW5zZXJ0RG9jdHlwZSh0b2tlbik7CisgICAgICAgIHNldEluc2VydGlvbk1v
ZGUoSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAg
ICAgaWYgKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dCkgewpA
QCAtNDA2LDE3ICs0MTUsMTcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NEb2N0eXBl
VG9rZW4oQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBwYXJzZUVycm9yKHRva2VuKTsKIH0K
IAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgVmVjdG9yPEF0dHJpYnV0ZT4mJiBhdHRyaWJ1dGVzKQordm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NGYWtlU3RhcnRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgLy8g
RklYTUU6IFdlJ2xsIG5lZWQgYSBmYW5jaWVyIGNvbnZlcnNpb24gdGhhbiBqdXN0ICJsb2NhbE5h
bWUiIGZvciBTVkcvTWF0aE1MIHRhZ3MuCi0gICAgQXRvbWljSFRNTFRva2VuIGZha2VUb2tlbihI
VE1MVG9rZW46OlN0YXJ0VGFnLCB0YWdOYW1lLmxvY2FsTmFtZSgpLCBXVEY6Om1vdmUoYXR0cmli
dXRlcykpOwotICAgIHByb2Nlc3NTdGFydFRhZyhmYWtlVG9rZW4pOworICAgIEF0b21pY0hUTUxU
b2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpTdGFydFRhZywgdGFnTmFtZS5sb2NhbE5hbWUoKSwg
YXR0cmlidXRlcyk7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKCZmYWtlVG9rZW4pOwogfQogCiB2b2lk
IEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgQXRvbWljU3RyaW5nJiB0
YWdOYW1lKQogewogICAgIEF0b21pY0hUTUxUb2tlbiBmYWtlVG9rZW4oSFRNTFRva2VuOjpFbmRU
YWcsIHRhZ05hbWUpOwotICAgIHByb2Nlc3NFbmRUYWcoZmFrZVRva2VuKTsKKyAgICBwcm9jZXNz
RW5kVGFnKCZmYWtlVG9rZW4pOwogfQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Zh
a2VFbmRUYWcoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKQEAgLTQzNywxMiArNDQ2LDEy
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNj
b3BlKCkKICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5CdXR0b25TY29wZShwVGFn
LmxvY2FsTmFtZSgpKSkKICAgICAgICAgcmV0dXJuOwogICAgIEF0b21pY0hUTUxUb2tlbiBlbmRQ
KEhUTUxUb2tlbjo6RW5kVGFnLCBwVGFnLmxvY2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzRW5kVGFn
KGVuZFApOworICAgIHByb2Nlc3NFbmRUYWcoJmVuZFApOwogfQogCi1WZWN0b3I8QXR0cmlidXRl
PiBIVE1MVHJlZUJ1aWxkZXI6OmF0dHJpYnV0ZXNGb3JJc2luZGV4SW5wdXQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKK1ZlY3RvcjxBdHRyaWJ1dGU+IEhUTUxUcmVlQnVpbGRlcjo6YXR0cmlidXRl
c0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIFZlY3RvcjxB
dHRyaWJ1dGU+IGF0dHJpYnV0ZXMgPSB0b2tlbi5hdHRyaWJ1dGVzKCk7CisgICAgVmVjdG9yPEF0
dHJpYnV0ZT4gYXR0cmlidXRlcyA9IHRva2VuLT5hdHRyaWJ1dGVzKCk7CiAgICAgZm9yIChpbnQg
aSA9IGF0dHJpYnV0ZXMuc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKICAgICAgICAgY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSA9IGF0dHJpYnV0ZXMuYXQoaSkubmFtZSgpOwogICAgICAgICBp
ZiAobmFtZS5tYXRjaGVzKG5hbWVBdHRyKSB8fCBuYW1lLm1hdGNoZXMoYWN0aW9uQXR0cikgfHwg
bmFtZS5tYXRjaGVzKHByb21wdEF0dHIpKQpAQCAtNDUzLDIxICs0NjIsMjEgQEAgVmVjdG9yPEF0
dHJpYnV0ZT4gSFRNTFRyZWVCdWlsZGVyOjphdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21p
Y0hUTUxUb2tlbiYgdG8KICAgICByZXR1cm4gYXR0cmlidXRlczsKIH0KIAotdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2Vu
JiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSXNpbmRleFN0YXJ0VGFnRm9y
SW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQodG9rZW4ubmFtZSgpID09IGlz
aW5kZXhUYWcpOworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRU
YWcpOworICAgIEFTU0VSVCh0b2tlbi0+bmFtZSgpID09IGlzaW5kZXhUYWcpOwogICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgIGlmIChtX3RyZWUuZm9ybSgpICYmICFpc1BhcnNpbmdUZW1wbGF0
ZUNvbnRlbnRzKCkpCiAgICAgICAgIHJldHVybjsKICAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyBB
Y2tub3dsZWRnZSBzZWxmLWNsb3NpbmcgZmxhZwogICAgIHByb2Nlc3NGYWtlU3RhcnRUYWcoZm9y
bVRhZyk7Ci0gICAgQXR0cmlidXRlKiBhY3Rpb25BdHRyaWJ1dGUgPSB0b2tlbi5nZXRBdHRyaWJ1
dGVJdGVtKGFjdGlvbkF0dHIpOworICAgIEF0dHJpYnV0ZSogYWN0aW9uQXR0cmlidXRlID0gdG9r
ZW4tPmdldEF0dHJpYnV0ZUl0ZW0oYWN0aW9uQXR0cik7CiAgICAgaWYgKGFjdGlvbkF0dHJpYnV0
ZSkKICAgICAgICAgbV90cmVlLmZvcm0oKS0+c2V0QXR0cmlidXRlKGFjdGlvbkF0dHIsIGFjdGlv
bkF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhoclRhZyk7CiAg
ICAgcHJvY2Vzc0Zha2VTdGFydFRhZyhsYWJlbFRhZyk7Ci0gICAgQXR0cmlidXRlKiBwcm9tcHRB
dHRyaWJ1dGUgPSB0b2tlbi5nZXRBdHRyaWJ1dGVJdGVtKHByb21wdEF0dHIpOworICAgIEF0dHJp
YnV0ZSogcHJvbXB0QXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0ocHJvbXB0QXR0
cik7CiAgICAgaWYgKHByb21wdEF0dHJpYnV0ZSkKICAgICAgICAgcHJvY2Vzc0Zha2VDaGFyYWN0
ZXJzKHByb21wdEF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgZWxzZQpAQCAtNDgxLDM2ICs0OTAs
NDEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NJc2luZGV4U3RhcnRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKIAogbmFtZXNwYWNlIHsKIAotYm9vbCBpc0xpKGNv
bnN0IEhUTUxTdGFja0l0ZW0mIGl0ZW0pCitib29sIGlzTGkoY29uc3QgSFRNTFN0YWNrSXRlbSog
aXRlbSkKIHsKLSAgICByZXR1cm4gaXRlbS5oYXNUYWdOYW1lKGxpVGFnKTsKKyAgICByZXR1cm4g
aXRlbS0+aGFzVGFnTmFtZShsaVRhZyk7CiB9CiAKLWJvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0
YWNrSXRlbSYgaXRlbSkKK2Jvb2wgaXNEZE9yRHQoY29uc3QgSFRNTFN0YWNrSXRlbSogaXRlbSkK
IHsKLSAgICByZXR1cm4gaXRlbS5oYXNUYWdOYW1lKGRkVGFnKSB8fCBpdGVtLmhhc1RhZ05hbWUo
ZHRUYWcpOworICAgIHJldHVybiBpdGVtLT5oYXNUYWdOYW1lKGRkVGFnKQorICAgICAgICB8fCBp
dGVtLT5oYXNUYWdOYW1lKGR0VGFnKTsKIH0KIAogfQogCi10ZW1wbGF0ZSA8Ym9vbCBzaG91bGRD
bG9zZShjb25zdCBIVE1MU3RhY2tJdGVtJik+IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
Q2xvc2VXaGVuTmVzdGVkVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit0ZW1wbGF0ZSA8Ym9v
bCBzaG91bGRDbG9zZShjb25zdCBIVE1MU3RhY2tJdGVtKik+Cit2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewog
ICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwotICAgIGZvciAoYXV0byogbm9kZVJlY29yZCA9IG1f
dHJlZS5vcGVuRWxlbWVudHMoKS0+dG9wUmVjb3JkKCk7IDsgbm9kZVJlY29yZCA9IG5vZGVSZWNv
cmQtPm5leHQoKSkgewotICAgICAgICBIVE1MU3RhY2tJdGVtJiBpdGVtID0gKm5vZGVSZWNvcmQt
PnN0YWNrSXRlbSgpOwotICAgICAgICBpZiAoc2hvdWxkQ2xvc2UoaXRlbSkpIHsKLSAgICAgICAg
ICAgIEFTU0VSVChpdGVtLmlzRWxlbWVudE5vZGUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRmFr
ZUVuZFRhZyhpdGVtLmxvY2FsTmFtZSgpKTsKKyAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50
UmVjb3JkKiBub2RlUmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsK
KyAgICB3aGlsZSAoMSkgeworICAgICAgICBSZWZQdHI8SFRNTFN0YWNrSXRlbT4gaXRlbSA9IG5v
ZGVSZWNvcmQtPnN0YWNrSXRlbSgpOworICAgICAgICBpZiAoc2hvdWxkQ2xvc2UoaXRlbS5nZXQo
KSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChpdGVtLT5pc0VsZW1lbnROb2RlKCkpOworICAgICAg
ICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoaXRlbS0+bG9jYWxOYW1lKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0uaXNTcGVjaWFsTm9kZSgpICYmICFp
dGVtLmhhc1RhZ05hbWUoYWRkcmVzc1RhZykgJiYgIWl0ZW0uaGFzVGFnTmFtZShkaXZUYWcpICYm
ICFpdGVtLmhhc1RhZ05hbWUocFRhZykpCisgICAgICAgIGlmIChpdGVtLT5pc1NwZWNpYWxOb2Rl
KCkgJiYgIWl0ZW0tPmhhc1RhZ05hbWUoYWRkcmVzc1RhZykgJiYgIWl0ZW0tPmhhc1RhZ05hbWUo
ZGl2VGFnKSAmJiAhaXRlbS0+aGFzVGFnTmFtZShwVGFnKSkKICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgpOwogICAgIH0KICAgICBwcm9j
ZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKIH0K
IAotdGVtcGxhdGUgPHR5cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4gc3RhdGljIEhhc2hNYXA8
QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiBjcmVhdGVDYXNlTWFwKGNvbnN0IFRhYmxlUXVh
bGlmaWVkTmFtZSogY29uc3QgbmFtZXNbXSwgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5
cGVuYW1lIFRhYmxlUXVhbGlmaWVkTmFtZT4KK3N0YXRpYyBIYXNoTWFwPEF0b21pY1N0cmluZywg
UXVhbGlmaWVkTmFtZT4gY3JlYXRlQ2FzZU1hcChjb25zdCBUYWJsZVF1YWxpZmllZE5hbWUqIGNv
bnN0IG5hbWVzW10sIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBIYXNoTWFwPEF0b21pY1N0cmlu
ZywgUXVhbGlmaWVkTmFtZT4gbWFwOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgewpAQCAtNTQxLDcgKzU1NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBhZGp1c3RB
dHRyaWJ1dGVzKEhhc2hNYXA8QXRvbWljU3RyaW5nLCBRdWFsaWZpZWROYW1lPiYgbWFwLCBBCiAg
ICAgfQogfQogCi10ZW1wbGF0ZTxjb25zdCBRdWFsaWZpZWROYW1lKiBjb25zdCogYXR0cmlidXRl
c1RhYmxlKCksIHVuc2lnbmVkIGF0dHJpYnV0ZXNUYWJsZUxlbmd0aD4gc3RhdGljIHZvaWQgYWRq
dXN0QXR0cmlidXRlcyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordGVtcGxhdGU8Y29uc3QgUXVh
bGlmaWVkTmFtZSogY29uc3QqIGF0dHJpYnV0ZXNUYWJsZSgpLCB1bnNpZ25lZCBhdHRyaWJ1dGVz
VGFibGVMZW5ndGg+CitzdGF0aWMgdm9pZCBhZGp1c3RBdHRyaWJ1dGVzKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPEhhc2hNYXA8QXRvbWljU3Ry
aW5nLCBRdWFsaWZpZWROYW1lPj4gbWFwID0gY3JlYXRlQ2FzZU1hcChhdHRyaWJ1dGVzVGFibGUo
KSwgYXR0cmlidXRlc1RhYmxlTGVuZ3RoKTsKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwgdG9r
ZW4pOwpAQCAtNTg1LDI4ICs2MDAsMjggQEAgc3RhdGljIHZvaWQgYWRqdXN0Rm9yZWlnbkF0dHJp
YnV0ZXMoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBhZGp1c3RBdHRyaWJ1dGVzKG1hcCwg
dG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5C
b2R5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJU
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGh0bWxUYWcpIHsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46
OlN0YXJ0VGFnKTsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAg
IHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYmFzZVRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gYmFzZWZvbnRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJnc291bmRU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNvbW1hbmRUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnCi0gICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBzY3JpcHRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHN0eWxlVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0aXRsZVRhZykgeworICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IGJhc2VUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiYXNlZm9udFRh
ZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJnc291bmRUYWcKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBjb21tYW5kVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbGlu
a1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSBub2ZyYW1lc1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNj
cmlwdFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHN0eWxlVGFnCisgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgYm9vbCBkaWRQcm9jZXNzID0g
cHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgQVNTRVJUX1VOVVNFRChk
aWRQcm9jZXNzLCBkaWRQcm9jZXNzKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5
VGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBib29sIGZyYWdtZW50
T3JUZW1wbGF0ZUNhc2UgPSAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5zZWNvbmRFbGVtZW50SXNI
VE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc09ubHlPbmVFbGVt
ZW50KCk7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC02MTcsMTAgKzYzMiwxMCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
bV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0
VGFnSW5Cb2R5KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MQm9keVN0YXJ0VGFn
SW5Cb2R5KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGZyYW1lc2V0VGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRU
YWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5zZWNvbmRFbGVtZW50SXNIVE1MQm9keUVsZW1lbnQoKSB8fCBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPmhhc09ubHlPbmVFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEFTU0VS
VChpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVDb250ZW50cygpKTsKQEAgLTYzMiw3OCArNjQ3
LDc4IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BV
bnRpbChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmJvZHlFbGVtZW50KCkpOwogICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnBvcEhUTUxCb2R5RWxlbWVudCgpOwogICAgICAgICBBU1NFUlQo
bV90cmVlLm9wZW5FbGVtZW50cygpLT50b3AoKSA9PSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmh0
bWxFbGVtZW50KCkpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsK
LSAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGFkZHJlc3NUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFydGljbGVUYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGFzaWRlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBibG9ja3F1b3Rl
VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjZW50ZXJUYWcKLSAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGRldGFpbHNUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGRpclRh
ZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGl2VGFnCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBkbFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmllbGRzZXRUYWcKLSAg
ICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZpZ2NhcHRpb25UYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGZpZ3VyZVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZm9vdGVyVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkZXJUYWcKLSAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGhncm91cFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWFpblRhZwot
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWVudVRhZwotICAgICAgICB8fCB0b2tlbi5uYW1l
KCkgPT0gbmF2VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBvbFRhZwotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gcFRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc2VjdGlv
blRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3VtbWFyeVRhZwotICAgICAgICB8fCB0
b2tlbi5uYW1lKCkgPT0gdWxUYWcpIHsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KHRva2VuKTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkZyYW1l
c2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBh
ZGRyZXNzVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYXJ0aWNsZVRhZworICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkg
PT0gYmxvY2txdW90ZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNlbnRlclRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRldGFpbHNUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBkaXJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXZUYWcKKyAg
ICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkbFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGZpZWxkc2V0VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZmlnY2FwdGlvblRh
ZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZ3VyZVRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGZvb3RlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRl
clRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhncm91cFRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IG1haW5UYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51
VGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbmF2VGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gb2xUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwVGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2VjdGlvblRhZworICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IHN1bW1hcnlUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRhZykgewog
ICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRN
TEVsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc051bWJl
cmVkSGVhZGVyVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRh
Zyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRv
blNjb3BlKCk7CiAgICAgICAgIGlmIChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5pc051bWJl
cmVkSGVhZGVyRWxlbWVudCgpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgIH0KLSAgICAg
ICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNl
cnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBwcmVUYWcgfHwgdG9rZW4ubmFtZSgpID09IGxpc3RpbmdUYWcpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwcmVUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaXN0aW5n
VGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lmUEluQnV0dG9uU2NvcGUoKTsKLSAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIG1fc2hvdWxkU2tpcExlYWRpbmdOZXds
aW5lID0gdHJ1ZTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHJldHVy
bjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBmb3JtVGFnKSB7CisgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gZm9ybVRhZykgewogICAgICAgICBpZiAobV90cmVlLmZvcm0oKSAmJiAh
aXNQYXJzaW5nVGVtcGxhdGVDb250ZW50cygpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRv
a2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBwcm9jZXNzRmFr
ZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9y
bUVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0
b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBs
aVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGxpVGFnKSB7CiAgICAgICAgIHByb2Nl
c3NDbG9zZVdoZW5OZXN0ZWRUYWc8aXNMaT4odG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAg
fQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFn
KSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZGRUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBk
dFRhZykgewogICAgICAgICBwcm9jZXNzQ2xvc2VXaGVuTmVzdGVkVGFnPGlzRGRPckR0Pih0b2tl
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwbGFp
bnRleHRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwbGFpbnRleHRUYWcpIHsKICAg
ICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgpOwotICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKICAgICAgICAgaWYgKG1fcGFyc2VyLnRva2VuaXplcigpKQogICAgICAg
ICAgICAgbV9wYXJzZXIudG9rZW5pemVyKCktPnNldFN0YXRlKEhUTUxUb2tlbml6ZXI6OlBMQUlO
VEVYVFN0YXRlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgp
ID09IGJ1dHRvblRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRhZykgewog
ICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKGJ1dHRvblRhZykpIHsK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VF
bmRUYWcoYnV0dG9uVGFnKTsKQEAgLTcxMSwxMSArNzI2LDExIEBAIHZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7
CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09
IGFUYWcpIHsKICAgICAgICAgRWxlbWVudCogYWN0aXZlQVRhZyA9IG1fdHJlZS5hY3RpdmVGb3Jt
YXR0aW5nRWxlbWVudHMoKS0+Y2xvc2VzdEVsZW1lbnRJblNjb3BlV2l0aE5hbWUoYVRhZy5sb2Nh
bE5hbWUoKSk7CiAgICAgICAgIGlmIChhY3RpdmVBVGFnKSB7CiAgICAgICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKQEAgLTcyNSwxMTcgKzc0MCwxMjEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVtb3ZlKGFjdGl2ZUFUYWcpOwogICAg
ICAgICB9CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVt
ZW50cygpOwotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQoJnRva2VuKTsK
KyAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNOb25BbmNob3JOb25Ob2JyRm9ybWF0dGluZ1RhZyh0
b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzTm9uQW5jaG9yTm9uTm9ickZvcm1hdHRpbmdUYWco
dG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9y
bWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JtYXR0aW5nRWxlbWVu
dCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQodG9rZW4p
OwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9iclRh
ZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vYnJUYWcpIHsKICAgICAgICAgbV90cmVl
LnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7CiAgICAgICAgIGlmICht
X3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUobm9iclRhZykpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcobm9iclRhZyk7
CiAgICAgICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVu
dHMoKTsKICAgICAgICAgfQotICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9ybWF0dGluZ0VsZW1lbnQo
JnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydEZvcm1hdHRpbmdFbGVtZW50KHRva2VuKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGFwcGxldFRh
ZyB8fCB0b2tlbi5uYW1lKCkgPT0gZW1iZWRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG9iamVjdFRh
ZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFwcGxldFRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGVtYmVkVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gb2JqZWN0
VGFnKSB7CiAgICAgICAgIGlmICghcGx1Z2luQ29udGVudElzQWxsb3dlZChtX3RyZWUucGFyc2Vy
Q29udGVudFBvbGljeSgpKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBhcHBsZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwg
dG9rZW4ubmFtZSgpID09IG9iamVjdFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGFw
cGxldFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1hcnF1ZWVUYWcKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBvYmplY3RUYWcpIHsKICAgICAgICAgbV90cmVlLnJlY29uc3Ry
dWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9r
ZW4pOwogICAgICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1h
cmtlcigpOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgaWYgKCFtX3RyZWUuaW5RdWlya3NNb2Rl
KCkgJiYgbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHBUYWcpKQogICAgICAg
ICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcocFRhZyk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1M
RWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4p
OwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKLSAgICAgICAgbV9pbnNlcnRpb25Nb2Rl
ID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpJblRhYmxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGltYWdlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW1hZ2VU
YWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIC8vIEFwcGFyZW50bHkg
d2UncmUgbm90IHN1cHBvc2VkIHRvIGFzay4KLSAgICAgICAgdG9rZW4uc2V0TmFtZShpbWdUYWcu
bG9jYWxOYW1lKCkpOworICAgICAgICB0b2tlbi0+c2V0TmFtZShpbWdUYWcubG9jYWxOYW1lKCkp
OwogICAgICAgICAvLyBOb3RlIHRoZSBmYWxsIHRocm91Z2ggdG8gdGhlIGltZ1RhZyBoYW5kbGlu
ZyBiZWxvdyEKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcmVhVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBiclRhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZW1i
ZWRUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGltZ1RhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0ga2V5Z2VuVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB3YnJUYWcp
IHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhcmVhVGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gYnJUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBlbWJlZFRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGltZ1RhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGtleWdlblRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHdiclRhZykgewogICAg
ICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAg
ICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAg
ICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICBt
X2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGlucHV0VGFnKSB7Ci0gICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0
ZSA9IHRva2VuLmdldEF0dHJpYnV0ZUl0ZW0odHlwZUF0dHIpOworICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGlucHV0VGFnKSB7CisgICAgICAgIEF0dHJpYnV0ZSogdHlwZUF0dHJpYnV0ZSA9IHRv
a2VuLT5nZXRBdHRyaWJ1dGVJdGVtKHR5cGVBdHRyKTsKICAgICAgICAgbV90cmVlLnJlY29uc3Ry
dWN0VGhlQWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRT
ZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxm
Q2xvc2luZ0hUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgaWYgKCF0eXBlQXR0cmlidXRlIHx8
ICFlcXVhbElnbm9yaW5nQ2FzZSh0eXBlQXR0cmlidXRlLT52YWx1ZSgpLCAiaGlkZGVuIikpCiAg
ICAgICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICBpZiAodG9rZW4ubmFtZSgpID09IHBhcmFtVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBzb3VyY2VUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyYWNrVGFnKSB7Ci0g
ICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAg
aWYgKHRva2VuLT5uYW1lKCkgPT0gcGFyYW1UYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBzb3VyY2VUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0cmFja1RhZykgeworICAg
ICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAg
IHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBoclRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGhyVGFnKSB7CiAgICAgICAgIHByb2Nlc3NGYWtlUEVuZFRhZ0lm
UEluQnV0dG9uU2NvcGUoKTsKLSAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1l
bnQodG9rZW4pOwogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGlzaW5kZXhUYWcpIHsKKyAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBpc2luZGV4VGFnKSB7CiAgICAgICAgIHByb2Nlc3NJc2luZGV4U3Rh
cnRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsKLSAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGV4dGFyZWFUYWcpIHsK
KyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgbV9zaG91
bGRTa2lwTGVhZGluZ05ld2xpbmUgPSB0cnVlOwogICAgICAgICBpZiAobV9wYXJzZXIudG9rZW5p
emVyKCkpCiAgICAgICAgICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRv
a2VuaXplcjo6UkNEQVRBU3RhdGUpOwogICAgICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9
IG1faW5zZXJ0aW9uTW9kZTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAg
IG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CisgICAgICAgIHNldEluc2Vy
dGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6VGV4dCk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0g
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSB4bXBUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSB4bXBUYWcpIHsKICAgICAgICAgcHJvY2Vzc0Zha2VQRW5kVGFnSWZQSW5CdXR0b25TY29wZSgp
OwogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMo
KTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7CiAgICAgICAgIHByb2Nlc3NHZW5lcmlj
UmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IGlmcmFtZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlm
cmFtZVRhZykgewogICAgICAgICBtX2ZyYW1lc2V0T2sgPSBmYWxzZTsKICAgICAgICAgcHJvY2Vz
c0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQot
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9lbWJlZFRhZyAmJiBtX29wdGlvbnMucGx1Z2luc0Vu
YWJsZWQpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub2VtYmVkVGFnICYmIG1fb3B0aW9u
cy5wbHVnaW5zRW5hYmxlZCkgewogICAgICAgICBwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRh
Zyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBub3NjcmlwdFRhZyAmJiBtX29wdGlvbnMuc2NyaXB0RW5hYmxlZCkgeworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IG5vc2NyaXB0VGFnICYmIG1fb3B0aW9ucy5zY3JpcHRFbmFibGVkKSB7CiAg
ICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHNlbGVjdFRhZykgeworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IHNlbGVjdFRhZykgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1
Y3RUaGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CiAgICAgICAgIG1fZnJhbWVzZXRPayA9IGZhbHNlOwogICAgICAgICBpZiAobV9pbnNlcnRp
b25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGUKICAgICAgICAgICAgIHx8IG1faW5zZXJ0
aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24KQEAgLTg0Myw4NiArODYyLDg1IEBA
IHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHx8IG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRp
b25Nb2RlOjpJblRhYmxlQm9keQogICAgICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2RlID09IElu
c2VydGlvbk1vZGU6OkluUm93CiAgICAgICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5z
ZXJ0aW9uTW9kZTo6SW5DZWxsKQotICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOworICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJ
bnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAg
ICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdDsKKyAgICAgICAgICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3QpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0Z3JvdXBUYWcgfHwgdG9rZW4u
bmFtZSgpID09IG9wdGlvblRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGdyb3Vw
VGFnIHx8IHRva2VuLT5uYW1lKCkgPT0gb3B0aW9uVGFnKSB7CiAgICAgICAgIGlmIChpczxIVE1M
T3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAg
ICAgICAgICAgIEF0b21pY0hUTUxUb2tlbiBlbmRPcHRpb24oSFRNTFRva2VuOjpFbmRUYWcsIG9w
dGlvblRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZE9wdGlv
bik7CisgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRPcHRpb24pOwogICAgICAgICB9CiAg
ICAgICAgIG1fdHJlZS5yZWNvbnN0cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwot
ICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHJiVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBydGNUYWcpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSByYlRhZyB8fCB0b2tlbi0+bmFtZSgpID09IHJ0Y1RhZykg
ewogICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHJ1YnlUYWcubG9j
YWxOYW1lKCkpKSB7CiAgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFncygp
OwogICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1l
KHJ1YnlUYWcpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICB9
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBtX3Ry
ZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAg
IGlmICh0b2tlbi5uYW1lKCkgPT0gcnRUYWcgfHwgdG9rZW4ubmFtZSgpID09IHJwVGFnKSB7Cisg
ICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gcnRUYWcgfHwgdG9rZW4tPm5hbWUoKSA9PSBycFRhZykg
ewogICAgICAgICBpZiAobV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHJ1YnlUYWcubG9j
YWxOYW1lKCkpKSB7CiAgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dp
dGhFeGNsdXNpb24ocnRjVGFnLmxvY2FsTmFtZSgpKTsKICAgICAgICAgICAgIGlmICghbV90cmVl
LmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShydWJ5VGFnKSAmJiAhbV90cmVlLmN1cnJl
bnRTdGFja0l0ZW0oKS0+aGFzVGFnTmFtZShydGNUYWcpKQogICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICB9Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVu
dCgmdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9rZW4pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gTWF0aE1MTmFtZXM6
Om1hdGhUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBNYXRoTUxO
YW1lczo6bWF0aFRhZy5sb2NhbE5hbWUoKSkgewogICAgICAgICBtX3RyZWUucmVjb25zdHJ1Y3RU
aGVBY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKTsKLSAgICAgICAgYWRqdXN0TWF0aE1MQXR0cmli
dXRlcyh0b2tlbik7Ci0gICAgICAgIGFkanVzdEZvcmVpZ25BdHRyaWJ1dGVzKHRva2VuKTsKLSAg
ICAgICAgbV90cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KCZ0b2tlbiwgTWF0aE1MTmFtZXM6Om1h
dGhtbE5hbWVzcGFjZVVSSSk7CisgICAgICAgIGFkanVzdE1hdGhNTEF0dHJpYnV0ZXMoKnRva2Vu
KTsKKyAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXMoKnRva2VuKTsKKyAgICAgICAgbV90
cmVlLmluc2VydEZvcmVpZ25FbGVtZW50KHRva2VuLCBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNw
YWNlVVJJKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09
IFNWR05hbWVzOjpzdmdUYWcubG9jYWxOYW1lKCkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSBTVkdOYW1lczo6c3ZnVGFnLmxvY2FsTmFtZSgpKSB7CiAgICAgICAgIG1fdHJlZS5yZWNvbnN0
cnVjdFRoZUFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpOwotICAgICAgICBhZGp1c3RTVkdBdHRy
aWJ1dGVzKHRva2VuKTsKLSAgICAgICAgYWRqdXN0Rm9yZWlnbkF0dHJpYnV0ZXModG9rZW4pOwot
ICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQoJnRva2VuLCBTVkdOYW1lczo6c3Zn
TmFtZXNwYWNlVVJJKTsKKyAgICAgICAgYWRqdXN0U1ZHQXR0cmlidXRlcygqdG9rZW4pOworICAg
ICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcygqdG9rZW4pOworICAgICAgICBtX3RyZWUuaW5z
ZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIFNWR05hbWVzOjpzdmdOYW1lc3BhY2VVUkkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRv
a2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGZyYW1lVGFnCi0gICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBoZWFkVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4
dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tl
bi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgIGlmIChp
c0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gZnJhbWVUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBoZWFkVGFn
CisgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAg
ICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9r
ZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgcmV0dXJuOwogICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
dGVtcGxhdGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlU3RhcnRUYWcodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCiAgICAgbV90cmVlLnJlY29uc3RydWN0VGhl
QWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50
KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKIH0KIAogI2lm
IEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1RlbXBsYXRlU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzVGVtcGxhdGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ewogICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+YXBwZW5kTWFya2VyKCk7
Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuYXBwZW5k
KEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwotICAgIG1faW5zZXJ0aW9uTW9kZSA9
IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM7CisgICAgc2V0SW5zZXJ0aW9uTW9kZShJ
bnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKIH0KIAotYm9vbCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1MVG9rZW4qIHRv
a2VuKQogewotICAgIEFTU0VSVCh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcubG9jYWxOYW1l
KCkpOworICAgIEFTU0VSVCh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgp
KTsKICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJbkhUTUxTY29w
ZSgpKSB7Ci0gICAgICAgIEFTU0VSVChtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgp
IHx8IChtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuc2l6ZSgpID09IDEgJiYgbV9mcmFnbWVudENv
bnRleHQuY29udGV4dEVsZW1lbnQoKS5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkpOworICAgICAg
ICBBU1NFUlQobV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmlzRW1wdHkoKSB8fCAobV90ZW1wbGF0
ZUluc2VydGlvbk1vZGVzLnNpemUoKSA9PSAxICYmIG1fZnJhZ21lbnRDb250ZXh0LmNvbnRleHRF
bGVtZW50KCktPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKSk7CiAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQpAQCAtOTM2LDE2ICs5NTQsMTUg
QEAgYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhBdG9taWNIVE1M
VG9rZW4mIHRva2VuKQogICAgIHJldHVybiB0cnVlOwogfQogCi1ib29sIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyhBdG9taWNIVE1MVG9rZW4m
IHRva2VuKQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBs
YXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKICAgICBBdG9taWNIVE1MVG9r
ZW4gZW5kVGVtcGxhdGUoSFRNTFRva2VuOjpFbmRUYWcsIHRlbXBsYXRlVGFnLmxvY2FsTmFtZSgp
KTsKLSAgICBpZiAoIXByb2Nlc3NUZW1wbGF0ZUVuZFRhZyhlbmRUZW1wbGF0ZSkpCisgICAgaWYg
KCFwcm9jZXNzVGVtcGxhdGVFbmRUYWcoJmVuZFRlbXBsYXRlKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAgICAgcmV0dXJuIHRydWU7CiB9
Ci0KICNlbmRpZgogCiBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NvbGdyb3VwRW5kVGFn
Rm9ySW5Db2x1bW5Hcm91cCgpCkBAIC05NjEsMTQgKzk3OCwxNCBAQCBib29sIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5Hcm91cCgpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICB9CiAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAg
ICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlOworICAgIHNldEluc2Vy
dGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
IC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVs
dGlwYWdlL3Rva2VuaXphdGlvbi5odG1sI2Nsb3NlLXRoZS1jZWxsCiB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6Y2xvc2VUaGVDZWxsKCkKIHsKLSAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IElu
c2VydGlvbk1vZGU6OkluQ2VsbCk7CisgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpJbkNlbGwpOwogICAgIGlmIChtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFi
bGVTY29wZSh0ZFRhZykpIHsKICAgICAgICAgQVNTRVJUKCFtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PmluVGFibGVTY29wZSh0aFRhZykpOwogICAgICAgICBwcm9jZXNzRmFrZUVuZFRhZyh0ZFRhZyk7
CkBAIC05NzYsNDUgKzk5Myw0NSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2xvc2VUaGVDZWxs
KCkKICAgICB9CiAgICAgQVNTRVJUKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3Bl
KHRoVGFnKSk7CiAgICAgcHJvY2Vzc0Zha2VFbmRUYWcodGhUYWcpOwotICAgIEFTU0VSVChtX2lu
c2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwogfQogCi12b2lkIEhUTUxUcmVlQnVp
bGRlcjo6cHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQor
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRN
TFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6
U3RhcnRUYWcpOwotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY2FwdGlvblRhZykgeworICAgIEFT
U0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOworICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IGNhcHRpb25UYWcpIHsKICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LT5wb3BVbnRpbFRhYmxlU2NvcGVNYXJrZXIoKTsKICAgICAgICAgbV90cmVlLmFjdGl2ZUZvcm1h
dHRpbmdFbGVtZW50cygpLT5hcHBlbmRNYXJrZXIoKTsKLSAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7Ci0gICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1v
ZGU6OkluQ2FwdGlvbjsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsK
KyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcp
IHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xncm91cFRhZykgewogICAgICAgICBtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVTY29wZU1hcmtlcigpOwotICAgICAgICBt
X3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKLSAgICAgICAgbV9pbnNlcnRpb25Nb2Rl
ID0gSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cDsKKyAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2Rl
OjpJbkNvbHVtbkdyb3VwKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGNvbFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbFRhZykgewog
ICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbGdyb3VwVGFnKTsKLSAgICAgICAgQVNTRVJU
KG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKKyAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3Vw
KTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KLSAgICBpZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBp
ZiAoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVNjb3BlTWFya2VyKCk7Ci0gICAgICAgIG1f
dHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwotICAgICAgICBtX2luc2VydGlvbk1vZGUg
PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keTsKKyAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KHRva2VuKTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJ
blRhYmxlQm9keSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKGlzVGFibGVDZWxs
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRh
ZykgeworICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAg
ICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0
VGFnKHRib2R5VGFnKTsKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRp
b25Nb2RlOjpJblRhYmxlQm9keSk7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9r
ZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFi
bGVUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0YWJsZVRhZykgewogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgaWYgKCFwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRh
YmxlKCkpIHsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxhdGVD
b250ZW50cygpKTsKQEAgLTEwMjMsMjkgKzEwNDAsMjkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAg
ICAgcHJvY2Vzc1N0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAodG9rZW4ubmFtZSgpID09IHN0eWxlVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcp
IHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBzdHlsZVRhZyB8fCB0b2tlbi0+bmFtZSgpID09
IHNjcmlwdFRhZykgewogICAgICAgICBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaW5wdXRUYWcp
IHsKLSAgICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4uZ2V0QXR0cmlidXRl
SXRlbSh0eXBlQXR0cik7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaW5wdXRUYWcpIHsKKyAg
ICAgICAgQXR0cmlidXRlKiB0eXBlQXR0cmlidXRlID0gdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0o
dHlwZUF0dHIpOwogICAgICAgICBpZiAodHlwZUF0dHJpYnV0ZSAmJiBlcXVhbElnbm9yaW5nQ2Fz
ZSh0eXBlQXR0cmlidXRlLT52YWx1ZSgpLCAiaGlkZGVuIikpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwotICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVs
ZW1lbnQoJnRva2VuKTsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2luZ0hUTUxF
bGVtZW50KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICAv
LyBGYWxsIHRocm91Z2ggdG8gImFueXRoaW5nIGVsc2UiIGNhc2UuCiAgICAgfQotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gZm9ybVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZvcm1U
YWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIGlmIChtX3RyZWUuZm9y
bSgpICYmICFpc1BhcnNpbmdUZW1wbGF0ZUNvbnRlbnRzKCkpCiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRm9ybUVsZW1lbnQoJnRva2VuLCB0cnVlKTsKKyAg
ICAgICAgbV90cmVlLmluc2VydEhUTUxGb3JtRWxlbWVudCh0b2tlbiwgdHJ1ZSk7CiAgICAgICAg
IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAj
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1w
bGF0ZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAg
ICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KQEAgLTEwNTUsNzAgKzEwNzIsNzEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
dGFydFRhZ0ZvckluVGFibGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBwcm9jZXNzU3Rh
cnRUYWdGb3JJbkJvZHkodG9rZW4pOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKLSAgICBzd2l0Y2ggKG1faW5zZXJ0
aW9uTW9kZSkgeworICAgIEFTU0VSVCh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRU
YWcpOworICAgIHN3aXRjaCAoaW5zZXJ0aW9uTW9kZSgpKSB7CiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpJbml0aWFsOgorICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluaXRpYWwpOwogICAgICAgICBkZWZhdWx0Rm9ySW5pdGlhbCgpOwotICAgICAgICBB
U1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOwogICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw6Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgbV90cmVl
Lmluc2VydEhUTUxIdG1sU3RhcnRUYWdCZWZvcmVIVE1MKCZ0b2tlbik7Ci0gICAgICAgICAgICBt
X2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOworICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEh0bWxTdGFydFRhZ0JlZm9yZUhUTUwodG9rZW4pOworICAgICAgICAgICAgc2V0SW5z
ZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgICAgICBkZWZhdWx0Rm9yQmVmb3JlSFRNTCgpOwotICAgICAgICBB
U1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOwogICAg
ICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6Ci0g
ICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBBU1NFUlQoaW5z
ZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOworICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0
VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGhlYWRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5p
bnNlcnRIVE1MSGVhZEVsZW1lbnQoJnRva2VuKTsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9k
ZSA9IEluc2VydGlvbk1vZGU6OkluSGVhZDsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
aGVhZFRhZykgeworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxIZWFkRWxlbWVudCh0b2tl
bik7CisgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluSGVhZCk7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgZGVmYXVsdEZvckJlZm9y
ZUhlYWQoKTsKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2Rl
OjpJbkhlYWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluSGVhZDoKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJbkhlYWQpOwogICAgICAgICBpZiAocHJvY2Vzc1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckluSGVhZCgpOwotICAgICAg
ICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCk7CiAg
ICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkOgot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgQVNTRVJUKGlu
c2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQpOworICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzSHRtbFN0YXJ0
VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAg
ICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJvZHlUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gYm9keVRhZykgewogICAgICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0g
ICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KCZ0b2tlbik7Ci0gICAgICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7CisgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0SFRNTEJvZHlFbGVtZW50KHRva2VuKTsKKyAgICAgICAgICAgIHNldElu
c2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGZyYW1lc2V0VGFnKSB7Ci0g
ICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRva2VuKTsKLSAgICAgICAgICAg
IG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQ7CisgICAgICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IGZyYW1lc2V0VGFnKSB7CisgICAgICAgICAgICBtX3RyZWUuaW5z
ZXJ0SFRNTEVsZW1lbnQodG9rZW4pOworICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpJbkZyYW1lc2V0KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQot
ICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2VUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBiYXNlZm9udFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJn
c291bmRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IG5vZnJhbWVzVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc2NyaXB0
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcKKyAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBiYXNlZm9udFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBiZ3NvdW5kVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpbmtUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBub2ZyYW1lc1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzY3JpcHRUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcKICNpZiBFTkFCTEUoVEVN
UExBVEVfRUxFTUVOVCkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZwogI2VuZGlmCi0g
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gdGl0bGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5oZWFkKCkpOwogICAgICAgICAgICAgbV90
cmVlLm9wZW5FbGVtZW50cygpLT5wdXNoSFRNTEhlYWRFbGVtZW50KG1fdHJlZS5oZWFkU3RhY2tJ
dGVtKCkpOwpAQCAtMTEyNiwyNSArMTE0NCwyNiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnJlbW92ZUhUTUxIZWFkRWxlbWVudChtX3RyZWUuaGVhZCgpKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGhlYWRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaGVhZFRhZykgewogICAg
ICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KICAgICAgICAgZGVmYXVsdEZvckFmdGVySGVhZCgpOwotICAgICAgICBBU1NFUlQobV9pbnNl
cnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIEZBTExUSFJPVUdI
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OgorICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIHByb2Nlc3NTdGFy
dFRhZ0ZvckluQm9keSh0b2tlbik7Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0
aW9uTW9kZTo6SW5UYWJsZToKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpJblRhYmxlKTsKICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5UYWJsZSh0
b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9u
OgotICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi5uYW1lKCkpCi0g
ICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAg
ICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbik7CisgICAgICAgIGlmIChpc0NhcHRpb25D
b2xPckNvbGdyb3VwVGFnKHRva2VuLT5uYW1lKCkpCisgICAgICAgICAgICB8fCBpc1RhYmxlQm9k
eUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlzVGFibGVDZWxsQ29u
dGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0
clRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBpZiAo
IXByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCkpIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CkBAIC0xMTU2LDE2ICsxMTc1LDE3IEBAIHZvaWQg
SFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1l
KCkgPT0gaHRtbFRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9k
eSh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSBjb2xUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xv
c2luZ0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNv
bFRhZykgeworICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQo
dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxFKFRFTVBM
QVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsK
KyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgICAg
IHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQpAQCAtMTE3NywyMCArMTE5NywyMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NTdGFy
dFRhZyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZUJvZHk6Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7Cisg
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKTsgLy8gSG93IGlz
IHRoZXJlIGV2ZXIgYW55dGhpbmcgdG8gcG9wPwotICAgICAgICAgICAgbV90cmVlLmluc2VydEhU
TUxFbGVtZW50KCZ0b2tlbik7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRp
b25Nb2RlOjpJblJvdzsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tl
bik7CisgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluUm93KTsK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKGlzVGFibGVDZWxsQ29udGV4
dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBwcm9jZXNzRmFrZVN0YXJ0VGFnKHRyVGFnKTsKLSAgICAgICAgICAgIEFTU0VS
VChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOworICAgICAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CiAgICAgICAg
ICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChpc0NhcHRpb25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkg
fHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgaWYgKGlz
Q2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkgfHwgaXNUYWJsZUJvZHlDb250
ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyBz
bG93LgogICAgICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29w
ZSh0Ym9keVRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoZWFk
VGFnKSAmJiAhbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodGZvb3RUYWcpKSB7
CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRl
bnRzKCkpOwpAQCAtMTIwNiwzMSArMTIyNywzMyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NTdGFy
dFRhZ0ZvckluVGFibGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkluUm93OgotICAgICAgICBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLm5h
bWUoKSkpIHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJblJvdyk7CisgICAgICAgIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUo
KSkpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxUYWJsZVJv
d1Njb3BlTWFya2VyKCk7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQoJnRv
a2VuKTsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ2Vs
bDsKKyAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCh0b2tlbik7CisgICAgICAg
ICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQ2VsbCk7CiAgICAgICAgICAg
ICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmFwcGVuZE1hcmtlcigpOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0g
dHJUYWcKLSAgICAgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFt
ZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkp
IHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKKyAgICAgICAgICAgIHx8IGlz
Q2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgICAgIHx8IGlz
VGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgaWYgKCFw
cm9jZXNzVHJFbmRUYWdGb3JJblJvdygpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFy
c2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRlbnRzKCkpOwogICAgICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOworICAgICAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CiAgICAgICAgICAgICBwcm9j
ZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAg
ICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluVGFibGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2VsbDoKLSAgICAgICAgaWYgKGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250
ZXh0VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRh
ZwotICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsK
KyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwp
OworICAgICAgICBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQor
ICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpCisgICAg
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8fCBpc1RhYmxl
Qm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGNvdWxkIGJlIG1vcmUgZWZmaWNpZW50LgogICAgICAgICAgICAgaWYgKCFtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0ZFRhZykgJiYgIW1fdHJlZS5vcGVuRWxlbWVudHMo
KS0+aW5UYWJsZVNjb3BlKHRoVGFnKSkgewogICAgICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNp
bmdGcmFnbWVudCgpKTsKQEAgLTEyNDUsMjkgKzEyNjgsMzEgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVh
azsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQm9keToKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkFmdGVyQWZ0ZXJCb2R5OgotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxU
YWcpIHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpB
ZnRlckJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJC
b2R5KTsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRtbFRhZykgewogICAgICAgICAg
ICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KLSAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6
SW5Cb2R5OworICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluQm9keSk7
CiAgICAgICAgIHByb2Nlc3NTdGFydFRhZyh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQ6Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgPT0gaHRtbFRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0KTsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0g
aHRtbFRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBiYXNlZm9udFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJnc291
bmRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gbWV0YVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IG5vZnJhbWVzVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3R5bGVUYWcp
IHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZWZvbnRUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSBsaW5rVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJv
Y2VzcyA9IHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NF
UlRfVU5VU0VEKGRpZFByb2Nlc3MsIGRpZFByb2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZyB8fCB0b2tlbi5u
YW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gaHRt
bFRhZyB8fCB0b2tlbi0+bmFtZSgpID09IG5vc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMTI3NSwy
NCArMTMwMCwyNSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NUb2tlbih0b2tlbik7CiAgICAgICAg
IGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldDoKLSAgICAgICAgaWYg
KHRva2VuLm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldCk7CisgICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJv
ZHkodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKLSAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRI
VE1MRWxlbWVudCgmdG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZXNl
dFRhZykgeworICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09
IGZyYW1lVGFnKSB7Ci0gICAgICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3NpbmdIVE1MRWxl
bWVudCgmdG9rZW4pOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmcmFtZVRhZykgewor
ICAgICAgICAgICAgbV90cmVlLmluc2VydFNlbGZDbG9zaW5nSFRNTEVsZW1lbnQodG9rZW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gbm9mcmFtZXNUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9mcmFtZXNU
YWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NTdGFydFRhZ0ZvckluSGVhZCh0b2tlbik7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkK
LSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgICAgICBpZiAo
dG9rZW4tPm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBs
YXRlU3RhcnRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0x
MzAxLDc4ICsxMzI3LDgzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWco
QXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpBZnRlckZyYW1lc2V0OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRl
ckZyYW1lc2V0OgotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGh0bWxUYWcpIHsKKyAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0
IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQp
OworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgICAgICBw
cm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnKSB7Cisg
ICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnKSB7CiAgICAgICAgICAgICBw
cm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZToKLSAgICAgICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBjYXB0aW9uVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGFibGVU
YWcKLSAgICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0g
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAgIHx8IGlzVGFi
bGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlKTsKKyAgICAgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gY2FwdGlvblRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUo
KSA9PSB0YWJsZVRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAg
ICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZFNl
bGVjdChIVE1MVG9rZW46OkVuZFRhZywgc2VsZWN0VGFnLmxvY2FsTmFtZSgpKTsKLSAgICAgICAg
ICAgIHByb2Nlc3NFbmRUYWcoZW5kU2VsZWN0KTsKKyAgICAgICAgICAgIHByb2Nlc3NFbmRUYWco
JmVuZFNlbGVjdCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2Ug
SW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRt
bFRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluU2VsZWN0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdElu
VGFibGUpOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAg
ICAgICBwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KHRva2VuKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IG9wdGlvblRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRpb25UYWcpIHsKICAgICAgICAgICAg
IGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5v
ZGUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxU
b2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgICAgIHBy
b2Nlc3NFbmRUYWcoZW5kT3B0aW9uKTsKKyAgICAgICAgICAgICAgICBwcm9jZXNzRW5kVGFnKCZl
bmRPcHRpb24pOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90cmVlLmluc2VydEhUTUxF
bGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0SFRNTEVsZW1lbnQodG9r
ZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5u
YW1lKCkgPT0gb3B0Z3JvdXBUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gb3B0
Z3JvdXBUYWcpIHsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0aW9uRWxlbWVudD4oKm1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkpIHsKICAgICAgICAgICAgICAgICBBdG9taWNI
VE1MVG9rZW4gZW5kT3B0aW9uKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRpb25UYWcubG9jYWxOYW1l
KCkpOwotICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoZW5kT3B0aW9uKTsKKyAgICAgICAg
ICAgICAgICBwcm9jZXNzRW5kVGFnKCZlbmRPcHRpb24pOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGlzPEhUTUxPcHRHcm91cEVsZW1lbnQ+KCptX3RyZWUuY3VycmVudFN0YWNrSXRl
bSgpLT5ub2RlKCkpKSB7CiAgICAgICAgICAgICAgICAgQXRvbWljSFRNTFRva2VuIGVuZE9wdGdy
b3VwKEhUTUxUb2tlbjo6RW5kVGFnLCBvcHRncm91cFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgICAg
ICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRPcHRncm91cCk7CisgICAgICAgICAgICAgICAgcHJv
Y2Vzc0VuZFRhZygmZW5kT3B0Z3JvdXApOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV90
cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgICAgICBtX3RyZWUuaW5zZXJ0
SFRNTEVsZW1lbnQodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+
bmFtZSgpID09IHNlbGVjdFRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBBdG9taWNIVE1MVG9rZW4gZW5kU2VsZWN0KEhUTUxUb2tlbjo6RW5kVGFnLCBz
ZWxlY3RUYWcubG9jYWxOYW1lKCkpOwotICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxl
Y3QpOworICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZygmZW5kU2VsZWN0KTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGlucHV0VGFn
IHx8IHRva2VuLm5hbWUoKSA9PSBrZXlnZW5UYWcgfHwgdG9rZW4ubmFtZSgpID09IHRleHRhcmVh
VGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGlucHV0VGFnCisgICAgICAgICAg
ICB8fCB0b2tlbi0+bmFtZSgpID09IGtleWdlblRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5h
bWUoKSA9PSB0ZXh0YXJlYVRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAg
ICAgICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZShzZWxl
Y3RUYWcpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEF0b21p
Y0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRhZy5sb2NhbE5h
bWUoKSk7Ci0gICAgICAgICAgICBwcm9jZXNzRW5kVGFnKGVuZFNlbGVjdCk7CisgICAgICAgICAg
ICBwcm9jZXNzRW5kVGFnKCZlbmRTZWxlY3QpOwogICAgICAgICAgICAgcHJvY2Vzc1N0YXJ0VGFn
KHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAodG9r
ZW4ubmFtZSgpID09IHNjcmlwdFRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBz
Y3JpcHRUYWcpIHsKICAgICAgICAgICAgIGJvb2wgZGlkUHJvY2VzcyA9IHByb2Nlc3NTdGFydFRh
Z0ZvckluSGVhZCh0b2tlbik7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGRpZFByb2Nlc3Ms
IGRpZFByb2Nlc3MpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjaWYgRU5BQkxF
KFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVU
YWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKICAgICAg
ICAgICAgIHByb2Nlc3NUZW1wbGF0ZVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQpAQCAtMTM4NSwzMSArMTQxNiwzMSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpUZXh0OgogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAg
YnJlYWs7Ci0jaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgY2FzZSBJbnNlcnRpb25N
b2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IHRlbXBs
YXRlVGFnKSB7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgICAgIGlmICh0b2tl
bi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVT
dGFydFRhZyh0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAg
ICBpZiAodG9rZW4ubmFtZSgpID09IGxpbmtUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBzY3JpcHRUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzdHlsZVRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1ldGFUYWcpIHsKKyAgICAgICAgaWYgKHRv
a2VuLT5uYW1lKCkgPT0gbGlua1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBz
Y3JpcHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3R5bGVUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWV0YVRhZykgewogICAgICAgICAgICAgcHJvY2Vz
c1N0YXJ0VGFnRm9ySW5IZWFkKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIEluc2VydGlvbk1vZGUgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6
OlRlbXBsYXRlQ29udGVudHM7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVUYWcp
CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGZyYW1lVGFnKQogICAgICAgICAgICAgaW5z
ZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQ7Ci0gICAgICAgIGVsc2UgaWYg
KHRva2VuLm5hbWUoKSA9PSBjb2xUYWcpCisgICAgICAgIGVsc2UgaWYgKHRva2VuLT5uYW1lKCkg
PT0gY29sVGFnKQogICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6Oklu
Q29sdW1uR3JvdXA7Ci0gICAgICAgIGVsc2UgaWYgKGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWco
dG9rZW4ubmFtZSgpKSB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkKKyAg
ICAgICAgZWxzZSBpZiAoaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKSB8
fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpCiAgICAgICAgICAgICBpbnNl
cnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKLSAgICAgICAgZWxzZSBpZiAodG9r
ZW4ubmFtZSgpID09IHRyVGFnKQorICAgICAgICBlbHNlIGlmICh0b2tlbi0+bmFtZSgpID09IHRy
VGFnKQogICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVC
b2R5OwotICAgICAgICBlbHNlIGlmIChpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgp
KSkKKyAgICAgICAgZWxzZSBpZiAoaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkp
KQogICAgICAgICAgICAgaW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluUm93OwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBpbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5C
b2R5OwpAQCAtMTQxNywxNSArMTQ0OCwxNyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1N0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlICE9IEluc2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHMpOwogICAgICAgICBBU1NF
UlQobV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKSA9PSBJbnNlcnRpb25Nb2RlOjpUZW1w
bGF0ZUNvbnRlbnRzKTsKICAgICAgICAgbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKSA9
IGluc2VydGlvbk1vZGU7Ci0gICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IGluc2VydGlvbk1vZGU7
CisgICAgICAgIHNldEluc2VydGlvbk1vZGUoaW5zZXJ0aW9uTW9kZSk7CiAKICAgICAgICAgcHJv
Y2Vzc1N0YXJ0VGFnKHRva2VuKTsKLSAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgorICAgICAgICBicmVhazsKICAgICB9CiB9CiAKLXZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzSHRtbFN0YXJ0VGFnRm9ySW5Cb2R5KEF0b21pY0hU
TUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFydFRh
Z0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewogICAgIHBhcnNlRXJyb3IodG9r
ZW4pOwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQpAQCAtMTQzNCw0MyArMTQ2Nyw0NSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keShBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmCi0gICAg
bV90cmVlLmluc2VydEhUTUxIdG1sU3RhcnRUYWdJbkJvZHkoJnRva2VuKTsKKyAgICBtX3RyZWUu
aW5zZXJ0SFRNTEh0bWxTdGFydFRhZ0luQm9keSh0b2tlbik7CiB9CiAKLWJvb2wgSFRNTFRyZWVC
dWlsZGVyOjpwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2Vu
KQorYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NCb2R5RW5kVGFnRm9ySW5Cb2R5KEF0b21p
Y0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9r
ZW46OkVuZFRhZyk7Ci0gICAgQVNTRVJUKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKTsKKyAgICBB
U1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgQVNTRVJUKHRv
a2VuLT5uYW1lKCkgPT0gYm9keVRhZyk7CiAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCkt
PmluU2NvcGUoYm9keVRhZy5sb2NhbE5hbWUoKSkpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgbm90SW1wbGVtZW50ZWQoKTsg
Ly8gRW1pdCBhIG1vcmUgc3BlY2lmaWMgcGFyc2UgZXJyb3IgYmFzZWQgb24gc3RhY2sgY29udGVu
dHMuCi0gICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OworICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5KTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NBbnlPdGhlckVuZFRhZ0Zv
ckluQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewot
ICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIGZvciAo
YXV0byogcmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50cygpLT50b3BSZWNvcmQoKTsgOyByZWNv
cmQgPSByZWNvcmQtPm5leHQoKSkgewotICAgICAgICBIVE1MU3RhY2tJdGVtJiBpdGVtID0gKnJl
Y29yZC0+c3RhY2tJdGVtKCk7Ci0gICAgICAgIGlmIChpdGVtLm1hdGNoZXNIVE1MVGFnKHRva2Vu
Lm5hbWUoKSkpIHsKLSAgICAgICAgICAgIG1fdHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzV2l0
aEV4Y2x1c2lvbih0b2tlbi5uYW1lKCkpOwotICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVu
dFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi5uYW1lKCkpKQorICAgIEFTU0VSVCh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBIVE1MRWxlbWVudFN0YWNr
OjpFbGVtZW50UmVjb3JkKiByZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnRvcFJlY29y
ZCgpOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBpdGVt
ID0gcmVjb3JkLT5zdGFja0l0ZW0oKTsKKyAgICAgICAgaWYgKGl0ZW0tPm1hdGNoZXNIVE1MVGFn
KHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5k
VGFnc1dpdGhFeGNsdXNpb24odG9rZW4tPm5hbWUoKSk7CisgICAgICAgICAgICBpZiAoIW1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQogICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgbV90cmVlLm9wZW5F
bGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZChpdGVtLmVsZW1lbnQoKSk7CisgICAgICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKGl0ZW0tPmVsZW1lbnQoKSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0uaXNTcGVjaWFs
Tm9kZSgpKSB7CisgICAgICAgIGlmIChpdGVtLT5pc1NwZWNpYWxOb2RlKCkpIHsKICAgICAgICAg
ICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Cisg
ICAgICAgIHJlY29yZCA9IHJlY29yZC0+bmV4dCgpOwogICAgIH0KIH0KIAogLy8gaHR0cDovL3d3
dy53aGF0d2cub3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5p
emF0aW9uLmh0bWwjcGFyc2luZy1tYWluLWluYm9keQotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNh
bGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQog
ewogICAgIC8vIFRoZSBhZG9wdGlvbiBhZ2VuY3kgYWxnb3JpdGhtIGlzIE5eMi4gV2UgbGltaXQg
dGhlIG51bWJlciBvZiBpdGVyYXRpb25zCiAgICAgLy8gdG8gc3RvcCBmcm9tIGhhbmdpbmcgdGhl
IHdob2xlIGJyb3dzZXIuIFRoaXMgbGltaXQgaXMgc3BlY2lmaWVkIGluIHRoZQpAQCAtMTQ4Miw3
ICsxNTE3LDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmNhbGxUaGVBZG9wdGlvbkFnZW5jeShB
dG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgIC8vIDEsIDIsIDMgYW5kIDE2IGFyZSBjb3ZlcmVk
IGJ5IHRoZSBmb3IoKSBsb29wLgogICAgIGZvciAoaW50IGkgPSAwOyBpIDwgb3V0ZXJJdGVyYXRp
b25MaW1pdDsgKytpKSB7CiAgICAgICAgIC8vIDQuCi0gICAgICAgIEVsZW1lbnQqIGZvcm1hdHRp
bmdFbGVtZW50ID0gbV90cmVlLmFjdGl2ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5jbG9zZXN0RWxl
bWVudEluU2NvcGVXaXRoTmFtZSh0b2tlbi5uYW1lKCkpOworICAgICAgICBFbGVtZW50KiBmb3Jt
YXR0aW5nRWxlbWVudCA9IG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xvc2Vz
dEVsZW1lbnRJblNjb3BlV2l0aE5hbWUodG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIC8vIDQuYQog
ICAgICAgICBpZiAoIWZvcm1hdHRpbmdFbGVtZW50KQogICAgICAgICAgICAgcmV0dXJuIHByb2Nl
c3NBbnlPdGhlckVuZFRhZ0ZvckluQm9keSh0b2tlbik7CkBAIC0xNDkzLDcgKzE1MjgsNyBAQCB2
b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9uQWdlbmN5KEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLy8gNC5i
Ci0gICAgICAgIGF1dG8qIGZvcm1hdHRpbmdFbGVtZW50UmVjb3JkID0gbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5maW5kKGZvcm1hdHRpbmdFbGVtZW50KTsKKyAgICAgICAgSFRNTEVsZW1lbnRTdGFj
azo6RWxlbWVudFJlY29yZCogZm9ybWF0dGluZ0VsZW1lbnRSZWNvcmQgPSBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPmZpbmQoZm9ybWF0dGluZ0VsZW1lbnQpOwogICAgICAgICBpZiAoIWZvcm1hdHRp
bmdFbGVtZW50UmVjb3JkKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIG1fdHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+cmVtb3ZlKGZvcm1hdHRp
bmdFbGVtZW50KTsKQEAgLTE1MDMsNyArMTUzOCw3IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpj
YWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgaWYg
KGZvcm1hdHRpbmdFbGVtZW50ICE9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpKQogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIC8vIDUuCi0gICAgICAgIGF1dG8qIGZ1cnRo
ZXN0QmxvY2sgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmZ1cnRoZXN0QmxvY2tGb3JGb3JtYXR0
aW5nRWxlbWVudChmb3JtYXR0aW5nRWxlbWVudCk7CisgICAgICAgIEhUTUxFbGVtZW50U3RhY2s6
OkVsZW1lbnRSZWNvcmQqIGZ1cnRoZXN0QmxvY2sgPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmZ1
cnRoZXN0QmxvY2tGb3JGb3JtYXR0aW5nRWxlbWVudChmb3JtYXR0aW5nRWxlbWVudCk7CiAgICAg
ICAgIC8vIDYuCiAgICAgICAgIGlmICghZnVydGhlc3RCbG9jaykgewogICAgICAgICAgICAgbV90
cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZChmb3JtYXR0aW5nRWxlbWVudCk7CkBA
IC0xNTE2LDkgKzE1NTEsOSBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6Y2FsbFRoZUFkb3B0aW9u
QWdlbmN5KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIC8vIDguCiAgICAgICAgIEhU
TUxGb3JtYXR0aW5nRWxlbWVudExpc3Q6OkJvb2ttYXJrIGJvb2ttYXJrID0gbV90cmVlLmFjdGl2
ZUZvcm1hdHRpbmdFbGVtZW50cygpLT5ib29rbWFya0Zvcihmb3JtYXR0aW5nRWxlbWVudCk7CiAg
ICAgICAgIC8vIDkuCi0gICAgICAgIGF1dG8qIG5vZGUgPSBmdXJ0aGVzdEJsb2NrOwotICAgICAg
ICBhdXRvKiBuZXh0Tm9kZSA9IG5vZGUtPm5leHQoKTsKLSAgICAgICAgYXV0byogbGFzdE5vZGUg
PSBmdXJ0aGVzdEJsb2NrOworICAgICAgICBIVE1MRWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3Jk
KiBub2RlID0gZnVydGhlc3RCbG9jazsKKyAgICAgICAgSFRNTEVsZW1lbnRTdGFjazo6RWxlbWVu
dFJlY29yZCogbmV4dE5vZGUgPSBub2RlLT5uZXh0KCk7CisgICAgICAgIEhUTUxFbGVtZW50U3Rh
Y2s6OkVsZW1lbnRSZWNvcmQqIGxhc3ROb2RlID0gZnVydGhlc3RCbG9jazsKICAgICAgICAgLy8g
OS4xLCA5LjIsIDkuMyBhbmQgOS4xMSBhcmUgY292ZXJlZCBieSB0aGUgZm9yKCkgbG9vcC4KICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbm5lckl0ZXJhdGlvbkxpbWl0OyArK2kpIHsKICAg
ICAgICAgICAgIC8vIDkuNApAQCAtMTU2OSw4ICsxNjA0LDkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnJlc2V0SW5zZXJ0aW9uTW9kZUFwcHJvcHJpYXRlbHkoKQogewogICAgIC8vIGh0dHA6Ly93
d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNp
bmcuaHRtbCNyZXNldC10aGUtaW5zZXJ0aW9uLW1vZGUtYXBwcm9wcmlhdGVseQogICAgIGJvb2wg
bGFzdCA9IGZhbHNlOwotICAgIGZvciAoYXV0byogcmVjb3JkID0gbV90cmVlLm9wZW5FbGVtZW50
cygpLT50b3BSZWNvcmQoKTsgOyByZWNvcmQgPSByZWNvcmQtPm5leHQoKSkgewotICAgICAgICBI
VE1MU3RhY2tJdGVtKiBpdGVtID0gcmVjb3JkLT5zdGFja0l0ZW0oKS5nZXQoKTsKKyAgICBIVE1M
RWxlbWVudFN0YWNrOjpFbGVtZW50UmVjb3JkKiBub2RlUmVjb3JkID0gbV90cmVlLm9wZW5FbGVt
ZW50cygpLT50b3BSZWNvcmQoKTsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBSZWZQdHI8SFRN
TFN0YWNrSXRlbT4gaXRlbSA9IG5vZGVSZWNvcmQtPnN0YWNrSXRlbSgpOwogICAgICAgICBpZiAo
aXRlbS0+bm9kZSgpID09IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cm9vdE5vZGUoKSkgewogICAg
ICAgICAgICAgbGFzdCA9IHRydWU7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCkBAIC0x
NTgwLDEwNCArMTYxNiw3OCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cmVzZXRJbnNlcnRpb25N
b2RlQXBwcm9wcmlhdGVseSgpCiAgICAgICAgICAgICBib29sIHNob3VsZENyZWF0ZUl0ZW0gPSB0
cnVlOwogI2VuZGlmCiAgICAgICAgICAgICBpZiAoc2hvdWxkQ3JlYXRlSXRlbSkKLSAgICAgICAg
ICAgICAgICBpdGVtID0gJm1fZnJhZ21lbnRDb250ZXh0LmNvbnRleHRFbGVtZW50U3RhY2tJdGVt
KCk7CisgICAgICAgICAgICAgICAgaXRlbSA9IG1fZnJhZ21lbnRDb250ZXh0LmNvbnRleHRFbGVt
ZW50U3RhY2tJdGVtKCk7CiAgICAgICAgIH0KLQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5U
KQotICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKLSAgICAgICAg
ICAgIG1faW5zZXJ0aW9uTW9kZSA9IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5sYXN0KCk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05h
bWUodGVtcGxhdGVUYWcpKQorICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUobV90
ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmxhc3QoKSk7CiAjZW5kaWYKICAgICAgICAgaWYgKGl0ZW0t
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkgewogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQog
ICAgICAgICAgICAgaWYgKCFsYXN0KSB7CiAgICAgICAgICAgICAgICAgd2hpbGUgKGl0ZW0tPm5v
ZGUoKSAhPSBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnJvb3ROb2RlKCkgJiYgIWl0ZW0tPmhhc1Rh
Z05hbWUodGVtcGxhdGVUYWcpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHJlY29yZCA9IHJlY29y
ZC0+bmV4dCgpOwotICAgICAgICAgICAgICAgICAgICBpdGVtID0gcmVjb3JkLT5zdGFja0l0ZW0o
KS5nZXQoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpp
dGVtLT5ub2RlKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvbk1vZGUg
PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbm9k
ZVJlY29yZCA9IG5vZGVSZWNvcmQtPm5leHQoKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlbSA9
IG5vZGVSZWNvcmQtPnN0YWNrSXRlbSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoaXM8SFRN
TFRhYmxlRWxlbWVudD4oKml0ZW0tPm5vZGUoKSkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFibGUpOwog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgbV9p
bnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q7Ci0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodGRUYWcpIHx8IGl0
ZW0tPmhhc1RhZ05hbWUodGhUYWcpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpJbkNlbGw7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAg
ICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUodHJUYWcpKSB7Ci0gICAgICAgICAgICBtX2luc2Vy
dGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJblJvdzsKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0Ym9keVRhZykgfHwgaXRlbS0+
aGFzVGFnTmFtZSh0aGVhZFRhZykgfHwgaXRlbS0+aGFzVGFnTmFtZSh0Zm9vdFRhZykpIHsKLSAg
ICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5Owot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGlmIChpdGVtLT5oYXNUYWdO
YW1lKGNhcHRpb25UYWcpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRp
b25Nb2RlOjpJbkNhcHRpb247Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluU2VsZWN0KTsK
KyAgICAgICAgfQorICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0ZFRhZykgfHwgaXRlbS0+
aGFzVGFnTmFtZSh0aFRhZykpCisgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJ
bnNlcnRpb25Nb2RlOjpJbkNlbGwpOworICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZSh0clRh
ZykpCisgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJ
blJvdyk7CisgICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKHRib2R5VGFnKSB8fCBpdGVtLT5o
YXNUYWdOYW1lKHRoZWFkVGFnKSB8fCBpdGVtLT5oYXNUYWdOYW1lKHRmb290VGFnKSkKKyAgICAg
ICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5
KTsKKyAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoY2FwdGlvblRhZykpCisgICAgICAgICAg
ICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24pOwogICAg
ICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShjb2xncm91cFRhZykpIHsKLSAgICAgICAgICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQ29sdW1uR3JvdXA7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCpp
dGVtLT5ub2RlKCkpKSB7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25N
b2RlOjpJblRhYmxlOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIHNl
dEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Db2x1bW5Hcm91cCk7CiAgICAgICAgIH0K
KyAgICAgICAgaWYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+KCppdGVtLT5ub2RlKCkpKQorICAgICAg
ICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSk7CiAg
ICAgICAgIGlmIChpdGVtLT5oYXNUYWdOYW1lKGhlYWRUYWcpKSB7CiAjaWYgRU5BQkxFKFRFTVBM
QVRFX0VMRU1FTlQpCi0gICAgICAgICAgICBpZiAoIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50
KCkgfHwgJm1fZnJhZ21lbnRDb250ZXh0LmNvbnRleHRFbGVtZW50KCkgIT0gaXRlbS0+bm9kZSgp
KSB7Ci0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5I
ZWFkOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmICghbV9mcmFnbWVudENvbnRleHQuZnJhZ21lbnQoKSB8fCBtX2ZyYWdtZW50Q29udGV4dC5j
b250ZXh0RWxlbWVudCgpICE9IGl0ZW0tPm5vZGUoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
c2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkhlYWQpOwogI2VuZGlmCi0gICAgICAg
ICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7Ci0gICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGl0ZW0tPmhhc1RhZ05hbWUoYm9keVRh
ZykpIHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluQm9k
eTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVybiBzZXRJbnNlcnRpb25N
b2RlKEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIH0KKyAgICAgICAgaWYgKGl0ZW0t
Pmhhc1RhZ05hbWUoYm9keVRhZykpCisgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9k
ZShJbnNlcnRpb25Nb2RlOjpJbkJvZHkpOwogICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShm
cmFtZXNldFRhZykpIHsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1v
ZGU6OkluRnJhbWVzZXQ7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4g
c2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0KTsKICAgICAgICAgfQog
ICAgICAgICBpZiAoaXRlbS0+aGFzVGFnTmFtZShodG1sVGFnKSkgewotICAgICAgICAgICAgaWYg
KG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwot
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1fdHJlZS5oZWFkU3RhY2tJdGVtKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QWZ0
ZXJIZWFkKTsKICAgICAgICAgICAgIEFTU0VSVChpc1BhcnNpbmdGcmFnbWVudCgpKTsKLSAgICAg
ICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ7Ci0gICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gc2V0SW5zZXJ0aW9uTW9kZShJbnNl
cnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgfQogICAgICAgICBpZiAobGFzdCkgewog
ICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkpOwotICAgICAgICAgICAgbV9p
bnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OwotICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgcmV0dXJuIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5C
b2R5KTsKICAgICAgICAgfQorICAgICAgICBub2RlUmVjb3JkID0gbm9kZVJlY29yZC0+bmV4dCgp
OwogICAgIH0KIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRh
YmxlQm9keShBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnBy
b2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAg
IEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIGlmIChpc1Rh
YmxlQm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgewotICAgICAgICBpZiAoIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICBBU1NFUlQo
dG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgaWYgKGlzVGFibGVCb2R5
Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBt
X3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVudGlsVGFibGVCb2R5U2NvcGVNYXJrZXIoKTsKICAg
ICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICAgICAgbV9pbnNlcnRpb25N
b2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJ
bnNlcnRpb25Nb2RlOjpJblRhYmxlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAo
dG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFi
bGVUYWcpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgc2xvdy4KICAgICAgICAgaWYgKCFt
X3RyZWUub3BlbkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0Ym9keVRhZykgJiYgIW1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRoZWFkVGFnKSAmJiAhbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblRhYmxlU2NvcGUodGZvb3RUYWcpKSB7CiAgICAgICAgICAgICBBU1NFUlQoaXNQ
YXJzaW5nRnJhZ21lbnRPclRlbXBsYXRlQ29udGVudHMoKSk7CkBAIC0xNjkwLDgzICsxNzAwLDgz
IEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5UYWJsZUJvZHkoQXRv
bWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCi0gICAg
ICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZwotICAgICAgICB8fCBpc1RhYmxlQ2VsbENvbnRleHRU
YWcodG9rZW4ubmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9y
Q29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBo
dG1sVGFnCisgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3Io
dG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHByb2Nlc3NFbmRUYWdGb3JJblRh
YmxlKHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJ
blJvdyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nl
c3NFbmRUYWdGb3JJblJvdyhBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOwotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gdHJUYWcpIHsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRh
Zyk7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdHJUYWcpIHsKICAgICAgICAgcHJvY2Vzc1Ry
RW5kVGFnRm9ySW5Sb3coKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRhYmxlVGFnKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcp
IHsKICAgICAgICAgaWYgKCFwcm9jZXNzVHJFbmRUYWdGb3JJblJvdygpKSB7CiAgICAgICAgICAg
ICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnRPclRlbXBsYXRlQ29udGVudHMoKSk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9
PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25N
b2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgICAgICBwcm9jZXNzRW5k
VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNUYWJsZUJvZHlD
b250ZXh0VGFnKHRva2VuLm5hbWUoKSkpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluVGFibGVTY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKGlzVGFibGVCb2R5
Q29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKSkgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+aW5UYWJsZVNjb3BlKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogICAgICAgICBw
cm9jZXNzRmFrZUVuZFRhZyh0clRhZyk7Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKICAgICAgICAgcHJvY2Vzc0Vu
ZFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUo
KSA9PSBib2R5VGFnCi0gICAgICAgIHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4u
bmFtZSgpKQotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZwotICAgICAgICB8fCBp
c1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGJvZHlUYWcKKyAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tl
bi0+bmFtZSgpKQorICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcKKyAgICAgICAg
fHwgaXNUYWJsZUNlbGxDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIHByb2Nlc3NFbmRUYWdG
b3JJblRhYmxlKHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzRW5kVGFnRm9ySW5DZWxsKEF0b21pY0hUTUxUb2tlbiogdG9rZW4pCiB7Ci0gICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0gICAgaWYgKGlzVGFi
bGVDZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9w
ZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIEFTU0VSVCh0
b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kVGFnKTsKKyAgICBpZiAoaXNUYWJsZUNlbGxD
b250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIG1f
dHJlZS5nZW5lcmF0ZUltcGxpZWRFbmRUYWdzKCk7Ci0gICAgICAgIGlmICghbV90cmVlLmN1cnJl
bnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgaWYg
KCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0b2tlbi0+bmFtZSgp
KSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwotICAgICAgICBtX3RyZWUub3BlbkVs
ZW1lbnRzKCktPnBvcFVudGlsUG9wcGVkKHRva2VuLm5hbWUoKSk7CisgICAgICAgIG1fdHJlZS5v
cGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5hbWUoKSk7CiAgICAgICAgIG1f
dHJlZS5hY3RpdmVGb3JtYXR0aW5nRWxlbWVudHMoKS0+Y2xlYXJUb0xhc3RNYXJrZXIoKTsKLSAg
ICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3c7CisgICAgICAgIHNl
dEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwogICAgICAgICByZXR1cm47CiAg
ICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYm9keVRhZwotICAgICAgICB8fCBpc0NhcHRp
b25Db2xPckNvbGdyb3VwVGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgp
ID09IGh0bWxUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAg
IHx8IGlzQ2FwdGlvbkNvbE9yQ29sZ3JvdXBUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAgfHwg
dG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CiAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwog
ICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHRyVGFnCi0gICAgICAgIHx8IGlzVGFibGVCb2R5
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVt
ZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IHRhYmxlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHJUYWcKKyAgICAg
ICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblRhYmxlU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsK
ICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgICAgIEFTU0VSVChpc1RhYmxl
Qm9keUNvbnRleHRUYWcodG9rZW4ubmFtZSgpKSB8fCBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
VGFibGVTY29wZSh0ZW1wbGF0ZVRhZykgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CisgICAgICAg
ICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpIHx8IG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+aW5UYWJsZVNjb3BlKHRlbXBsYXRlVGFnKSB8fCBpc1BhcnNpbmdG
cmFnbWVudCgpKTsKICNlbHNlCi0gICAgICAgICAgICBBU1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0
VGFnKHRva2VuLm5hbWUoKSkgfHwgaXNQYXJzaW5nRnJhZ21lbnQoKSk7CisgICAgICAgICAgICBB
U1NFUlQoaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1lKCkpIHx8IGlzUGFyc2luZ0Zy
YWdtZW50KCkpOwogI2VuZGlmCiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAg
ICAgICAgIHJldHVybjsKQEAgLTE3NzgsNTUgKzE3ODgsNTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NFbmRUYWdGb3JJbkNlbGwoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICBw
cm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NFbmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiogdG9r
ZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7Ci0g
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBib2R5VGFnKSB7CisgICAgQVNTRVJUKHRva2VuLT50eXBl
KCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlU
YWcpIHsKICAgICAgICAgcHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkodG9rZW4pOwogICAgICAg
ICByZXR1cm47CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAg
IGlmICh0b2tlbi0+bmFtZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgQXRvbWljSFRNTFRva2Vu
IGVuZEJvZHkoSFRNTFRva2VuOjpFbmRUYWcsIGJvZHlUYWcubG9jYWxOYW1lKCkpOwotICAgICAg
ICBpZiAocHJvY2Vzc0JvZHlFbmRUYWdGb3JJbkJvZHkoZW5kQm9keSkpCisgICAgICAgIGlmIChw
cm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keSgmZW5kQm9keSkpCiAgICAgICAgICAgICBwcm9jZXNz
RW5kVGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGFkZHJlc3NUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFydGljbGVUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGFzaWRlVGFnCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBibG9ja3F1b3RlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBidXR0b25U
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGNlbnRlclRhZwotICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gZGV0YWlsc1RhZwotICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGlyVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkaXZUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFt
ZSgpID09IGRsVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmaWVsZHNldFRhZwotICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZmlnY2FwdGlvblRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gZmlndXJlVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBmb290ZXJUYWcK
LSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGhlYWRlclRhZwotICAgICAgICB8fCB0b2tlbi5u
YW1lKCkgPT0gaGdyb3VwVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaXN0aW5nVGFn
Ci0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBtYWluVGFnCi0gICAgICAgIHx8IHRva2VuLm5h
bWUoKSA9PSBtZW51VGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBuYXZUYWcKLSAgICAg
ICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBw
cmVUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHNlY3Rpb25UYWcKLSAgICAgICAgfHwg
dG9rZW4ubmFtZSgpID09IHN1bW1hcnlUYWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVs
VGFnKSB7Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pblNjb3BlKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBhZGRyZXNzVGFnCisgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gYXJ0aWNsZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGFzaWRlVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gYmxvY2txdW90ZVRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJ1dHRvblRhZworICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGNlbnRlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRldGFpbHNU
YWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkaXJUYWcKKyAgICAgICAgfHwgdG9rZW4t
Pm5hbWUoKSA9PSBkaXZUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkbFRhZworICAg
ICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZWxkc2V0VGFnCisgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gZmlnY2FwdGlvblRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZpZ3Vy
ZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGZvb3RlclRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGhlYWRlclRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhn
cm91cFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGxpc3RpbmdUYWcKKyAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSBtYWluVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
bWVudVRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG5hdlRhZworICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IG9sVGFnCisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gcHJlVGFn
CisgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc2VjdGlvblRhZworICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IHN1bW1hcnlUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRh
ZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+
bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3Mo
KTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRh
Zyh0b2tlbi5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9r
ZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBl
ZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGZvcm1UYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBmb3JtVGFnKSB7
CiAgICAgICAgIGlmICghaXNQYXJzaW5nVGVtcGxhdGVDb250ZW50cygpKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8RWxlbWVudD4gbm9kZSA9IG1fdHJlZS50YWtlRm9ybSgpOwogICAgICAgICAgICAg
aWYgKCFub2RlIHx8ICFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUobm9kZS5nZXQoKSkp
IHsKQEAgLTE4MzgsODYgKzE4NDgsODkgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NF
bmRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cmVt
b3ZlKG5vZGUuZ2V0KCkpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFtX3Ry
ZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4ubmFtZSgpKSkgeworICAgICAgICAgICAg
aWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2NvcGUodG9rZW4tPm5hbWUoKSkpIHsKICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFn
cygpOwogICAgICAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudE5vZGUoKS0+aGFzVGFnTmFtZShm
b3JtVGFnKSkKICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgICAg
IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAg
ICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4tPm5h
bWUoKSk7CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBwVGFnKSB7
Ci0gICAgICAgIGlmICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2Vu
Lm5hbWUoKSkpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBwVGFnKSB7CisgICAgICAgIGlm
ICghbV90cmVlLm9wZW5FbGVtZW50cygpLT5pbkJ1dHRvblNjb3BlKHRva2VuLT5uYW1lKCkpKSB7
CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHByb2Nlc3NGYWtl
U3RhcnRUYWcocFRhZyk7Ci0gICAgICAgICAgICBBU1NFUlQobV90cmVlLm9wZW5FbGVtZW50cygp
LT5pblNjb3BlKHRva2VuLm5hbWUoKSkpOworICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5vcGVu
RWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+bmFtZSgpKSk7CiAgICAgICAgICAgICBwcm9jZXNz
RW5kVGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBt
X3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhFeGNsdXNpb24odG9rZW4ubmFtZSgpKTsK
LSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVzSFRNTFRhZyh0
b2tlbi5uYW1lKCkpKQorICAgICAgICBtX3RyZWUuZ2VuZXJhdGVJbXBsaWVkRW5kVGFnc1dpdGhF
eGNsdXNpb24odG9rZW4tPm5hbWUoKSk7CisgICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRTdGFj
a0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4tPm5hbWUoKSkpCiAgICAgICAgICAgICBwYXJz
ZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBv
cHBlZCh0b2tlbi5uYW1lKCkpOworICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcFVu
dGlsUG9wcGVkKHRva2VuLT5uYW1lKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gbGlUYWcpIHsKLSAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1l
bnRzKCktPmluTGlzdEl0ZW1TY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gbGlUYWcpIHsKKyAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmlu
TGlzdEl0ZW1TY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmdl
bmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7Ci0gICAgICAg
IGlmICghbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFt
ZSgpKSkKKyAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9u
KHRva2VuLT5uYW1lKCkpOworICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0
b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9r
ZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBl
ZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4u
bmFtZSgpID09IGRkVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBkdFRhZykgewotICAgICAgICBpZiAo
IW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi5uYW1lKCkpKSB7CisgICAgaWYg
KHRva2VuLT5uYW1lKCkgPT0gZGRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBkdFRh
ZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0b2tlbi0+
bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NX
aXRoRXhjbHVzaW9uKHRva2VuLm5hbWUoKSk7Ci0gICAgICAgIGlmICghbV90cmVlLmN1cnJlbnRT
dGFja0l0ZW0oKS0+bWF0Y2hlc0hUTUxUYWcodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgbV90cmVl
LmdlbmVyYXRlSW1wbGllZEVuZFRhZ3NXaXRoRXhjbHVzaW9uKHRva2VuLT5uYW1lKCkpOworICAg
ICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2Vu
LT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJl
ZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAg
bV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5u
YW1lKCkpKSB7CisgICAgaWYgKGlzTnVtYmVyZWRIZWFkZXJUYWcodG9rZW4tPm5hbWUoKSkpIHsK
ICAgICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc051bWJlcmVkSGVhZGVyRWxl
bWVudEluU2NvcGUoKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRlSW1wbGllZEVu
ZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5tYXRjaGVz
SFRNTFRhZyh0b2tlbi5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgcGFyc2VF
cnJvcih0b2tlbik7CiAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxOdW1i
ZXJlZEhlYWRlckVsZW1lbnRQb3BwZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBp
ZiAoaXNGb3JtYXR0aW5nVGFnKHRva2VuLm5hbWUoKSkpIHsKKyAgICBpZiAoaXNGb3JtYXR0aW5n
VGFnKHRva2VuLT5uYW1lKCkpKSB7CiAgICAgICAgIGNhbGxUaGVBZG9wdGlvbkFnZW5jeSh0b2tl
bik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSBhcHBs
ZXRUYWcgfHwgdG9rZW4ubmFtZSgpID09IG1hcnF1ZWVUYWcgfHwgdG9rZW4ubmFtZSgpID09IG9i
amVjdFRhZykgewotICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TY29wZSh0
b2tlbi5uYW1lKCkpKSB7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYXBwbGV0VGFnCisgICAg
ICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gbWFycXVlZVRhZworICAgICAgICB8fCB0b2tlbi0+bmFt
ZSgpID09IG9iamVjdFRhZykgeworICAgICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
aW5TY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVlLmdlbmVyYXRl
SW1wbGllZEVuZFRhZ3MoKTsKLSAgICAgICAgaWYgKCFtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgp
LT5tYXRjaGVzSFRNTFRhZyh0b2tlbi5uYW1lKCkpKQorICAgICAgICBpZiAoIW1fdHJlZS5jdXJy
ZW50U3RhY2tJdGVtKCktPm1hdGNoZXNIVE1MVGFnKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAg
ICAgcGFyc2VFcnJvcih0b2tlbik7Ci0gICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9w
VW50aWxQb3BwZWQodG9rZW4ubmFtZSgpKTsKKyAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygp
LT5wb3BVbnRpbFBvcHBlZCh0b2tlbi0+bmFtZSgpKTsKICAgICAgICAgbV90cmVlLmFjdGl2ZUZv
cm1hdHRpbmdFbGVtZW50cygpLT5jbGVhclRvTGFzdE1hcmtlcigpOwogICAgICAgICByZXR1cm47
CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYnJUYWcpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSBiclRhZykgewogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAg
cHJvY2Vzc0Zha2VTdGFydFRhZyhiclRhZyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAjaWYg
RU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgaWYgKHRva2VuLm5hbWUoKSA9PSB0ZW1wbGF0
ZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAgICAg
IHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBA
IC0xOTM2LDcgKzE5NDksNyBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0NhcHRpb25F
bmRUYWdGb3JJbkNhcHRpb24oKQogICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvciBpZiAoIW1fdHJl
ZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoY2FwdGlvblRhZykpCiAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3BVbnRpbFBvcHBlZChjYXB0aW9uVGFnLmxvY2FsTmFtZSgpKTsK
ICAgICBtX3RyZWUuYWN0aXZlRm9ybWF0dGluZ0VsZW1lbnRzKCktPmNsZWFyVG9MYXN0TWFya2Vy
KCk7Ci0gICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZTsKKyAgICBz
ZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkluVGFibGUpOwogICAgIHJldHVybiB0cnVl
OwogfQogCkBAIC0xOTUwLDcgKzE5NjMsNyBAQCBib29sIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vz
c1RyRW5kVGFnRm9ySW5Sb3coKQogICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxU
YWJsZVJvd1Njb3BlTWFya2VyKCk7CiAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCktPmhhc1RhZ05hbWUodHJUYWcpKTsKICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgp
OwotICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OworICAg
IHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkpOwogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0xOTY2LDE5ICsxOTc5LDE5IEBAIGJvb2wgSFRNTFRyZWVCdWlsZGVy
Ojpwcm9jZXNzVGFibGVFbmRUYWdGb3JJblRhYmxlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAot
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxU
b2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFi
bGUoQXRvbWljSFRNTFRva2VuKiB0b2tlbikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlbjo6RW5kVGFnKTsKLSAgICBpZiAodG9rZW4ubmFtZSgpID09IHRhYmxlVGFnKSB7
CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRUYWcpOworICAgIGlm
ICh0b2tlbi0+bmFtZSgpID09IHRhYmxlVGFnKSB7CiAgICAgICAgIHByb2Nlc3NUYWJsZUVuZFRh
Z0ZvckluVGFibGUoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFt
ZSgpID09IGJvZHlUYWcKLSAgICAgICAgfHwgaXNDYXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tl
bi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgIHx8
IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IGlzVGFibGVD
ZWxsQ29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0
clRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKKyAgICAgICAgfHwgaXND
YXB0aW9uQ29sT3JDb2xncm91cFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICB8fCB0b2tlbi0+
bmFtZSgpID09IGh0bWxUYWcKKyAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2Vu
LT5uYW1lKCkpCisgICAgICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgp
KQorICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnKSB7CiAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTk4OCw3NSArMjAwMSw3NSBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZ0ZvckluVGFibGUoQXRvbWljSFRN
TFRva2VuJiB0b2tlbikKICAgICBwcm9jZXNzRW5kVGFnRm9ySW5Cb2R5KHRva2VuKTsKIH0KIAot
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tl
bikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7
Ci0gICAgc3dpdGNoIChtX2luc2VydGlvbk1vZGUpIHsKKyAgICBBU1NFUlQodG9rZW4tPnR5cGUo
KSA9PSBIVE1MVG9rZW46OkVuZFRhZyk7CisgICAgc3dpdGNoIChpbnNlcnRpb25Nb2RlKCkpIHsK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluaXRpYWw6Ci0gICAgICAgIEFTU0VSVChtX2luc2Vy
dGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCk7CisgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbCk7CiAgICAgICAgIGRlZmF1bHRG
b3JJbml0aWFsKCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6QmVmb3JlSFRNTDoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRp
b25Nb2RlOjpCZWZvcmVIVE1MKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSAhPSBoZWFkVGFn
ICYmIHRva2VuLm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1sVGFnICYm
IHRva2VuLm5hbWUoKSAhPSBiclRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgp
ID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOworICAgICAgICBpZiAodG9rZW4tPm5hbWUo
KSAhPSBoZWFkVGFnICYmIHRva2VuLT5uYW1lKCkgIT0gYm9keVRhZyAmJiB0b2tlbi0+bmFtZSgp
ICE9IGh0bWxUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBiclRhZykgewogICAgICAgICAgICAgcGFy
c2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAg
ZGVmYXVsdEZvckJlZm9yZUhUTUwoKTsKICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJ
bnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOgotICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQpOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ICE9IGhlYWRUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJvZHlUYWcgJiYgdG9rZW4ubmFtZSgpICE9
IGh0bWxUYWcgJiYgdG9rZW4ubmFtZSgpICE9IGJyVGFnKSB7CisgICAgICAgIEFTU0VSVChpbnNl
cnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CisgICAgICAgIGlmICh0
b2tlbi0+bmFtZSgpICE9IGhlYWRUYWcgJiYgdG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYmIHRv
a2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAgICAg
ICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogICAgICAgICBkZWZhdWx0Rm9yQmVmb3JlSGVhZCgpOwogICAgICAgICBGQUxMVEhST1VHSDsK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVhZDoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0
aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQpOworICAgICAgICBBU1NFUlQoaW5zZXJ0
aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZCk7CiAgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGNhc2Ugc2hvdWxkIGJlIGJyb2tlbiBvdXQgaW50byBwcm9jZXNzRW5kVGFnRm9ySW5IZWFk
LAogICAgICAgICAvLyBiZWNhdXNlIG90aGVyIGVuZCB0YWcgY2FzZXMgbm93IHJlZmVyIHRvIGl0
ICgicHJvY2VzcyB0aGUgdG9rZW4gZm9yIHVzaW5nIHRoZSBydWxlcyBvZiB0aGUgImluIGhlYWQi
IGluc2VydGlvbiBtb2RlIikuCiAgICAgICAgIC8vIGJ1dCBiZWNhdXNlIHRoZSBsb2dpYyBmYWxs
cyB0aHJvdWdoIHRvIEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCwgdGhhdCBnZXRzIGEgbGl0dGxl
IG1lc3N5LgogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9rZW4u
bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRl
bXBsYXRlVGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOwog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBoZWFkVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRU
YWcpIHsKICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wSFRNTEhlYWRFbGVt
ZW50KCk7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpBZnRl
ckhlYWQ7CisgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkFmdGVy
SGVhZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSAhPSBib2R5VGFnICYmIHRva2VuLm5hbWUoKSAhPSBodG1sVGFnICYmIHRva2VuLm5h
bWUoKSAhPSBiclRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5VGFnICYm
IHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFnKSB7CiAg
ICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwog
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkOgotICAgICAgICBBU1NFUlQobV9pbnNl
cnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVySGVhZCk7Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgIT0gYm9keVRhZyAmJiB0b2tlbi5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi5u
YW1lKCkgIT0gYnJUYWcpIHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNl
cnRpb25Nb2RlOjpBZnRlckhlYWQpOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSAhPSBib2R5
VGFnICYmIHRva2VuLT5uYW1lKCkgIT0gaHRtbFRhZyAmJiB0b2tlbi0+bmFtZSgpICE9IGJyVGFn
KSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgfQogICAgICAgICBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CiAgICAgICAgIEZBTExU
SFJPVUdIOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OgotICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CisgICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKICAgICAgICAgcHJv
Y2Vzc0VuZFRhZ0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5UYWJsZToKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJ
bnNlcnRpb25Nb2RlOjpJblRhYmxlKTsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlKTsKICAgICAgICAgcHJvY2Vzc0VuZFRhZ0ZvckluVGFi
bGUodG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2Fw
dGlvbjoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bkNhcHRpb24pOwotICAgICAgICBpZiAodG9rZW4ubmFtZSgpID09IGNhcHRpb25UYWcpIHsKKyAg
ICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNhcHRpb24p
OworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjYXB0aW9uVGFnKSB7CiAgICAgICAgICAg
ICBwcm9jZXNzQ2FwdGlvbkVuZFRhZ0ZvckluQ2FwdGlvbigpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcpIHsKKyAg
ICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcpIHsKICAgICAgICAgICAgIHBhcnNl
RXJyb3IodG9rZW4pOwogICAgICAgICAgICAgaWYgKCFwcm9jZXNzQ2FwdGlvbkVuZFRhZ0Zvcklu
Q2FwdGlvbigpKSB7CiAgICAgICAgICAgICAgICAgQVNTRVJUKGlzUGFyc2luZ0ZyYWdtZW50KCkp
OwpAQCAtMjA2NSwzMCArMjA3OCwzMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0Vu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyh0
b2tlbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHRva2Vu
Lm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sVGFn
Ci0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gY29sZ3JvdXBUYWcKLSAgICAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSBodG1sVGFnCi0gICAgICAgICAgICB8fCBpc1RhYmxlQm9keUNv
bnRleHRUYWcodG9rZW4ubmFtZSgpKQotICAgICAgICAgICAgfHwgaXNUYWJsZUNlbGxDb250ZXh0
VGFnKHRva2VuLm5hbWUoKSkKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSB0clRhZykg
eworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBib2R5VGFnCisgICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IGNvbFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBj
b2xncm91cFRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnCisgICAg
ICAgICAgICB8fCBpc1RhYmxlQm9keUNvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkKKyAgICAgICAg
ICAgIHx8IGlzVGFibGVDZWxsQ29udGV4dFRhZyh0b2tlbi0+bmFtZSgpKQorICAgICAgICAgICAg
fHwgdG9rZW4tPm5hbWUoKSA9PSB0clRhZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJvY2Vzc0VuZFRh
Z0ZvckluQm9keSh0b2tlbik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6SW5Db2x1bW5Hcm91cDoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNl
cnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBj
b2xncm91cFRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluQ29sdW1uR3JvdXApOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBjb2xn
cm91cFRhZykgewogICAgICAgICAgICAgcHJvY2Vzc0NvbGdyb3VwRW5kVGFnRm9ySW5Db2x1bW5H
cm91cCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tl
bi5uYW1lKCkgPT0gY29sVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGNvbFRh
ZykgewogICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KICNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKLSAgICAgICAgaWYgKHRv
a2VuLm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgeworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9
PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICAgICAgcHJvY2Vzc1RlbXBsYXRlRW5kVGFnKHRva2Vu
KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQpAQCAtMjEwMCw0NCArMjExMyw0NCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRv
a2VuKQogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpJblJvdzoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9k
ZSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Sb3cpOwogICAgICAgICBwcm9jZXNzRW5kVGFnRm9ySW5S
b3codG9rZW4pOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluQ2Vs
bDoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNl
bGwpOworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
Q2VsbCk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJbkNlbGwodG9rZW4pOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OgotICAgICAgICBBU1NF
UlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5KTsKKyAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlQm9keSk7
CiAgICAgICAgIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlQm9keSh0b2tlbik7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OgotICAgICAgICBBU1NFUlQo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSk7Ci0gICAgICAgIGlm
ICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9k
ZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSk7CisgICAgICAgIGlmICh0b2tlbi0+bmFt
ZSgpID09IGh0bWxUYWcpIHsKICAgICAgICAgICAgIGlmIChpc1BhcnNpbmdGcmFnbWVudCgpKSB7
CiAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0
aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHk7CisgICAgICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKElu
c2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVy
QWZ0ZXJCb2R5OgotICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1v
ZGU6OkFmdGVyQm9keSB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJB
ZnRlckJvZHkpOworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1v
ZGU6OkFmdGVyQm9keSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJB
ZnRlckJvZHkpOwogICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsKLSAgICAgICAgbV9pbnNlcnRp
b25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OworICAgICAgICBzZXRJbnNlcnRpb25Nb2Rl
KEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIHByb2Nlc3NFbmRUYWcodG9rZW4pOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0Ogot
ICAgICAgICBBU1NFUlQobV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluSGVhZE5v
c2NyaXB0KTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBub3NjcmlwdFRhZykgeworICAg
ICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluSGVhZE5vc2Ny
aXB0KTsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKICAgICAg
ICAgICAgIEFTU0VSVChtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKG5vc2Ny
aXB0VGFnKSk7CiAgICAgICAgICAgICBtX3RyZWUub3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAg
ICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoaGVh
ZFRhZykpOwotICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6SW5I
ZWFkOworICAgICAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpJbkhlYWQp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1l
KCkgIT0gYnJUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgIT0gYnJUYWcpIHsKICAg
ICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CkBAIC0yMTQ1LDEzICsyMTU4LDEzIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNz
RW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3NUb2tlbih0b2tl
bik7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6VGV4dDoKLSAgICAg
ICAgaWYgKHRva2VuLm5hbWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5u
YW1lKCkgPT0gc2NyaXB0VGFnKSB7CiAgICAgICAgICAgICAvLyBQYXVzZSBvdXJzZWx2ZXMgc28g
dGhhdCBwYXJzaW5nIHN0b3BzIHVudGlsIHRoZSBzY3JpcHQgY2FuIGJlIHByb2Nlc3NlZCBieSB0
aGUgY2FsbGVyLgogICAgICAgICAgICAgQVNTRVJUKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCkt
Pmhhc1RhZ05hbWUoc2NyaXB0VGFnKSk7CiAgICAgICAgICAgICBpZiAoc2NyaXB0aW5nQ29udGVu
dElzQWxsb3dlZChtX3RyZWUucGFyc2VyQ29udGVudFBvbGljeSgpKSkKICAgICAgICAgICAgICAg
ICBtX3NjcmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwogICAgICAgICAg
ICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICAgICAgICAgIG1faW5zZXJ0aW9u
TW9kZSA9IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOworICAgICAgICAgICAgc2V0SW5zZXJ0aW9u
TW9kZShtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CiAKICAgICAgICAgICAgIGlmIChtX3BhcnNl
ci50b2tlbml6ZXIoKSkgewogICAgICAgICAgICAgICAgIC8vIFRoaXMgdG9rZW4gd2lsbCBub3Qg
aGF2ZSBiZWVuIGNyZWF0ZWQgYnkgdGhlIHRva2VuaXplciBpZiBhCkBAIC0yMTY0LDExICsyMTc3
LDExIEBAIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tl
biYgdG9rZW4pCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgbV90cmVl
Lm9wZW5FbGVtZW50cygpLT5wb3AoKTsKLSAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0gbV9vcmln
aW5hbEluc2VydGlvbk1vZGU7CisgICAgICAgIHNldEluc2VydGlvbk1vZGUobV9vcmlnaW5hbElu
c2VydGlvbk1vZGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6Oklu
RnJhbWVzZXQ6Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9k
ZTo6SW5GcmFtZXNldCk7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gZnJhbWVzZXRUYWcp
IHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkZy
YW1lc2V0KTsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gZnJhbWVzZXRUYWcpIHsKICAg
ICAgICAgICAgIGJvb2wgaWdub3JlRnJhbWVzZXRGb3JGcmFnbWVudFBhcnNpbmcgID0gbV90cmVl
LmN1cnJlbnRJc1Jvb3ROb2RlKCk7CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAg
ICAgICAgICBpZ25vcmVGcmFtZXNldEZvckZyYWdtZW50UGFyc2luZyA9IGlnbm9yZUZyYW1lc2V0
Rm9yRnJhZ21lbnRQYXJzaW5nIHx8IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aGFzVGVtcGxhdGVJ
bkhUTUxTY29wZSgpOwpAQCAtMjE4MCw0NiArMjE5Myw0NiBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6cHJvY2Vzc0VuZFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKICAgICAgICAgICAgIGlm
ICghaXNQYXJzaW5nRnJhZ21lbnQoKSAmJiAhbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+aGFz
VGFnTmFtZShmcmFtZXNldFRhZykpCi0gICAgICAgICAgICAgICAgbV9pbnNlcnRpb25Nb2RlID0g
SW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldDsKKyAgICAgICAgICAgICAgICBzZXRJbnNlcnRp
b25Nb2RlKEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkg
PT0gdGVtcGxhdGVUYWcpIHsKICAgICAgICAgICAgIHByb2Nlc3NUZW1wbGF0ZUVuZFRhZyh0b2tl
bik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICNlbmRpZgogICAgICAgICBicmVh
azsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQ6Ci0gICAgICAgIEFTU0VS
VChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCk7Ci0gICAg
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgewotICAgICAgICAgICAgbV9pbnNlcnRp
b25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0OworICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQpOworICAg
ICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBodG1sVGFnKSB7CisgICAgICAgICAgICBzZXRJbnNl
cnRpb25Nb2RlKEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldCk7CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQ6Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCB8fCBtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KTsKKyAgICAgICAgQVNTRVJUKGlu
c2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0IHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpOwogICAgICAgICBw
YXJzZUVycm9yKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpJblNlbGVjdEluVGFibGU6Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5z
ZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9
PSBjYXB0aW9uVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKLSAg
ICAgICAgICAgIHx8IGlzVGFibGVCb2R5Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpCi0gICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gdHJUYWcKLSAgICAgICAgICAgIHx8IGlzVGFibGVDZWxs
Q29udGV4dFRhZyh0b2tlbi5uYW1lKCkpKSB7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlKTsKKyAgICAgICAgaWYgKHRva2Vu
LT5uYW1lKCkgPT0gY2FwdGlvblRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB0
YWJsZVRhZworICAgICAgICAgICAgfHwgaXNUYWJsZUJvZHlDb250ZXh0VGFnKHRva2VuLT5uYW1l
KCkpCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHRyVGFnCisgICAgICAgICAgICB8
fCBpc1RhYmxlQ2VsbENvbnRleHRUYWcodG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgIHBh
cnNlRXJyb3IodG9rZW4pOwotICAgICAgICAgICAgaWYgKG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
aW5UYWJsZVNjb3BlKHRva2VuLm5hbWUoKSkpIHsKKyAgICAgICAgICAgIGlmIChtX3RyZWUub3Bl
bkVsZW1lbnRzKCktPmluVGFibGVTY29wZSh0b2tlbi0+bmFtZSgpKSkgewogICAgICAgICAgICAg
ICAgIEF0b21pY0hUTUxUb2tlbiBlbmRTZWxlY3QoSFRNTFRva2VuOjpFbmRUYWcsIHNlbGVjdFRh
Zy5sb2NhbE5hbWUoKSk7Ci0gICAgICAgICAgICAgICAgcHJvY2Vzc0VuZFRhZyhlbmRTZWxlY3Qp
OworICAgICAgICAgICAgICAgIHByb2Nlc3NFbmRUYWcoJmVuZFNlbGVjdCk7CiAgICAgICAgICAg
ICAgICAgcHJvY2Vzc0VuZFRhZyh0b2tlbik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRp
b25Nb2RlOjpJblNlbGVjdDoKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNl
cnRpb25Nb2RlOjpJblNlbGVjdCB8fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6
SW5TZWxlY3RJblRhYmxlKTsKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBvcHRncm91cFRh
ZykgeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6Oklu
U2VsZWN0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdEluVGFi
bGUpOworICAgICAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBvcHRncm91cFRhZykgewogICAgICAg
ICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0o
KS0+bm9kZSgpKSAmJiBtX3RyZWUub25lQmVsb3dUb3AoKSAmJiBpczxIVE1MT3B0R3JvdXBFbGVt
ZW50PigqbV90cmVlLm9uZUJlbG93VG9wKCktPm5vZGUoKSkpCiAgICAgICAgICAgICAgICAgcHJv
Y2Vzc0Zha2VFbmRUYWcob3B0aW9uVGFnKTsKICAgICAgICAgICAgIGlmIChpczxIVE1MT3B0R3Jv
dXBFbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKS0+bm9kZSgpKSkgewpAQCAtMjIy
OSw3ICsyMjQyLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gb3B0
aW9uVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG9wdGlvblRhZykgewogICAg
ICAgICAgICAgaWYgKGlzPEhUTUxPcHRpb25FbGVtZW50PigqbV90cmVlLmN1cnJlbnRTdGFja0l0
ZW0oKS0+bm9kZSgpKSkgewogICAgICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+
cG9wKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjIzNyw4ICsyMjUwLDggQEAgdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gc2VsZWN0VGFnKSB7Ci0gICAgICAg
ICAgICBpZiAoIW1fdHJlZS5vcGVuRWxlbWVudHMoKS0+aW5TZWxlY3RTY29wZSh0b2tlbi5uYW1l
KCkpKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHNlbGVjdFRhZykgeworICAgICAg
ICAgICAgaWYgKCFtX3RyZWUub3BlbkVsZW1lbnRzKCktPmluU2VsZWN0U2NvcGUodG9rZW4tPm5h
bWUoKSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoaXNQYXJzaW5nRnJhZ21lbnQoKSk7CiAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjI0OCw3ICsyMjYxLDcgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRU
YWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgICAgICBpZiAodG9rZW4ubmFtZSgp
ID09IHRlbXBsYXRlVGFnKSB7CisgICAgICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRl
VGFnKSB7CiAgICAgICAgICAgICBwcm9jZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CkBAIC0yMjU4LDI5ICsyMjcxLDMxIEBAIHZvaWQgSFRN
TFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kVGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAg
ICAgIGRlZmF1bHRGb3JJblRhYmxlVGV4dCgpOwogICAgICAgICBwcm9jZXNzRW5kVGFnKHRva2Vu
KTsKICAgICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgY2Fz
ZSBJbnNlcnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzOgotICAgICAgICBpZiAodG9rZW4ubmFt
ZSgpID09IHRlbXBsYXRlVGFnKSB7CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAg
ICAgIGlmICh0b2tlbi0+bmFtZSgpID09IHRlbXBsYXRlVGFnKSB7CiAgICAgICAgICAgICBwcm9j
ZXNzVGVtcGxhdGVFbmRUYWcodG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
Ci0gICAgICAgIGJyZWFrOworI2Vsc2UKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAj
ZW5kaWYKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0NvbW1lbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWls
ZGVyOjpwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpDb21tZW50KTsKKyAgICBBU1NFUlQodG9rZW4t
PnR5cGUoKSA9PSBIVE1MVG9rZW46OkNvbW1lbnQpOwogICAgIGlmIChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6SW5pdGlhbAogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTAogICAgICAgICB8fCBtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckJvZHkKICAgICAgICAgfHwgbV9pbnNlcnRpb25Nb2Rl
ID09IEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJGcmFtZXNldCkgewotICAgICAgICBtX3RyZWUu
aW5zZXJ0Q29tbWVudE9uRG9jdW1lbnQoJnRva2VuKTsKKyAgICAgICAgbV90cmVlLmluc2VydENv
bW1lbnRPbkRvY3VtZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAo
bV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkFmdGVyQm9keSkgewotICAgICAgICBt
X3RyZWUuaW5zZXJ0Q29tbWVudE9uSFRNTEh0bWxFbGVtZW50KCZ0b2tlbik7CisgICAgICAgIG1f
dHJlZS5pbnNlcnRDb21tZW50T25IVE1MSHRtbEVsZW1lbnQodG9rZW4pOwogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIGlmIChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5U
YWJsZVRleHQpIHsKQEAgLTIyODgsMTkgKzIzMDMsMTggQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6
OnByb2Nlc3NDb21tZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgIHByb2Nlc3ND
b21tZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBtX3RyZWUuaW5zZXJ0
Q29tbWVudCgmdG9rZW4pOworICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKIH0KIAot
dm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuJiB0
b2tlbikKK3ZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzQ2hhcmFjdGVyKEF0b21pY0hUTUxU
b2tlbiogdG9rZW4pCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNo
YXJhY3Rlcik7CisgICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0
ZXIpOwogICAgIEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXIgYnVmZmVyKHRva2VuKTsKICAg
ICBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKGJ1ZmZlcik7CiB9CiAKLSNpZiBFTkFCTEUoVEVMRVBI
T05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykKLQogLy8gRklYTUU6IEV4dHJh
Y3QgdGhlIGZvbGxvd2luZyBpT1Mtc3BlY2lmaWMgY29kZSBpbnRvIGEgc2VwYXJhdGUgZmlsZS4K
KyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykK
IC8vIEZyb20gdGhlIHN0cmluZyA0MDg5OTYxMDEwLCBjcmVhdGVzIGEgbGluayBvZiB0aGUgZm9y
bSA8YSBocmVmPSJ0ZWw6NDA4OTk2MTAxMCI+NDA4OTk2MTAxMDwvYT4gYW5kIGluc2VydHMgaXQu
CiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKGNvbnN0IFN0cmlu
ZyYgc3RyaW5nKQogewpAQCAtMjMxMSwxMCArMjMyNSwxMCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRl
cjo6aW5zZXJ0UGhvbmVOdW1iZXJMaW5rKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogICAgIEF0b21p
Y0hUTUxUb2tlbiBhU3RhcnRUb2tlbihIVE1MVG9rZW46OlN0YXJ0VGFnLCBhVGFnTG9jYWxOYW1l
LCBhdHRyaWJ1dGVzKTsKICAgICBBdG9taWNIVE1MVG9rZW4gYUVuZFRva2VuKEhUTUxUb2tlbjo6
RW5kVGFnLCBhVGFnTG9jYWxOYW1lKTsKIAotICAgIHByb2Nlc3NTdGFydFRhZyhhU3RhcnRUb2tl
bik7CisgICAgcHJvY2Vzc1N0YXJ0VGFnKCZhU3RhcnRUb2tlbik7CiAgICAgbV90cmVlLmV4ZWN1
dGVRdWV1ZWRUYXNrcygpOwogICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShzdHJpbmcpOwotICAg
IHByb2Nlc3NFbmRUYWcoYUVuZFRva2VuKTsKKyAgICBwcm9jZXNzRW5kVGFnKCZhRW5kVG9rZW4p
OwogfQogCiAvLyBMb2NhdGVzIHRoZSBwaG9uZSBudW1iZXJzIGluIHRoZSBzdHJpbmcgYW5kIGRl
YWxzIHdpdGggaXQKQEAgLTIzODQsNyArMjM5OCw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91
bGRQYXJzZVRlbGVwaG9uZU51bWJlcnNJbk5vZGUoY29uc3QgQ29udGFpbmVyTm9kZSYgbm9kZSkK
ICAgICB9IHdoaWxlIChjdXJyZW50Tm9kZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9Ci0KICNlbmRp
ZiAvLyBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYmIFBMQVRGT1JNKElPUykK
IAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXIoRXh0ZXJuYWxD
aGFyYWN0ZXJUb2tlbkJ1ZmZlciYgYnVmZmVyKQpAQCAtMjQwOCw2OCArMjQyMSw3NyBAQCBSZXBy
b2Nlc3NCdWZmZXI6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgc3dpdGNoICht
X2luc2VydGlvbk1vZGUpIHsKLSAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluaXRpYWw6CisgICAg
c3dpdGNoIChpbnNlcnRpb25Nb2RlKCkpIHsKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluaXRp
YWw6IHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJ
bml0aWFsKTsKICAgICAgICAgYnVmZmVyLnNraXBMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAg
ICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZGVm
YXVsdEZvckluaXRpYWwoKTsKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNl
cnRpb25Nb2RlOjpCZWZvcmVIVE1MKTsKICAgICAgICAgRkFMTFRIUk9VR0g7Ci0gICAgY2FzZSBJ
bnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MOgorICAgIH0KKyAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkJlZm9yZUhUTUw6IHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRp
b25Nb2RlOjpCZWZvcmVIVE1MKTsKICAgICAgICAgYnVmZmVyLnNraXBMZWFkaW5nV2hpdGVzcGFj
ZSgpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgZGVmYXVsdEZvckJlZm9yZUhUTUwoKTsKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0
aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgRkFMTFRIUk9V
R0g7Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOgorICAgIH0KKyAgICBjYXNl
IEluc2VydGlvbk1vZGU6OkJlZm9yZUhlYWQ6IHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgYnVmZmVyLnNraXBM
ZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoYnVmZmVyLmlzRW1wdHkoKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgZGVmYXVsdEZvckJlZm9yZUhlYWQoKTsKLSAgICAgICAg
QVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQpOwogICAgICAg
ICBGQUxMVEhST1VHSDsKKyAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQ6IHsK
KyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkhlYWQp
OwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdX
aGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQog
ICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlLCBBbGxX
aGl0ZXNwYWNlKTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGRlZmF1bHRGb3JJbkhlYWQoKTsKLSAgICAgICAgQVNTRVJUKG1faW5z
ZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQpOwogICAgICAgICBGQUxMVEhS
T1VHSDsKICAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6IHsKKyAgICAg
ICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQpOwog
ICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZUxlYWRpbmdXaGl0
ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1doaXRlc3BhY2UuaXNFbXB0eSgpKQogICAg
ICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxlYWRpbmdXaGl0ZXNwYWNlLCBBbGxXaGl0
ZXNwYWNlKTsKICAgICAgICAgaWYgKGJ1ZmZlci5pc0VtcHR5KCkpCiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIGRlZmF1bHRGb3JBZnRlckhlYWQoKTsKLSAgICAgICAgQVNTRVJUKG1faW5z
ZXJ0aW9uTW9kZSA9PSBJbnNlcnRpb25Nb2RlOjpJbkJvZHkpOwogICAgICAgICBGQUxMVEhST1VH
SDsKICAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk6CiAgICAgY2FzZSBJbnNl
cnRpb25Nb2RlOjpJbkNhcHRpb246Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNlbGw6Ci0j
aWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpUZW1w
bGF0ZUNvbnRlbnRzOgorICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DZWxsOiB7CisjaWYgRU5B
QkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5Cb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpJbkNhcHRpb24gfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluQ2VsbCB8
fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6VGVtcGxhdGVDb250ZW50cyk7Cisj
ZWxzZQorICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpICE9IEluc2VydGlvbk1vZGU6OlRl
bXBsYXRlQ29udGVudHMpOworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluQm9keSB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5D
YXB0aW9uIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwpOwogI2Vu
ZGlmCiAgICAgICAgIHByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoYnVmZmVyKTsKICAg
ICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZToKICAg
ICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OgotICAgIGNhc2UgSW5zZXJ0aW9uTW9k
ZTo6SW5Sb3c6CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblJvdzogeworICAgICAgICBBU1NF
UlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGUgfHwgaW5zZXJ0aW9u
TW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9
PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CiAgICAgICAgIEFTU0VSVChtX3BlbmRpbmdUYWJsZUNo
YXJhY3RlcnMuaXNFbXB0eSgpKTsKICAgICAgICAgaWYgKG1fdHJlZS5jdXJyZW50U3RhY2tJdGVt
KCktPmlzRWxlbWVudE5vZGUoKQotICAgICAgICAgICAgJiYgKGlzPEhUTUxUYWJsZUVsZW1lbnQ+
KCptX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5lbGVtZW50KCkpCisgICAgICAgICAgICAmJiAo
aXM8SFRNTFRhYmxlRWxlbWVudD4oKm1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPm5vZGUoKSkK
ICAgICAgICAgICAgICAgICB8fCBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1l
KEhUTUxOYW1lczo6dGJvZHlUYWcpCiAgICAgICAgICAgICAgICAgfHwgbV90cmVlLmN1cnJlbnRT
dGFja0l0ZW0oKS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRmb290VGFnKQogICAgICAgICAgICAg
ICAgIHx8IG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
aGVhZFRhZykKICAgICAgICAgICAgICAgICB8fCBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5o
YXNUYWdOYW1lKEhUTUxOYW1lczo6dHJUYWcpKSkgewogICAgICAgICAgICAgbV9vcmlnaW5hbElu
c2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7Ci0gICAgICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dDsKKyAgICAgICAgICAgIHNldEluc2VydGlv
bk1vZGUoSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQpOwogICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHdlIGZhbGwgdGhyb3VnaCB0byB0aGUgSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZVRleHQgY2Fz
ZSBiZWxvdy4KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIEhUTUxDb25zdHJ1Y3Rpb25T
aXRlOjpSZWRpcmVjdFRvRm9zdGVyUGFyZW50R3VhcmQgcmVkaXJlY3RlcihtX3RyZWUpOwpAQCAt
MjQ3NywxMCArMjQ5OSwxMyBAQCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQogICAgICAgICBGQUxMVEhST1VHSDsKLSAgICBjYXNlIEluc2VydGlvbk1vZGU6
OkluVGFibGVUZXh0OgorICAgIH0KKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVUZXh0
OiB7CiAgICAgICAgIGJ1ZmZlci5naXZlUmVtYWluaW5nVG8obV9wZW5kaW5nVGFibGVDaGFyYWN0
ZXJzKTsKICAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5D
b2x1bW5Hcm91cDogeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlv
bk1vZGU6OkluQ29sdW1uR3JvdXApOwogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2Ug
PSBidWZmZXIudGFrZUxlYWRpbmdXaGl0ZXNwYWNlKCk7CiAgICAgICAgIGlmICghbGVhZGluZ1do
aXRlc3BhY2UuaXNFbXB0eSgpKQogICAgICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGxl
YWRpbmdXaGl0ZXNwYWNlLCBBbGxXaGl0ZXNwYWNlKTsKQEAgLTI0OTYsMTQgKzI1MjEsMTkgQEAg
UmVwcm9jZXNzQnVmZmVyOgogICAgICAgICBnb3RvIFJlcHJvY2Vzc0J1ZmZlcjsKICAgICB9CiAg
ICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckJvZHk6Ci0gICAgY2FzZSBJbnNlcnRpb25Nb2Rl
OjpBZnRlckFmdGVyQm9keToKKyAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyQWZ0ZXJCb2R5
OiB7CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0
ZXJCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyQm9k
eSk7CiAgICAgICAgIC8vIEZJWE1FOiBwYXJzZSBlcnJvcgotICAgICAgICBtX2luc2VydGlvbk1v
ZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkJvZHk7CisgICAgICAgIHNldEluc2VydGlvbk1vZGUoSW5z
ZXJ0aW9uTW9kZTo6SW5Cb2R5KTsKICAgICAgICAgZ290byBSZXByb2Nlc3NCdWZmZXI7Ci0gICAg
Y2FzZSBJbnNlcnRpb25Nb2RlOjpUZXh0OgorICAgIH0KKyAgICBjYXNlIEluc2VydGlvbk1vZGU6
OlRleHQ6IHsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2Rl
OjpUZXh0KTsKICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGJ1ZmZlci50YWtlUmVtYWlu
aW5nKCkpOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJ
bkhlYWROb3NjcmlwdDogeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluSGVhZE5vc2NyaXB0KTsKICAgICAgICAgU3RyaW5nIGxlYWRpbmdXaGl0ZXNw
YWNlID0gYnVmZmVyLnRha2VMZWFkaW5nV2hpdGVzcGFjZSgpOwogICAgICAgICBpZiAoIWxlYWRp
bmdXaGl0ZXNwYWNlLmlzRW1wdHkoKSkKICAgICAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9k
ZShsZWFkaW5nV2hpdGVzcGFjZSwgQWxsV2hpdGVzcGFjZSk7CkBAIC0yNTE0LDYgKzI1NDQsNyBA
QCBSZXByb2Nlc3NCdWZmZXI6CiAgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5GcmFt
ZXNldDoKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQ6IHsKKyAgICAgICAg
QVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkZyYW1lc2V0IHx8IGlu
c2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckZyYW1lc2V0IHx8IGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQpOwogICAgICAgICBT
dHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBidWZmZXIudGFrZVJlbWFpbmluZ1doaXRlc3BhY2Uo
KTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hpdGVzcGFjZS5pc0VtcHR5KCkpCiAgICAgICAgICAg
ICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUobGVhZGluZ1doaXRlc3BhY2UsIEFsbFdoaXRlc3BhY2Up
OwpAQCAtMjUyMiw5ICsyNTUzLDExIEBAIFJlcHJvY2Vzc0J1ZmZlcjoKICAgICAgICAgYnJlYWs7
CiAgICAgfQogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3RJblRhYmxlOgotICAgIGNh
c2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6CisgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblNl
bGVjdDogeworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluU2VsZWN0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblNlbGVjdElu
VGFibGUpOwogICAgICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoYnVmZmVyLnRha2VSZW1haW5p
bmcoKSk7CiAgICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFm
dGVyQWZ0ZXJGcmFtZXNldDogewogICAgICAgICBTdHJpbmcgbGVhZGluZ1doaXRlc3BhY2UgPSBi
dWZmZXIudGFrZVJlbWFpbmluZ1doaXRlc3BhY2UoKTsKICAgICAgICAgaWYgKCFsZWFkaW5nV2hp
dGVzcGFjZS5pc0VtcHR5KCkpIHsKQEAgLTI1NTAsNTUgKzI1ODMsNjQgQEAgdm9pZCBIVE1MVHJl
ZUJ1aWxkZXI6OnByb2Nlc3NDaGFyYWN0ZXJCdWZmZXJGb3JJbkJvZHkoRXh0ZXJuYWxDaGFyYWN0
ZXJUb2tlbkJ1ZmYKICNlbHNlCiAgICAgbV90cmVlLmluc2VydFRleHROb2RlKGNoYXJhY3RlcnMp
OwogI2VuZGlmCisKICAgICBpZiAobV9mcmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3BhY2VPclJl
cGxhY2VtZW50Q2hhcmFjdGVycyhjaGFyYWN0ZXJzKSkKICAgICAgICAgbV9mcmFtZXNldE9rID0g
ZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzRW5kT2ZGaWxlKEF0b21p
Y0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0VuZE9mRmls
ZShBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuOjpFbmRPZkZpbGUpOwotICAgIHN3aXRjaCAobV9pbnNlcnRpb25Nb2RlKSB7Cisg
ICAgQVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpFbmRPZkZpbGUpOworICAgIHN3
aXRjaCAoaW5zZXJ0aW9uTW9kZSgpKSB7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbml0aWFs
OgorICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluaXRp
YWwpOwogICAgICAgICBkZWZhdWx0Rm9ySW5pdGlhbCgpOwotICAgICAgICBBU1NFUlQobV9pbnNl
cnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUwpOwogICAgICAgICBGQUxMVEhS
T1VHSDsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw6CisgICAgICAgIEFTU0VS
VChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSFRNTCk7CiAgICAgICAg
IGRlZmF1bHRGb3JCZWZvcmVIVE1MKCk7Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUg
PT0gSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CiAgICAgICAgIEZBTExUSFJPVUdIOwogICAg
IGNhc2UgSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZDoKKyAgICAgICAgQVNTRVJUKGluc2VydGlv
bk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkKTsKICAgICAgICAgZGVmYXVsdEZv
ckJlZm9yZUhlYWQoKTsKLSAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uTW9kZSA9PSBJbnNlcnRp
b25Nb2RlOjpJbkhlYWQpOwogICAgICAgICBGQUxMVEhST1VHSDsKICAgICBjYXNlIEluc2VydGlv
bk1vZGU6OkluSGVhZDoKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRp
b25Nb2RlOjpJbkhlYWQpOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFkKCk7Ci0gICAgICAgIEFT
U0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsKICAgICAg
ICAgRkFMTFRIUk9VR0g7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpBZnRlckhlYWQ6CisgICAg
ICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJIZWFkKTsK
ICAgICAgICAgZGVmYXVsdEZvckFmdGVySGVhZCgpOwotICAgICAgICBBU1NFUlQobV9pbnNlcnRp
b25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluQm9keSk7CiAgICAgICAgIEZBTExUSFJPVUdIOwog
ICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6
SW5DZWxsOgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5DYXB0aW9uOgogICAgIGNhc2UgSW5z
ZXJ0aW9uTW9kZTo6SW5Sb3c6CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCisgICAgICAg
IEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5Cb2R5IHx8IGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNlbGwgfHwgaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkluQ2FwdGlvbiB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9u
TW9kZTo6SW5Sb3cgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OlRlbXBsYXRl
Q29udGVudHMpOworI2Vsc2UKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1vZGUoKSAhPSBJbnNl
cnRpb25Nb2RlOjpUZW1wbGF0ZUNvbnRlbnRzKTsKKyAgICAgICAgQVNTRVJUKGluc2VydGlvbk1v
ZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkJvZHkgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2Vy
dGlvbk1vZGU6OkluQ2VsbCB8fCBpbnNlcnRpb25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6SW5D
YXB0aW9uIHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJblJvdyk7CisjZW5k
aWYKICAgICAgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gRW1pdCBwYXJzZSBlcnJvciBiYXNlZCBv
biB3aGF0IGVsZW1lbnRzIGFyZSBzdGlsbCBvcGVuLgogI2lmIEVOQUJMRShURU1QTEFURV9FTEVN
RU5UKQotICAgICAgICBpZiAoIW1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKCFtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXMuaXNFbXB0eSgpKQogICAgICAg
ICAgICAgaWYgKHByb2Nlc3NFbmRPZkZpbGVGb3JJblRlbXBsYXRlQ29udGVudHModG9rZW4pKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQogI2VuZGlmCiAgICAgICAgIGJyZWFr
OwogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6QWZ0ZXJBZnRlckJvZHk6CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5zZXJ0aW9uTW9kZTo6QWZ0ZXJCb2R5IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpBZnRlckFmdGVyQm9keSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6SW5IZWFkTm9zY3JpcHQ6CisgICAgICAgIEFTU0VSVChpbnNlcnRpb25Nb2RlKCkgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5IZWFkTm9zY3JpcHQpOwogICAgICAgICBkZWZhdWx0Rm9ySW5IZWFk
Tm9zY3JpcHQoKTsKICAgICAgICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkFmdGVyRnJhbWVzZXQ6CiAgICAgY2FzZSBJ
bnNlcnRpb25Nb2RlOjpBZnRlckFmdGVyRnJhbWVzZXQ6CisgICAgICAgIEFTU0VSVChpbnNlcnRp
b25Nb2RlKCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJGcmFtZXNldCB8fCBpbnNlcnRpb25Nb2Rl
KCkgPT0gSW5zZXJ0aW9uTW9kZTo6QWZ0ZXJBZnRlckZyYW1lc2V0KTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwOgogICAgICAgICBpZiAobV90
cmVlLmN1cnJlbnRJc1Jvb3ROb2RlKCkpIHsKQEAgLTI2MTcsMTQgKzI2NTksMTQgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
ICAgICBjYXNlIEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5OgogICAgIGNhc2UgSW5zZXJ0aW9u
TW9kZTo6SW5TZWxlY3RJblRhYmxlOgogICAgIGNhc2UgSW5zZXJ0aW9uTW9kZTo6SW5TZWxlY3Q6
Ci0gICAgICAgIEFTU0VSVChtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5TZWxl
Y3QgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlvbk1vZGU6OkluU2VsZWN0SW5UYWJsZSB8
fCBtX2luc2VydGlvbk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5UYWJsZSB8fCBtX2luc2VydGlv
bk1vZGUgPT0gSW5zZXJ0aW9uTW9kZTo6SW5GcmFtZXNldCB8fCBtX2luc2VydGlvbk1vZGUgPT0g
SW5zZXJ0aW9uTW9kZTo6SW5UYWJsZUJvZHkgfHwgbV9pbnNlcnRpb25Nb2RlID09IEluc2VydGlv
bk1vZGU6OkluQ29sdW1uR3JvdXApOworICAgICAgICBBU1NFUlQoaW5zZXJ0aW9uTW9kZSgpID09
IEluc2VydGlvbk1vZGU6OkluU2VsZWN0IHx8IGluc2VydGlvbk1vZGUoKSA9PSBJbnNlcnRpb25N
b2RlOjpJblNlbGVjdEluVGFibGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6
OkluVGFibGUgfHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluRnJhbWVzZXQg
fHwgaW5zZXJ0aW9uTW9kZSgpID09IEluc2VydGlvbk1vZGU6OkluVGFibGVCb2R5IHx8IGluc2Vy
dGlvbk1vZGUoKSA9PSBJbnNlcnRpb25Nb2RlOjpJbkNvbHVtbkdyb3VwKTsKICAgICAgICAgaWYg
KG1fdHJlZS5jdXJyZW50Tm9kZSgpICE9IG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cm9vdE5vZGUo
KSkKICAgICAgICAgICAgIHBhcnNlRXJyb3IodG9rZW4pOworCiAjaWYgRU5BQkxFKFRFTVBMQVRF
X0VMRU1FTlQpCi0gICAgICAgIGlmICghbV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAoIW1fdGVtcGxhdGVJbnNlcnRpb25Nb2Rlcy5pc0VtcHR5KCkpCiAg
ICAgICAgICAgICBpZiAocHJvY2Vzc0VuZE9mRmlsZUZvckluVGVtcGxhdGVDb250ZW50cyh0b2tl
bikpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAjZW5kaWYKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBJbnNlcnRpb25Nb2RlOjpJblRhYmxlVGV4dDoKQEAgLTI2MzcsMTQg
KzI2NzksMTYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NFbmRPZkZpbGUoQXRvbWlj
SFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIG1hcmsg
dGhlIHNjcmlwdCBlbGVtZW50IGFzICJhbHJlYWR5IHN0YXJ0ZWQiLgogICAgICAgICBtX3RyZWUu
b3BlbkVsZW1lbnRzKCktPnBvcCgpOwogICAgICAgICBBU1NFUlQobV9vcmlnaW5hbEluc2VydGlv
bk1vZGUgIT0gSW5zZXJ0aW9uTW9kZTo6VGV4dCk7Ci0gICAgICAgIG1faW5zZXJ0aW9uTW9kZSA9
IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOworICAgICAgICBzZXRJbnNlcnRpb25Nb2RlKG1fb3Jp
Z2luYWxJbnNlcnRpb25Nb2RlKTsKICAgICAgICAgcHJvY2Vzc0VuZE9mRmlsZSh0b2tlbik7CiAg
ICAgICAgIHJldHVybjsKLSNpZiBFTkFCTEUoVEVNUExBVEVfRUxFTUVOVCkKICAgICBjYXNlIElu
c2VydGlvbk1vZGU6OlRlbXBsYXRlQ29udGVudHM6CisjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1F
TlQpCiAgICAgICAgIGlmIChwcm9jZXNzRW5kT2ZGaWxlRm9ySW5UZW1wbGF0ZUNvbnRlbnRzKHRv
a2VuKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CisjZWxzZQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICNlbmRpZgogICAgIH0KICAgICBBU1NFUlQobV90cmVl
LmN1cnJlbnROb2RlKCkpOwpAQCAtMjY1NiwzOCArMjcwMCwzOCBAQCB2b2lkIEhUTUxUcmVlQnVp
bGRlcjo6ZGVmYXVsdEZvckluaXRpYWwoKQogICAgIG5vdEltcGxlbWVudGVkKCk7CiAgICAgbV90
cmVlLnNldERlZmF1bHRDb21wYXRpYmlsaXR5TW9kZSgpOwogICAgIC8vIEZJWE1FOiBwYXJzZSBl
cnJvcgotICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OkJlZm9yZUhUTUw7Cisg
ICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpCZWZvcmVIVE1MKTsKIH0KIAogdm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1bHRGb3JCZWZvcmVIVE1MKCkKIHsKICAgICBBdG9taWNI
VE1MVG9rZW4gc3RhcnRIVE1MKEhUTUxUb2tlbjo6U3RhcnRUYWcsIGh0bWxUYWcubG9jYWxOYW1l
KCkpOwogICAgIG1fdHJlZS5pbnNlcnRIVE1MSHRtbFN0YXJ0VGFnQmVmb3JlSFRNTCgmc3RhcnRI
VE1MKTsKLSAgICBtX2luc2VydGlvbk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpCZWZvcmVIZWFkOwor
ICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6QmVmb3JlSGVhZCk7CiB9CiAKIHZv
aWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9yQmVmb3JlSGVhZCgpCiB7CiAgICAgQXRvbWlj
SFRNTFRva2VuIHN0YXJ0SGVhZChIVE1MVG9rZW46OlN0YXJ0VGFnLCBoZWFkVGFnLmxvY2FsTmFt
ZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRIZWFkKTsKKyAgICBwcm9jZXNzU3RhcnRU
YWcoJnN0YXJ0SGVhZCk7CiB9CiAKIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpkZWZhdWx0Rm9ySW5I
ZWFkKCkKIHsKICAgICBBdG9taWNIVE1MVG9rZW4gZW5kSGVhZChIVE1MVG9rZW46OkVuZFRhZywg
aGVhZFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vzc0VuZFRhZyhlbmRIZWFkKTsKKyAgICBw
cm9jZXNzRW5kVGFnKCZlbmRIZWFkKTsKIH0KIAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmRlZmF1
bHRGb3JJbkhlYWROb3NjcmlwdCgpCiB7CiAgICAgQXRvbWljSFRNTFRva2VuIGVuZE5vc2NyaXB0
KEhUTUxUb2tlbjo6RW5kVGFnLCBub3NjcmlwdFRhZy5sb2NhbE5hbWUoKSk7Ci0gICAgcHJvY2Vz
c0VuZFRhZyhlbmROb3NjcmlwdCk7CisgICAgcHJvY2Vzc0VuZFRhZygmZW5kTm9zY3JpcHQpOwog
fQogCiB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckFmdGVySGVhZCgpCiB7CiAgICAg
QXRvbWljSFRNTFRva2VuIHN0YXJ0Qm9keShIVE1MVG9rZW46OlN0YXJ0VGFnLCBib2R5VGFnLmxv
Y2FsTmFtZSgpKTsKLSAgICBwcm9jZXNzU3RhcnRUYWcoc3RhcnRCb2R5KTsKKyAgICBwcm9jZXNz
U3RhcnRUYWcoJnN0YXJ0Qm9keSk7CiAgICAgbV9mcmFtZXNldE9rID0gdHJ1ZTsKIH0KIApAQCAt
MjcwMSw5MCArMjc0NSw5MCBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6ZGVmYXVsdEZvckluVGFi
bGVUZXh0KCkKICAgICAgICAgbV90cmVlLnJlY29uc3RydWN0VGhlQWN0aXZlRm9ybWF0dGluZ0Vs
ZW1lbnRzKCk7CiAgICAgICAgIG1fdHJlZS5pbnNlcnRUZXh0Tm9kZShjaGFyYWN0ZXJzLCBOb3RB
bGxXaGl0ZXNwYWNlKTsKICAgICAgICAgbV9mcmFtZXNldE9rID0gZmFsc2U7Ci0gICAgICAgIG1f
aW5zZXJ0aW9uTW9kZSA9IG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlOworICAgICAgICBzZXRJbnNl
cnRpb25Nb2RlKG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlKTsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KICAgICBtX3RyZWUuaW5zZXJ0VGV4dE5vZGUoY2hhcmFjdGVycyk7Ci0gICAgbV9pbnNlcnRp
b25Nb2RlID0gbV9vcmlnaW5hbEluc2VydGlvbk1vZGU7CisgICAgc2V0SW5zZXJ0aW9uTW9kZSht
X29yaWdpbmFsSW5zZXJ0aW9uTW9kZSk7CiB9CiAKLWJvb2wgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRy
ZWVCdWlsZGVyOjpwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuKiB0b2tl
bikKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOwot
ICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gaHRtbFRhZykgeworICAgIEFTU0VSVCh0b2tlbi0+dHlw
ZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpOworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGh0
bWxUYWcpIHsKICAgICAgICAgcHJvY2Vzc0h0bWxTdGFydFRhZ0ZvckluQm9keSh0b2tlbik7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAgICBpZiAodG9rZW4ubmFtZSgpID09IGJhc2VU
YWcKLSAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJhc2Vmb250VGFnCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBiZ3NvdW5kVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjb21t
YW5kVGFnCi0gICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBsaW5rVGFnCi0gICAgICAgIHx8IHRv
a2VuLm5hbWUoKSA9PSBtZXRhVGFnKSB7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRTZWxmQ2xvc2lu
Z0hUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gYmFzZVRhZwor
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJhc2Vmb250VGFnCisgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gYmdzb3VuZFRhZworICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvbW1h
bmRUYWcKKyAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBsaW5rVGFnCisgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gbWV0YVRhZykgeworICAgICAgICBtX3RyZWUuaW5zZXJ0U2VsZkNsb3Np
bmdIVE1MRWxlbWVudCh0b2tlbik7CiAgICAgICAgIC8vIE5vdGU6IFRoZSBjdXN0b20gcHJvY2Vz
c2luZyBmb3IgdGhlIDxtZXRhPiB0YWcgaXMgZG9uZSBpbiBIVE1MTWV0YUVsZW1lbnQ6OnByb2Nl
c3MoKS4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkg
PT0gdGl0bGVUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSB0aXRsZVRhZykgewogICAg
ICAgICBwcm9jZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKHRva2VuKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gbm9zY3JpcHRUYWcpIHsKKyAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBub3NjcmlwdFRhZykgewogICAgICAgICBpZiAobV9vcHRp
b25zLnNjcmlwdEVuYWJsZWQpIHsKICAgICAgICAgICAgIHByb2Nlc3NHZW5lcmljUmF3VGV4dFN0
YXJ0VGFnKHRva2VuKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAg
ICAgIG1fdHJlZS5pbnNlcnRIVE1MRWxlbWVudCgmdG9rZW4pOwotICAgICAgICBtX2luc2VydGlv
bk1vZGUgPSBJbnNlcnRpb25Nb2RlOjpJbkhlYWROb3NjcmlwdDsKKyAgICAgICAgbV90cmVlLmlu
c2VydEhUTUxFbGVtZW50KHRva2VuKTsKKyAgICAgICAgc2V0SW5zZXJ0aW9uTW9kZShJbnNlcnRp
b25Nb2RlOjpJbkhlYWROb3NjcmlwdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KLSAg
ICBpZiAodG9rZW4ubmFtZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLm5hbWUoKSA9PSBzdHls
ZVRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IG5vZnJhbWVzVGFnIHx8IHRva2VuLT5u
YW1lKCkgPT0gc3R5bGVUYWcpIHsKICAgICAgICAgcHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRU
YWcodG9rZW4pOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9Ci0gICAgaWYgKHRva2VuLm5h
bWUoKSA9PSBzY3JpcHRUYWcpIHsKKyAgICBpZiAodG9rZW4tPm5hbWUoKSA9PSBzY3JpcHRUYWcp
IHsKICAgICAgICAgcHJvY2Vzc1NjcmlwdFN0YXJ0VGFnKHRva2VuKTsKLSAgICAgICAgaWYgKG1f
b3B0aW9ucy51c2VQcmVIVE1MNVBhcnNlclF1aXJrcyAmJiB0b2tlbi5zZWxmQ2xvc2luZygpKQor
ICAgICAgICBpZiAobV9vcHRpb25zLnVzZVByZUhUTUw1UGFyc2VyUXVpcmtzICYmIHRva2VuLT5z
ZWxmQ2xvc2luZygpKQogICAgICAgICAgICAgcHJvY2Vzc0Zha2VFbmRUYWcoc2NyaXB0VGFnKTsK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5U
KQotICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gdGVtcGxhdGVUYWcpIHsKKyAgICBpZiAodG9rZW4t
Pm5hbWUoKSA9PSB0ZW1wbGF0ZVRhZykgewogICAgICAgICBwcm9jZXNzVGVtcGxhdGVTdGFydFRh
Zyh0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICNlbmRpZgotICAgIGlmICh0
b2tlbi5uYW1lKCkgPT0gaGVhZFRhZykgeworICAgIGlmICh0b2tlbi0+bmFtZSgpID09IGhlYWRU
YWcpIHsKICAgICAgICAgcGFyc2VFcnJvcih0b2tlbik7CiAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9j
ZXNzR2VuZXJpY1JDREFUQVN0YXJ0VGFnKEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6cHJvY2Vzc0dlbmVyaWNSQ0RBVEFTdGFydFRhZyhBdG9taWNIVE1MVG9r
ZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFy
dFRhZyk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAgQVNTRVJU
KHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV90cmVlLmluc2Vy
dEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBpZiAobV9wYXJzZXIudG9rZW5pemVyKCkpCiAgICAg
ICAgIG1fcGFyc2VyLnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpSQ0RBVEFT
dGF0ZSk7CiAgICAgbV9vcmlnaW5hbEluc2VydGlvbk1vZGUgPSBtX2luc2VydGlvbk1vZGU7Ci0g
ICAgbV9pbnNlcnRpb25Nb2RlID0gSW5zZXJ0aW9uTW9kZTo6VGV4dDsKKyAgICBzZXRJbnNlcnRp
b25Nb2RlKEluc2VydGlvbk1vZGU6OlRleHQpOwogfQogCi12b2lkIEhUTUxUcmVlQnVpbGRlcjo6
cHJvY2Vzc0dlbmVyaWNSYXdUZXh0U3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK3Zv
aWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4qIHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
OjpTdGFydFRhZyk7Ci0gICAgbV90cmVlLmluc2VydEhUTUxFbGVtZW50KCZ0b2tlbik7CisgICAg
QVNTRVJUKHRva2VuLT50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRhZyk7CisgICAgbV90cmVl
Lmluc2VydEhUTUxFbGVtZW50KHRva2VuKTsKICAgICBpZiAobV9wYXJzZXIudG9rZW5pemVyKCkp
CiAgICAgICAgIG1fcGFyc2VyLnRva2VuaXplcigpLT5zZXRTdGF0ZShIVE1MVG9rZW5pemVyOjpS
QVdURVhUU3RhdGUpOwogICAgIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlID0gbV9pbnNlcnRpb25N
b2RlOwotICAgIG1faW5zZXJ0aW9uTW9kZSA9IEluc2VydGlvbk1vZGU6OlRleHQ7CisgICAgc2V0
SW5zZXJ0aW9uTW9kZShJbnNlcnRpb25Nb2RlOjpUZXh0KTsKIH0KIAotdm9pZCBIVE1MVHJlZUJ1
aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQordm9p
ZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4q
IHRva2VuKQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuOjpTdGFydFRh
Zyk7Ci0gICAgbV90cmVlLmluc2VydFNjcmlwdEVsZW1lbnQoJnRva2VuKTsKKyAgICBBU1NFUlQo
dG9rZW4tPnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKTsKKyAgICBtX3RyZWUuaW5zZXJ0
U2NyaXB0RWxlbWVudCh0b2tlbik7CiAgICAgaWYgKG1fcGFyc2VyLnRva2VuaXplcigpKQogICAg
ICAgICBtX3BhcnNlci50b2tlbml6ZXIoKS0+c2V0U3RhdGUoSFRNTFRva2VuaXplcjo6U2NyaXB0
RGF0YVN0YXRlKTsKICAgICBtX29yaWdpbmFsSW5zZXJ0aW9uTW9kZSA9IG1faW5zZXJ0aW9uTW9k
ZTsKQEAgLTI3OTMsNTUgKzI4MzcsNTUgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NT
Y3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogCiAgICAgbV9zY3JpcHRUb1By
b2Nlc3NTdGFydFBvc2l0aW9uID0gcG9zaXRpb247CiAKLSAgICBtX2luc2VydGlvbk1vZGUgPSBJ
bnNlcnRpb25Nb2RlOjpUZXh0OworICAgIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZTo6
VGV4dCk7CiB9CiAKIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9jdXJy
ZW50LXdvcmsvI2FkanVzdGVkLWN1cnJlbnQtbm9kZQotSFRNTFN0YWNrSXRlbSYgSFRNTFRyZWVC
dWlsZGVyOjphZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0oKSBjb25zdAorSFRNTFN0YWNrSXRlbSog
SFRNTFRyZWVCdWlsZGVyOjphZGp1c3RlZEN1cnJlbnRTdGFja0l0ZW0oKSBjb25zdAogewogICAg
IEFTU0VSVCghbV90cmVlLmlzRW1wdHkoKSk7CiAgICAgaWYgKGlzUGFyc2luZ0ZyYWdtZW50KCkg
JiYgbV90cmVlLm9wZW5FbGVtZW50cygpLT5oYXNPbmx5T25lRWxlbWVudCgpKQogICAgICAgICBy
ZXR1cm4gbV9mcmFnbWVudENvbnRleHQuY29udGV4dEVsZW1lbnRTdGFja0l0ZW0oKTsKIAotICAg
IHJldHVybiAqbV90cmVlLmN1cnJlbnRTdGFja0l0ZW0oKTsKKyAgICByZXR1cm4gbV90cmVlLmN1
cnJlbnRTdGFja0l0ZW0oKTsKIH0KIAogLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3NwZWNzL3dl
Yi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdHJlZS1jb25zdHJ1Y3Rpb24uaHRtbCN0cmVl
LWNvbnN0cnVjdGlvbgotYm9vbCBIVE1MVHJlZUJ1aWxkZXI6OnNob3VsZFByb2Nlc3NUb2tlbklu
Rm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgSFRNTFRyZWVCdWls
ZGVyOjpzaG91bGRQcm9jZXNzVG9rZW5JbkZvcmVpZ25Db250ZW50KEF0b21pY0hUTUxUb2tlbiog
dG9rZW4pCiB7CiAgICAgaWYgKG1fdHJlZS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBIVE1MU3RhY2tJdGVtJiBhZGp1c3RlZEN1cnJlbnROb2RlID0gYWRqdXN0ZWRDdXJy
ZW50U3RhY2tJdGVtKCk7Ci0gICAgaWYgKGFkanVzdGVkQ3VycmVudE5vZGUuaXNJbkhUTUxOYW1l
c3BhY2UoKSkKKyAgICBIVE1MU3RhY2tJdGVtKiBhZGp1c3RlZEN1cnJlbnROb2RlID0gYWRqdXN0
ZWRDdXJyZW50U3RhY2tJdGVtKCk7CisgICAgaWYgKGFkanVzdGVkQ3VycmVudE5vZGUtPmlzSW5I
VE1MTmFtZXNwYWNlKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoSFRNTEVsZW1l
bnRTdGFjazo6aXNNYXRoTUxUZXh0SW50ZWdyYXRpb25Qb2ludCgmYWRqdXN0ZWRDdXJyZW50Tm9k
ZSkpIHsKLSAgICAgICAgaWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnCi0g
ICAgICAgICAgICAmJiB0b2tlbi5uYW1lKCkgIT0gTWF0aE1MTmFtZXM6Om1nbHlwaFRhZwotICAg
ICAgICAgICAgJiYgdG9rZW4ubmFtZSgpICE9IE1hdGhNTE5hbWVzOjptYWxpZ25tYXJrVGFnKQor
ICAgIGlmIChIVE1MRWxlbWVudFN0YWNrOjppc01hdGhNTFRleHRJbnRlZ3JhdGlvblBvaW50KGFk
anVzdGVkQ3VycmVudE5vZGUpKSB7CisgICAgICAgIGlmICh0b2tlbi0+dHlwZSgpID09IEhUTUxU
b2tlbjo6U3RhcnRUYWcKKyAgICAgICAgICAgICYmIHRva2VuLT5uYW1lKCkgIT0gTWF0aE1MTmFt
ZXM6Om1nbHlwaFRhZworICAgICAgICAgICAgJiYgdG9rZW4tPm5hbWUoKSAhPSBNYXRoTUxOYW1l
czo6bWFsaWdubWFya1RhZykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OkNoYXJhY3RlcikKKyAgICAgICAgaWYgKHRva2Vu
LT50eXBlKCkgPT0gSFRNTFRva2VuOjpDaGFyYWN0ZXIpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgfQotICAgIGlmIChhZGp1c3RlZEN1cnJlbnROb2RlLmhhc1RhZ05hbWUoTWF0aE1M
TmFtZXM6OmFubm90YXRpb25feG1sVGFnKQotICAgICAgICAmJiB0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuOjpTdGFydFRhZwotICAgICAgICAmJiB0b2tlbi5uYW1lKCkgPT0gU1ZHTmFtZXM6OnN2
Z1RhZykKKyAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS0+aGFzVGFnTmFtZShNYXRoTUxOYW1l
czo6YW5ub3RhdGlvbl94bWxUYWcpCisgICAgICAgICYmIHRva2VuLT50eXBlKCkgPT0gSFRNTFRv
a2VuOjpTdGFydFRhZworICAgICAgICAmJiB0b2tlbi0+bmFtZSgpID09IFNWR05hbWVzOjpzdmdU
YWcpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoSFRNTEVsZW1lbnRTdGFjazo6aXNI
VE1MSW50ZWdyYXRpb25Qb2ludCgmYWRqdXN0ZWRDdXJyZW50Tm9kZSkpIHsKLSAgICAgICAgaWYg
KHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW46OlN0YXJ0VGFnKQorICAgIGlmIChIVE1MRWxlbWVu
dFN0YWNrOjppc0hUTUxJbnRlZ3JhdGlvblBvaW50KGFkanVzdGVkQ3VycmVudE5vZGUpKSB7Cisg
ICAgICAgIGlmICh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6U3RhcnRUYWcpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
OjpDaGFyYWN0ZXIpCisgICAgICAgIGlmICh0b2tlbi0+dHlwZSgpID09IEhUTUxUb2tlbjo6Q2hh
cmFjdGVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICBpZiAodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlbjo6RW5kT2ZGaWxlKQorICAgIGlmICh0b2tlbi0+dHlwZSgpID09
IEhUTUxUb2tlbjo6RW5kT2ZGaWxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKLXZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwcm9jZXNzVG9rZW5JbkZvcmVpZ25D
b250ZW50KEF0b21pY0hUTUxUb2tlbiYgdG9rZW4pCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJv
Y2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qIHRva2VuKQogewotICAg
IEhUTUxTdGFja0l0ZW0mIGFkanVzdGVkQ3VycmVudE5vZGUgPSBhZGp1c3RlZEN1cnJlbnRTdGFj
a0l0ZW0oKTsKKyAgICBIVE1MU3RhY2tJdGVtKiBhZGp1c3RlZEN1cnJlbnROb2RlID0gYWRqdXN0
ZWRDdXJyZW50U3RhY2tJdGVtKCk7CiAgICAgCi0gICAgc3dpdGNoICh0b2tlbi50eXBlKCkpIHsK
KyAgICBzd2l0Y2ggKHRva2VuLT50eXBlKCkpIHsKICAgICBjYXNlIEhUTUxUb2tlbjo6VW5pbml0
aWFsaXplZDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIGJyZWFrOwpA
QCAtMjg0OSw2NyArMjg5Myw2NyBAQCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2Vu
SW5Gb3JlaWduQ29udGVudChBdG9taWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBwYXJzZUVy
cm9yKHRva2VuKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBIVE1MVG9rZW46OlN0YXJ0VGFn
OiB7Ci0gICAgICAgIGlmICh0b2tlbi5uYW1lKCkgPT0gYlRhZwotICAgICAgICAgICAgfHwgdG9r
ZW4ubmFtZSgpID09IGJpZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGJsb2Nr
cXVvdGVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBib2R5VGFnCi0gICAgICAg
ICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gYnJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUo
KSA9PSBjZW50ZXJUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBjb2RlVGFnCi0g
ICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gZGRUYWcKLSAgICAgICAgICAgIHx8IHRva2Vu
Lm5hbWUoKSA9PSBkaXZUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBkbFRhZwot
ICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGR0VGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gZW1UYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBlbWJlZFRh
ZwotICAgICAgICAgICAgfHwgaXNOdW1iZXJlZEhlYWRlclRhZyh0b2tlbi5uYW1lKCkpCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaGVhZFRhZwotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGhyVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gaVRhZwotICAg
ICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IGltZ1RhZwotICAgICAgICAgICAgfHwgdG9rZW4u
bmFtZSgpID09IGxpVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gbGlzdGluZ1Rh
ZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG1lbnVUYWcKLSAgICAgICAgICAgIHx8
IHRva2VuLm5hbWUoKSA9PSBtZXRhVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0g
bm9iclRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IG9sVGFnCi0gICAgICAgICAg
ICB8fCB0b2tlbi5uYW1lKCkgPT0gcFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHByZVRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHJ1YnlUYWcKLSAgICAgICAg
ICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkg
PT0gc21hbGxUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9PSBzcGFuVGFnCi0gICAg
ICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3Ryb25nVGFnCi0gICAgICAgICAgICB8fCB0b2tl
bi5uYW1lKCkgPT0gc3RyaWtlVGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3Vi
VGFnCi0gICAgICAgICAgICB8fCB0b2tlbi5uYW1lKCkgPT0gc3VwVGFnCi0gICAgICAgICAgICB8
fCB0b2tlbi5uYW1lKCkgPT0gdGFibGVUYWcKLSAgICAgICAgICAgIHx8IHRva2VuLm5hbWUoKSA9
PSB0dFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09IHVUYWcKLSAgICAgICAgICAg
IHx8IHRva2VuLm5hbWUoKSA9PSB1bFRhZwotICAgICAgICAgICAgfHwgdG9rZW4ubmFtZSgpID09
IHZhclRhZwotICAgICAgICAgICAgfHwgKHRva2VuLm5hbWUoKSA9PSBmb250VGFnICYmICh0b2tl
bi5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9yQXR0cikgfHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShm
YWNlQXR0cikgfHwgdG9rZW4uZ2V0QXR0cmlidXRlSXRlbShzaXplQXR0cikpKSkgeworICAgICAg
ICBpZiAodG9rZW4tPm5hbWUoKSA9PSBiVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgp
ID09IGJpZ1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBibG9ja3F1b3RlVGFn
CisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGJvZHlUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gYnJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
Y2VudGVyVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGNvZGVUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gZGRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gZGl2VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGRsVGFnCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGR0VGFnCisgICAgICAgICAgICB8fCB0b2tl
bi0+bmFtZSgpID09IGVtVGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGVtYmVk
VGFnCisgICAgICAgICAgICB8fCBpc051bWJlcmVkSGVhZGVyVGFnKHRva2VuLT5uYW1lKCkpCisg
ICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IGhlYWRUYWcKKyAgICAgICAgICAgIHx8IHRv
a2VuLT5uYW1lKCkgPT0gaHJUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gaVRh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBpbWdUYWcKKyAgICAgICAgICAgIHx8
IHRva2VuLT5uYW1lKCkgPT0gbGlUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0g
bGlzdGluZ1RhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBtZW51VGFnCisgICAg
ICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IG1ldGFUYWcKKyAgICAgICAgICAgIHx8IHRva2Vu
LT5uYW1lKCkgPT0gbm9iclRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBvbFRh
ZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBwVGFnCisgICAgICAgICAgICB8fCB0
b2tlbi0+bmFtZSgpID09IHByZVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBy
dWJ5VGFnCisgICAgICAgICAgICB8fCB0b2tlbi0+bmFtZSgpID09IHNUYWcKKyAgICAgICAgICAg
IHx8IHRva2VuLT5uYW1lKCkgPT0gc21hbGxUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1l
KCkgPT0gc3BhblRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSBzdHJvbmdUYWcK
KyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gc3RyaWtlVGFnCisgICAgICAgICAgICB8
fCB0b2tlbi0+bmFtZSgpID09IHN1YlRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9
PSBzdXBUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdGFibGVUYWcKKyAgICAg
ICAgICAgIHx8IHRva2VuLT5uYW1lKCkgPT0gdHRUYWcKKyAgICAgICAgICAgIHx8IHRva2VuLT5u
YW1lKCkgPT0gdVRhZworICAgICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB1bFRhZworICAg
ICAgICAgICAgfHwgdG9rZW4tPm5hbWUoKSA9PSB2YXJUYWcKKyAgICAgICAgICAgIHx8ICh0b2tl
bi0+bmFtZSgpID09IGZvbnRUYWcgJiYgKHRva2VuLT5nZXRBdHRyaWJ1dGVJdGVtKGNvbG9yQXR0
cikgfHwgdG9rZW4tPmdldEF0dHJpYnV0ZUl0ZW0oZmFjZUF0dHIpIHx8IHRva2VuLT5nZXRBdHRy
aWJ1dGVJdGVtKHNpemVBdHRyKSkpKSB7CiAgICAgICAgICAgICBwYXJzZUVycm9yKHRva2VuKTsK
ICAgICAgICAgICAgIG1fdHJlZS5vcGVuRWxlbWVudHMoKS0+cG9wVW50aWxGb3JlaWduQ29udGVu
dFNjb3BlTWFya2VyKCk7CiAgICAgICAgICAgICBwcm9jZXNzU3RhcnRUYWcodG9rZW4pOwogICAg
ICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYg
Y3VycmVudE5hbWVzcGFjZSA9IGFkanVzdGVkQ3VycmVudE5vZGUubmFtZXNwYWNlVVJJKCk7Cisg
ICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgY3VycmVudE5hbWVzcGFjZSA9IGFkanVzdGVkQ3Vy
cmVudE5vZGUtPm5hbWVzcGFjZVVSSSgpOwogICAgICAgICBpZiAoY3VycmVudE5hbWVzcGFjZSA9
PSBNYXRoTUxOYW1lczo6bWF0aG1sTmFtZXNwYWNlVVJJKQotICAgICAgICAgICAgYWRqdXN0TWF0
aE1MQXR0cmlidXRlcyh0b2tlbik7CisgICAgICAgICAgICBhZGp1c3RNYXRoTUxBdHRyaWJ1dGVz
KCp0b2tlbik7CiAgICAgICAgIGlmIChjdXJyZW50TmFtZXNwYWNlID09IFNWR05hbWVzOjpzdmdO
YW1lc3BhY2VVUkkpIHsKLSAgICAgICAgICAgIGFkanVzdFNWR1RhZ05hbWVDYXNlKHRva2VuKTsK
LSAgICAgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0ZXModG9rZW4pOworICAgICAgICAgICAgYWRq
dXN0U1ZHVGFnTmFtZUNhc2UoKnRva2VuKTsKKyAgICAgICAgICAgIGFkanVzdFNWR0F0dHJpYnV0
ZXMoKnRva2VuKTsKICAgICAgICAgfQotICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcyh0
b2tlbik7Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRGb3JlaWduRWxlbWVudCgmdG9rZW4sIGN1cnJl
bnROYW1lc3BhY2UpOworICAgICAgICBhZGp1c3RGb3JlaWduQXR0cmlidXRlcygqdG9rZW4pOwor
ICAgICAgICBtX3RyZWUuaW5zZXJ0Rm9yZWlnbkVsZW1lbnQodG9rZW4sIGN1cnJlbnROYW1lc3Bh
Y2UpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1MVG9rZW46OkVuZFRhZzog
ewotICAgICAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS5uYW1lc3BhY2VVUkkoKSA9PSBTVkdO
YW1lczo6c3ZnTmFtZXNwYWNlVVJJKQotICAgICAgICAgICAgYWRqdXN0U1ZHVGFnTmFtZUNhc2Uo
dG9rZW4pOworICAgICAgICBpZiAoYWRqdXN0ZWRDdXJyZW50Tm9kZS0+bmFtZXNwYWNlVVJJKCkg
PT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFjZVVSSSkKKyAgICAgICAgICAgIGFkanVzdFNWR1RhZ05h
bWVDYXNlKCp0b2tlbik7CiAKLSAgICAgICAgaWYgKHRva2VuLm5hbWUoKSA9PSBTVkdOYW1lczo6
c2NyaXB0VGFnICYmIG1fdHJlZS5jdXJyZW50U3RhY2tJdGVtKCktPmhhc1RhZ05hbWUoU1ZHTmFt
ZXM6OnNjcmlwdFRhZykpIHsKKyAgICAgICAgaWYgKHRva2VuLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OnNjcmlwdFRhZyAmJiBtX3RyZWUuY3VycmVudFN0YWNrSXRlbSgpLT5oYXNUYWdOYW1lKFNWR05h
bWVzOjpzY3JpcHRUYWcpKSB7CiAgICAgICAgICAgICBpZiAoc2NyaXB0aW5nQ29udGVudElzQWxs
b3dlZChtX3RyZWUucGFyc2VyQ29udGVudFBvbGljeSgpKSkKICAgICAgICAgICAgICAgICBtX3Nj
cmlwdFRvUHJvY2VzcyA9IG1fdHJlZS5jdXJyZW50RWxlbWVudCgpOwogICAgICAgICAgICAgbV90
cmVlLm9wZW5FbGVtZW50cygpLT5wb3AoKTsKQEAgLTI5MTcsMTEgKzI5NjEsMTEgQEAgdm9pZCBI
VE1MVHJlZUJ1aWxkZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fdHJlZS5jdXJyZW50U3RhY2tJ
dGVtKCktPmlzSW5IVE1MTmFtZXNwYWNlKCkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGNvZGUganVzdCB3YW50cyBhbiBFbGVtZW50KiBpdGVyYXRvciwgaW5zdGVhZCBvZiBhbiBFbGVt
ZW50UmVjb3JkKgotICAgICAgICAgICAgYXV0byogbm9kZVJlY29yZCA9IG1fdHJlZS5vcGVuRWxl
bWVudHMoKS0+dG9wUmVjb3JkKCk7Ci0gICAgICAgICAgICBpZiAoIW5vZGVSZWNvcmQtPnN0YWNr
SXRlbSgpLT5oYXNMb2NhbE5hbWUodG9rZW4ubmFtZSgpKSkKKyAgICAgICAgICAgIEhUTUxFbGVt
ZW50U3RhY2s6OkVsZW1lbnRSZWNvcmQqIG5vZGVSZWNvcmQgPSBtX3RyZWUub3BlbkVsZW1lbnRz
KCktPnRvcFJlY29yZCgpOworICAgICAgICAgICAgaWYgKCFub2RlUmVjb3JkLT5zdGFja0l0ZW0o
KS0+aGFzTG9jYWxOYW1lKHRva2VuLT5uYW1lKCkpKQogICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IodG9rZW4pOwogICAgICAgICAgICAgd2hpbGUgKDEpIHsKLSAgICAgICAgICAgICAgICBpZiAo
bm9kZVJlY29yZC0+c3RhY2tJdGVtKCktPmhhc0xvY2FsTmFtZSh0b2tlbi5uYW1lKCkpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKG5vZGVSZWNvcmQtPnN0YWNrSXRlbSgpLT5oYXNMb2NhbE5hbWUo
dG9rZW4tPm5hbWUoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgbV90cmVlLm9wZW5FbGVtZW50
cygpLT5wb3BVbnRpbFBvcHBlZChub2RlUmVjb3JkLT5lbGVtZW50KCkpOwogICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgfQpAQCAtMjkzNiwxMCArMjk4MCwxMCBA
QCB2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9t
aWNIVE1MVG9rZW4mIHRva2VuKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgY2FzZSBIVE1M
VG9rZW46OkNvbW1lbnQ6Ci0gICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KCZ0b2tlbik7Cisg
ICAgICAgIG1fdHJlZS5pbnNlcnRDb21tZW50KHRva2VuKTsKICAgICAgICAgcmV0dXJuOwogICAg
IGNhc2UgSFRNTFRva2VuOjpDaGFyYWN0ZXI6IHsKLSAgICAgICAgU3RyaW5nIGNoYXJhY3RlcnMg
PSBTdHJpbmcodG9rZW4uY2hhcmFjdGVycygpLCB0b2tlbi5jaGFyYWN0ZXJzTGVuZ3RoKCkpOwor
ICAgICAgICBTdHJpbmcgY2hhcmFjdGVycyA9IFN0cmluZyh0b2tlbi0+Y2hhcmFjdGVycygpLCB0
b2tlbi0+Y2hhcmFjdGVyc0xlbmd0aCgpKTsKICAgICAgICAgbV90cmVlLmluc2VydFRleHROb2Rl
KGNoYXJhY3RlcnMpOwogICAgICAgICBpZiAobV9mcmFtZXNldE9rICYmICFpc0FsbFdoaXRlc3Bh
Y2VPclJlcGxhY2VtZW50Q2hhcmFjdGVycyhjaGFyYWN0ZXJzKSkKICAgICAgICAgICAgIG1fZnJh
bWVzZXRPayA9IGZhbHNlOwpAQCAtMjk1Myw4ICsyOTk3LDYgQEAgdm9pZCBIVE1MVHJlZUJ1aWxk
ZXI6OnByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuJiB0b2tlbikK
IAogdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVkKCkKIHsKLSAgICBBU1NFUlQoIW1fZGVz
dHJveWVkKTsKLQogICAgIGlmIChpc1BhcnNpbmdGcmFnbWVudCgpKQogICAgICAgICByZXR1cm47
CiAKQEAgLTI5NjIsMTEgKzMwMDQsMTIgQEAgdm9pZCBIVE1MVHJlZUJ1aWxkZXI6OmZpbmlzaGVk
KCkKICAgICBBU1NFUlQobV90ZW1wbGF0ZUluc2VydGlvbk1vZGVzLmlzRW1wdHkoKSk7CiAjZW5k
aWYKIAorICAgIEFTU0VSVChtX2lzQXR0YWNoZWQpOworICAgIC8vIFdhcm5pbmcsIHRoaXMgbWF5
IGRldGFjaCB0aGUgcGFyc2VyLiBEbyBub3QgZG8gYW55dGhpbmcgZWxzZSBhZnRlciB0aGlzLgog
ICAgIG1fdHJlZS5maW5pc2hlZFBhcnNpbmcoKTsKLSAgICAvLyBUaGUgdHJlZSBidWlsZGVyIG1p
Z2h0IGhhdmUgYmVlbiBkZXN0cm95ZWQgYXMgYW4gaW5kaXJlY3QgcmVzdWx0IG9mIGZpbmlzaGlu
ZyB0aGUgcGFyc2luZy4KIH0KIAotaW5saW5lIHZvaWQgSFRNTFRyZWVCdWlsZGVyOjpwYXJzZUVy
cm9yKEF0b21pY0hUTUxUb2tlbiYpCit2b2lkIEhUTUxUcmVlQnVpbGRlcjo6cGFyc2VFcnJvcihB
dG9taWNIVE1MVG9rZW4qKQogewogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MVHJlZUJ1aWxkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hU
TUxUcmVlQnVpbGRlci5oCmluZGV4IDYyNGRmYTkzNjJmYTZkMWMzNDI3ZTQzMjY0MGRhZTBjMGQz
MTVhZDMuLmFkOWZhODk3MDY5MWYwYjljZWRmODQxNzdiMWI5NGFhMGIxNGE3YzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxUcmVlQnVpbGRlci5oCkBAIC0xLDYgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUsIEluYy4gQWxsIFJpZ2h0cyBSZXNl
cnZlZC4KLSAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNywzNyArMjcsNjQg
QEAKICNpZm5kZWYgSFRNTFRyZWVCdWlsZGVyX2gKICNkZWZpbmUgSFRNTFRyZWVCdWlsZGVyX2gK
IAorI2luY2x1ZGUgIkZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lvbi5oIgogI2luY2x1ZGUgIkhU
TUxDb25zdHJ1Y3Rpb25TaXRlLmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRTdGFjay5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtYXR0aW5nRWxlbWVudExpc3QuaCIKICNpbmNsdWRlICJIVE1MUGFyc2Vy
T3B0aW9ucy5oIgorI2luY2x1ZGUgIkhUTUxTdGFja0l0ZW0uaCIKKyNpbmNsdWRlICJIVE1MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NSZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9UZXh0UG9zaXRpb24uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBBdG9t
aWNIVE1MVG9rZW47CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIERvY3VtZW50RnJhZ21lbnQ7Citj
bGFzcyBFbGVtZW50OworY2xhc3MgRnJhbWU7CitjbGFzcyBIVE1MVG9rZW47CitjbGFzcyBIVE1M
RG9jdW1lbnQ7CitjbGFzcyBOb2RlOwogY2xhc3MgSFRNTERvY3VtZW50UGFyc2VyOwogCiBjbGFz
cyBIVE1MVHJlZUJ1aWxkZXIgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEhUTUxUcmVlQnVpbGRlcik7IFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogcHVibGljOgotICAgIEhUTUxUcmVlQnVpbGRlcihjb25zdCBIVE1MRG9jdW1lbnRQYXJz
ZXImLCBIVE1MRG9jdW1lbnQmLCBQYXJzZXJDb250ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2Vy
T3B0aW9ucyYpOwotICAgIEhUTUxUcmVlQnVpbGRlcihjb25zdCBIVE1MRG9jdW1lbnRQYXJzZXIm
LCBEb2N1bWVudEZyYWdtZW50JiwgRWxlbWVudCYgY29udGV4dEVsZW1lbnQsIFBhcnNlckNvbnRl
bnRQb2xpY3ksIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zJik7Ci0gICAgdm9pZCBzZXRTaG91bGRT
a2lwTGVhZGluZ05ld2xpbmUoYm9vbCk7Ci0KKyAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3Vt
ZW50UGFyc2VyJiwgSFRNTERvY3VtZW50JiwgUGFyc2VyQ29udGVudFBvbGljeSwgY29uc3QgSFRN
TFBhcnNlck9wdGlvbnMmKTsKKyAgICBIVE1MVHJlZUJ1aWxkZXIoSFRNTERvY3VtZW50UGFyc2Vy
JiwgRG9jdW1lbnRGcmFnbWVudCYsIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50LCBQYXJzZXJDb250
ZW50UG9saWN5LCBjb25zdCBIVE1MUGFyc2VyT3B0aW9ucyYpOwogICAgIH5IVE1MVHJlZUJ1aWxk
ZXIoKTsKIAotICAgIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQoKSBjb25zdDsKKyAgICBjb25zdCBI
VE1MRWxlbWVudFN0YWNrKiBvcGVuRWxlbWVudHMoKSBjb25zdCB7IHJldHVybiBtX3RyZWUub3Bl
bkVsZW1lbnRzKCk7IH0KKworICAgIGJvb2wgaXNQYXJzaW5nRnJhZ21lbnQoKSBjb25zdCB7IHJl
dHVybiAhIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50KCk7IH0KKyNpZiBFTkFCTEUoVEVNUExB
VEVfRUxFTUVOVCkKKyAgICBib29sIGlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSBjb25zdCB7
IHJldHVybiBtX3RyZWUub3BlbkVsZW1lbnRzKCktPmhhc1RlbXBsYXRlSW5IVE1MU2NvcGUoKTsg
fQorI2Vsc2UKKyAgICBib29sIGlzUGFyc2luZ1RlbXBsYXRlQ29udGVudHMoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQorI2VuZGlmCisgICAgYm9vbCBpc1BhcnNpbmdGcmFnbWVudE9yVGVtcGxh
dGVDb250ZW50cygpIGNvbnN0IHsgcmV0dXJuIGlzUGFyc2luZ0ZyYWdtZW50KCkgfHwgaXNQYXJz
aW5nVGVtcGxhdGVDb250ZW50cygpOyB9CiAKLSAgICB2b2lkIGNvbnN0cnVjdFRyZWUoQXRvbWlj
SFRNTFRva2VuJik7CisgICAgdm9pZCBkZXRhY2goKTsKIAotICAgIGJvb2wgaGFzUGFyc2VyQmxv
Y2tpbmdTY3JpcHQoKSBjb25zdDsKKyAgICB2b2lkIGNvbnN0cnVjdFRyZWUoQXRvbWljSFRNTFRv
a2VuKik7CiAKKyAgICBib29sIGhhc1BhcnNlckJsb2NraW5nU2NyaXB0KCkgY29uc3QgeyByZXR1
cm4gISFtX3NjcmlwdFRvUHJvY2VzczsgfQogICAgIC8vIE11c3QgYmUgY2FsbGVkIHRvIHRha2Ug
dGhlIHBhcnNlci1ibG9ja2luZyBzY3JpcHQgYmVmb3JlIGNhbGxpbmcgdGhlIHBhcnNlciBhZ2Fp
bi4KLSAgICBSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlwdFRvUHJvY2VzcyhUZXh0UG9zaXRpb24m
IHNjcmlwdFN0YXJ0UG9zaXRpb24pOworICAgIFBhc3NSZWZQdHI8RWxlbWVudD4gdGFrZVNjcmlw
dFRvUHJvY2VzcyhUZXh0UG9zaXRpb24mIHNjcmlwdFN0YXJ0UG9zaXRpb24pOwogCiAgICAgLy8g
RG9uZSwgY2xvc2UgYW55IG9wZW4gdGFncywgZXRjLgogICAgIHZvaWQgZmluaXNoZWQoKTsKIAor
ICAgIHZvaWQgc2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGJvb2wgc2hvdWxkU2tpcCkgeyBt
X3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSA9IHNob3VsZFNraXA7IH0KKwogcHJpdmF0ZToKICAg
ICBjbGFzcyBFeHRlcm5hbENoYXJhY3RlclRva2VuQnVmZmVyOwotCiAgICAgLy8gUmVwcmVzZW50
cyBIVE1MNSAiaW5zZXJ0aW9uIG1vZGUiCiAgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI2luc2VydGlv
bi1tb2RlCiAgICAgZW51bSBjbGFzcyBJbnNlcnRpb25Nb2RlIHsKQEAgLTY3LDkgKzk0LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgSW5IZWFkLAogICAgICAgICBJbkhlYWROb3NjcmlwdCwKICAgICAg
ICAgQWZ0ZXJIZWFkLAotI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQogICAgICAgICBUZW1w
bGF0ZUNvbnRlbnRzLAotI2VuZGlmCiAgICAgICAgIEluQm9keSwKICAgICAgICAgVGV4dCwKICAg
ICAgICAgSW5UYWJsZSwKQEAgLTg4LDU0ICsxMTMsNTIgQEAgcHJpdmF0ZToKICAgICAgICAgQWZ0
ZXJBZnRlckZyYW1lc2V0LAogICAgIH07CiAKLSAgICBib29sIGlzUGFyc2luZ1RlbXBsYXRlQ29u
dGVudHMoKSBjb25zdDsKLSAgICBib29sIGlzUGFyc2luZ0ZyYWdtZW50T3JUZW1wbGF0ZUNvbnRl
bnRzKCkgY29uc3Q7Ci0KLSNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pICYm
IFBMQVRGT1JNKElPUykKKyNpZiBFTkFCTEUoVEVMRVBIT05FX05VTUJFUl9ERVRFQ1RJT04pCiAg
ICAgdm9pZCBpbnNlcnRQaG9uZU51bWJlckxpbmsoY29uc3QgU3RyaW5nJik7CiAgICAgdm9pZCBs
aW5raWZ5UGhvbmVOdW1iZXJzKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKLSAgICB2b2lkIHBy
b2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4mKTsKLQotICAgIHZvaWQgcHJvY2Vzc0RvY3R5cGVU
b2tlbihBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NTdGFydFRhZyhBdG9taWNI
VE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0g
ICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nl
c3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzRW5kT2ZGaWxl
KEF0b21pY0hUTUxUb2tlbiYpOwotCi0gICAgYm9vbCBwcm9jZXNzU3RhcnRUYWdGb3JJbkhlYWQo
QXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJbkJvZHkoQXRv
bWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJblRhYmxlKEF0b21p
Y0hUTUxUb2tlbiYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQm9keShBdG9taWNIVE1M
VG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0b21pY0hUTUxUb2tl
biYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0b21pY0hUTUxUb2tl
biYpOwotICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hUTUxUb2tlbiYpOwot
ICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9rZW4mKTsKLQotICAg
IHZvaWQgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsK
LSAgICB2b2lkIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWljSFRNTFRva2VuJik7
Ci0gICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNIVE1MVG9rZW4mKTsK
KyAgICB2b2lkIHByb2Nlc3NUb2tlbihBdG9taWNIVE1MVG9rZW4qKTsKKworICAgIHZvaWQgcHJv
Y2Vzc0RvY3R5cGVUb2tlbihBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NTdGFy
dFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWcoQXRvbWljSFRN
TFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzQ29tbWVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAg
ICB2b2lkIHByb2Nlc3NDaGFyYWN0ZXIoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9j
ZXNzRW5kT2ZGaWxlKEF0b21pY0hUTUxUb2tlbiopOworCisgICAgYm9vbCBwcm9jZXNzU3RhcnRU
YWdGb3JJbkhlYWQoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdG
b3JJbkJvZHkoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9jZXNzU3RhcnRUYWdGb3JJ
blRhYmxlKEF0b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQm9k
eShBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NFbmRUYWdGb3JJblRhYmxlKEF0
b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluVGFibGVCb2R5KEF0
b21pY0hUTUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluUm93KEF0b21pY0hU
TUxUb2tlbiopOworICAgIHZvaWQgcHJvY2Vzc0VuZFRhZ0ZvckluQ2VsbChBdG9taWNIVE1MVG9r
ZW4qKTsKKworICAgIHZvaWQgcHJvY2Vzc0lzaW5kZXhTdGFydFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NIdG1sU3RhcnRUYWdGb3JJbkJvZHkoQXRvbWlj
SFRNTFRva2VuKik7CisgICAgYm9vbCBwcm9jZXNzQm9keUVuZFRhZ0ZvckluQm9keShBdG9taWNI
VE1MVG9rZW4qKTsKICAgICBib29sIHByb2Nlc3NUYWJsZUVuZFRhZ0ZvckluVGFibGUoKTsKICAg
ICBib29sIHByb2Nlc3NDYXB0aW9uRW5kVGFnRm9ySW5DYXB0aW9uKCk7CiAgICAgYm9vbCBwcm9j
ZXNzQ29sZ3JvdXBFbmRUYWdGb3JJbkNvbHVtbkdyb3VwKCk7CiAgICAgYm9vbCBwcm9jZXNzVHJF
bmRUYWdGb3JJblJvdygpOwotCi0gICAgdm9pZCBwcm9jZXNzQW55T3RoZXJFbmRUYWdGb3JJbkJv
ZHkoQXRvbWljSFRNTFRva2VuJik7CisgICAgLy8gRklYTUU6IFRoaXMgZnVuY3Rpb24gc2hvdWxk
IGJlIGlubGluZWQgaW50byBpdHMgb25lIGNhbGwgc2l0ZSBvciBpdAorICAgIC8vIG5lZWRzIHRv
IGFzc2VydCB3aGljaCB0b2tlbnMgaXQgY2FuIGJlIGNhbGxlZCB3aXRoLgorICAgIHZvaWQgcHJv
Y2Vzc0FueU90aGVyRW5kVGFnRm9ySW5Cb2R5KEF0b21pY0hUTUxUb2tlbiopOwogCiAgICAgdm9p
ZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyKEV4dGVybmFsQ2hhcmFjdGVyVG9rZW5CdWZmZXImKTsK
ICAgICBpbmxpbmUgdm9pZCBwcm9jZXNzQ2hhcmFjdGVyQnVmZmVyRm9ySW5Cb2R5KEV4dGVybmFs
Q2hhcmFjdGVyVG9rZW5CdWZmZXImKTsKIAotICAgIHZvaWQgcHJvY2Vzc0Zha2VTdGFydFRhZyhj
b25zdCBRdWFsaWZpZWROYW1lJiwgVmVjdG9yPEF0dHJpYnV0ZT4mJiBhdHRyaWJ1dGVzID0gVmVj
dG9yPEF0dHJpYnV0ZT4oKSk7CisgICAgdm9pZCBwcm9jZXNzRmFrZVN0YXJ0VGFnKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcyA9IFZlY3Rv
cjxBdHRyaWJ1dGU+KCkpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgUXVhbGlm
aWVkTmFtZSYpOwogICAgIHZvaWQgcHJvY2Vzc0Zha2VFbmRUYWcoY29uc3QgQXRvbWljU3RyaW5n
Jik7CiAgICAgdm9pZCBwcm9jZXNzRmFrZUNoYXJhY3RlcnMoY29uc3QgU3RyaW5nJik7CiAgICAg
dm9pZCBwcm9jZXNzRmFrZVBFbmRUYWdJZlBJbkJ1dHRvblNjb3BlKCk7CiAKLSAgICB2b2lkIHBy
b2Nlc3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuJik7Ci0gICAgdm9pZCBw
cm9jZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICB2b2lk
IHByb2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKKyAgICB2b2lkIHByb2Nl
c3NHZW5lcmljUkNEQVRBU3RhcnRUYWcoQXRvbWljSFRNTFRva2VuKik7CisgICAgdm9pZCBwcm9j
ZXNzR2VuZXJpY1Jhd1RleHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHBy
b2Nlc3NTY3JpcHRTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKIAogICAgIC8vIERlZmF1bHQg
cHJvY2Vzc2luZyBmb3IgdGhlIGRpZmZlcmVudCBpbnNlcnRpb24gbW9kZXMuCiAgICAgdm9pZCBk
ZWZhdWx0Rm9ySW5pdGlhbCgpOwpAQCAtMTQ2LDEwNCArMTY5LDgxIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBkZWZhdWx0Rm9yQWZ0ZXJIZWFkKCk7CiAgICAgdm9pZCBkZWZhdWx0Rm9ySW5UYWJsZVRl
eHQoKTsKIAotICAgIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3JlaWduQ29udGVudChBdG9t
aWNIVE1MVG9rZW4mKTsKLSAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9yZWlnbkNvbnRlbnQoQXRv
bWljSFRNTFRva2VuJik7CisgICAgaW5saW5lIGJvb2wgc2hvdWxkUHJvY2Vzc1Rva2VuSW5Gb3Jl
aWduQ29udGVudChBdG9taWNIVE1MVG9rZW4qKTsKKyAgICB2b2lkIHByb2Nlc3NUb2tlbkluRm9y
ZWlnbkNvbnRlbnQoQXRvbWljSFRNTFRva2VuKik7CiAgICAgCi0gICAgSFRNTFN0YWNrSXRlbSYg
YWRqdXN0ZWRDdXJyZW50U3RhY2tJdGVtKCkgY29uc3Q7CisgICAgaW5saW5lIEhUTUxTdGFja0l0
ZW0qIGFkanVzdGVkQ3VycmVudFN0YWNrSXRlbSgpIGNvbnN0OwogCi0gICAgVmVjdG9yPEF0dHJp
YnV0ZT4gYXR0cmlidXRlc0ZvcklzaW5kZXhJbnB1dChBdG9taWNIVE1MVG9rZW4mKTsKKyAgICBW
ZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzRm9ySXNpbmRleElucHV0KEF0b21pY0hUTUxUb2tl
biopOwogCi0gICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuJik7
CisgICAgdm9pZCBjYWxsVGhlQWRvcHRpb25BZ2VuY3koQXRvbWljSFRNTFRva2VuKik7CiAKICAg
ICB2b2lkIGNsb3NlVGhlQ2VsbCgpOwogCi0gICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2Uo
Y29uc3QgSFRNTFN0YWNrSXRlbSYpPiB2b2lkIHByb2Nlc3NDbG9zZVdoZW5OZXN0ZWRUYWcoQXRv
bWljSFRNTFRva2VuJik7CisgICAgdGVtcGxhdGUgPGJvb2wgc2hvdWxkQ2xvc2UoY29uc3QgSFRN
TFN0YWNrSXRlbSopPgorICAgIHZvaWQgcHJvY2Vzc0Nsb3NlV2hlbk5lc3RlZFRhZyhBdG9taWNI
VE1MVG9rZW4qKTsKIAotICAgIHZvaWQgcGFyc2VFcnJvcihBdG9taWNIVE1MVG9rZW4mKTsKKyAg
ICB2b2lkIHBhcnNlRXJyb3IoQXRvbWljSFRNTFRva2VuKik7CisKKyAgICBJbnNlcnRpb25Nb2Rl
IGluc2VydGlvbk1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luc2VydGlvbk1vZGU7IH0KKyAgICB2
b2lkIHNldEluc2VydGlvbk1vZGUoSW5zZXJ0aW9uTW9kZSBtb2RlKSB7IG1faW5zZXJ0aW9uTW9k
ZSA9IG1vZGU7IH0KIAogICAgIHZvaWQgcmVzZXRJbnNlcnRpb25Nb2RlQXBwcm9wcmlhdGVseSgp
OwogCiAjaWYgRU5BQkxFKFRFTVBMQVRFX0VMRU1FTlQpCi0gICAgdm9pZCBwcm9jZXNzVGVtcGxh
dGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBib29sIHByb2Nlc3NUZW1wbGF0ZUVu
ZFRhZyhBdG9taWNIVE1MVG9rZW4mKTsKLSAgICBib29sIHByb2Nlc3NFbmRPZkZpbGVGb3JJblRl
bXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuJik7CisgICAgdm9pZCBwcm9jZXNzVGVtcGxh
dGVTdGFydFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICBib29sIHByb2Nlc3NUZW1wbGF0ZUVu
ZFRhZyhBdG9taWNIVE1MVG9rZW4qKTsKKyAgICBib29sIHByb2Nlc3NFbmRPZkZpbGVGb3JJblRl
bXBsYXRlQ29udGVudHMoQXRvbWljSFRNTFRva2VuKik7CiAjZW5kaWYKIAogICAgIGNsYXNzIEZy
YWdtZW50UGFyc2luZ0NvbnRleHQgeworICAgICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGcmFn
bWVudFBhcnNpbmdDb250ZXh0KTsKICAgICBwdWJsaWM6CiAgICAgICAgIEZyYWdtZW50UGFyc2lu
Z0NvbnRleHQoKTsKLSAgICAgICAgRnJhZ21lbnRQYXJzaW5nQ29udGV4dChEb2N1bWVudEZyYWdt
ZW50JiwgRWxlbWVudCYgY29udGV4dEVsZW1lbnQpOworICAgICAgICBGcmFnbWVudFBhcnNpbmdD
b250ZXh0KERvY3VtZW50RnJhZ21lbnQmLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCk7CisgICAg
ICAgIH5GcmFnbWVudFBhcnNpbmdDb250ZXh0KCk7CiAKLSAgICAgICAgRG9jdW1lbnRGcmFnbWVu
dCogZnJhZ21lbnQoKSBjb25zdDsKLSAgICAgICAgRWxlbWVudCYgY29udGV4dEVsZW1lbnQoKSBj
b25zdDsKLSAgICAgICAgSFRNTFN0YWNrSXRlbSYgY29udGV4dEVsZW1lbnRTdGFja0l0ZW0oKSBj
b25zdDsKKyAgICAgICAgRG9jdW1lbnRGcmFnbWVudCogZnJhZ21lbnQoKSBjb25zdCB7IHJldHVy
biBtX2ZyYWdtZW50OyB9CisgICAgICAgIEVsZW1lbnQqIGNvbnRleHRFbGVtZW50KCkgY29uc3Qg
eyBBU1NFUlQobV9mcmFnbWVudCk7IHJldHVybiBtX2NvbnRleHRFbGVtZW50U3RhY2tJdGVtLT5l
bGVtZW50KCk7IH0KKyAgICAgICAgSFRNTFN0YWNrSXRlbSogY29udGV4dEVsZW1lbnRTdGFja0l0
ZW0oKSBjb25zdCB7IEFTU0VSVChtX2ZyYWdtZW50KTsgcmV0dXJuIG1fY29udGV4dEVsZW1lbnRT
dGFja0l0ZW0uZ2V0KCk7IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIERvY3VtZW50RnJhZ21l
bnQqIG1fZnJhZ21lbnQgeyBudWxscHRyIH07CisgICAgICAgIERvY3VtZW50RnJhZ21lbnQqIG1f
ZnJhZ21lbnQ7CiAgICAgICAgIFJlZlB0cjxIVE1MU3RhY2tJdGVtPiBtX2NvbnRleHRFbGVtZW50
U3RhY2tJdGVtOwogICAgIH07CiAKLSAgICBjb25zdCBIVE1MRG9jdW1lbnRQYXJzZXImIG1fcGFy
c2VyOwotICAgIGNvbnN0IEhUTUxQYXJzZXJPcHRpb25zIG1fb3B0aW9uczsKLSAgICBjb25zdCBG
cmFnbWVudFBhcnNpbmdDb250ZXh0IG1fZnJhZ21lbnRDb250ZXh0OwotCisgICAgYm9vbCBtX2Zy
YW1lc2V0T2s7CisjaWZuZGVmIE5ERUJVRworICAgIGJvb2wgbV9pc0F0dGFjaGVkOworI2VuZGlm
CisgICAgRnJhZ21lbnRQYXJzaW5nQ29udGV4dCBtX2ZyYWdtZW50Q29udGV4dDsKICAgICBIVE1M
Q29uc3RydWN0aW9uU2l0ZSBtX3RyZWU7CiAKLSAgICAvLyBodHRwczovL2h0bWwuc3BlYy53aGF0
d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCN0aGUtaW5zZXJ0aW9uLW1vZGUKLSAgICBJbnNl
cnRpb25Nb2RlIG1faW5zZXJ0aW9uTW9kZSB7IEluc2VydGlvbk1vZGU6OkluaXRpYWwgfTsKLSAg
ICBJbnNlcnRpb25Nb2RlIG1fb3JpZ2luYWxJbnNlcnRpb25Nb2RlIHsgSW5zZXJ0aW9uTW9kZTo6
SW5pdGlhbCB9OworICAgIC8vIGh0dHA6Ly93d3cud2hhdHdnLm9yZy9zcGVjcy93ZWItYXBwcy9j
dXJyZW50LXdvcmsvbXVsdGlwYWdlL3BhcnNpbmcuaHRtbCNpbnNlcnRpb24tbW9kZQorICAgIElu
c2VydGlvbk1vZGUgbV9pbnNlcnRpb25Nb2RlOworCisgICAgLy8gaHR0cDovL3d3dy53aGF0d2cu
b3JnL3NwZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvcGFyc2luZy5odG1sI29y
aWdpbmFsLWluc2VydGlvbi1tb2RlCisgICAgSW5zZXJ0aW9uTW9kZSBtX29yaWdpbmFsSW5zZXJ0
aW9uTW9kZTsKKwogI2lmIEVOQUJMRShURU1QTEFURV9FTEVNRU5UKQotICAgIFZlY3RvcjxJbnNl
cnRpb25Nb2RlLCAxPiBtX3RlbXBsYXRlSW5zZXJ0aW9uTW9kZXM7CisgICAgVmVjdG9yPEluc2Vy
dGlvbk1vZGU+IG1fdGVtcGxhdGVJbnNlcnRpb25Nb2RlczsKICNlbmRpZgogCi0gICAgLy8gaHR0
cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc3ludGF4Lmh0bWwjY29uY2VwdC1w
ZW5kaW5nLXRhYmxlLWNoYXItdG9rZW5zCisgICAgLy8gaHR0cDovL3d3dy53aGF0d2cub3JnL3Nw
ZWNzL3dlYi1hcHBzL2N1cnJlbnQtd29yay9tdWx0aXBhZ2UvdG9rZW5pemF0aW9uLmh0bWwjcGVu
ZGluZy10YWJsZS1jaGFyYWN0ZXItdG9rZW5zCiAgICAgU3RyaW5nQnVpbGRlciBtX3BlbmRpbmdU
YWJsZUNoYXJhY3RlcnM7CiAKLSAgICBSZWZQdHI8RWxlbWVudD4gbV9zY3JpcHRUb1Byb2Nlc3M7
IC8vIDxzY3JpcHQ+IHRhZyB3aGljaCBuZWVkcyBwcm9jZXNzaW5nIGJlZm9yZSByZXN1bWluZyB0
aGUgcGFyc2VyLgotICAgIFRleHRQb3NpdGlvbiBtX3NjcmlwdFRvUHJvY2Vzc1N0YXJ0UG9zaXRp
b247IC8vIFN0YXJ0aW5nIGxpbmUgbnVtYmVyIG9mIHRoZSBzY3JpcHQgdGFnIG5lZWRpbmcgcHJv
Y2Vzc2luZy4KKyAgICBib29sIG1fc2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lOwogCi0gICAgYm9v
bCBtX3Nob3VsZFNraXBMZWFkaW5nTmV3bGluZSB7IGZhbHNlIH07CisgICAgLy8gV2UgYWNjZXNz
IHBhcnNlciBiZWNhdXNlIEhUTUw1IHNwZWMgcmVxdWlyZXMgdGhhdCB3ZSBiZSBhYmxlIHRvIGNo
YW5nZSB0aGUgc3RhdGUgb2YgdGhlIHRva2VuaXplcgorICAgIC8vIGZyb20gd2l0aGluIHBhcnNl
ciBhY3Rpb25zLiBXZSBhbHNvIG5lZWQgaXQgdG8gdHJhY2sgdGhlIGN1cnJlbnQgcG9zaXRpb24u
CisgICAgSFRNTERvY3VtZW50UGFyc2VyJiBtX3BhcnNlcjsKIAotICAgIGJvb2wgbV9mcmFtZXNl
dE9rIHsgdHJ1ZSB9OworICAgIFJlZlB0cjxFbGVtZW50PiBtX3NjcmlwdFRvUHJvY2VzczsgLy8g
PHNjcmlwdD4gdGFnIHdoaWNoIG5lZWRzIHByb2Nlc3NpbmcgYmVmb3JlIHJlc3VtaW5nIHRoZSBw
YXJzZXIuCisgICAgVGV4dFBvc2l0aW9uIG1fc2NyaXB0VG9Qcm9jZXNzU3RhcnRQb3NpdGlvbjsg
Ly8gU3RhcnRpbmcgbGluZSBudW1iZXIgb2YgdGhlIHNjcmlwdCB0YWcgbmVlZGluZyBwcm9jZXNz
aW5nLgogCi0jaWYgIUFTU0VSVF9ESVNBQkxFRAotICAgIGJvb2wgbV9kZXN0cm95ZWQgeyBmYWxz
ZSB9OwotICAgIGJvb2wgbV9kZXN0cnVjdGlvblByb2hpYml0ZWQgeyB0cnVlIH07Ci0jZW5kaWYK
KyAgICBIVE1MUGFyc2VyT3B0aW9ucyBtX29wdGlvbnM7CiB9OwogCi1pbmxpbmUgSFRNTFRyZWVC
dWlsZGVyOjp+SFRNTFRyZWVCdWlsZGVyKCkKLXsKLSNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAg
QVNTRVJUKCFtX2Rlc3Ryb3llZCk7Ci0gICAgQVNTRVJUKCFtX2Rlc3RydWN0aW9uUHJvaGliaXRl
ZCk7Ci0gICAgbV9kZXN0cm95ZWQgPSB0cnVlOwotI2VuZGlmCi19Ci0KLWlubGluZSB2b2lkIEhU
TUxUcmVlQnVpbGRlcjo6c2V0U2hvdWxkU2tpcExlYWRpbmdOZXdsaW5lKGJvb2wgc2hvdWxkU2tp
cCkKLXsKLSAgICBBU1NFUlQoIW1fZGVzdHJveWVkKTsKLSAgICBtX3Nob3VsZFNraXBMZWFkaW5n
TmV3bGluZSA9IHNob3VsZFNraXA7Ci19Ci0KLWlubGluZSBib29sIEhUTUxUcmVlQnVpbGRlcjo6
aXNQYXJzaW5nRnJhZ21lbnQoKSBjb25zdAotewotICAgIEFTU0VSVCghbV9kZXN0cm95ZWQpOwot
ICAgIHJldHVybiAhIW1fZnJhZ21lbnRDb250ZXh0LmZyYWdtZW50KCk7Ci19Ci0KLWlubGluZSBi
b29sIEhUTUxUcmVlQnVpbGRlcjo6aGFzUGFyc2VyQmxvY2tpbmdTY3JpcHQoKSBjb25zdAotewot
ICAgIEFTU0VSVCghbV9kZXN0cm95ZWQpOwotICAgIHJldHVybiAhIW1fc2NyaXB0VG9Qcm9jZXNz
OwotfQotCi1pbmxpbmUgRG9jdW1lbnRGcmFnbWVudCogSFRNTFRyZWVCdWlsZGVyOjpGcmFnbWVu
dFBhcnNpbmdDb250ZXh0OjpmcmFnbWVudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZnJhZ21l
bnQ7Ci19Ci0KIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9UZXh0RG9jdW1lbnRQYXJzZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
VGV4dERvY3VtZW50UGFyc2VyLmNwcAppbmRleCBmNmE1Njc2MGMzODMzODkyNWJlMWYzNzNhNWNh
NmQzMzU0NzA2NjYyLi5iMjczNmYzMjdlODE0ZDY1MTlmMzQyMThiM2E0MDliMGExODQwZDVlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9UZXh0RG9jdW1lbnRQYXJzZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1RleHREb2N1bWVudFBhcnNlci5j
cHAKQEAgLTU5LDcgKzU5LDcgQEAgdm9pZCBUZXh0RG9jdW1lbnRQYXJzZXI6Omluc2VydEZha2VQ
cmVFbGVtZW50KCkKICAgICBWZWN0b3I8QXR0cmlidXRlPiBhdHRyaWJ1dGVzOwogICAgIGF0dHJp
YnV0ZXMuYXBwZW5kKEF0dHJpYnV0ZShzdHlsZUF0dHIsICJ3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7
IHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsiKSk7CiAgICAgQXRvbWljSFRNTFRva2VuIGZha2VQcmUo
SFRNTFRva2VuOjpTdGFydFRhZywgcHJlVGFnLmxvY2FsTmFtZSgpLCBhdHRyaWJ1dGVzKTsKLSAg
ICB0cmVlQnVpbGRlcigpLT5jb25zdHJ1Y3RUcmVlKGZha2VQcmUpOworICAgIHRyZWVCdWlsZGVy
KCktPmNvbnN0cnVjdFRyZWUoJmZha2VQcmUpOwogCiAgICAgLy8gTm9ybWFsbHkgd2Ugd291bGQg
c2tpcCB0aGUgZmlyc3QgXG4gYWZ0ZXIgYSA8cHJlPiBlbGVtZW50LCBidXQgd2UgZG9uJ3QKICAg
ICAvLyB3YW50IHRvIHNraXAgdGhlIGZpcnN0IFxuIGZvciB0ZXh0IGRvY3VtZW50cyEK
</data>

          </attachment>
      

    </bug>

</bugzilla>