<?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>168914</bug_id>
          
          <creation_ts>2017-02-27 09:47:52 -0800</creation_ts>
          <short_desc>Add ability to configure JSC options from a file</short_desc>
          <delta_ts>2017-02-28 10:51: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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1281407</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 09:47:52 -0800</bug_when>
    <thetext>JavaScriptCore has various options to alter how it operates and enable various types of logging.  These options can be set using command line options of the jsc command or via environment variables.

It would be useful, especially for devices, to set options with a configuration file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281408</commentid>
    <comment_count>1</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 09:48:57 -0800</bug_when>
    <thetext>&lt;rdar://problem/30735753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281418</commentid>
    <comment_count>2</comment_count>
      <attachid>302848</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 10:38:53 -0800</bug_when>
    <thetext>Created attachment 302848
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281420</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-27 10:41:32 -0800</bug_when>
    <thetext>Attachment 302848 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ConfigFile.cpp:101:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281422</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-02-27 10:46:03 -0800</bug_when>
    <thetext>Looks like there are build issues, but it looks sensible to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281424</commentid>
    <comment_count>5</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-27 10:48:45 -0800</bug_when>
    <thetext>I think you need some #pragmas to resolve the build warnings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281431</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-02-27 10:54:30 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; I think you need some #pragmas to resolve the build warnings.

Oops .. I was looking at the GTK build failure, but you actually have other ones due to type conversion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281453</commentid>
    <comment_count>7</comment_count>
      <attachid>302856</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 11:21:55 -0800</bug_when>
    <thetext>Created attachment 302856
Patch with build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281455</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-27 11:23:13 -0800</bug_when>
    <thetext>Attachment 302856 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ConfigFile.cpp:101:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281666</commentid>
    <comment_count>9</comment_count>
      <attachid>302906</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 18:14:44 -0800</bug_when>
    <thetext>Created attachment 302906
Patch for landing - recoded the regex based JSC options white space removal code to walk through the string manually</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281667</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-27 18:17:22 -0800</bug_when>
    <thetext>Attachment 302906 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ConfigFile.cpp:100:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281709</commentid>
    <comment_count>11</comment_count>
      <attachid>302920</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-27 20:55:20 -0800</bug_when>
    <thetext>Created attachment 302920
Speculative build fix for Windows</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281712</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-27 20:59:53 -0800</bug_when>
    <thetext>Attachment 302920 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ConfigFile.cpp:105:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281785</commentid>
    <comment_count>13</comment_count>
      <attachid>302944</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-28 10:03:33 -0800</bug_when>
    <thetext>Created attachment 302944
Last try for a speculative windows build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281787</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-28 10:09:13 -0800</bug_when>
    <thetext>Attachment 302944 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/ConfigFile.cpp:105:  Extra space before ( in function call  [whitespace/parens] [4]
Total errors found: 1 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1281809</commentid>
    <comment_count>15</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2017-02-28 10:51:53 -0800</bug_when>
    <thetext>Committed r213151: &lt;http://trac.webkit.org/changeset/213151&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302848</attachid>
            <date>2017-02-27 10:38:53 -0800</date>
            <delta_ts>2017-02-27 11:21:55 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>168914.patch</filename>
            <type>text/plain</type>
            <size>31910</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMDgwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDE3LTAyLTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9ucyBmcm9tIGEgZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4OTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGFi
aWxpdHkgdG8gc2V0IG9wdGlvbnMgYW5kIERhdGFMb2cgZmlsZSBsb2NhdGlvbiB2aWEgYSBjb25m
aWd1cmF0aW9uIGZpbGUuCisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc3BlY2lm
aWVkIHdpdGggdGhlIC0tY29uZmlnRmlsZSBvcHRpb24gdG8gSlNDIG9yIHRoZQorICAgICAgICBK
U0NfY29uZmlnRmlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBUaGUgZmlsZSBm
b3JtYXQgYWxsb3dzIGZvciBvcHRpb25zIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIHZhcmlv
dXMgYXR0cmlidXRlcy4KKyAgICAgICAgQ3VycmVudGx5IHRob3NlIGF0dHJpYnV0ZXMgYXJlIHRo
ZSBwcm9jZXNzIG5hbWUsIHBhcmVudCBwcm9jZXNzIG5hbWUgYW5kIGJ1aWxkCisgICAgICAgIHR5
cGUgKFJlbGVhc2Ugb3IgRGVidWcpLiAgSW4gdGhpcyBwYXRjaCwgdGhlIHBhcmVudCBwcm9jZXNz
IHR5cGUgaXMgbm90IHNldC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIHNldCB1cCBpbiBXZWJLaXQg
Y29kZSB3aXRoIGEgZm9sbG93IHVwIHBhdGNoLgorCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBs
ZSBjb25maWcgZmlsZToKKworICAgICAgICAgICAgbG9nRmlsZSA9ICIvdG1wL2pzY0xvZy4lcGlk
LnR4dCIKKworICAgICAgICAgICAganNjT3B0aW9ucyB7CisgICAgICAgICAgICAgICAgZHVtcE9w
dGlvbnMgPSAyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkID09ICJEZWJ1ZyIg
eworICAgICAgICAgICAgICAgIGpzY09wdGlvbnMgeworICAgICAgICAgICAgICAgICAgICB1c2VD
b25jdXJyZW50SklUID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5
ID0gdHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
YnVpbGQgPT0gIlJlbGVhc2UiICYmIHByb2Nlc3NOYW1lID09ICJqc2MiIHsKKyAgICAgICAgICAg
ICAgICBqc2NPcHRpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNEaXNhc3NlbWJseSA9
IHRydWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgRWxpbWlu
YXRlZCB0aGUgcHJpb3Igb3B0aW9ucyBmaWxlIGNvZGUuCisKKyAgICAgICAgKiBKYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGpzYy5jcHA6CisgICAg
ICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1lL0NvbmZpZ0ZpbGUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OkNvbmZpZ0ZpbGVTY2FubmVyKToKKyAg
ICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q29u
ZmlnRmlsZVNjYW5uZXI6OmxpbmVOdW1iZXIpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlU2Nh
bm5lcjo6Y3VycmVudEJ1ZmZlcik6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjph
dEZpbGVFbmQpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlU2Nhbm5lcjo6dHJ5Q29uc3VtZSk6
CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjp0cnlDb25zdW1lU3RyaW5nKToKKyAg
ICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnRyeUNvbnN1bWVVcHRvKToKKyAgICAgICAg
KEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmZpbGxCdWZmZXJJZk5lZWRlZCk6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjpmaWxsQnVmZmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmln
RmlsZTo6Q29uZmlnRmlsZSk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGU6OnNldFByb2Nlc3NO
YW1lKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6c2V0UGFyZW50UHJvY2Vzc05hbWUpOgor
ICAgICAgICAoSlNDOjpDb25maWdGaWxlOjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9Db25m
aWdGaWxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAg
IChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAgICAgICAoSlNDOjpPcHRpb25zOjpzZXRP
cHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNy0wMi0yNyAgSkYg
QmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IG1p
c2NlbGxhbmVvdXMgc3BlYyBmaXhlcyBwYXJ0IGRldXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvanNjLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgIkJ1dHRlcmZseUlubGluZXMu
aCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJDb21wbGV0aW9uLmgiCisjaW5j
bHVkZSAiQ29uZmlnRmlsZS5oIgogI2luY2x1ZGUgIkRPTUpJVEdldHRlclNldHRlci5oIgogI2lu
Y2x1ZGUgIkRPTUpJVFBhdGNocG9pbnQuaCIKICNpbmNsdWRlICJET01KSVRQYXRjaHBvaW50UGFy
YW1zLmgiCkBAIC0zNzgyLDYgKzM3ODMsMTIgQEAgaW50IGpzY21haW4oaW50IGFyZ2MsIGNoYXIq
KiBhcmd2KQogICAgIC8vIGNvbWVzIGZpcnN0LgogICAgIENvbW1hbmRMaW5lIG9wdGlvbnMoYXJn
YywgYXJndik7CiAKKyAgICBpZiAoT3B0aW9uczo6Y29uZmlnRmlsZSgpKSB7CisgICAgICAgIENv
bmZpZ0ZpbGUgY29uZmlnRmlsZShPcHRpb25zOjpjb25maWdGaWxlKCkpOworICAgICAgICBjb25m
aWdGaWxlLnNldFByb2Nlc3NOYW1lKCJqc2MiKTsKKyAgICAgICAgY29uZmlnRmlsZS5wYXJzZSgp
OworICAgIH0KKwogICAgIC8vIEluaXRpYWxpemUgSlNDIGJlZm9yZSBnZXR0aW5nIFZNLgogICAg
IFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRp
bmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTMwNzQp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM4Niw2ICsxMzg2LDggQEAKIAkJNjU1RUIy
OUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdlbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTVFQjI5QTEwQ0UyNTgxMDAxQTk5MEUgLyog
Tm9kZXNDb2RlZ2VuLmNwcCAqLzsgfTsKIAkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpT
Q2FsbGVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi87IH07CiAJCTY1N0NG
NDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2Fs
bGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJ
NjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAv
KiBDb25maWdGaWxlLmggKi87IH07CisJCTY1ODgyNEIxMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25m
aWdGaWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDY1ODgyNEIwMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCAqLzsgfTsKIAkJNjU4
RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAv
KiBWTUVudHJ5UmVjb3JkLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUI4MzkyQzFC
QUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuaCAqLzsgfTsKIAkJNjVCODM5MkYxQkFD
QUQ2QTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QjgzOTJEMUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNo
ZWRSZWNvdmVyeS5jcHAgKi87IH07CkBAIC0zODY4LDYgKzM4NzAsOCBAQAogCQk2NTdDRjQ1NjE5
QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNDYWxsZWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2
NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNDYWxsZWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjU4NjAxNzcxODVBOEY1RTAwMDMwRUVFIC8qIE1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1heEZyYW1lRXh0ZW50Rm9yU2xv
d1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTY1ODgyNEFFMUU1Q0ZE
QjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IENvbmZpZ0ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4ODI0QjAx
RTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29uZmlnRmlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7IHBhdGggPSBWTUVudHJ5UmVjb3JkLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmll
ciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQk2NTk4N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyog
REZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7IHBhdGggPSBkZmcvREZHT1NSRXhpdENv
bXBpbGF0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NTk4N0YyRjE2
ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBVbnVzZWRQb2ludGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBA
IC02MzUwLDYgKzYzNTQsOCBAQAogCQkJCUE3RTVBM0E2MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21w
aWxhdGlvblJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIyMEVEMUUwOUMwMEYxRjY4MSAvKiBDb21w
bGV0aW9uLmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlv
bi5oICovLAorCQkJCTY1ODgyNEIwMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCAq
LywKKwkJCQk2NTg4MjRBRTFFNUNGREIwMDBGQjczNTkgLyogQ29uZmlnRmlsZS5oICovLAogCQkJ
CTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SlNMb2NrLmggKi8sCiAJCQkJ
QTVCNkE3NEMxOEM2REJBNjAwRjExRTkxIC8qIENvbnNvbGVDbGllbnQuY3BwICovLAogCQkJCUE1
M0NFMDg5MThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggKi8sCkBAIC04MzU4LDYg
KzgzNjQsNyBAQAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdPU1JBdmFpbGFi
aWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkU1NzE0MURBRjEw
MDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzI2MTdE
NTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhp
dEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBE
RkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTEwMzY5LDYgKzEw
Mzc2LDcgQEAKIAkJCQkxNDBCN0QxRDBEQzY5QUY3MDA5QzQyQjggLyogSlNMZXhpY2FsRW52aXJv
bm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzUxMDdFQzEzRTAwMTNFN0IyIC8q
IEpTTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVENzA5QjE2REU5OUY0MDBGQ0E2QkMg
LyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQk2NTg4MjRCMTFFNUNGREY0
MDBGQjczNTkgLyogQ29uZmlnRmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODc0MTE3
Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc0REVGOTUx
ODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTNEMjM5QzgxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdG
aWxlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b25maWdGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJDb25maWdGaWxlLmgiCisKKyNpbmNsdWRlICJPcHRpb25zLmgiCisjaW5jbHVk
ZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu
Y2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8
d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNv
bnN0IHNpemVfdCBzX3Byb2Nlc3NOYW1lTWF4ID0gMTI4OworY2hhciBDb25maWdGaWxlOjpzX3By
b2Nlc3NOYW1lW3NfcHJvY2Vzc05hbWVNYXggKyAxXSA9IHsgMCB9OworY2hhciBDb25maWdGaWxl
OjpzX3BhcmVudFByb2Nlc3NOYW1lW3NfcHJvY2Vzc05hbWVNYXggKyAxXSA9IHsgMCB9OworCitj
bGFzcyBDb25maWdGaWxlU2Nhbm5lciB7CitwdWJsaWM6CisgICAgQ29uZmlnRmlsZVNjYW5uZXIo
Y29uc3QgY2hhciogZmlsZW5hbWUpCisgICAgICAgIDogbV9maWxlbmFtZShmaWxlbmFtZSkKKyAg
ICAgICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAgICB7CisgICAgICAgIG1fc3JjUHRyID0gJm1fYnVm
ZmVyWzBdOworICAgICAgICBtX2J1ZmZlckVuZCA9ICZtX2J1ZmZlclswXTsKKyAgICB9CisKKyAg
ICBib29sIHN0YXJ0KCkKKyAgICB7CisgICAgICAgIG1fZmlsZSA9IGZvcGVuKG1fZmlsZW5hbWUs
ICJyIik7CisgICAgICAgIGlmICghbV9maWxlKSB7CisgICAgICAgICAgICBkYXRhTG9nRigiRmFp
bGVkIHRvIG9wZW4gZmlsZSBKU0MgQ29uZmlnIGZpbGUgJyVzJy5cbiIsIG1fZmlsZW5hbWUpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgdW5zaWduZWQgbGluZU51bWJlcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9saW5lTnVtYmVyOworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRCdWZm
ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NyY1B0ciB8fCBtX3NyY1B0ciA9PSBtX2J1ZmZl
ckVuZCkKKyAgICAgICAgICAgIHJldHVybiAiIjsKKworICAgICAgICByZXR1cm4gbV9zcmNQdHI7
CisgICAgfQorCisgICAgYm9vbCBhdEZpbGVFbmQoKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxs
QnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHRyeUNvbnN1bWUoY2hhciBjKQorICAgIHsK
KyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoYyA9PSAqbV9zcmNQdHIpIHsKKyAgICAgICAgICAgIG1fc3Jj
UHRyKys7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8c2l6ZV90IGxlbmd0aD4KKyAgICBi
b29sIHRyeUNvbnN1bWUoY29uc3QgY2hhciAoJnRva2VuKSBbbGVuZ3RoXSkKKyAgICB7CisgICAg
ICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgc2l6ZV90IHRva2VuTGVuZ3RoID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYg
KCFzdHJuY21wKG1fc3JjUHRyLCB0b2tlbiwgdG9rZW5MZW5ndGgpKSB7CisgICAgICAgICAgICBt
X3NyY1B0ciArPSB0b2tlbkxlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGNoYXIqIHRyeUNvbnN1
bWVTdHJpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGlmICgqbV9zcmNQdHIgIT0gJyIn
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgY2hhciogc3RyaW5nU3Rh
cnQgPSArK21fc3JjUHRyOworCisgICAgICAgIGNoYXIqIHN0cmluZ0VuZCA9IHN0cmNocihtX3Ny
Y1B0ciwgJyInKTsKKyAgICAgICAgaWYgKHN0cmluZ0VuZCkgeworICAgICAgICAgICAgKnN0cmlu
Z0VuZCA9ICdcMCc7CisgICAgICAgICAgICBtX3NyY1B0ciA9IHN0cmluZ0VuZCArIDE7CisgICAg
ICAgICAgICByZXR1cm4gc3RyaW5nU3RhcnQ7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisKKyAgICBjaGFyKiB0cnlDb25zdW1lVXB0byhib29sJiBmb3VuZENo
YXIsIGNoYXIgYykKKyAgICB7CisgICAgICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisg
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBjaGFyKiBzdGFydCA9IG1fc3Jj
UHRyOworICAgICAgICBmb3VuZENoYXIgPSBmYWxzZTsKKworICAgICAgICBjaGFyKiBjUG9zaXRp
b24gPSBzdHJjaHIobV9zcmNQdHIsIGMpOworICAgICAgICBpZiAoY1Bvc2l0aW9uKSB7CisgICAg
ICAgICAgICAqY1Bvc2l0aW9uID0gJ1wwJzsKKyAgICAgICAgICAgIG1fc3JjUHRyID0gY1Bvc2l0
aW9uICsgMTsKKyAgICAgICAgICAgIGZvdW5kQ2hhciA9IHRydWU7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbV9zcmNQdHIgPSBtX2J1ZmZlckVuZDsKKworICAgICAgICByZXR1cm4gc3Rh
cnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgZmlsbEJ1ZmZlcklmTmVlZGVkKCkKKyAg
ICB7CisgICAgICAgIGlmICghbV9zcmNQdHIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHdoaWxlIChtX3NyY1B0ciAhPSBt
X2J1ZmZlckVuZCAmJiBpc0FTQ0lJU3BhY2UoKm1fc3JjUHRyKSkKKyAgICAgICAgICAgICAgICBt
X3NyY1B0cisrOworCisgICAgICAgICAgICBpZiAobV9zcmNQdHIgIT0gbV9idWZmZXJFbmQpCisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGlmICghZmlsbEJ1ZmZlcigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIGJvb2wgZmlsbEJ1ZmZlcigpCisgICAgeworICAgICAgICBk
byB7CisgICAgICAgICAgICBtX3NyY1B0ciA9IGZnZXRzKG1fYnVmZmVyLCBzaXplb2YobV9idWZm
ZXIpLCBtX2ZpbGUpOworICAgICAgICAgICAgaWYgKCFtX3NyY1B0cikgeworICAgICAgICAgICAg
ICAgIGZjbG9zZShtX2ZpbGUpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgbV9saW5lTnVtYmVyKys7CisKKyAgICAgICAgICAgIG1f
YnVmZmVyRW5kID0gc3RyY2hyKG1fc3JjUHRyLCAnIycpOworCisgICAgICAgICAgICBpZiAobV9i
dWZmZXJFbmQpCisgICAgICAgICAgICAgICAgKm1fYnVmZmVyRW5kID0gJ1wwJzsKKyAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYnVmZmVyRW5kID0gbV9zcmNQdHIgKyBzdHJs
ZW4obV9zcmNQdHIpOworICAgICAgICAgICAgICAgIGlmIChtX2J1ZmZlckVuZCA+IG1fc3JjUHRy
ICYmIG1fYnVmZmVyRW5kWy0xXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgICAgICAgIG1fYnVm
ZmVyRW5kLS07CisgICAgICAgICAgICAgICAgICAgICptX2J1ZmZlckVuZCA9ICdcMCc7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9IHdoaWxlIChtX2J1ZmZlckVu
ZCA9PSBtX3NyY1B0cik7CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29u
c3QgY2hhciogbV9maWxlbmFtZTsKKyAgICB1bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisgICAgRklM
RSogbV9maWxlOworICAgIGNoYXIgbV9idWZmZXJbQlVGU0laXTsKKyAgICBjaGFyKiBtX3NyY1B0
cjsKKyAgICBjaGFyKiBtX2J1ZmZlckVuZDsKK307CisKK0NvbmZpZ0ZpbGU6OkNvbmZpZ0ZpbGUo
Y29uc3QgY2hhciogZmlsZW5hbWUpCisgICAgOiBtX2ZpbGVuYW1lKGZpbGVuYW1lKQoreworfQor
Cit2b2lkIENvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKGNvbnN0IGNoYXIqIHByb2Nlc3NOYW1l
KQoreworICAgIHN0cm5jcHkoc19wcm9jZXNzTmFtZSwgcHJvY2Vzc05hbWUsIHNfcHJvY2Vzc05h
bWVNYXgpOworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnNldFBhcmVudFByb2Nlc3NOYW1lKGNvbnN0
IGNoYXIqIHBhcmVudFByb2Nlc3NOYW1lKQoreworICAgIHN0cm5jcHkoc19wYXJlbnRQcm9jZXNz
TmFtZSwgcGFyZW50UHJvY2Vzc05hbWUsIHNfcHJvY2Vzc05hbWVNYXgpOworfQorCit2b2lkIENv
bmZpZ0ZpbGU6OnBhcnNlKCkKK3sKKyAgICBlbnVtIFN0YXRlbWVudE5lc3RpbmcgeyBUb3BMZXZl
bFN0YXRtZW50LCBOZXN0ZWRTdGF0ZW1lbnQsIE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlh
IH07CisgICAgZW51bSBQYXJzZVJlc3VsdCB7IFBhcnNlT0ssIFBhcnNlRXJyb3IsIE5lc3RlZFN0
YXRlbWVudERvbmUgfTsKKworICAgIENvbmZpZ0ZpbGVTY2FubmVyIHNjYW5uZXIobV9maWxlbmFt
ZSk7CisKKyAgICBpZiAoIXNjYW5uZXIuc3RhcnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
cmVnZXhfdCBvcHRpb25SZWdleDsKKyAgICBpbnQgcmVnZXhwQ29tcGlsZVJlc3VsdCA9IHJlZ2Nv
bXAoJm9wdGlvblJlZ2V4LCAiKFtbOmFsbnVtOl1fXSspW1s6c3BhY2U6XV0qPVtbOnNwYWNlOl1d
KihbXls6c3BhY2U6XV0rKSIsIFJFR19FWFRFTkRFRCk7CisgICAgQVNTRVJUX1VOVVNFRChyZWdl
eHBDb21waWxlUmVzdWx0LCAhcmVnZXhwQ29tcGlsZVJlc3VsdCk7CisKKyAgICBjaGFyIGxvZ1Bh
dGhuYW1lW1BBVEhfTUFYICsgMV0gPSB7IDAgfTsKKworICAgIFN0cmluZ0J1aWxkZXIganNjT3B0
aW9uc0J1aWxkZXI7CisKKyAgICBhdXRvIHBhcnNlTG9nRmlsZSA9IFsmXShTdGF0ZW1lbnROZXN0
aW5nIHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgY2hhciogZmlsZW5hbWUgPSBudWxscHRy
OworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCc9JykgJiYgKGZpbGVuYW1lID0gc2Nh
bm5lci50cnlDb25zdW1lU3RyaW5nKCkpKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVtZW50TmVz
dGluZyAhPSBOZXN0ZWRTdGF0ZW1lbnRGYWlsZWRDcml0ZXJpYSkKKyAgICAgICAgICAgICAgICBz
dHJuY3B5KGxvZ1BhdGhuYW1lLCBmaWxlbmFtZSwgUEFUSF9NQVgpOworCisgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VPSzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOwor
ICAgIH07CisKKyAgICBhdXRvIHBhcnNlSlNDT3B0aW9ucyA9IFsmXShTdGF0ZW1lbnROZXN0aW5n
IHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgneycp
KSB7CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICAgICAgICAgIGJv
b2wgZm91bmRDbG9zaW5nQnJhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGNoYXIqIGN1cnJlbnRM
aW5lID0gbnVsbHB0cjsKKworICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50TGluZSA9IHNjYW5u
ZXIudHJ5Q29uc3VtZVVwdG8oZm91bmRDbG9zaW5nQnJhY2UsICd9JykpKSB7CisgICAgICAgICAg
ICAgICAgcmVnbWF0Y2hfdCBvcHRpb25NYXRjaGVzWzNdOworICAgICAgICAgICAgICAgIGludCBy
ZWdleGVjRXJyb3IgPSByZWdleGVjKCZvcHRpb25SZWdleCwgY3VycmVudExpbmUsIDMsIG9wdGlv
bk1hdGNoZXMsIDApOworICAgICAgICAgICAgICAgIGlmICghcmVnZXhlY0Vycm9yKSB7CisgICAg
ICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKGN1cnJlbnRMaW5lICsgb3B0aW9uTWF0Y2hl
c1sxXS5ybV9zbywgb3B0aW9uTWF0Y2hlc1sxXS5ybV9lbyAtIG9wdGlvbk1hdGNoZXNbMV0ucm1f
c28pOworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZCgnPScpOworICAgICAgICAg
ICAgICAgICAgICBidWlsZGVyLmFwcGVuZChjdXJyZW50TGluZSArIG9wdGlvbk1hdGNoZXNbMl0u
cm1fc28sIG9wdGlvbk1hdGNoZXNbMl0ucm1fZW8gLSBvcHRpb25NYXRjaGVzWzJdLnJtX3NvKTsK
KyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2xvc2luZ0JyYWNlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXRl
bWVudE5lc3RpbmcgIT0gTmVzdGVkU3RhdGVtZW50RmFpbGVkQ3JpdGVyaWEpCisgICAgICAgICAg
ICAgICAganNjT3B0aW9uc0J1aWxkZXIuYXBwZW5kKGJ1aWxkZXIpOworCisgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VPSzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOwor
ICAgIH07CisKKyAgICBhdXRvIHBhcnNlTmVzdGVkU3RhdGVtZW50ID0gWyZdKFN0YXRlbWVudE5l
c3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1l
KCJqc2NPcHRpb25zIikpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VKU0NPcHRpb25zKHN0YXRl
bWVudE5lc3RpbmcpOworCisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoImxvZ0ZpbGUi
KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUxvZ0ZpbGUoc3RhdGVtZW50TmVzdGluZyk7CisK
KyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgnfScpKQorICAgICAgICAgICAgcmV0dXJu
IE5lc3RlZFN0YXRlbWVudERvbmU7CisKKyAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisgICAg
fTsKKworICAgIGF1dG8gcGFyc2VQcmVkaWNhdGUgPSBbJl0oYm9vbCYgcHJlZGljYXRlTWF0Y2hl
cywgY29uc3QgY2hhciogbWF0Y2hWYWx1ZSkgeworICAgICAgICBjaGFyKiBwcmVkaWNhdGVWYWx1
ZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoIj09IikKKyAgICAg
ICAgICAgICYmIChwcmVkaWNhdGVWYWx1ZSA9IHNjYW5uZXIudHJ5Q29uc3VtZVN0cmluZygpKSAm
JiBtYXRjaFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcHJlZGljYXRlTWF0Y2hlcyA9ICFzdHJj
bXAocHJlZGljYXRlVmFsdWUsIG1hdGNoVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBh
dXRvIHBhcnNlQ29uZGl0aW9uYWxCbG9jayA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVu
dE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudE5lc3RpbmcgPT0gTmVzdGVkU3RhdGVt
ZW50KSB7CisgICAgICAgICAgICBTdGF0ZW1lbnROZXN0aW5nIHN1Yk5lc3RpbmcgPSBOZXN0ZWRT
dGF0ZW1lbnQ7CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBwcmVkaWNhdGVNYXRjaGVzOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFjdHVh
bFZhbHVlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1
bWUoInByb2Nlc3NOYW1lIikpCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0gc19w
cm9jZXNzTmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2FubmVyLnRyeUNvbnN1bWUo
InBhcmVudFByb2Nlc3NOYW1lIikpCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0g
c19wYXJlbnRQcm9jZXNzTmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2FubmVyLnRy
eUNvbnN1bWUoImJ1aWxkIikpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICAgICBh
Y3R1YWxWYWx1ZSA9ICJEZWJ1ZyI7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBhY3R1YWxW
YWx1ZSA9ICJSZWxlYXNlIjsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisKKyAgICAgICAgICAgICAgICBpZiAocGFy
c2VQcmVkaWNhdGUocHJlZGljYXRlTWF0Y2hlcywgYWN0dWFsVmFsdWUpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlmICghcHJlZGljYXRlTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgICAg
IHN1Yk5lc3RpbmcgPSBOZXN0ZWRTdGF0ZW1lbnRGYWlsZWRDcml0ZXJpYTsKKworICAgICAgICAg
ICAgICAgICAgICBpZiAoIXNjYW5uZXIudHJ5Q29uc3VtZSgiJiYiKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaWYgKCFzY2FubmVyLnRyeUNvbnN1bWUoJ3snKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VFcnJvcjsKKworICAgICAgICAgICAgUGFyc2VSZXN1bHQgcGFyc2VSZXN1bHQg
PSBQYXJzZU9LOworICAgICAgICAgICAgd2hpbGUgKHBhcnNlUmVzdWx0ID09IFBhcnNlT0sgJiYg
IXNjYW5uZXIuYXRGaWxlRW5kKCkpCisgICAgICAgICAgICAgICAgcGFyc2VSZXN1bHQgPSBwYXJz
ZU5lc3RlZFN0YXRlbWVudChzdWJOZXN0aW5nKTsKKworICAgICAgICAgICAgaWYgKHBhcnNlUmVz
dWx0ID09IE5lc3RlZFN0YXRlbWVudERvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNl
T0s7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUGFyc2VFcnJvcjsKKyAgICB9OworCisg
ICAgYXV0byBwYXJzZVN0YXRlbWVudCA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVudE5l
c3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgianNjT3B0aW9ucyIpKQor
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlSlNDT3B0aW9ucyhzdGF0ZW1lbnROZXN0aW5nKTsKKwor
ICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCJsb2dGaWxlIikpCisgICAgICAgICAgICBy
ZXR1cm4gcGFyc2VMb2dGaWxlKHN0YXRlbWVudE5lc3RpbmcpOworCisgICAgICAgIGlmIChzdGF0
ZW1lbnROZXN0aW5nID09IFRvcExldmVsU3RhdG1lbnQpCisgICAgICAgICAgICByZXR1cm4gcGFy
c2VDb25kaXRpb25hbEJsb2NrKE5lc3RlZFN0YXRlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIFBh
cnNlRXJyb3I7CisgICAgfTsKKworICAgIFBhcnNlUmVzdWx0IHBhcnNlUmVzdWx0ID0gUGFyc2VP
SzsKKworICAgIHdoaWxlIChwYXJzZVJlc3VsdCA9PSBQYXJzZU9LICYmICFzY2FubmVyLmF0Rmls
ZUVuZCgpKQorICAgICAgICBwYXJzZVJlc3VsdCA9IHBhcnNlU3RhdGVtZW50KFRvcExldmVsU3Rh
dG1lbnQpOworCisgICAgaWYgKHBhcnNlUmVzdWx0ID09IFBhcnNlT0spIHsKKyAgICAgICAgaWYg
KHN0cmxlbihsb2dQYXRobmFtZSkpCisgICAgICAgICAgICBXVEY6OnNldERhdGFGaWxlKGxvZ1Bh
dGhuYW1lKTsKKworICAgICAgICBpZiAoIWpzY09wdGlvbnNCdWlsZGVyLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uc1N0ciA9IGpzY09wdGlvbnNCdWlsZGVyLnRv
U3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKKyAgICAgICAgICAgIE9wdGlvbnM6OnNldE9wdGlvbnMo
b3B0aW9uc1N0cik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgV1RGOjpkYXRhTG9n
RigiRXJyb3IgaW4gSlNDIENvbmZpZyBmaWxlIG9uIG9yIG5lYXIgbGluZSAldSwgcGFyc2luZyAn
JXMnXG4iLCBzY2FubmVyLmxpbmVOdW1iZXIoKSwgc2Nhbm5lci5jdXJyZW50QnVmZmVyKCkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbmZpZ0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db25maWdGaWxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uZmlnRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UK
KworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbmZpZ0ZpbGVTY2FubmVyOworCitjbGFzcyBD
b25maWdGaWxlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb25maWdGaWxlKGNv
bnN0IGNoYXIqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldFByb2Nl
c3NOYW1lKGNvbnN0IGNoYXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBz
ZXRQYXJlbnRQcm9jZXNzTmFtZShjb25zdCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBwYXJzZSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjaGFyIHNfcHJvY2Vzc05hbWVb
XTsKKyAgICBzdGF0aWMgY2hhciBzX3BhcmVudFByb2Nlc3NOYW1lW107CisKKyAgICBjb25zdCBj
aGFyKiBtX2ZpbGVuYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjEzMDc0KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUxLDkgKzUxLDYgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogI2VuZGlm
CiAKLSNkZWZpbmUgVVNFX09QVElPTlNfRklMRSAwCi0jZGVmaW5lIE9QVElPTlNfRklMRU5BTUUg
Ii90bXAvanNjLm9wdGlvbnMiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewpAQCAt
NDk2LDMxICs0OTMsNiBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAg
ICAgIDsgLy8gRGVjb25mdXNlIGVkaXRvcnMgdGhhdCBkbyBhdXRvIGluZGVudGF0aW9uCiAjZW5k
aWYKICAgICAKLSNpZiBVU0UoT1BUSU9OU19GSUxFKQotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gT1BUSU9OU19GSUxFTkFNRTsKLSAgICAgICAg
ICAgICAgICBGSUxFKiBvcHRpb25zRmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAgICAg
ICAgICAgICAgIGlmICghb3B0aW9uc0ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMuIERpZCB5b3UgYWRkIHRoZSBmaWxlLXJlYWQtZGF0
YSBlbnRpdGxlbWVudCB0byBXZWJQcm9jZXNzLnNiP1xuIiwgZmlsZW5hbWUpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgICAgICBj
aGFyKiBsaW5lOwotICAgICAgICAgICAgICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07Ci0gICAgICAg
ICAgICAgICAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgb3B0
aW9uc0ZpbGUpKSkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVyKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25zU3Ry
ID0gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIlNldHRpbmcgb3B0aW9uczogJXNcbiIsIG9wdGlvbnNTdHIpOwotICAgICAgICAgICAg
ICAgIHNldE9wdGlvbnMob3B0aW9uc1N0cik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgaW50IHJlc3VsdCA9IGZjbG9zZShvcHRpb25zRmlsZSk7Ci0gICAgICAgICAgICAgICAg
aWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBjbG9z
ZSBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAg
ICB9Ci0jZW5kaWYKLQogICAgICAgICAgICAgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOwog
CiAgICAgICAgICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtlIGNv
cnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgpAQCAtNjI4LDcgKzYwMCwxMiBAQCBib29sIE9wdGlv
bnM6OnNldE9wdGlvbnMoY29uc3QgY2hhciogb3B0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICBy
ZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisKICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7
CisKKyAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKwogICAgIHJldHVybiBzdWNjZXNz
OwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZp
c2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9w
dGlvblN0cmluZzsKICNkZWZpbmUgSlNDX09QVElPTlModikgXAogICAgIHYoYm9vbCwgdmFsaWRh
dGVPcHRpb25zLCBmYWxzZSwgTm9ybWFsLCAiY3Jhc2hlcyBpZiBtaXMtdHlwZWQgSlNDIG9wdGlv
bnMgd2VyZSBwYXNzZWQgdG8gdGhlIFZNIikgXAogICAgIHYodW5zaWduZWQsIGR1bXBPcHRpb25z
LCAwLCBOb3JtYWwsICJkdW1wcyBKU0Mgb3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlkZGVu
IG9ubHksIDIgPSBBbGwsIDMgPSBWZXJib3NlKSIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgY29u
ZmlnRmlsZSwgbnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMg
YW5kIGxvZ2dpbmcgbG9jYXRpb24iKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlTExJbnQsICB0
cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAg
ICB2KGJvb2wsIHVzZUpJVCwgICAgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBiYXNlbGluZSBK
SVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzA3NCkKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTct
MDItMjcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRk
IGFiaWxpdHkgdG8gY29uZmlndXJlIEpTQyBvcHRpb25zIGZyb20gYSBmaWxlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg5MTQKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0
byBzZXQgb3B0aW9ucyBhbmQgRGF0YUxvZyBmaWxlIGxvY2F0aW9uIHZpYSBhIGNvbmZpZ3VyYXRp
b24gZmlsZS4KKyAgICAgICAgVGhlIHBhdGhuYW1lIGNhbiBpbmNsdWRlIHRoZSBwcmludGYgc3R5
bGUgIiVwaWQiLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlCisgICAgICAgIGN1cnJl
bnQgcHJvY2VzcyBpZC4KKworICAgICAgICAqIHd0Zi9EYXRhTG9nLmNwcDoKKyAgICAgICAgKFdU
Rjo6aW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKToKKyAgICAgICAgKFdURjo6c2V0RGF0YUZpbGUpOgor
ICAgICAgICAqIHd0Zi9EYXRhTG9nLmg6CisKIDIwMTctMDItMjQgIEplciBOb2JsZSAgPGplci5u
b2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHB1YmxpYyBtZXRob2QgdG8gTWVkaWFUaW1l
IGZvciBkb2luZyB0aW1lU2NhbGUgY29udmVyc2lvbi4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Rh
dGFMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCShyZXZp
c2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTAsMzAgKzUwLDIyIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgUHJpbnRT
dHJlYW0qIHNfZmlsZTsKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4UGF0aExlbmd0aCA9IDEwMjQ7
CiAKK3N0YXRpYyBQcmludFN0cmVhbSogc19maWxlOwogc3RhdGljIHVpbnQ2NF90IHNfZmlsZURh
dGFbKHNpemVvZihGaWxlUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKIHN0YXRpYyB1aW50NjRfdCBz
X2xvY2tlZEZpbGVEYXRhWyhzaXplb2YoTG9ja2VkUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKIAog
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKIHsKLSAgICBGaWxlUHJpbnRTdHJl
YW0qIGZpbGUgPSBudWxscHRyOwotICAgIAotI2lmIERBVEFfTE9HX1RPX0ZJTEUKLSAgICBjb25z
dCBsb25nIG1heFBhdGhMZW5ndGggPSAxMDI0OwotCi0gICAgY2hhciBmaWxlbmFtZVN1ZmZpeFtt
YXhQYXRoTGVuZ3RoICsgMV07CisgICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBudWxscHRyOwog
Ci0jaWYgUExBVEZPUk0oV0lOKQotICAgIF9zbnByaW50ZihmaWxlbmFtZVN1ZmZpeCwgc2l6ZW9m
KGZpbGVuYW1lU3VmZml4KSwgIi4lZC50eHQiLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwotI2Vs
c2UKLSAgICBzbnByaW50ZihmaWxlbmFtZVN1ZmZpeCwgc2l6ZW9mKGZpbGVuYW1lU3VmZml4KSwg
Ii4lZC50eHQiLCBnZXRwaWQoKSk7Ci0jZW5kaWYKKyAgICBpZiAoc19maWxlKQorICAgICAgICBy
ZXR1cm47CiAKKyNpZiBEQVRBX0xPR19UT19GSUxFCiAjaWYgREFUQV9MT0dfVE9fREFSV0lOX1RF
TVBfRElSCiAgICAgY2hhciBmaWxlbmFtZUJ1ZmZlclttYXhQYXRoTGVuZ3RoICsgMV07Ci0gICAg
dW5zaWduZWQgc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVuYW1lU3VmZml4KTsKLQogI2lmIGRl
ZmluZWQoREFUQV9MT0dfRklMRU5BTUUpCiAgICAgY2hhciogbG9nQmFzZW5hbWUgPSBzdHJyY2hy
KERBVEFfTE9HX0ZJTEVOQU1FLCAnLycpOwogICAgIGlmICghbG9nQmFzZW5hbWUpCkBAIC04Miwx
MyArNzQsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICBjb25z
dCBjaGFyKiBsb2dCYXNlbmFtZSA9ICJXVEZMb2ciOwogI2VuZGlmCiAKLSAgICBjb25zdCBjaGFy
KiBmaWxlbmFtZSA9IG51bGxwdHI7Ci0KICAgICBib29sIHN1Y2Nlc3MgPSBjb25mc3RyKF9DU19E
QVJXSU5fVVNFUl9URU1QX0RJUiwgZmlsZW5hbWVCdWZmZXIsIHNpemVvZihmaWxlbmFtZUJ1ZmZl
cikpOwogICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCB0
aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCBpbnN0ZWFkIG9mIGFkZGluZyBhIHNsYXNoIGlmIGl0
IGRvZXMgbm90IGV4aXN0CiAgICAgICAgIC8vIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzIzNTc5MDc3
PiBpcyBmaXhlZCBpbiBhbGwgaU9TIFNpbXVsYXRvciB2ZXJzaW9ucyB0aGF0IHdlIHVzZS4KLSAg
ICAgICAgc2l6ZV90IGxhc3RDb21wb25lbnRMZW5ndGggPSBzdHJsZW4obG9nQmFzZW5hbWUpICsg
c3VmZml4TGVuZ3RoOworICAgICAgICBzaXplX3QgbGFzdENvbXBvbmVudExlbmd0aCA9IHN0cmxl
bihsb2dCYXNlbmFtZSkgKyAyMDsgLy8gTW9yZSB0aGFuIGVub3VnaCBmb3IgIi48cGlkPi50eHQi
CiAgICAgICAgIHNpemVfdCBkaXJuYW1lTGVuZ3RoID0gc3RybGVuKGZpbGVuYW1lQnVmZmVyKTsK
ICAgICAgICAgYm9vbCBzaG91bGRBZGRQYXRoU2VwYXJhdG9yID0gZmlsZW5hbWVCdWZmZXJbZGly
bmFtZUxlbmd0aCAtIDFdICE9ICcvJyAmJiBsb2dCYXNlbmFtZVswXSAhPSAnLyc7CiAgICAgICAg
IGlmIChsYXN0Q29tcG9uZW50TGVuZ3RoICsgc2hvdWxkQWRkUGF0aFNlcGFyYXRvciA8PSBzaXpl
b2YoZmlsZW5hbWVCdWZmZXIpIC0gZGlybmFtZUxlbmd0aCAtIDEpIHsKQEAgLTk5LDM2ICs4OSwy
MyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogICAgICAgICB9CiAgICAg
fQogI2VsaWYgZGVmaW5lZChEQVRBX0xPR19GSUxFTkFNRSkKLSAgICBjb25zdCBjaGFyKiBmaWxl
bmFtZSA9IERBVEFfTE9HX0ZJTEVOQU1FOworICAgIGZpbGVuYW1lID0gREFUQV9MT0dfRklMRU5B
TUU7CiAjZWxzZQotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gZ2V0ZW52KCJXVEZfREFUQV9M
T0dfRklMRU5BTUUiKTsKKyAgICBmaWxlbmFtZSA9IGdldGVudigiV1RGX0RBVEFfTE9HX0ZJTEVO
QU1FIik7CiAjZW5kaWYKICAgICBjaGFyIGFjdHVhbEZpbGVuYW1lW21heFBhdGhMZW5ndGggKyAx
XTsKIAotICAgIGlmIChmaWxlbmFtZSkgeworICAgIGlmIChmaWxlbmFtZSAmJiAhc3Ryc3RyKGZp
bGVuYW1lLCAiJXBpZCIpKSB7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBfc25wcmludGYo
YWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIlcyVzIiwgZmlsZW5hbWUs
IGZpbGVuYW1lU3VmZml4KTsKKyAgICAgICAgX3NucHJpbnRmKGFjdHVhbEZpbGVuYW1lLCBzaXpl
b2YoYWN0dWFsRmlsZW5hbWUpLCAiJXMuJSVwaWQudHh0IiwgZmlsZW5hbWUpOwogI2Vsc2UKLSAg
ICAgICAgc25wcmludGYoYWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIl
cyVzIiwgZmlsZW5hbWUsIGZpbGVuYW1lU3VmZml4KTsKKyAgICAgICAgc25wcmludGYoYWN0dWFs
RmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIlcy4lJXBpZC50eHQiLCBmaWxlbmFt
ZSk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGZpbGUgPSBGaWxlUHJpbnRTdHJlYW06Om9w
ZW4oYWN0dWFsRmlsZW5hbWUsICJ3IikucmVsZWFzZSgpOwotICAgICAgICBpZiAoZmlsZSkKLSAg
ICAgICAgICAgIFdURkxvZ0Fsd2F5cygiKioqIERhdGFMb2cgb3V0cHV0IHRvIFwiJXNcIiAqKipc
biIsIGFjdHVhbEZpbGVuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgV1RGTG9nQWx3
YXlzKCJXYXJuaW5nOiBDb3VsZCBub3Qgb3BlbiBEYXRhTG9nIGZpbGUgJXMgZm9yIHdyaXRpbmcu
XG4iLCBhY3R1YWxGaWxlbmFtZSk7CisgICAgICAgIGZpbGVuYW1lID0gYWN0dWFsRmlsZW5hbWU7
CiAgICAgfQogI2VuZGlmIC8vIERBVEFfTE9HX1RPX0ZJTEUKLSAgICAKLSAgICBpZiAoIWZpbGUp
IHsKLSAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRv
IHVzZSBkYXRhTG9nKCkgdG8gZGVidWcKLSAgICAgICAgLy8gZmFzdE1hbGxvYy4KLSAgICAgICAg
ZmlsZSA9IG5ldyAoc19maWxlRGF0YSkgRmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50
U3RyZWFtOjpCb3Jyb3cpOwotICAgIH0KLSAgICAKLSAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwg
MCwgX0lPTkJGLCAwKTsgLy8gUHJlZmVyIHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdl
dCBhIGZ1bGwgbG9nIHVwb24gY3Jhc2ggb3IgZGVhZGxvY2suCi0gICAgCi0gICAgc19maWxlID0g
bmV3IChzX2xvY2tlZEZpbGVEYXRhKSBMb2NrZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8
RmlsZVByaW50U3RyZWFtPihmaWxlKSk7CisKKyAgICBzZXREYXRhRmlsZShmaWxlbmFtZSk7CiB9
CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlKCkKQEAgLTE0MSw2ICsxMTgsNjAgQEAg
c3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGUoKQogICAgICAgICB9KTsKIH0KIAordm9pZCBz
ZXREYXRhRmlsZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIEZpbGVQcmludFN0cmVhbSogZmls
ZSA9IG51bGxwdHI7CisgICAgY2hhciBmb3JtYXR0ZWRQYXRoW21heFBhdGhMZW5ndGggKyAxXTsK
KyAgICBjb25zdCBjaGFyKiBwYXRoVG9PcGVuID0gcGF0aDsKKworICAgIGlmIChwYXRoKSB7Cisg
ICAgICAgIGNoYXIqIHBpZEZvcm1hdCA9IHN0cnN0cihwYXRoLCAiJXBpZCIpOworICAgICAgICBp
ZiAocGlkRm9ybWF0KSB7CisgICAgICAgICAgICBzaXplX3QgbGVhZGluZ1BhdGhMZW5ndGggPSBw
aWRGb3JtYXQgLSBwYXRoOworICAgICAgICAgICAgc2l6ZV90IHBhdGhDaGFyYWN0ZXJzQXZhaWxh
YmxlID0gc3RkOjptaW4obWF4UGF0aExlbmd0aCwgbGVhZGluZ1BhdGhMZW5ndGgpOworICAgICAg
ICAgICAgc3RybmNweShmb3JtYXR0ZWRQYXRoLCBwYXRoLCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJs
ZSk7CisgICAgICAgICAgICBjaGFyKiBuZXh0RGVzdCA9IGZvcm1hdHRlZFBhdGggKyBwYXRoQ2hh
cmFjdGVyc0F2YWlsYWJsZTsKKyAgICAgICAgICAgIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlID0g
bWF4UGF0aExlbmd0aCAtIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlOworICAgICAgICAgICAgaWYg
KHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlKSB7CisgICAgICAgICAgICAgICAgaW50IHBpZFRleHRM
ZW5ndGg7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICAgICAgICAgIHBpZFRleHRMZW5ndGgg
PSBfc25wcmludGYobmV4dERlc3QsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAiJWQiLCBHZXRD
dXJyZW50UHJvY2Vzc0lkKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBwaWRUZXh0TGVuZ3Ro
ID0gc25wcmludGYobmV4dERlc3QsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAiJWQiLCBnZXRw
aWQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAocGlkVGV4dExlbmd0aCA8IDAgfHwg
c3RhdGljX2Nhc3Q8c2l6ZV90PihwaWRUZXh0TGVuZ3RoKSA+PSBwYXRoQ2hhcmFjdGVyc0F2YWls
YWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUgPSAwOwor
ICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXRoQ2hhcmFjdGVy
c0F2YWlsYWJsZSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBpZFRleHRMZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgICBuZXh0RGVzdCArPSBwaWRUZXh0TGVuZ3RoOworICAgICAgICAgICAgICAg
ICAgICBzdHJuY3B5KG5leHREZXN0LCBwaWRGb3JtYXQgKyA0LCBwYXRoQ2hhcmFjdGVyc0F2YWls
YWJsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
bWF0dGVkUGF0aFttYXhQYXRoTGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICBwYXRoVG9PcGVu
ID0gZm9ybWF0dGVkUGF0aDsKKyAgICAgICAgfQorCisgICAgICAgIGZpbGUgPSBGaWxlUHJpbnRT
dHJlYW06Om9wZW4ocGF0aFRvT3BlbiwgInciKS5yZWxlYXNlKCk7CisgICAgICAgIGlmIChmaWxl
KQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIqKiogRGF0YUxvZyBvdXRwdXQgdG8gXCIlc1wi
ICoqKlxuIiwgcGF0aFRvT3Blbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdURkxvZ0Fs
d2F5cygiV2FybmluZzogQ291bGQgbm90IG9wZW4gRGF0YUxvZyBmaWxlICVzIGZvciB3cml0aW5n
LlxuIiwgcGF0aFRvT3Blbik7CisgICAgfQorCisgICAgaWYgKCFmaWxlKSB7CisgICAgICAgIC8v
IFVzZSBwbGFjZW1lbnQgbmV3OyB0aGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UgZGF0YUxvZygp
IHRvIGRlYnVnCisgICAgICAgIC8vIGZhc3RNYWxsb2MuCisgICAgICAgIGZpbGUgPSBuZXcgKHNf
ZmlsZURhdGEpIEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZpbGVQcmludFN0cmVhbTo6Qm9ycm93
KTsKKyAgICB9CisKKyAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lPTkJGLCAwKTsgLy8g
UHJlZmVyIHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1bGwgbG9nIHVwb24g
Y3Jhc2ggb3IgZGVhZGxvY2suCisKKyAgICBpZiAoc19maWxlKQorICAgICAgICBzX2ZpbGUtPmZs
dXNoKCk7CisKKyAgICBzX2ZpbGUgPSBuZXcgKHNfbG9ja2VkRmlsZURhdGEpIExvY2tlZFByaW50
U3RyZWFtKHN0ZDo6dW5pcXVlX3B0cjxGaWxlUHJpbnRTdHJlYW0+KGZpbGUpKTsKK30KKwogUHJp
bnRTdHJlYW0mIGRhdGFGaWxlKCkKIHsKICAgICBpbml0aWFsaXplTG9nRmlsZSgpOwpJbmRleDog
U291cmNlL1dURi93dGYvRGF0YUxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0Rh
dGFMb2cuaAkocmV2aXNpb24gMjEzMDc0KQorKysgU291cmNlL1dURi93dGYvRGF0YUxvZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogV1RGX0VY
UE9SVF9QUklWQVRFIFByaW50U3RyZWFtJiBkYXRhRmlsZSgpOworV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0RGF0YUZpbGUoY29uc3QgY2hhciogcGF0aCk7CiAKIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIGRhdGFMb2dGVihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QpIFdURl9BVFRSSUJV
VEVfUFJJTlRGKDEsIDApOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGF0YUxvZ0YoY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwo=
</data>
<flag name="review"
          id="324542"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302856</attachid>
            <date>2017-02-27 11:21:55 -0800</date>
            <delta_ts>2017-02-27 18:14:44 -0800</delta_ts>
            <desc>Patch with build fixes.</desc>
            <filename>168914-2.patch</filename>
            <type>text/plain</type>
            <size>32489</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMDgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE3LTAyLTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9ucyBmcm9tIGEgZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4OTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgdGhlIGFi
aWxpdHkgdG8gc2V0IG9wdGlvbnMgYW5kIERhdGFMb2cgZmlsZSBsb2NhdGlvbiB2aWEgYSBjb25m
aWd1cmF0aW9uIGZpbGUuCisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc3BlY2lm
aWVkIHdpdGggdGhlIC0tY29uZmlnRmlsZSBvcHRpb24gdG8gSlNDIG9yIHRoZQorICAgICAgICBK
U0NfY29uZmlnRmlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBUaGUgZmlsZSBm
b3JtYXQgYWxsb3dzIGZvciBvcHRpb25zIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIHZhcmlv
dXMgYXR0cmlidXRlcy4KKyAgICAgICAgQ3VycmVudGx5IHRob3NlIGF0dHJpYnV0ZXMgYXJlIHRo
ZSBwcm9jZXNzIG5hbWUsIHBhcmVudCBwcm9jZXNzIG5hbWUgYW5kIGJ1aWxkCisgICAgICAgIHR5
cGUgKFJlbGVhc2Ugb3IgRGVidWcpLiAgSW4gdGhpcyBwYXRjaCwgdGhlIHBhcmVudCBwcm9jZXNz
IHR5cGUgaXMgbm90IHNldC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIHNldCB1cCBpbiBXZWJLaXQg
Y29kZSB3aXRoIGEgZm9sbG93IHVwIHBhdGNoLgorCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBs
ZSBjb25maWcgZmlsZToKKworICAgICAgICAgICAgbG9nRmlsZSA9ICIvdG1wL2pzY0xvZy4lcGlk
LnR4dCIKKworICAgICAgICAgICAganNjT3B0aW9ucyB7CisgICAgICAgICAgICAgICAgZHVtcE9w
dGlvbnMgPSAyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkID09ICJEZWJ1ZyIg
eworICAgICAgICAgICAgICAgIGpzY09wdGlvbnMgeworICAgICAgICAgICAgICAgICAgICB1c2VD
b25jdXJyZW50SklUID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5
ID0gdHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
YnVpbGQgPT0gIlJlbGVhc2UiICYmIHByb2Nlc3NOYW1lID09ICJqc2MiIHsKKyAgICAgICAgICAg
ICAgICBqc2NPcHRpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNEaXNhc3NlbWJseSA9
IHRydWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgRWxpbWlu
YXRlZCB0aGUgcHJpb3Igb3B0aW9ucyBmaWxlIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3Rz
LnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50
aW1lL0NvbmZpZ0ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5u
ZXI6OkNvbmZpZ0ZpbGVTY2FubmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6
OnN0YXJ0KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmxpbmVOdW1iZXIpOgor
ICAgICAgICAoSlNDOjpDb25maWdGaWxlU2Nhbm5lcjo6Y3VycmVudEJ1ZmZlcik6CisgICAgICAg
IChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjphdEZpbGVFbmQpOgorICAgICAgICAoSlNDOjpDb25m
aWdGaWxlU2Nhbm5lcjo6dHJ5Q29uc3VtZSk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2Fu
bmVyOjp0cnlDb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6
OnRyeUNvbnN1bWVVcHRvKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmZpbGxC
dWZmZXJJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjpmaWxsQnVm
ZmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6Q29uZmlnRmlsZSk6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmls
ZTo6c2V0UGFyZW50UHJvY2Vzc05hbWUpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlOjpwYXJz
ZSk6CisgICAgICAgICogcnVudGltZS9Db25maWdGaWxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1
bnRpbWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgor
ICAgICAgICAoSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09w
dGlvbnMuaDoKKwogMjAxNy0wMi0yNyAgSkYgQmFzdGllbiAgPGpmYmFzdGllbkBhcHBsZS5jb20+
CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IG1pc2NlbGxhbmVvdXMgc3BlYyBmaXhlcyBwYXJ0IGRl
dXgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMzA3
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtNjkwLDYgKzY5MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9Db21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcAogICAgIHJ1bnRpbWUvQ29tcGlsYXRp
b25SZXN1bHQuY3BwCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAorICAgIHJ1bnRpbWUvQ29u
ZmlnRmlsZS5jcHAKICAgICBydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCiAgICAgcnVudGltZS9D
b25zb2xlT2JqZWN0LmNwcAogICAgIHJ1bnRpbWUvQ29uc3RhbnRNb2RlLmNwcApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2pzYy5jcHAJKHJldmlzaW9uIDIxMzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qc2MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQnV0
dGVyZmx5SW5saW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBs
ZXRpb24uaCIKKyNpbmNsdWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVy
U2V0dGVyLmgiCiAjaW5jbHVkZSAiRE9NSklUUGF0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRPTUpJ
VFBhdGNocG9pbnRQYXJhbXMuaCIKQEAgLTM3ODIsNiArMzc4MywxMiBAQCBpbnQganNjbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCiAgICAgLy8gY29tZXMgZmlyc3QuCiAgICAgQ29tbWFuZExp
bmUgb3B0aW9ucyhhcmdjLCBhcmd2KTsKIAorICAgIGlmIChPcHRpb25zOjpjb25maWdGaWxlKCkp
IHsKKyAgICAgICAgQ29uZmlnRmlsZSBjb25maWdGaWxlKE9wdGlvbnM6OmNvbmZpZ0ZpbGUoKSk7
CisgICAgICAgIGNvbmZpZ0ZpbGUuc2V0UHJvY2Vzc05hbWUoImpzYyIpOworICAgICAgICBjb25m
aWdGaWxlLnBhcnNlKCk7CisgICAgfQorCiAgICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdl
dHRpbmcgVk0uCiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5p
dGlhbGl6ZVRocmVhZGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJl
dmlzaW9uIDIxMzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg2LDYgKzEzODYs
OCBAQAogCQk2NTVFQjI5QjEwQ0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NUVCMjlBMTBDRTI1
ODEwMDFBOTkwRSAvKiBOb2Rlc0NvZGVnZW4uY3BwICovOyB9OwogCQk2NTdDRjQ1ODE5QkY2NjYy
MDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCAq
LzsgfTsKIAkJNjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTdDRjQ1NzE5QkY2NjYyMDA0
QUNCRjIgLyogSlNDYWxsZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OworCQk2NTg4MjRBRjFFNUNGREIwMDBGQjczNTkgLyogQ29uZmlnRmlsZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4ODI0QUUxRTVD
RkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCAqLzsgfTsKKwkJNjU4ODI0QjExRTVDRkRGNDAw
RkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3Bw
ICovOyB9OwogCQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4RDNBNTUxOTYz
ODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2Fj
aGVkUmVjb3ZlcnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDY1QjgzOTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9Owog
CQk2NUI4MzkyRjFCQUNBRDZBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkQxQkFDQTlEMzAw
NDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNwcCAqLzsgfTsKQEAgLTM4NjgsNiArMzg3MCw4IEBA
CiAJCTY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTY1N0NGNDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF4RnJh
bWVFeHRlbnRGb3JTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NjU4ODI0QUUxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uZmlnRmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk2NTg4MjRCMDFFNUNGREY0MDBGQjczNTkgLyogQ29uZmlnRmlsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb25maWdGaWxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNjU4RDNBNTUxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNv
cmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFZN
RW50cnlSZWNvcmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmlj
YXRpb25JZGVudGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTY1OTg3RjJDMTY3RkU4
NEIwMDNDMkY4RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaDsgcGF0aCA9IGRm
Zy9ERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1OTg3RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVudXNlZFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTYzNTAsNiArNjM1NCw4IEBACiAJCQkJQTdFNUEzQTYxNzk3NDMyRDAw
RTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggKi8sCiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAw
RjFGNjgxIC8qIENvbXBsZXRpb24uY3BwICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUx
RCAvKiBDb21wbGV0aW9uLmggKi8sCisJCQkJNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENv
bmZpZ0ZpbGUuY3BwICovLAorCQkJCTY1ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdG
aWxlLmggKi8sCiAJCQkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xv
Y2suaCAqLywKIAkJCQlBNUI2QTc0QzE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5j
cHAgKi8sCiAJCQkJQTUzQ0UwODkxOEJDMjFDMzAwQkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCAq
LywKQEAgLTgzNTgsNiArODM2NCw3IEBACiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8q
IERGR09TUkF2YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDgyRTU3MTQxREFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEOEEzMjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQk2NTg4MjRBRjFFNUNGREIwMDBGQjczNTkgLyogQ29u
ZmlnRmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8q
IERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3
RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYx
MTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApA
QCAtMTAzNjksNiArMTAzNzYsNyBAQAogCQkJCTE0MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBK
U0xleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VD
MTNFMDAxM0U3QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUQ3MDlCMTZE
RTk5RjQwMEZDQTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTY1
ODgyNEIxMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3MDA4NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzRERUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlFM0QyMzlDODFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9u
bWVudC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbmZpZ0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbmZpZ0ZpbGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNvbmZpZ0ZpbGUuaCIKKworI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxyZWdleC5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUu
aD4KKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eworCitzdGF0aWMgY29uc3Qgc2l6ZV90IHNfcHJvY2Vzc05hbWVNYXggPSAxMjg7CitjaGFyIENv
bmZpZ0ZpbGU6OnNfcHJvY2Vzc05hbWVbc19wcm9jZXNzTmFtZU1heCArIDFdID0geyAwIH07Citj
aGFyIENvbmZpZ0ZpbGU6OnNfcGFyZW50UHJvY2Vzc05hbWVbc19wcm9jZXNzTmFtZU1heCArIDFd
ID0geyAwIH07CisKK2NsYXNzIENvbmZpZ0ZpbGVTY2FubmVyIHsKK3B1YmxpYzoKKyAgICBDb25m
aWdGaWxlU2Nhbm5lcihjb25zdCBjaGFyKiBmaWxlbmFtZSkKKyAgICAgICAgOiBtX2ZpbGVuYW1l
KGZpbGVuYW1lKQorICAgICAgICAsIG1fbGluZU51bWJlcigwKQorICAgIHsKKyAgICAgICAgbV9z
cmNQdHIgPSAmbV9idWZmZXJbMF07CisgICAgICAgIG1fYnVmZmVyRW5kID0gJm1fYnVmZmVyWzBd
OworICAgIH0KKworICAgIGJvb2wgc3RhcnQoKQorICAgIHsKKyAgICAgICAgbV9maWxlID0gZm9w
ZW4obV9maWxlbmFtZSwgInIiKTsKKyAgICAgICAgaWYgKCFtX2ZpbGUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2dGKCJGYWlsZWQgdG8gb3BlbiBmaWxlIEpTQyBDb25maWcgZmlsZSAnJXMnLlxuIiwg
bV9maWxlbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsaW5lTnVtYmVyKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpbmVOdW1iZXI7CisgICAgfQorCisgICAgY29uc3QgY2hh
ciogY3VycmVudEJ1ZmZlcigpCisgICAgeworICAgICAgICBpZiAoIW1fc3JjUHRyIHx8IG1fc3Jj
UHRyID09IG1fYnVmZmVyRW5kKQorICAgICAgICAgICAgcmV0dXJuICIiOworCisgICAgICAgIHJl
dHVybiBtX3NyY1B0cjsKKyAgICB9CisKKyAgICBib29sIGF0RmlsZUVuZCgpCisgICAgeworICAg
ICAgICBpZiAoIWZpbGxCdWZmZXJJZk5lZWRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGJvb2wgdHJ5Q29uc3VtZShj
aGFyIGMpCisgICAgeworICAgICAgICBpZiAoIWZpbGxCdWZmZXJJZk5lZWRlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChjID09ICptX3NyY1B0cikgeworICAg
ICAgICAgICAgbV9zcmNQdHIrKzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRlbXBsYXRlIDxzaXplX3Qg
bGVuZ3RoPgorICAgIGJvb2wgdHJ5Q29uc3VtZShjb25zdCBjaGFyICgmdG9rZW4pIFtsZW5ndGhd
KQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBzaXplX3QgdG9rZW5MZW5ndGggPSBsZW5ndGggLSAx
OworICAgICAgICBpZiAoIXN0cm5jbXAobV9zcmNQdHIsIHRva2VuLCB0b2tlbkxlbmd0aCkpIHsK
KyAgICAgICAgICAgIG1fc3JjUHRyICs9IHRva2VuTGVuZ3RoOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
Y2hhciogdHJ5Q29uc3VtZVN0cmluZygpCisgICAgeworICAgICAgICBpZiAoIWZpbGxCdWZmZXJJ
Zk5lZWRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgaWYgKCpt
X3NyY1B0ciAhPSAnIicpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBj
aGFyKiBzdHJpbmdTdGFydCA9ICsrbV9zcmNQdHI7CisKKyAgICAgICAgY2hhciogc3RyaW5nRW5k
ID0gc3RyY2hyKG1fc3JjUHRyLCAnIicpOworICAgICAgICBpZiAoc3RyaW5nRW5kKSB7CisgICAg
ICAgICAgICAqc3RyaW5nRW5kID0gJ1wwJzsKKyAgICAgICAgICAgIG1fc3JjUHRyID0gc3RyaW5n
RW5kICsgMTsKKyAgICAgICAgICAgIHJldHVybiBzdHJpbmdTdGFydDsKKyAgICAgICAgfQorCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIGNoYXIqIHRyeUNvbnN1bWVVcHRv
KGJvb2wmIGZvdW5kQ2hhciwgY2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVy
SWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGNoYXIq
IHN0YXJ0ID0gbV9zcmNQdHI7CisgICAgICAgIGZvdW5kQ2hhciA9IGZhbHNlOworCisgICAgICAg
IGNoYXIqIGNQb3NpdGlvbiA9IHN0cmNocihtX3NyY1B0ciwgYyk7CisgICAgICAgIGlmIChjUG9z
aXRpb24pIHsKKyAgICAgICAgICAgICpjUG9zaXRpb24gPSAnXDAnOworICAgICAgICAgICAgbV9z
cmNQdHIgPSBjUG9zaXRpb24gKyAxOworICAgICAgICAgICAgZm91bmRDaGFyID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3NyY1B0ciA9IG1fYnVmZmVyRW5kOworCisgICAg
ICAgIHJldHVybiBzdGFydDsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBmaWxsQnVmZmVy
SWZOZWVkZWQoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NyY1B0cikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAgd2hpbGUg
KG1fc3JjUHRyICE9IG1fYnVmZmVyRW5kICYmIGlzQVNDSUlTcGFjZSgqbV9zcmNQdHIpKQorICAg
ICAgICAgICAgICAgIG1fc3JjUHRyKys7CisKKyAgICAgICAgICAgIGlmIChtX3NyY1B0ciAhPSBt
X2J1ZmZlckVuZCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgaWYgKCFm
aWxsQnVmZmVyKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBmaWxsQnVmZmVyKCkKKyAg
ICB7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fc3JjUHRyID0gZmdldHMobV9idWZmZXIs
IHNpemVvZihtX2J1ZmZlciksIG1fZmlsZSk7CisgICAgICAgICAgICBpZiAoIW1fc3JjUHRyKSB7
CisgICAgICAgICAgICAgICAgZmNsb3NlKG1fZmlsZSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtX2xpbmVOdW1iZXIrKzsKKwor
ICAgICAgICAgICAgbV9idWZmZXJFbmQgPSBzdHJjaHIobV9zcmNQdHIsICcjJyk7CisKKyAgICAg
ICAgICAgIGlmIChtX2J1ZmZlckVuZCkKKyAgICAgICAgICAgICAgICAqbV9idWZmZXJFbmQgPSAn
XDAnOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9idWZmZXJFbmQgPSBt
X3NyY1B0ciArIHN0cmxlbihtX3NyY1B0cik7CisgICAgICAgICAgICAgICAgaWYgKG1fYnVmZmVy
RW5kID4gbV9zcmNQdHIgJiYgbV9idWZmZXJFbmRbLTFdID09ICdcbicpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9idWZmZXJFbmQtLTsKKyAgICAgICAgICAgICAgICAgICAgKm1fYnVmZmVyRW5k
ID0gJ1wwJzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hp
bGUgKG1fYnVmZmVyRW5kID09IG1fc3JjUHRyKTsKKworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICB9CisKKyAgICBjb25zdCBjaGFyKiBtX2ZpbGVuYW1lOworICAgIHVuc2lnbmVkIG1fbGluZU51
bWJlcjsKKyAgICBGSUxFKiBtX2ZpbGU7CisgICAgY2hhciBtX2J1ZmZlcltCVUZTSVpdOworICAg
IGNoYXIqIG1fc3JjUHRyOworICAgIGNoYXIqIG1fYnVmZmVyRW5kOworfTsKKworQ29uZmlnRmls
ZTo6Q29uZmlnRmlsZShjb25zdCBjaGFyKiBmaWxlbmFtZSkKKyAgICA6IG1fZmlsZW5hbWUoZmls
ZW5hbWUpCit7Cit9CisKK3ZvaWQgQ29uZmlnRmlsZTo6c2V0UHJvY2Vzc05hbWUoY29uc3QgY2hh
ciogcHJvY2Vzc05hbWUpCit7CisgICAgc3RybmNweShzX3Byb2Nlc3NOYW1lLCBwcm9jZXNzTmFt
ZSwgc19wcm9jZXNzTmFtZU1heCk7Cit9CisKK3ZvaWQgQ29uZmlnRmlsZTo6c2V0UGFyZW50UHJv
Y2Vzc05hbWUoY29uc3QgY2hhciogcGFyZW50UHJvY2Vzc05hbWUpCit7CisgICAgc3RybmNweShz
X3BhcmVudFByb2Nlc3NOYW1lLCBwYXJlbnRQcm9jZXNzTmFtZSwgc19wcm9jZXNzTmFtZU1heCk7
Cit9CisKK3ZvaWQgQ29uZmlnRmlsZTo6cGFyc2UoKQoreworICAgIGVudW0gU3RhdGVtZW50TmVz
dGluZyB7IFRvcExldmVsU3RhdG1lbnQsIE5lc3RlZFN0YXRlbWVudCwgTmVzdGVkU3RhdGVtZW50
RmFpbGVkQ3JpdGVyaWEgfTsKKyAgICBlbnVtIFBhcnNlUmVzdWx0IHsgUGFyc2VPSywgUGFyc2VF
cnJvciwgTmVzdGVkU3RhdGVtZW50RG9uZSB9OworCisgICAgQ29uZmlnRmlsZVNjYW5uZXIgc2Nh
bm5lcihtX2ZpbGVuYW1lKTsKKworICAgIGlmICghc2Nhbm5lci5zdGFydCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICByZWdleF90IG9wdGlvblJlZ2V4OworICAgIGludCByZWdleHBDb21waWxl
UmVzdWx0ID0gcmVnY29tcCgmb3B0aW9uUmVnZXgsICIoW1s6YWxudW06XV9dKylbWzpzcGFjZTpd
XSo9W1s6c3BhY2U6XV0qKFteWzpzcGFjZTpdXSspIiwgUkVHX0VYVEVOREVEKTsKKyAgICBBU1NF
UlRfVU5VU0VEKHJlZ2V4cENvbXBpbGVSZXN1bHQsICFyZWdleHBDb21waWxlUmVzdWx0KTsKKwor
ICAgIGNoYXIgbG9nUGF0aG5hbWVbUEFUSF9NQVggKyAxXSA9IHsgMCB9OworCisgICAgU3RyaW5n
QnVpbGRlciBqc2NPcHRpb25zQnVpbGRlcjsKKworICAgIGF1dG8gcGFyc2VMb2dGaWxlID0gWyZd
KFN0YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBjaGFyKiBmaWxl
bmFtZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAo
ZmlsZW5hbWUgPSBzY2FubmVyLnRyeUNvbnN1bWVTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnROZXN0aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKQorICAg
ICAgICAgICAgICAgIHN0cm5jcHkobG9nUGF0aG5hbWUsIGZpbGVuYW1lLCBQQVRIX01BWCk7CisK
KyAgICAgICAgICAgIHJldHVybiBQYXJzZU9LOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IFBhcnNlRXJyb3I7CisgICAgfTsKKworICAgIGF1dG8gcGFyc2VKU0NPcHRpb25zID0gWyZdKFN0
YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBpZiAoc2Nhbm5lci50
cnlDb25zdW1lKCd7JykpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKwor
ICAgICAgICAgICAgYm9vbCBmb3VuZENsb3NpbmdCcmFjZSA9IGZhbHNlOworICAgICAgICAgICAg
Y2hhciogY3VycmVudExpbmUgPSBudWxscHRyOworCisgICAgICAgICAgICB3aGlsZSAoKGN1cnJl
bnRMaW5lID0gc2Nhbm5lci50cnlDb25zdW1lVXB0byhmb3VuZENsb3NpbmdCcmFjZSwgJ30nKSkp
IHsKKyAgICAgICAgICAgICAgICByZWdtYXRjaF90IG9wdGlvbk1hdGNoZXNbM107CisgICAgICAg
ICAgICAgICAgaW50IHJlZ2V4ZWNFcnJvciA9IHJlZ2V4ZWMoJm9wdGlvblJlZ2V4LCBjdXJyZW50
TGluZSwgMywgb3B0aW9uTWF0Y2hlcywgMCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZWdleGVj
RXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoY3VycmVudExpbmUg
KyBvcHRpb25NYXRjaGVzWzFdLnJtX3NvLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ob3B0aW9uTWF0
Y2hlc1sxXS5ybV9lbyAtIG9wdGlvbk1hdGNoZXNbMV0ucm1fc28pKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnVpbGRlci5hcHBlbmQoJz0nKTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5h
cHBlbmQoY3VycmVudExpbmUgKyBvcHRpb25NYXRjaGVzWzJdLnJtX3NvLCBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4ob3B0aW9uTWF0Y2hlc1syXS5ybV9lbyAtIG9wdGlvbk1hdGNoZXNbMl0ucm1fc28p
KTsKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGZvdW5kQ2xvc2luZ0JyYWNlKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKHN0
YXRlbWVudE5lc3RpbmcgIT0gTmVzdGVkU3RhdGVtZW50RmFpbGVkQ3JpdGVyaWEpCisgICAgICAg
ICAgICAgICAganNjT3B0aW9uc0J1aWxkZXIuYXBwZW5kKGJ1aWxkZXIpOworCisgICAgICAgICAg
ICByZXR1cm4gUGFyc2VPSzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBQYXJzZUVycm9y
OworICAgIH07CisKKyAgICBhdXRvIHBhcnNlTmVzdGVkU3RhdGVtZW50ID0gWyZdKFN0YXRlbWVu
dE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25z
dW1lKCJqc2NPcHRpb25zIikpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VKU0NPcHRpb25zKHN0
YXRlbWVudE5lc3RpbmcpOworCisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoImxvZ0Zp
bGUiKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUxvZ0ZpbGUoc3RhdGVtZW50TmVzdGluZyk7
CisKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgnfScpKQorICAgICAgICAgICAgcmV0
dXJuIE5lc3RlZFN0YXRlbWVudERvbmU7CisKKyAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7Cisg
ICAgfTsKKworICAgIGF1dG8gcGFyc2VQcmVkaWNhdGUgPSBbJl0oYm9vbCYgcHJlZGljYXRlTWF0
Y2hlcywgY29uc3QgY2hhciogbWF0Y2hWYWx1ZSkgeworICAgICAgICBjaGFyKiBwcmVkaWNhdGVW
YWx1ZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoIj09IikKKyAg
ICAgICAgICAgICYmIChwcmVkaWNhdGVWYWx1ZSA9IHNjYW5uZXIudHJ5Q29uc3VtZVN0cmluZygp
KSAmJiBtYXRjaFZhbHVlKSB7CisgICAgICAgICAgICAgICAgcHJlZGljYXRlTWF0Y2hlcyA9ICFz
dHJjbXAocHJlZGljYXRlVmFsdWUsIG1hdGNoVmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH07CisKKyAg
ICBhdXRvIHBhcnNlQ29uZGl0aW9uYWxCbG9jayA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRl
bWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHN0YXRlbWVudE5lc3RpbmcgPT0gTmVzdGVkU3Rh
dGVtZW50KSB7CisgICAgICAgICAgICBTdGF0ZW1lbnROZXN0aW5nIHN1Yk5lc3RpbmcgPSBOZXN0
ZWRTdGF0ZW1lbnQ7CisKKyAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAg
ICAgYm9vbCBwcmVkaWNhdGVNYXRjaGVzOworICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFj
dHVhbFZhbHVlID0gbnVsbHB0cjsKKworICAgICAgICAgICAgICAgIGlmIChzY2FubmVyLnRyeUNv
bnN1bWUoInByb2Nlc3NOYW1lIikpCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0g
c19wcm9jZXNzTmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2FubmVyLnRyeUNvbnN1
bWUoInBhcmVudFByb2Nlc3NOYW1lIikpCisgICAgICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVl
ID0gc19wYXJlbnRQcm9jZXNzTmFtZTsKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2FubmVy
LnRyeUNvbnN1bWUoImJ1aWxkIikpCisjaWZuZGVmIE5ERUJVRworICAgICAgICAgICAgICAgICAg
ICBhY3R1YWxWYWx1ZSA9ICJEZWJ1ZyI7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBhY3R1
YWxWYWx1ZSA9ICJSZWxlYXNlIjsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisKKyAgICAgICAgICAgICAgICBpZiAo
cGFyc2VQcmVkaWNhdGUocHJlZGljYXRlTWF0Y2hlcywgYWN0dWFsVmFsdWUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmICghcHJlZGljYXRlTWF0Y2hlcykKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN1Yk5lc3RpbmcgPSBOZXN0ZWRTdGF0ZW1lbnRGYWlsZWRDcml0ZXJpYTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXNjYW5uZXIudHJ5Q29uc3VtZSgiJiYiKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaWYgKCFzY2FubmVyLnRyeUNvbnN1bWUoJ3snKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gUGFyc2VFcnJvcjsKKworICAgICAgICAgICAgUGFyc2VSZXN1bHQgcGFyc2VSZXN1
bHQgPSBQYXJzZU9LOworICAgICAgICAgICAgd2hpbGUgKHBhcnNlUmVzdWx0ID09IFBhcnNlT0sg
JiYgIXNjYW5uZXIuYXRGaWxlRW5kKCkpCisgICAgICAgICAgICAgICAgcGFyc2VSZXN1bHQgPSBw
YXJzZU5lc3RlZFN0YXRlbWVudChzdWJOZXN0aW5nKTsKKworICAgICAgICAgICAgaWYgKHBhcnNl
UmVzdWx0ID09IE5lc3RlZFN0YXRlbWVudERvbmUpCisgICAgICAgICAgICAgICAgcmV0dXJuIFBh
cnNlT0s7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUGFyc2VFcnJvcjsKKyAgICB9Owor
CisgICAgYXV0byBwYXJzZVN0YXRlbWVudCA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVu
dE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgianNjT3B0aW9ucyIp
KQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlSlNDT3B0aW9ucyhzdGF0ZW1lbnROZXN0aW5nKTsK
KworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCJsb2dGaWxlIikpCisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VMb2dGaWxlKHN0YXRlbWVudE5lc3RpbmcpOworCisgICAgICAgIGlmIChz
dGF0ZW1lbnROZXN0aW5nID09IFRvcExldmVsU3RhdG1lbnQpCisgICAgICAgICAgICByZXR1cm4g
cGFyc2VDb25kaXRpb25hbEJsb2NrKE5lc3RlZFN0YXRlbWVudCk7CisKKyAgICAgICAgcmV0dXJu
IFBhcnNlRXJyb3I7CisgICAgfTsKKworICAgIFBhcnNlUmVzdWx0IHBhcnNlUmVzdWx0ID0gUGFy
c2VPSzsKKworICAgIHdoaWxlIChwYXJzZVJlc3VsdCA9PSBQYXJzZU9LICYmICFzY2FubmVyLmF0
RmlsZUVuZCgpKQorICAgICAgICBwYXJzZVJlc3VsdCA9IHBhcnNlU3RhdGVtZW50KFRvcExldmVs
U3RhdG1lbnQpOworCisgICAgaWYgKHBhcnNlUmVzdWx0ID09IFBhcnNlT0spIHsKKyAgICAgICAg
aWYgKHN0cmxlbihsb2dQYXRobmFtZSkpCisgICAgICAgICAgICBXVEY6OnNldERhdGFGaWxlKGxv
Z1BhdGhuYW1lKTsKKworICAgICAgICBpZiAoIWpzY09wdGlvbnNCdWlsZGVyLmlzRW1wdHkoKSkg
eworICAgICAgICAgICAgY29uc3QgY2hhciogb3B0aW9uc1N0ciA9IGpzY09wdGlvbnNCdWlsZGVy
LnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKKyAgICAgICAgICAgIE9wdGlvbnM6OnNldE9wdGlv
bnMob3B0aW9uc1N0cik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgV1RGOjpkYXRh
TG9nRigiRXJyb3IgaW4gSlNDIENvbmZpZyBmaWxlIG9uIG9yIG5lYXIgbGluZSAldSwgcGFyc2lu
ZyAnJXMnXG4iLCBzY2FubmVyLmxpbmVOdW1iZXIoKSwgc2Nhbm5lci5jdXJyZW50QnVmZmVyKCkp
OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0NvbmZpZ0ZpbGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25maWdGaWxlLmgJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9u
Y2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENvbmZpZ0ZpbGVTY2FubmVyOworCitjbGFz
cyBDb25maWdGaWxlIHsKK3B1YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb25maWdGaWxl
KGNvbnN0IGNoYXIqKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldFBy
b2Nlc3NOYW1lKGNvbnN0IGNoYXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9p
ZCBzZXRQYXJlbnRQcm9jZXNzTmFtZShjb25zdCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBwYXJzZSgpOworCitwcml2YXRlOgorICAgIHN0YXRpYyBjaGFyIHNfcHJvY2Vzc05h
bWVbXTsKKyAgICBzdGF0aWMgY2hhciBzX3BhcmVudFByb2Nlc3NOYW1lW107CisKKyAgICBjb25z
dCBjaGFyKiBtX2ZpbGVuYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjEzMDc0KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDkgKzUxLDYgQEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogI2Vu
ZGlmCiAKLSNkZWZpbmUgVVNFX09QVElPTlNfRklMRSAwCi0jZGVmaW5lIE9QVElPTlNfRklMRU5B
TUUgIi90bXAvanNjLm9wdGlvbnMiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewpA
QCAtNDk2LDMxICs0OTMsNiBAQCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAg
ICAgICAgIDsgLy8gRGVjb25mdXNlIGVkaXRvcnMgdGhhdCBkbyBhdXRvIGluZGVudGF0aW9uCiAj
ZW5kaWYKICAgICAKLSNpZiBVU0UoT1BUSU9OU19GSUxFKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gT1BUSU9OU19GSUxFTkFNRTsKLSAgICAg
ICAgICAgICAgICBGSUxFKiBvcHRpb25zRmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAg
ICAgICAgICAgICAgIGlmICghb3B0aW9uc0ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkZhaWxlZCB0byBvcGVuIGZpbGUgJXMuIERpZCB5b3UgYWRkIHRoZSBmaWxlLXJlYWQt
ZGF0YSBlbnRpdGxlbWVudCB0byBXZWJQcm9jZXNzLnNiP1xuIiwgZmlsZW5hbWUpOwotICAgICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgICAg
ICBjaGFyKiBsaW5lOwotICAgICAgICAgICAgICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07Ci0gICAg
ICAgICAgICAgICAgd2hpbGUgKChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwg
b3B0aW9uc0ZpbGUpKSkKLSAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVy
KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25z
U3RyID0gYnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAg
ZGF0YUxvZ0YoIlNldHRpbmcgb3B0aW9uczogJXNcbiIsIG9wdGlvbnNTdHIpOwotICAgICAgICAg
ICAgICAgIHNldE9wdGlvbnMob3B0aW9uc1N0cik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgaW50IHJlc3VsdCA9IGZjbG9zZShvcHRpb25zRmlsZSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBj
bG9zZSBmaWxlICVzOiAlc1xuIiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAg
ICAgICB9Ci0jZW5kaWYKLQogICAgICAgICAgICAgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygp
OwogCiAgICAgICAgICAgICAvLyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtl
IGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25zOgpAQCAtNjI4LDcgKzYwMCwxMiBAQCBib29sIE9w
dGlvbnM6OnNldE9wdGlvbnMoY29uc3QgY2hhciogb3B0CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7CisKICAgICBkdW1wT3B0aW9uc0lmTmVlZGVk
KCk7CisKKyAgICBlbnN1cmVPcHRpb25zQXJlQ29oZXJlbnQoKTsKKwogICAgIHJldHVybiBzdWNj
ZXNzOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShy
ZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIq
IG9wdGlvblN0cmluZzsKICNkZWZpbmUgSlNDX09QVElPTlModikgXAogICAgIHYoYm9vbCwgdmFs
aWRhdGVPcHRpb25zLCBmYWxzZSwgTm9ybWFsLCAiY3Jhc2hlcyBpZiBtaXMtdHlwZWQgSlNDIG9w
dGlvbnMgd2VyZSBwYXNzZWQgdG8gdGhlIFZNIikgXAogICAgIHYodW5zaWduZWQsIGR1bXBPcHRp
b25zLCAwLCBOb3JtYWwsICJkdW1wcyBKU0Mgb3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlk
ZGVuIG9ubHksIDIgPSBBbGwsIDMgPSBWZXJib3NlKSIpIFwKKyAgICB2KG9wdGlvblN0cmluZywg
Y29uZmlnRmlsZSwgbnVsbHB0ciwgTm9ybWFsLCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlv
bnMgYW5kIGxvZ2dpbmcgbG9jYXRpb24iKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlTExJbnQs
ICB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwK
ICAgICB2KGJvb2wsIHVzZUpJVCwgICAgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBiYXNlbGlu
ZSBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzA3NCkKKysr
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIw
MTctMDItMjcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAg
QWRkIGFiaWxpdHkgdG8gY29uZmlndXJlIEpTQyBvcHRpb25zIGZyb20gYSBmaWxlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg5MTQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0
eSB0byBzZXQgb3B0aW9ucyBhbmQgRGF0YUxvZyBmaWxlIGxvY2F0aW9uIHZpYSBhIGNvbmZpZ3Vy
YXRpb24gZmlsZS4KKyAgICAgICAgVGhlIHBhdGhuYW1lIGNhbiBpbmNsdWRlIHRoZSBwcmludGYg
c3R5bGUgIiVwaWQiLCB3aGljaCB3aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlCisgICAgICAgIGN1
cnJlbnQgcHJvY2VzcyBpZC4KKworICAgICAgICAqIHd0Zi9EYXRhTG9nLmNwcDoKKyAgICAgICAg
KFdURjo6aW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKToKKyAgICAgICAgKFdURjo6c2V0RGF0YUZpbGUp
OgorICAgICAgICAqIHd0Zi9EYXRhTG9nLmg6CisKIDIwMTctMDItMjQgIEplciBOb2JsZSAgPGpl
ci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHB1YmxpYyBtZXRob2QgdG8gTWVkaWFU
aW1lIGZvciBkb2luZyB0aW1lU2NhbGUgY29udmVyc2lvbi4KSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L0RhdGFMb2cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCShy
ZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTAsMzAgKzUwLDIyIEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi1zdGF0aWMgUHJp
bnRTdHJlYW0qIHNfZmlsZTsKK3N0YXRpYyBjb25zdCBzaXplX3QgbWF4UGF0aExlbmd0aCA9IDEw
MjQ7CiAKK3N0YXRpYyBQcmludFN0cmVhbSogc19maWxlOwogc3RhdGljIHVpbnQ2NF90IHNfZmls
ZURhdGFbKHNpemVvZihGaWxlUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKIHN0YXRpYyB1aW50NjRf
dCBzX2xvY2tlZEZpbGVEYXRhWyhzaXplb2YoTG9ja2VkUHJpbnRTdHJlYW0pICsgNykgLyA4XTsK
IAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKIHsKLSAgICBGaWxlUHJpbnRT
dHJlYW0qIGZpbGUgPSBudWxscHRyOwotICAgIAotI2lmIERBVEFfTE9HX1RPX0ZJTEUKLSAgICBj
b25zdCBsb25nIG1heFBhdGhMZW5ndGggPSAxMDI0OwotCi0gICAgY2hhciBmaWxlbmFtZVN1ZmZp
eFttYXhQYXRoTGVuZ3RoICsgMV07CisgICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBudWxscHRy
OwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIF9zbnByaW50ZihmaWxlbmFtZVN1ZmZpeCwgc2l6
ZW9mKGZpbGVuYW1lU3VmZml4KSwgIi4lZC50eHQiLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwot
I2Vsc2UKLSAgICBzbnByaW50ZihmaWxlbmFtZVN1ZmZpeCwgc2l6ZW9mKGZpbGVuYW1lU3VmZml4
KSwgIi4lZC50eHQiLCBnZXRwaWQoKSk7Ci0jZW5kaWYKKyAgICBpZiAoc19maWxlKQorICAgICAg
ICByZXR1cm47CiAKKyNpZiBEQVRBX0xPR19UT19GSUxFCiAjaWYgREFUQV9MT0dfVE9fREFSV0lO
X1RFTVBfRElSCiAgICAgY2hhciBmaWxlbmFtZUJ1ZmZlclttYXhQYXRoTGVuZ3RoICsgMV07Ci0g
ICAgdW5zaWduZWQgc3VmZml4TGVuZ3RoID0gc3RybGVuKGZpbGVuYW1lU3VmZml4KTsKLQogI2lm
IGRlZmluZWQoREFUQV9MT0dfRklMRU5BTUUpCiAgICAgY2hhciogbG9nQmFzZW5hbWUgPSBzdHJy
Y2hyKERBVEFfTE9HX0ZJTEVOQU1FLCAnLycpOwogICAgIGlmICghbG9nQmFzZW5hbWUpCkBAIC04
MiwxMyArNzQsMTEgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICBj
b25zdCBjaGFyKiBsb2dCYXNlbmFtZSA9ICJXVEZMb2ciOwogI2VuZGlmCiAKLSAgICBjb25zdCBj
aGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7Ci0KICAgICBib29sIHN1Y2Nlc3MgPSBjb25mc3RyKF9D
U19EQVJXSU5fVVNFUl9URU1QX0RJUiwgZmlsZW5hbWVCdWZmZXIsIHNpemVvZihmaWxlbmFtZUJ1
ZmZlcikpOwogICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhh
dCB0aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCBpbnN0ZWFkIG9mIGFkZGluZyBhIHNsYXNoIGlm
IGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgIC8vIG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzIzNTc5
MDc3PiBpcyBmaXhlZCBpbiBhbGwgaU9TIFNpbXVsYXRvciB2ZXJzaW9ucyB0aGF0IHdlIHVzZS4K
LSAgICAgICAgc2l6ZV90IGxhc3RDb21wb25lbnRMZW5ndGggPSBzdHJsZW4obG9nQmFzZW5hbWUp
ICsgc3VmZml4TGVuZ3RoOworICAgICAgICBzaXplX3QgbGFzdENvbXBvbmVudExlbmd0aCA9IHN0
cmxlbihsb2dCYXNlbmFtZSkgKyAyMDsgLy8gTW9yZSB0aGFuIGVub3VnaCBmb3IgIi48cGlkPi50
eHQiCiAgICAgICAgIHNpemVfdCBkaXJuYW1lTGVuZ3RoID0gc3RybGVuKGZpbGVuYW1lQnVmZmVy
KTsKICAgICAgICAgYm9vbCBzaG91bGRBZGRQYXRoU2VwYXJhdG9yID0gZmlsZW5hbWVCdWZmZXJb
ZGlybmFtZUxlbmd0aCAtIDFdICE9ICcvJyAmJiBsb2dCYXNlbmFtZVswXSAhPSAnLyc7CiAgICAg
ICAgIGlmIChsYXN0Q29tcG9uZW50TGVuZ3RoICsgc2hvdWxkQWRkUGF0aFNlcGFyYXRvciA8PSBz
aXplb2YoZmlsZW5hbWVCdWZmZXIpIC0gZGlybmFtZUxlbmd0aCAtIDEpIHsKQEAgLTk5LDM2ICs4
OSwyMyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogICAgICAgICB9CiAg
ICAgfQogI2VsaWYgZGVmaW5lZChEQVRBX0xPR19GSUxFTkFNRSkKLSAgICBjb25zdCBjaGFyKiBm
aWxlbmFtZSA9IERBVEFfTE9HX0ZJTEVOQU1FOworICAgIGZpbGVuYW1lID0gREFUQV9MT0dfRklM
RU5BTUU7CiAjZWxzZQotICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gZ2V0ZW52KCJXVEZfREFU
QV9MT0dfRklMRU5BTUUiKTsKKyAgICBmaWxlbmFtZSA9IGdldGVudigiV1RGX0RBVEFfTE9HX0ZJ
TEVOQU1FIik7CiAjZW5kaWYKICAgICBjaGFyIGFjdHVhbEZpbGVuYW1lW21heFBhdGhMZW5ndGgg
KyAxXTsKIAotICAgIGlmIChmaWxlbmFtZSkgeworICAgIGlmIChmaWxlbmFtZSAmJiAhc3Ryc3Ry
KGZpbGVuYW1lLCAiJXBpZCIpKSB7CiAjaWYgUExBVEZPUk0oV0lOKQotICAgICAgICBfc25wcmlu
dGYoYWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIlcyVzIiwgZmlsZW5h
bWUsIGZpbGVuYW1lU3VmZml4KTsKKyAgICAgICAgX3NucHJpbnRmKGFjdHVhbEZpbGVuYW1lLCBz
aXplb2YoYWN0dWFsRmlsZW5hbWUpLCAiJXMuJSVwaWQudHh0IiwgZmlsZW5hbWUpOwogI2Vsc2UK
LSAgICAgICAgc25wcmludGYoYWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSks
ICIlcyVzIiwgZmlsZW5hbWUsIGZpbGVuYW1lU3VmZml4KTsKKyAgICAgICAgc25wcmludGYoYWN0
dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIlcy4lJXBpZC50eHQiLCBmaWxl
bmFtZSk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAgICAgIGZpbGUgPSBGaWxlUHJpbnRTdHJlYW06
Om9wZW4oYWN0dWFsRmlsZW5hbWUsICJ3IikucmVsZWFzZSgpOwotICAgICAgICBpZiAoZmlsZSkK
LSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiKioqIERhdGFMb2cgb3V0cHV0IHRvIFwiJXNcIiAq
KipcbiIsIGFjdHVhbEZpbGVuYW1lKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCJXYXJuaW5nOiBDb3VsZCBub3Qgb3BlbiBEYXRhTG9nIGZpbGUgJXMgZm9yIHdyaXRp
bmcuXG4iLCBhY3R1YWxGaWxlbmFtZSk7CisgICAgICAgIGZpbGVuYW1lID0gYWN0dWFsRmlsZW5h
bWU7CiAgICAgfQogI2VuZGlmIC8vIERBVEFfTE9HX1RPX0ZJTEUKLSAgICAKLSAgICBpZiAoIWZp
bGUpIHsKLSAgICAgICAgLy8gVXNlIHBsYWNlbWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVy
IHRvIHVzZSBkYXRhTG9nKCkgdG8gZGVidWcKLSAgICAgICAgLy8gZmFzdE1hbGxvYy4KLSAgICAg
ICAgZmlsZSA9IG5ldyAoc19maWxlRGF0YSkgRmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVBy
aW50U3RyZWFtOjpCb3Jyb3cpOwotICAgIH0KLSAgICAKLSAgICBzZXR2YnVmKGZpbGUtPmZpbGUo
KSwgMCwgX0lPTkJGLCAwKTsgLy8gUHJlZmVyIHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdl
IGdldCBhIGZ1bGwgbG9nIHVwb24gY3Jhc2ggb3IgZGVhZGxvY2suCi0gICAgCi0gICAgc19maWxl
ID0gbmV3IChzX2xvY2tlZEZpbGVEYXRhKSBMb2NrZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9w
dHI8RmlsZVByaW50U3RyZWFtPihmaWxlKSk7CisKKyAgICBzZXREYXRhRmlsZShmaWxlbmFtZSk7
CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlKCkKQEAgLTE0MSw2ICsxMTgsNjAg
QEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGUoKQogICAgICAgICB9KTsKIH0KIAordm9p
ZCBzZXREYXRhRmlsZShjb25zdCBjaGFyKiBwYXRoKQoreworICAgIEZpbGVQcmludFN0cmVhbSog
ZmlsZSA9IG51bGxwdHI7CisgICAgY2hhciBmb3JtYXR0ZWRQYXRoW21heFBhdGhMZW5ndGggKyAx
XTsKKyAgICBjb25zdCBjaGFyKiBwYXRoVG9PcGVuID0gcGF0aDsKKworICAgIGlmIChwYXRoKSB7
CisgICAgICAgIGNvbnN0IGNoYXIqIHBpZEZvcm1hdCA9IHN0cnN0cihwYXRoLCAiJXBpZCIpOwor
ICAgICAgICBpZiAocGlkRm9ybWF0KSB7CisgICAgICAgICAgICBzaXplX3QgbGVhZGluZ1BhdGhM
ZW5ndGggPSBwaWRGb3JtYXQgLSBwYXRoOworICAgICAgICAgICAgc2l6ZV90IHBhdGhDaGFyYWN0
ZXJzQXZhaWxhYmxlID0gc3RkOjptaW4obWF4UGF0aExlbmd0aCwgbGVhZGluZ1BhdGhMZW5ndGgp
OworICAgICAgICAgICAgc3RybmNweShmb3JtYXR0ZWRQYXRoLCBwYXRoLCBwYXRoQ2hhcmFjdGVy
c0F2YWlsYWJsZSk7CisgICAgICAgICAgICBjaGFyKiBuZXh0RGVzdCA9IGZvcm1hdHRlZFBhdGgg
KyBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZTsKKyAgICAgICAgICAgIHBhdGhDaGFyYWN0ZXJzQXZh
aWxhYmxlID0gbWF4UGF0aExlbmd0aCAtIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlOworICAgICAg
ICAgICAgaWYgKHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlKSB7CisgICAgICAgICAgICAgICAgaW50
IHBpZFRleHRMZW5ndGg7CisjaWYgUExBVEZPUk0oV0lOKQorICAgICAgICAgICAgICAgIHBpZFRl
eHRMZW5ndGggPSBfc25wcmludGYobmV4dERlc3QsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAi
JWQiLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBwaWRU
ZXh0TGVuZ3RoID0gc25wcmludGYobmV4dERlc3QsIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAi
JWQiLCBnZXRwaWQoKSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpZiAocGlkVGV4dExlbmd0
aCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90PihwaWRUZXh0TGVuZ3RoKSA+PSBwYXRoQ2hhcmFj
dGVyc0F2YWlsYWJsZSkKKyAgICAgICAgICAgICAgICAgICAgcGF0aENoYXJhY3RlcnNBdmFpbGFi
bGUgPSAwOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBwYXRo
Q2hhcmFjdGVyc0F2YWlsYWJsZSAtPSBzdGF0aWNfY2FzdDxzaXplX3Q+KHBpZFRleHRMZW5ndGgp
OworICAgICAgICAgICAgICAgICAgICBuZXh0RGVzdCArPSBwaWRUZXh0TGVuZ3RoOworICAgICAg
ICAgICAgICAgICAgICBzdHJuY3B5KG5leHREZXN0LCBwaWRGb3JtYXQgKyA0LCBwYXRoQ2hhcmFj
dGVyc0F2YWlsYWJsZSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9ybWF0dGVkUGF0aFttYXhQYXRoTGVuZ3RoXSA9ICdcMCc7CisgICAgICAgICAgICBw
YXRoVG9PcGVuID0gZm9ybWF0dGVkUGF0aDsKKyAgICAgICAgfQorCisgICAgICAgIGZpbGUgPSBG
aWxlUHJpbnRTdHJlYW06Om9wZW4ocGF0aFRvT3BlbiwgInciKS5yZWxlYXNlKCk7CisgICAgICAg
IGlmIChmaWxlKQorICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCIqKiogRGF0YUxvZyBvdXRwdXQg
dG8gXCIlc1wiICoqKlxuIiwgcGF0aFRvT3Blbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IFdURkxvZ0Fsd2F5cygiV2FybmluZzogQ291bGQgbm90IG9wZW4gRGF0YUxvZyBmaWxlICVzIGZv
ciB3cml0aW5nLlxuIiwgcGF0aFRvT3Blbik7CisgICAgfQorCisgICAgaWYgKCFmaWxlKSB7Cisg
ICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3OyB0aGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2Ug
ZGF0YUxvZygpIHRvIGRlYnVnCisgICAgICAgIC8vIGZhc3RNYWxsb2MuCisgICAgICAgIGZpbGUg
PSBuZXcgKHNfZmlsZURhdGEpIEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZpbGVQcmludFN0cmVh
bTo6Qm9ycm93KTsKKyAgICB9CisKKyAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lPTkJG
LCAwKTsgLy8gUHJlZmVyIHVuYnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1bGwg
bG9nIHVwb24gY3Jhc2ggb3IgZGVhZGxvY2suCisKKyAgICBpZiAoc19maWxlKQorICAgICAgICBz
X2ZpbGUtPmZsdXNoKCk7CisKKyAgICBzX2ZpbGUgPSBuZXcgKHNfbG9ja2VkRmlsZURhdGEpIExv
Y2tlZFByaW50U3RyZWFtKHN0ZDo6dW5pcXVlX3B0cjxGaWxlUHJpbnRTdHJlYW0+KGZpbGUpKTsK
K30KKwogUHJpbnRTdHJlYW0mIGRhdGFGaWxlKCkKIHsKICAgICBpbml0aWFsaXplTG9nRmlsZSgp
OwpJbmRleDogU291cmNlL1dURi93dGYvRGF0YUxvZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL0RhdGFMb2cuaAkocmV2aXNpb24gMjEzMDc0KQorKysgU291cmNlL1dURi93dGYvRGF0
YUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBACiBuYW1lc3BhY2UgV1RGIHsK
IAogV1RGX0VYUE9SVF9QUklWQVRFIFByaW50U3RyZWFtJiBkYXRhRmlsZSgpOworV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgc2V0RGF0YUZpbGUoY29uc3QgY2hhciogcGF0aCk7CiAKIFdURl9FWFBP
UlRfUFJJVkFURSB2b2lkIGRhdGFMb2dGVihjb25zdCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QpIFdU
Rl9BVFRSSUJVVEVfUFJJTlRGKDEsIDApOwogV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGF0YUxv
Z0YoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302906</attachid>
            <date>2017-02-27 18:14:44 -0800</date>
            <delta_ts>2017-02-27 20:55:20 -0800</delta_ts>
            <desc>Patch for landing - recoded the regex based JSC options white space removal code to walk through the string manually</desc>
            <filename>168914-3.patch</filename>
            <type>text/plain</type>
            <size>32827</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE3LTAyLTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9ucyBmcm9tIGEgZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4OTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxp
dHkgdG8gc2V0IG9wdGlvbnMgYW5kIERhdGFMb2cgZmlsZSBsb2NhdGlvbiB2aWEgYSBjb25maWd1
cmF0aW9uIGZpbGUuCisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc3BlY2lmaWVk
IHdpdGggdGhlIC0tY29uZmlnRmlsZSBvcHRpb24gdG8gSlNDIG9yIHRoZQorICAgICAgICBKU0Nf
Y29uZmlnRmlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBUaGUgZmlsZSBmb3Jt
YXQgYWxsb3dzIGZvciBvcHRpb25zIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIHZhcmlvdXMg
YXR0cmlidXRlcy4KKyAgICAgICAgQ3VycmVudGx5IHRob3NlIGF0dHJpYnV0ZXMgYXJlIHRoZSBw
cm9jZXNzIG5hbWUsIHBhcmVudCBwcm9jZXNzIG5hbWUgYW5kIGJ1aWxkCisgICAgICAgIHR5cGUg
KFJlbGVhc2Ugb3IgRGVidWcpLiAgSW4gdGhpcyBwYXRjaCwgdGhlIHBhcmVudCBwcm9jZXNzIHR5
cGUgaXMgbm90IHNldC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIHNldCB1cCBpbiBXZWJLaXQgY29k
ZSB3aXRoIGEgZm9sbG93IHVwIHBhdGNoLgorCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBj
b25maWcgZmlsZToKKworICAgICAgICAgICAgbG9nRmlsZSA9ICIvdG1wL2pzY0xvZy4lcGlkLnR4
dCIKKworICAgICAgICAgICAganNjT3B0aW9ucyB7CisgICAgICAgICAgICAgICAgZHVtcE9wdGlv
bnMgPSAyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkID09ICJEZWJ1ZyIgewor
ICAgICAgICAgICAgICAgIGpzY09wdGlvbnMgeworICAgICAgICAgICAgICAgICAgICB1c2VDb25j
dXJyZW50SklUID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5ID0g
dHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVp
bGQgPT0gIlJlbGVhc2UiICYmIHByb2Nlc3NOYW1lID09ICJqc2MiIHsKKyAgICAgICAgICAgICAg
ICBqc2NPcHRpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNEaXNhc3NlbWJseSA9IHRy
dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgRWxpbWluYXRl
ZCB0aGUgcHJpb3Igb3B0aW9ucyBmaWxlIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1l
L0NvbmZpZ0ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6
OkNvbmZpZ0ZpbGVTY2FubmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnN0
YXJ0KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmxpbmVOdW1iZXIpOgorICAg
ICAgICAoSlNDOjpDb25maWdGaWxlU2Nhbm5lcjo6Y3VycmVudEJ1ZmZlcik6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjphdEZpbGVFbmQpOgorICAgICAgICAoSlNDOjpDb25maWdG
aWxlU2Nhbm5lcjo6dHJ5Q29uc3VtZSk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVy
Ojp0cnlDb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnRy
eUNvbnN1bWVVcHRvKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmZpbGxCdWZm
ZXJJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjpmaWxsQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6Q29uZmlnRmlsZSk6CisgICAgICAgIChKU0M6
OkNvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6
c2V0UGFyZW50UHJvY2Vzc05hbWUpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlOjpwYXJzZSk6
CisgICAgICAgICogcnVudGltZS9Db25maWdGaWxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAg
ICAgICAoSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuaDoKKwogMjAxNy0wMi0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW50cm9kdWNlIGEgVk0gVHJhcHMgbWVjaGFuaXNtIGFuZCByZWZhY3RvciBXYXRjaGRv
ZyB0byB1c2UgaXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTY5MCw2ICs2OTAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAKICAgICBydW50aW1l
L0NvbXBpbGF0aW9uUmVzdWx0LmNwcAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAKKyAgICBy
dW50aW1lL0NvbmZpZ0ZpbGUuY3BwCiAgICAgcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAogICAg
IHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAKICAgICBydW50aW1lL0NvbnN0YW50TW9kZS5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiQ29uZmlnRmlsZS5oIgogI2luY2x1ZGUgIkRP
TUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRPTUpJVFBhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJET01KSVRQYXRjaHBvaW50UGFyYW1zLmgiCkBAIC0zNzgyLDYgKzM3ODMsMTIgQEAgaW50
IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8vIGNvbWVzIGZpcnN0LgogICAg
IENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7CiAKKyAgICBpZiAoT3B0aW9uczo6Y29u
ZmlnRmlsZSgpKSB7CisgICAgICAgIENvbmZpZ0ZpbGUgY29uZmlnRmlsZShPcHRpb25zOjpjb25m
aWdGaWxlKCkpOworICAgICAgICBjb25maWdGaWxlLnNldFByb2Nlc3NOYW1lKCJqc2MiKTsKKyAg
ICAgICAgY29uZmlnRmlsZS5wYXJzZSgpOworICAgIH0KKwogICAgIC8vIEluaXRpYWxpemUgSlND
IGJlZm9yZSBnZXR0aW5nIFZNLgogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAg
ICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM4
Niw2ICsxMzg2LDggQEAKIAkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdl
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTVF
QjI5QTEwQ0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCAqLzsgfTsKIAkJNjU3Q0Y0
NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0Nh
bGxlZS5jcHAgKi87IH07CiAJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcx
OUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZp
Z0ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi87IH07CisJCTY1ODgyNEIx
MUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEIwMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25m
aWdGaWxlLmNwcCAqLzsgfTsKIAkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlS
ZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRF
ODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zlcnku
aCAqLzsgfTsKIAkJNjVCODM5MkYxQkFDQUQ2QTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QjgzOTJE
MUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi87IH07CkBAIC0zODY4LDYg
KzM4NzAsOCBAQAogCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsZWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxs
ZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsZWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NjAxNzcxODVBOEY1RTAwMDMwRUVFIC8qIE1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTY1ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmZpZ0ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uZmlnRmlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAvKiBW
TUVudHJ5UmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7
IHBhdGggPSBWTUVudHJ5UmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3Vh
Z2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQk2NTk4
N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7
IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbnVzZWRQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzUwLDYgKzYzNTQsOCBAQAogCQkJCUE3RTVBM0E2
MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIy
MEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0aW9uLmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3
NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovLAorCQkJCTY1ODgyNEIwMUU1Q0ZERjQwMEZC
NzM1OSAvKiBDb25maWdGaWxlLmNwcCAqLywKKwkJCQk2NTg4MjRBRTFFNUNGREIwMDBGQjczNTkg
LyogQ29uZmlnRmlsZS5oICovLAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25j
dXJyZW50SlNMb2NrLmggKi8sCiAJCQkJQTVCNkE3NEMxOEM2REJBNjAwRjExRTkxIC8qIENvbnNv
bGVDbGllbnQuY3BwICovLAogCQkJCUE1M0NFMDg5MThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xl
Q2xpZW50LmggKi8sCkBAIC04MzU4LDYgKzgzNjQsNyBAQAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3
MzU5IC8qIENvbmZpZ0ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLywKQEAgLTEwMzY5LDYgKzEwMzc2LDcgQEAKIAkJCQkxNDBCN0QxRDBEQzY5QUY3MDA5
QzQyQjggLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NzUxMDdFQzEzRTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
MjVENzA5QjE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAq
LywKKwkJCQk2NTg4MjRCMTFFNUNGREY0MDBGQjczNTkgLyogQ29uZmlnRmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzAwODc0MTE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0REVGOTUxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTNEMjM5QzgxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9k
dWxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25maWdGaWxlLmgiCisKKyNpbmNs
dWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRp
YyBjb25zdCBzaXplX3Qgc19wcm9jZXNzTmFtZU1heCA9IDEyODsKK2NoYXIgQ29uZmlnRmlsZTo6
c19wcm9jZXNzTmFtZVtzX3Byb2Nlc3NOYW1lTWF4ICsgMV0gPSB7IDAgfTsKK2NoYXIgQ29uZmln
RmlsZTo6c19wYXJlbnRQcm9jZXNzTmFtZVtzX3Byb2Nlc3NOYW1lTWF4ICsgMV0gPSB7IDAgfTsK
KworY2xhc3MgQ29uZmlnRmlsZVNjYW5uZXIgeworcHVibGljOgorICAgIENvbmZpZ0ZpbGVTY2Fu
bmVyKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQorICAgICAgICA6IG1fZmlsZW5hbWUoZmlsZW5hbWUp
CisgICAgICAgICwgbV9saW5lTnVtYmVyKDApCisgICAgeworICAgICAgICBtX3NyY1B0ciA9ICZt
X2J1ZmZlclswXTsKKyAgICAgICAgbV9idWZmZXJFbmQgPSAmbV9idWZmZXJbMF07CisgICAgfQor
CisgICAgYm9vbCBzdGFydCgpCisgICAgeworICAgICAgICBtX2ZpbGUgPSBmb3BlbihtX2ZpbGVu
YW1lLCAiciIpOworICAgICAgICBpZiAoIW1fZmlsZSkgeworICAgICAgICAgICAgZGF0YUxvZ0Yo
IkZhaWxlZCB0byBvcGVuIGZpbGUgSlNDIENvbmZpZyBmaWxlICclcycuXG4iLCBtX2ZpbGVuYW1l
KTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHVuc2lnbmVkIGxpbmVOdW1iZXIoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fbGluZU51bWJlcjsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBjdXJyZW50
QnVmZmVyKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zcmNQdHIgfHwgbV9zcmNQdHIgPT0gbV9i
dWZmZXJFbmQpCisgICAgICAgICAgICByZXR1cm4gIiI7CisKKyAgICAgICAgcmV0dXJuIG1fc3Jj
UHRyOworICAgIH0KKworICAgIGJvb2wgYXRGaWxlRW5kKCkKKyAgICB7CisgICAgICAgIGlmICgh
ZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCB0cnlDb25zdW1lKGNoYXIgYykKKyAg
ICB7CisgICAgICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGMgPT0gKm1fc3JjUHRyKSB7CisgICAgICAgICAgICBt
X3NyY1B0cisrOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdGVtcGxhdGUgPHNpemVfdCBsZW5ndGg+Cisg
ICAgYm9vbCB0cnlDb25zdW1lKGNvbnN0IGNoYXIgKCZ0b2tlbikgW2xlbmd0aF0pCisgICAgewor
ICAgICAgICBpZiAoIWZpbGxCdWZmZXJJZk5lZWRlZCgpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIHNpemVfdCB0b2tlbkxlbmd0aCA9IGxlbmd0aCAtIDE7CisgICAgICAg
IGlmICghc3RybmNtcChtX3NyY1B0ciwgdG9rZW4sIHRva2VuTGVuZ3RoKSkgeworICAgICAgICAg
ICAgbV9zcmNQdHIgKz0gdG9rZW5MZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBjaGFyKiB0cnlD
b25zdW1lU3RyaW5nKCkKKyAgICB7CisgICAgICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICBpZiAoKm1fc3JjUHRyICE9
ICciJykKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAgIGNoYXIqIHN0cmlu
Z1N0YXJ0ID0gKyttX3NyY1B0cjsKKworICAgICAgICBjaGFyKiBzdHJpbmdFbmQgPSBzdHJjaHIo
bV9zcmNQdHIsICciJyk7CisgICAgICAgIGlmIChzdHJpbmdFbmQpIHsKKyAgICAgICAgICAgICpz
dHJpbmdFbmQgPSAnXDAnOworICAgICAgICAgICAgbV9zcmNQdHIgPSBzdHJpbmdFbmQgKyAxOwor
ICAgICAgICAgICAgcmV0dXJuIHN0cmluZ1N0YXJ0OworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgY2hhciogdHJ5Q29uc3VtZVVwdG8oYm9vbCYgZm91
bmRDaGFyLCBjaGFyIGMpCisgICAgeworICAgICAgICBpZiAoIWZpbGxCdWZmZXJJZk5lZWRlZCgp
KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgY2hhciogc3RhcnQgPSBt
X3NyY1B0cjsKKyAgICAgICAgZm91bmRDaGFyID0gZmFsc2U7CisKKyAgICAgICAgY2hhciogY1Bv
c2l0aW9uID0gc3RyY2hyKG1fc3JjUHRyLCBjKTsKKyAgICAgICAgaWYgKGNQb3NpdGlvbikgewor
ICAgICAgICAgICAgKmNQb3NpdGlvbiA9ICdcMCc7CisgICAgICAgICAgICBtX3NyY1B0ciA9IGNQ
b3NpdGlvbiArIDE7CisgICAgICAgICAgICBmb3VuZENoYXIgPSB0cnVlOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG1fc3JjUHRyID0gbV9idWZmZXJFbmQ7CisKKyAgICAgICAgcmV0dXJu
IHN0YXJ0OworICAgIH0KKworcHJpdmF0ZToKKyAgICBib29sIGZpbGxCdWZmZXJJZk5lZWRlZCgp
CisgICAgeworICAgICAgICBpZiAoIW1fc3JjUHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICB3aGlsZSAobV9zcmNQdHIg
IT0gbV9idWZmZXJFbmQgJiYgaXNBU0NJSVNwYWNlKCptX3NyY1B0cikpCisgICAgICAgICAgICAg
ICAgbV9zcmNQdHIrKzsKKworICAgICAgICAgICAgaWYgKG1fc3JjUHRyICE9IG1fYnVmZmVyRW5k
KQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIWZpbGxCdWZmZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIGZpbGxCdWZmZXIoKQorICAgIHsKKyAgICAg
ICAgZG8geworICAgICAgICAgICAgbV9zcmNQdHIgPSBmZ2V0cyhtX2J1ZmZlciwgc2l6ZW9mKG1f
YnVmZmVyKSwgbV9maWxlKTsKKyAgICAgICAgICAgIGlmICghbV9zcmNQdHIpIHsKKyAgICAgICAg
ICAgICAgICBmY2xvc2UobV9maWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fbGluZU51bWJlcisrOworCisgICAgICAgICAg
ICBtX2J1ZmZlckVuZCA9IHN0cmNocihtX3NyY1B0ciwgJyMnKTsKKworICAgICAgICAgICAgaWYg
KG1fYnVmZmVyRW5kKQorICAgICAgICAgICAgICAgICptX2J1ZmZlckVuZCA9ICdcMCc7CisgICAg
ICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckVuZCA9IG1fc3JjUHRyICsg
c3RybGVuKG1fc3JjUHRyKTsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJFbmQgPiBtX3Ny
Y1B0ciAmJiBtX2J1ZmZlckVuZFstMV0gPT0gJ1xuJykgeworICAgICAgICAgICAgICAgICAgICBt
X2J1ZmZlckVuZC0tOworICAgICAgICAgICAgICAgICAgICAqbV9idWZmZXJFbmQgPSAnXDAnOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAobV9idWZm
ZXJFbmQgPT0gbV9zcmNQdHIpOworCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGNvbnN0IGNoYXIqIG1fZmlsZW5hbWU7CisgICAgdW5zaWduZWQgbV9saW5lTnVtYmVyOworICAg
IEZJTEUqIG1fZmlsZTsKKyAgICBjaGFyIG1fYnVmZmVyW0JVRlNJWl07CisgICAgY2hhciogbV9z
cmNQdHI7CisgICAgY2hhciogbV9idWZmZXJFbmQ7Cit9OworCitDb25maWdGaWxlOjpDb25maWdG
aWxlKGNvbnN0IGNoYXIqIGZpbGVuYW1lKQorICAgIDogbV9maWxlbmFtZShmaWxlbmFtZSkKK3sK
K30KKwordm9pZCBDb25maWdGaWxlOjpzZXRQcm9jZXNzTmFtZShjb25zdCBjaGFyKiBwcm9jZXNz
TmFtZSkKK3sKKyAgICBzdHJuY3B5KHNfcHJvY2Vzc05hbWUsIHByb2Nlc3NOYW1lLCBzX3Byb2Nl
c3NOYW1lTWF4KTsKK30KKwordm9pZCBDb25maWdGaWxlOjpzZXRQYXJlbnRQcm9jZXNzTmFtZShj
b25zdCBjaGFyKiBwYXJlbnRQcm9jZXNzTmFtZSkKK3sKKyAgICBzdHJuY3B5KHNfcGFyZW50UHJv
Y2Vzc05hbWUsIHBhcmVudFByb2Nlc3NOYW1lLCBzX3Byb2Nlc3NOYW1lTWF4KTsKK30KKwordm9p
ZCBDb25maWdGaWxlOjpwYXJzZSgpCit7CisgICAgZW51bSBTdGF0ZW1lbnROZXN0aW5nIHsgVG9w
TGV2ZWxTdGF0bWVudCwgTmVzdGVkU3RhdGVtZW50LCBOZXN0ZWRTdGF0ZW1lbnRGYWlsZWRDcml0
ZXJpYSB9OworICAgIGVudW0gUGFyc2VSZXN1bHQgeyBQYXJzZU9LLCBQYXJzZUVycm9yLCBOZXN0
ZWRTdGF0ZW1lbnREb25lIH07CisKKyAgICBDb25maWdGaWxlU2Nhbm5lciBzY2FubmVyKG1fZmls
ZW5hbWUpOworCisgICAgaWYgKCFzY2FubmVyLnN0YXJ0KCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIGNoYXIgbG9nUGF0aG5hbWVbUEFUSF9NQVggKyAxXSA9IHsgMCB9OworCisgICAgU3RyaW5n
QnVpbGRlciBqc2NPcHRpb25zQnVpbGRlcjsKKworICAgIGF1dG8gcGFyc2VMb2dGaWxlID0gWyZd
KFN0YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBjaGFyKiBmaWxl
bmFtZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAo
ZmlsZW5hbWUgPSBzY2FubmVyLnRyeUNvbnN1bWVTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlm
IChzdGF0ZW1lbnROZXN0aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKQorICAg
ICAgICAgICAgICAgIHN0cm5jcHkobG9nUGF0aG5hbWUsIGZpbGVuYW1lLCBQQVRIX01BWCk7CisK
KyAgICAgICAgICAgIHJldHVybiBQYXJzZU9LOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJu
IFBhcnNlRXJyb3I7CisgICAgfTsKKworICAgIGF1dG8gcGFyc2VKU0NPcHRpb25zID0gWyZdKFN0
YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgeworICAgICAgICBpZiAoc2Nhbm5lci50
cnlDb25zdW1lKCd7JykpIHsKKyAgICAgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKwor
ICAgICAgICAgICAgYm9vbCBmb3VuZENsb3NpbmdCcmFjZSA9IGZhbHNlOworICAgICAgICAgICAg
Y2hhciogY3VycmVudExpbmUgPSBudWxscHRyOworCisgICAgICAgICAgICB3aGlsZSAoKGN1cnJl
bnRMaW5lID0gc2Nhbm5lci50cnlDb25zdW1lVXB0byhmb3VuZENsb3NpbmdCcmFjZSwgJ30nKSkp
IHsKKyAgICAgICAgICAgICAgICBjaGFyKiBwID0gY3VycmVudExpbmU7CisKKyAgICAgICAgICAg
ICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIGlmIChmb3VuZENsb3NpbmdCcmFjZSAmJiAh
KnApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAg
ICBjaGFyKiBvcHRpb25OYW1lU3RhcnQgPSBwOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgqcCAmJiAhaXNBU0NJSVNwYWNlKCpwKSAmJiAqcCAhPSAnPScpCisgICAgICAgICAgICAgICAg
ICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQob3B0aW9u
TmFtZVN0YXJ0LCBwIC0gb3B0aW9uTmFtZVN0YXJ0KTsKKworICAgICAgICAgICAgICAgICAgICB3
aGlsZSAoKnAgJiYgaXNBU0NJSVNwYWNlKCpwKSAmJiAqcCAhPSAnPScpCisgICAgICAgICAgICAg
ICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqcCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworICAgICAgICAgICAgICAgICAgICBw
Kys7IC8vIEFkdmFuY2UgcGFzdCB0aGUgJz0nCisKKyAgICAgICAgICAgICAgICAgICAgYnVpbGRl
ci5hcHBlbmQoJz0nKTsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgaXNBU0NJ
SVNwYWNlKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoISpwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlRXJy
b3I7CisKKyAgICAgICAgICAgICAgICAgICAgY2hhciogb3B0aW9uVmFsdWVTdGFydCA9IHA7CisK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmICFpc0FTQ0lJU3BhY2UoKnApKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIu
YXBwZW5kKG9wdGlvblZhbHVlU3RhcnQsIHAgLSBvcHRpb25WYWx1ZVN0YXJ0KTsKKyAgICAgICAg
ICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoJ1xuJyk7CisKKyAgICAgICAgICAgICAgICAgICAg
d2hpbGUgKCpwICYmIGlzQVNDSUlTcGFjZSgqcCkpCisgICAgICAgICAgICAgICAgICAgICAgICBw
Kys7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKnApOworCisgICAgICAgICAgICAgICAgaWYg
KGZvdW5kQ2xvc2luZ0JyYWNlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaWYgKHN0YXRlbWVudE5lc3RpbmcgIT0gTmVzdGVkU3RhdGVt
ZW50RmFpbGVkQ3JpdGVyaWEpCisgICAgICAgICAgICAgICAganNjT3B0aW9uc0J1aWxkZXIuYXBw
ZW5kKGJ1aWxkZXIpOworCisgICAgICAgICAgICByZXR1cm4gUGFyc2VPSzsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworICAgIH07CisKKyAgICBhdXRvIHBhcnNlTmVz
dGVkU3RhdGVtZW50ID0gWyZdKFN0YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGluZykgewor
ICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCJqc2NPcHRpb25zIikpCisgICAgICAgICAg
ICByZXR1cm4gcGFyc2VKU0NPcHRpb25zKHN0YXRlbWVudE5lc3RpbmcpOworCisgICAgICAgIGlm
IChzY2FubmVyLnRyeUNvbnN1bWUoImxvZ0ZpbGUiKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJz
ZUxvZ0ZpbGUoc3RhdGVtZW50TmVzdGluZyk7CisKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29u
c3VtZSgnfScpKQorICAgICAgICAgICAgcmV0dXJuIE5lc3RlZFN0YXRlbWVudERvbmU7CisKKyAg
ICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisgICAgfTsKKworICAgIGF1dG8gcGFyc2VQcmVkaWNh
dGUgPSBbJl0oYm9vbCYgcHJlZGljYXRlTWF0Y2hlcywgY29uc3QgY2hhciogbWF0Y2hWYWx1ZSkg
eworICAgICAgICBjaGFyKiBwcmVkaWNhdGVWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChz
Y2FubmVyLnRyeUNvbnN1bWUoIj09IikKKyAgICAgICAgICAgICYmIChwcmVkaWNhdGVWYWx1ZSA9
IHNjYW5uZXIudHJ5Q29uc3VtZVN0cmluZygpKSAmJiBtYXRjaFZhbHVlKSB7CisgICAgICAgICAg
ICAgICAgcHJlZGljYXRlTWF0Y2hlcyA9ICFzdHJjbXAocHJlZGljYXRlVmFsdWUsIG1hdGNoVmFs
dWUpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH07CisKKyAgICBhdXRvIHBhcnNlQ29uZGl0aW9uYWxCbG9jayA9
IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHN0
YXRlbWVudE5lc3RpbmcgPT0gTmVzdGVkU3RhdGVtZW50KSB7CisgICAgICAgICAgICBTdGF0ZW1l
bnROZXN0aW5nIHN1Yk5lc3RpbmcgPSBOZXN0ZWRTdGF0ZW1lbnQ7CisKKyAgICAgICAgICAgIHdo
aWxlICh0cnVlKSB7CisgICAgICAgICAgICAgICAgYm9vbCBwcmVkaWNhdGVNYXRjaGVzOworICAg
ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGFjdHVhbFZhbHVlID0gbnVsbHB0cjsKKworICAgICAg
ICAgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoInByb2Nlc3NOYW1lIikpCisgICAgICAg
ICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0gc19wcm9jZXNzTmFtZTsKKyAgICAgICAgICAgICAg
ICBlbHNlIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoInBhcmVudFByb2Nlc3NOYW1lIikpCisgICAg
ICAgICAgICAgICAgICAgIGFjdHVhbFZhbHVlID0gc19wYXJlbnRQcm9jZXNzTmFtZTsKKyAgICAg
ICAgICAgICAgICBlbHNlIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoImJ1aWxkIikpCisjaWZuZGVm
IE5ERUJVRworICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZSA9ICJEZWJ1ZyI7CisjZWxz
ZQorICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZSA9ICJSZWxlYXNlIjsKKyNlbmRpZgor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlRXJy
b3I7CisKKyAgICAgICAgICAgICAgICBpZiAocGFyc2VQcmVkaWNhdGUocHJlZGljYXRlTWF0Y2hl
cywgYWN0dWFsVmFsdWUpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghcHJlZGljYXRlTWF0
Y2hlcykKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1Yk5lc3RpbmcgPSBOZXN0ZWRTdGF0ZW1l
bnRGYWlsZWRDcml0ZXJpYTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIXNjYW5uZXIudHJ5
Q29uc3VtZSgiJiYiKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzY2FubmVyLnRyeUNv
bnN1bWUoJ3snKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VFcnJvcjsKKworICAgICAg
ICAgICAgUGFyc2VSZXN1bHQgcGFyc2VSZXN1bHQgPSBQYXJzZU9LOworICAgICAgICAgICAgd2hp
bGUgKHBhcnNlUmVzdWx0ID09IFBhcnNlT0sgJiYgIXNjYW5uZXIuYXRGaWxlRW5kKCkpCisgICAg
ICAgICAgICAgICAgcGFyc2VSZXN1bHQgPSBwYXJzZU5lc3RlZFN0YXRlbWVudChzdWJOZXN0aW5n
KTsKKworICAgICAgICAgICAgaWYgKHBhcnNlUmVzdWx0ID09IE5lc3RlZFN0YXRlbWVudERvbmUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlT0s7CisgICAgICAgIH0KKworICAgICAgICBy
ZXR1cm4gUGFyc2VFcnJvcjsKKyAgICB9OworCisgICAgYXV0byBwYXJzZVN0YXRlbWVudCA9IFsm
XShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5u
ZXIudHJ5Q29uc3VtZSgianNjT3B0aW9ucyIpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlSlND
T3B0aW9ucyhzdGF0ZW1lbnROZXN0aW5nKTsKKworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25z
dW1lKCJsb2dGaWxlIikpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VMb2dGaWxlKHN0YXRlbWVu
dE5lc3RpbmcpOworCisgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nID09IFRvcExldmVsU3Rh
dG1lbnQpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VDb25kaXRpb25hbEJsb2NrKE5lc3RlZFN0
YXRlbWVudCk7CisKKyAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisgICAgfTsKKworICAgIFBh
cnNlUmVzdWx0IHBhcnNlUmVzdWx0ID0gUGFyc2VPSzsKKworICAgIHdoaWxlIChwYXJzZVJlc3Vs
dCA9PSBQYXJzZU9LICYmICFzY2FubmVyLmF0RmlsZUVuZCgpKQorICAgICAgICBwYXJzZVJlc3Vs
dCA9IHBhcnNlU3RhdGVtZW50KFRvcExldmVsU3RhdG1lbnQpOworCisgICAgaWYgKHBhcnNlUmVz
dWx0ID09IFBhcnNlT0spIHsKKyAgICAgICAgaWYgKHN0cmxlbihsb2dQYXRobmFtZSkpCisgICAg
ICAgICAgICBXVEY6OnNldERhdGFGaWxlKGxvZ1BhdGhuYW1lKTsKKworICAgICAgICBpZiAoIWpz
Y09wdGlvbnNCdWlsZGVyLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgY29uc3QgY2hhciogb3B0
aW9uc1N0ciA9IGpzY09wdGlvbnNCdWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKKyAg
ICAgICAgICAgIE9wdGlvbnM6OnNldE9wdGlvbnMob3B0aW9uc1N0cik7CisgICAgICAgIH0KKyAg
ICB9IGVsc2UKKyAgICAgICAgV1RGOjpkYXRhTG9nRigiRXJyb3IgaW4gSlNDIENvbmZpZyBmaWxl
IG9uIG9yIG5lYXIgbGluZSAldSwgcGFyc2luZyAnJXMnXG4iLCBzY2FubmVyLmxpbmVOdW1iZXIo
KSwgc2Nhbm5lci5jdXJyZW50QnVmZmVyKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmgJKG5vbmV4aXN0
ZW50KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IENvbmZpZ0ZpbGUgeworcHVibGljOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIENvbmZpZ0ZpbGUo
Y29uc3QgY2hhciopOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgc2V0UHJv
Y2Vzc05hbWUoY29uc3QgY2hhciopOworICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lk
IHNldFBhcmVudFByb2Nlc3NOYW1lKGNvbnN0IGNoYXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIHBhcnNlKCk7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIGNoYXIgc19wcm9jZXNzTmFt
ZVtdOworICAgIHN0YXRpYyBjaGFyIHNfcGFyZW50UHJvY2Vzc05hbWVbXTsKKworICAgIGNvbnN0
IGNoYXIqIG1fZmlsZW5hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuY3BwCShyZXZpc2lvbiAyMTMwNzQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTEsOSArNTEsNiBAQAogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyWDg2LmgiCiAjZW5k
aWYKIAotI2RlZmluZSBVU0VfT1BUSU9OU19GSUxFIDAKLSNkZWZpbmUgT1BUSU9OU19GSUxFTkFN
RSAiL3RtcC9qc2Mub3B0aW9ucyIKLQogbmFtZXNwYWNlIEpTQyB7CiAKIG5hbWVzcGFjZSB7CkBA
IC00OTYsMzEgKzQ5Myw2IEBAIHZvaWQgT3B0aW9uczo6aW5pdGlhbGl6ZSgpCiAgICAgICAgICAg
ICAgICAgOyAvLyBEZWNvbmZ1c2UgZWRpdG9ycyB0aGF0IGRvIGF1dG8gaW5kZW50YXRpb24KICNl
bmRpZgogICAgIAotI2lmIFVTRShPUFRJT05TX0ZJTEUpCi0gICAgICAgICAgICB7Ci0gICAgICAg
ICAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBPUFRJT05TX0ZJTEVOQU1FOwotICAgICAg
ICAgICAgICAgIEZJTEUqIG9wdGlvbnNGaWxlID0gZm9wZW4oZmlsZW5hbWUsICJyIik7Ci0gICAg
ICAgICAgICAgICAgaWYgKCFvcHRpb25zRmlsZSkgewotICAgICAgICAgICAgICAgICAgICBkYXRh
TG9nRigiRmFpbGVkIHRvIG9wZW4gZmlsZSAlcy4gRGlkIHlvdSBhZGQgdGhlIGZpbGUtcmVhZC1k
YXRhIGVudGl0bGVtZW50IHRvIFdlYlByb2Nlc3Muc2I/XG4iLCBmaWxlbmFtZSk7Ci0gICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwotICAgICAgICAgICAgICAg
IGNoYXIqIGxpbmU7Ci0gICAgICAgICAgICAgICAgY2hhciBidWZmZXJbQlVGU0laXTsKLSAgICAg
ICAgICAgICAgICB3aGlsZSAoKGxpbmUgPSBmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBv
cHRpb25zRmlsZSkpKQotICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChidWZmZXIp
OwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlvbnNT
dHIgPSBidWlsZGVyLnRvU3RyaW5nKCkudXRmOCgpLmRhdGEoKTsKLSAgICAgICAgICAgICAgICBk
YXRhTG9nRigiU2V0dGluZyBvcHRpb25zOiAlc1xuIiwgb3B0aW9uc1N0cik7Ci0gICAgICAgICAg
ICAgICAgc2V0T3B0aW9ucyhvcHRpb25zU3RyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBpbnQgcmVzdWx0ID0gZmNsb3NlKG9wdGlvbnNGaWxlKTsKLSAgICAgICAgICAgICAg
ICBpZiAocmVzdWx0KQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIGNs
b3NlIGZpbGUgJXM6ICVzXG4iLCBmaWxlbmFtZSwgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAg
ICAgIH0KLSNlbmRpZgotCiAgICAgICAgICAgICByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25zKCk7
CiAKICAgICAgICAgICAgIC8vIERvIHJhbmdlIGNoZWNrcyB3aGVyZSBuZWVkZWQgYW5kIG1ha2Ug
Y29ycmVjdGlvbnMgdG8gdGhlIG9wdGlvbnM6CkBAIC02MjgsNyArNjAwLDEyIEBAIGJvb2wgT3B0
aW9uczo6c2V0T3B0aW9ucyhjb25zdCBjaGFyKiBvcHQKICAgICAgICAgfQogICAgIH0KIAorICAg
IHJlY29tcHV0ZURlcGVuZGVudE9wdGlvbnMoKTsKKwogICAgIGR1bXBPcHRpb25zSWZOZWVkZWQo
KTsKKworICAgIGVuc3VyZU9wdGlvbnNBcmVDb2hlcmVudCgpOworCiAgICAgcmV0dXJuIHN1Y2Nl
c3M7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHJl
dmlzaW9uIDIxMzA3NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMTAzLDYgKzEwMyw3IEBAIHR5cGVkZWYgY29uc3QgY2hhciog
b3B0aW9uU3RyaW5nOwogI2RlZmluZSBKU0NfT1BUSU9OUyh2KSBcCiAgICAgdihib29sLCB2YWxp
ZGF0ZU9wdGlvbnMsIGZhbHNlLCBOb3JtYWwsICJjcmFzaGVzIGlmIG1pcy10eXBlZCBKU0Mgb3B0
aW9ucyB3ZXJlIHBhc3NlZCB0byB0aGUgVk0iKSBcCiAgICAgdih1bnNpZ25lZCwgZHVtcE9wdGlv
bnMsIDAsIE5vcm1hbCwgImR1bXBzIEpTQyBvcHRpb25zICgwID0gTm9uZSwgMSA9IE92ZXJyaWRk
ZW4gb25seSwgMiA9IEFsbCwgMyA9IFZlcmJvc2UpIikgXAorICAgIHYob3B0aW9uU3RyaW5nLCBj
b25maWdGaWxlLCBudWxscHRyLCBOb3JtYWwsICJmaWxlIHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9u
cyBhbmQgbG9nZ2luZyBsb2NhdGlvbiIpIFwKICAgICBcCiAgICAgdihib29sLCB1c2VMTEludCwg
IHRydWUsIE5vcm1hbCwgImFsbG93cyB0aGUgTExJTlQgdG8gYmUgdXNlZCBpZiB0cnVlIikgXAog
ICAgIHYoYm9vbCwgdXNlSklULCAgICB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhlIGJhc2VsaW5l
IEpJVCB0byBiZSB1c2VkIGlmIHRydWUiKSBcCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMDc0KQorKysg
U291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAx
Ny0wMi0yNyAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBB
ZGQgYWJpbGl0eSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMgZnJvbSBhIGZpbGUKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2ODkxNAorCisgICAgICAg
IFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgIEFkZGVkIHRoZSBhYmlsaXR5IHRv
IHNldCBvcHRpb25zIGFuZCBEYXRhTG9nIGZpbGUgbG9jYXRpb24gdmlhIGEgY29uZmlndXJhdGlv
biBmaWxlLgorICAgICAgICBUaGUgcGF0aG5hbWUgY2FuIGluY2x1ZGUgdGhlIHByaW50ZiBzdHls
ZSAiJXBpZCIsIHdoaWNoIHdpbGwgYmUgcmVwbGFjZWQgd2l0aCB0aGUKKyAgICAgICAgY3VycmVu
dCBwcm9jZXNzIGlkLgorCisgICAgICAgICogd3RmL0RhdGFMb2cuY3BwOgorICAgICAgICAoV1RG
Ojppbml0aWFsaXplTG9nRmlsZU9uY2UpOgorICAgICAgICAoV1RGOjpzZXREYXRhRmlsZSk6Cisg
ICAgICAgICogd3RmL0RhdGFMb2cuaDoKKwogMjAxNy0wMi0yNCAgSmVyIE5vYmxlICA8amVyLm5v
YmxlQGFwcGxlLmNvbT4KIAogICAgICAgICBBZGQgcHVibGljIG1ldGhvZCB0byBNZWRpYVRpbWUg
Zm9yIGRvaW5nIHRpbWVTY2FsZSBjb252ZXJzaW9uLgpJbmRleDogU291cmNlL1dURi93dGYvRGF0
YUxvZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAJKHJldmlz
aW9uIDIxMzA3NCkKKysrIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01MCwzMCArNTAsMjIgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKLXN0YXRpYyBQcmludFN0
cmVhbSogc19maWxlOworc3RhdGljIGNvbnN0IHNpemVfdCBtYXhQYXRoTGVuZ3RoID0gMTAyNDsK
IAorc3RhdGljIFByaW50U3RyZWFtKiBzX2ZpbGU7CiBzdGF0aWMgdWludDY0X3Qgc19maWxlRGF0
YVsoc2l6ZW9mKEZpbGVQcmludFN0cmVhbSkgKyA3KSAvIDhdOwogc3RhdGljIHVpbnQ2NF90IHNf
bG9ja2VkRmlsZURhdGFbKHNpemVvZihMb2NrZWRQcmludFN0cmVhbSkgKyA3KSAvIDhdOwogCiBz
dGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogewotICAgIEZpbGVQcmludFN0cmVh
bSogZmlsZSA9IG51bGxwdHI7Ci0gICAgCi0jaWYgREFUQV9MT0dfVE9fRklMRQotICAgIGNvbnN0
IGxvbmcgbWF4UGF0aExlbmd0aCA9IDEwMjQ7Ci0KLSAgICBjaGFyIGZpbGVuYW1lU3VmZml4W21h
eFBhdGhMZW5ndGggKyAxXTsKKyAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7CiAK
LSNpZiBQTEFURk9STShXSU4pCi0gICAgX3NucHJpbnRmKGZpbGVuYW1lU3VmZml4LCBzaXplb2Yo
ZmlsZW5hbWVTdWZmaXgpLCAiLiVkLnR4dCIsIEdldEN1cnJlbnRQcm9jZXNzSWQoKSk7Ci0jZWxz
ZQotICAgIHNucHJpbnRmKGZpbGVuYW1lU3VmZml4LCBzaXplb2YoZmlsZW5hbWVTdWZmaXgpLCAi
LiVkLnR4dCIsIGdldHBpZCgpKTsKLSNlbmRpZgorICAgIGlmIChzX2ZpbGUpCisgICAgICAgIHJl
dHVybjsKIAorI2lmIERBVEFfTE9HX1RPX0ZJTEUKICNpZiBEQVRBX0xPR19UT19EQVJXSU5fVEVN
UF9ESVIKICAgICBjaGFyIGZpbGVuYW1lQnVmZmVyW21heFBhdGhMZW5ndGggKyAxXTsKLSAgICB1
bnNpZ25lZCBzdWZmaXhMZW5ndGggPSBzdHJsZW4oZmlsZW5hbWVTdWZmaXgpOwotCiAjaWYgZGVm
aW5lZChEQVRBX0xPR19GSUxFTkFNRSkKICAgICBjaGFyKiBsb2dCYXNlbmFtZSA9IHN0cnJjaHIo
REFUQV9MT0dfRklMRU5BTUUsICcvJyk7CiAgICAgaWYgKCFsb2dCYXNlbmFtZSkKQEAgLTgyLDEz
ICs3NCwxMSBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZU9uY2UoKQogICAgIGNvbnN0
IGNoYXIqIGxvZ0Jhc2VuYW1lID0gIldURkxvZyI7CiAjZW5kaWYKIAotICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lID0gbnVsbHB0cjsKLQogICAgIGJvb2wgc3VjY2VzcyA9IGNvbmZzdHIoX0NTX0RB
UldJTl9VU0VSX1RFTVBfRElSLCBmaWxlbmFtZUJ1ZmZlciwgc2l6ZW9mKGZpbGVuYW1lQnVmZmVy
KSk7CiAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgLy8gRklYTUU6IEFzc2VydCB0aGF0IHRo
ZSBwYXRoIGVuZHMgd2l0aCBhIHNsYXNoIGluc3RlYWQgb2YgYWRkaW5nIGEgc2xhc2ggaWYgaXQg
ZG9lcyBub3QgZXhpc3QKICAgICAgICAgLy8gb25jZSA8cmRhcjovL3Byb2JsZW0vMjM1NzkwNzc+
IGlzIGZpeGVkIGluIGFsbCBpT1MgU2ltdWxhdG9yIHZlcnNpb25zIHRoYXQgd2UgdXNlLgotICAg
ICAgICBzaXplX3QgbGFzdENvbXBvbmVudExlbmd0aCA9IHN0cmxlbihsb2dCYXNlbmFtZSkgKyBz
dWZmaXhMZW5ndGg7CisgICAgICAgIHNpemVfdCBsYXN0Q29tcG9uZW50TGVuZ3RoID0gc3RybGVu
KGxvZ0Jhc2VuYW1lKSArIDIwOyAvLyBNb3JlIHRoYW4gZW5vdWdoIGZvciAiLjxwaWQ+LnR4dCIK
ICAgICAgICAgc2l6ZV90IGRpcm5hbWVMZW5ndGggPSBzdHJsZW4oZmlsZW5hbWVCdWZmZXIpOwog
ICAgICAgICBib29sIHNob3VsZEFkZFBhdGhTZXBhcmF0b3IgPSBmaWxlbmFtZUJ1ZmZlcltkaXJu
YW1lTGVuZ3RoIC0gMV0gIT0gJy8nICYmIGxvZ0Jhc2VuYW1lWzBdICE9ICcvJzsKICAgICAgICAg
aWYgKGxhc3RDb21wb25lbnRMZW5ndGggKyBzaG91bGRBZGRQYXRoU2VwYXJhdG9yIDw9IHNpemVv
ZihmaWxlbmFtZUJ1ZmZlcikgLSBkaXJuYW1lTGVuZ3RoIC0gMSkgewpAQCAtOTksMzYgKzg5LDIz
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlT25jZSgpCiAgICAgICAgIH0KICAgICB9
CiAjZWxpZiBkZWZpbmVkKERBVEFfTE9HX0ZJTEVOQU1FKQotICAgIGNvbnN0IGNoYXIqIGZpbGVu
YW1lID0gREFUQV9MT0dfRklMRU5BTUU7CisgICAgZmlsZW5hbWUgPSBEQVRBX0xPR19GSUxFTkFN
RTsKICNlbHNlCi0gICAgY29uc3QgY2hhciogZmlsZW5hbWUgPSBnZXRlbnYoIldURl9EQVRBX0xP
R19GSUxFTkFNRSIpOworICAgIGZpbGVuYW1lID0gZ2V0ZW52KCJXVEZfREFUQV9MT0dfRklMRU5B
TUUiKTsKICNlbmRpZgogICAgIGNoYXIgYWN0dWFsRmlsZW5hbWVbbWF4UGF0aExlbmd0aCArIDFd
OwogCi0gICAgaWYgKGZpbGVuYW1lKSB7CisgICAgaWYgKGZpbGVuYW1lICYmICFzdHJzdHIoZmls
ZW5hbWUsICIlcGlkIikpIHsKICNpZiBQTEFURk9STShXSU4pCi0gICAgICAgIF9zbnByaW50Zihh
Y3R1YWxGaWxlbmFtZSwgc2l6ZW9mKGFjdHVhbEZpbGVuYW1lKSwgIiVzJXMiLCBmaWxlbmFtZSwg
ZmlsZW5hbWVTdWZmaXgpOworICAgICAgICBfc25wcmludGYoYWN0dWFsRmlsZW5hbWUsIHNpemVv
ZihhY3R1YWxGaWxlbmFtZSksICIlcy4lJXBpZC50eHQiLCBmaWxlbmFtZSk7CiAjZWxzZQotICAg
ICAgICBzbnByaW50ZihhY3R1YWxGaWxlbmFtZSwgc2l6ZW9mKGFjdHVhbEZpbGVuYW1lKSwgIiVz
JXMiLCBmaWxlbmFtZSwgZmlsZW5hbWVTdWZmaXgpOworICAgICAgICBzbnByaW50ZihhY3R1YWxG
aWxlbmFtZSwgc2l6ZW9mKGFjdHVhbEZpbGVuYW1lKSwgIiVzLiUlcGlkLnR4dCIsIGZpbGVuYW1l
KTsKICNlbmRpZgotICAgICAgICAKLSAgICAgICAgZmlsZSA9IEZpbGVQcmludFN0cmVhbTo6b3Bl
bihhY3R1YWxGaWxlbmFtZSwgInciKS5yZWxlYXNlKCk7Ci0gICAgICAgIGlmIChmaWxlKQotICAg
ICAgICAgICAgV1RGTG9nQWx3YXlzKCIqKiogRGF0YUxvZyBvdXRwdXQgdG8gXCIlc1wiICoqKlxu
IiwgYWN0dWFsRmlsZW5hbWUpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBXVEZMb2dBbHdh
eXMoIldhcm5pbmc6IENvdWxkIG5vdCBvcGVuIERhdGFMb2cgZmlsZSAlcyBmb3Igd3JpdGluZy5c
biIsIGFjdHVhbEZpbGVuYW1lKTsKKyAgICAgICAgZmlsZW5hbWUgPSBhY3R1YWxGaWxlbmFtZTsK
ICAgICB9CiAjZW5kaWYgLy8gREFUQV9MT0dfVE9fRklMRQotICAgIAotICAgIGlmICghZmlsZSkg
ewotICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldzsgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8g
dXNlIGRhdGFMb2coKSB0byBkZWJ1ZwotICAgICAgICAvLyBmYXN0TWFsbG9jLgotICAgICAgICBm
aWxlID0gbmV3IChzX2ZpbGVEYXRhKSBGaWxlUHJpbnRTdHJlYW0oc3RkZXJyLCBGaWxlUHJpbnRT
dHJlYW06OkJvcnJvdyk7Ci0gICAgfQotICAgIAotICAgIHNldHZidWYoZmlsZS0+ZmlsZSgpLCAw
LCBfSU9OQkYsIDApOyAvLyBQcmVmZXIgdW5idWZmZXJlZCBvdXRwdXQsIHNvIHRoYXQgd2UgZ2V0
IGEgZnVsbCBsb2cgdXBvbiBjcmFzaCBvciBkZWFkbG9jay4KLSAgICAKLSAgICBzX2ZpbGUgPSBu
ZXcgKHNfbG9ja2VkRmlsZURhdGEpIExvY2tlZFByaW50U3RyZWFtKHN0ZDo6dW5pcXVlX3B0cjxG
aWxlUHJpbnRTdHJlYW0+KGZpbGUpKTsKKworICAgIHNldERhdGFGaWxlKGZpbGVuYW1lKTsKIH0K
IAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGUoKQpAQCAtMTQxLDYgKzExOCw2MCBAQCBz
dGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZSgpCiAgICAgICAgIH0pOwogfQogCit2b2lkIHNl
dERhdGFGaWxlKGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgRmlsZVByaW50U3RyZWFtKiBmaWxl
ID0gbnVsbHB0cjsKKyAgICBjaGFyIGZvcm1hdHRlZFBhdGhbbWF4UGF0aExlbmd0aCArIDFdOwor
ICAgIGNvbnN0IGNoYXIqIHBhdGhUb09wZW4gPSBwYXRoOworCisgICAgaWYgKHBhdGgpIHsKKyAg
ICAgICAgY29uc3QgY2hhciogcGlkRm9ybWF0ID0gc3Ryc3RyKHBhdGgsICIlcGlkIik7CisgICAg
ICAgIGlmIChwaWRGb3JtYXQpIHsKKyAgICAgICAgICAgIHNpemVfdCBsZWFkaW5nUGF0aExlbmd0
aCA9IHBpZEZvcm1hdCAtIHBhdGg7CisgICAgICAgICAgICBzaXplX3QgcGF0aENoYXJhY3RlcnNB
dmFpbGFibGUgPSBzdGQ6Om1pbihtYXhQYXRoTGVuZ3RoLCBsZWFkaW5nUGF0aExlbmd0aCk7Cisg
ICAgICAgICAgICBzdHJuY3B5KGZvcm1hdHRlZFBhdGgsIHBhdGgsIHBhdGhDaGFyYWN0ZXJzQXZh
aWxhYmxlKTsKKyAgICAgICAgICAgIGNoYXIqIG5leHREZXN0ID0gZm9ybWF0dGVkUGF0aCArIHBh
dGhDaGFyYWN0ZXJzQXZhaWxhYmxlOworICAgICAgICAgICAgcGF0aENoYXJhY3RlcnNBdmFpbGFi
bGUgPSBtYXhQYXRoTGVuZ3RoIC0gcGF0aENoYXJhY3RlcnNBdmFpbGFibGU7CisgICAgICAgICAg
ICBpZiAocGF0aENoYXJhY3RlcnNBdmFpbGFibGUpIHsKKyAgICAgICAgICAgICAgICBpbnQgcGlk
VGV4dExlbmd0aDsKKyNpZiBQTEFURk9STShXSU4pCisgICAgICAgICAgICAgICAgcGlkVGV4dExl
bmd0aCA9IF9zbnByaW50ZihuZXh0RGVzdCwgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUsICIlZCIs
IEdldEN1cnJlbnRQcm9jZXNzSWQoKSk7CisjZWxzZQorICAgICAgICAgICAgICAgIHBpZFRleHRM
ZW5ndGggPSBzbnByaW50ZihuZXh0RGVzdCwgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUsICIlZCIs
IGdldHBpZCgpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlmIChwaWRUZXh0TGVuZ3RoIDwg
MCB8fCBzdGF0aWNfY2FzdDxzaXplX3Q+KHBpZFRleHRMZW5ndGgpID49IHBhdGhDaGFyYWN0ZXJz
QXZhaWxhYmxlKQorICAgICAgICAgICAgICAgICAgICBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSA9
IDA7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHBhdGhDaGFy
YWN0ZXJzQXZhaWxhYmxlIC09IHN0YXRpY19jYXN0PHNpemVfdD4ocGlkVGV4dExlbmd0aCk7Cisg
ICAgICAgICAgICAgICAgICAgIG5leHREZXN0ICs9IHBpZFRleHRMZW5ndGg7CisgICAgICAgICAg
ICAgICAgICAgIHN0cm5jcHkobmV4dERlc3QsIHBpZEZvcm1hdCArIDQsIHBhdGhDaGFyYWN0ZXJz
QXZhaWxhYmxlKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3JtYXR0ZWRQYXRoW21heFBhdGhMZW5ndGhdID0gJ1wwJzsKKyAgICAgICAgICAgIHBhdGhU
b09wZW4gPSBmb3JtYXR0ZWRQYXRoOworICAgICAgICB9CisKKyAgICAgICAgZmlsZSA9IEZpbGVQ
cmludFN0cmVhbTo6b3BlbihwYXRoVG9PcGVuLCAidyIpLnJlbGVhc2UoKTsKKyAgICAgICAgaWYg
KGZpbGUpCisgICAgICAgICAgICBXVEZMb2dBbHdheXMoIioqKiBEYXRhTG9nIG91dHB1dCB0byBc
IiVzXCIgKioqXG4iLCBwYXRoVG9PcGVuKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgV1RG
TG9nQWx3YXlzKCJXYXJuaW5nOiBDb3VsZCBub3Qgb3BlbiBEYXRhTG9nIGZpbGUgJXMgZm9yIHdy
aXRpbmcuXG4iLCBwYXRoVG9PcGVuKTsKKyAgICB9CisKKyAgICBpZiAoIWZpbGUpIHsKKyAgICAg
ICAgLy8gVXNlIHBsYWNlbWVudCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZSBkYXRh
TG9nKCkgdG8gZGVidWcKKyAgICAgICAgLy8gZmFzdE1hbGxvYy4KKyAgICAgICAgZmlsZSA9IG5l
dyAoc19maWxlRGF0YSkgRmlsZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50U3RyZWFtOjpC
b3Jyb3cpOworICAgIH0KKworICAgIHNldHZidWYoZmlsZS0+ZmlsZSgpLCAwLCBfSU9OQkYsIDAp
OyAvLyBQcmVmZXIgdW5idWZmZXJlZCBvdXRwdXQsIHNvIHRoYXQgd2UgZ2V0IGEgZnVsbCBsb2cg
dXBvbiBjcmFzaCBvciBkZWFkbG9jay4KKworICAgIGlmIChzX2ZpbGUpCisgICAgICAgIHNfZmls
ZS0+Zmx1c2goKTsKKworICAgIHNfZmlsZSA9IG5ldyAoc19sb2NrZWRGaWxlRGF0YSkgTG9ja2Vk
UHJpbnRTdHJlYW0oc3RkOjp1bmlxdWVfcHRyPEZpbGVQcmludFN0cmVhbT4oZmlsZSkpOworfQor
CiBQcmludFN0cmVhbSYgZGF0YUZpbGUoKQogewogICAgIGluaXRpYWxpemVMb2dGaWxlKCk7Cklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvRGF0YUxvZy5oCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9n
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKIG5hbWVzcGFjZSBXVEYgewogCiBX
VEZfRVhQT1JUX1BSSVZBVEUgUHJpbnRTdHJlYW0mIGRhdGFGaWxlKCk7CitXVEZfRVhQT1JUX1BS
SVZBVEUgdm9pZCBzZXREYXRhRmlsZShjb25zdCBjaGFyKiBwYXRoKTsKIAogV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgZGF0YUxvZ0ZWKGNvbnN0IGNoYXIqIGZvcm1hdCwgdmFfbGlzdCkgV1RGX0FU
VFJJQlVURV9QUklOVEYoMSwgMCk7CiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkYXRhTG9nRihj
b25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302920</attachid>
            <date>2017-02-27 20:55:20 -0800</date>
            <delta_ts>2017-02-28 10:03:33 -0800</delta_ts>
            <desc>Speculative build fix for Windows</desc>
            <filename>168914-4.patch</filename>
            <type>text/plain</type>
            <size>32972</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMTExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE3LTAyLTI3ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9ucyBmcm9tIGEgZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4OTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxp
dHkgdG8gc2V0IG9wdGlvbnMgYW5kIERhdGFMb2cgZmlsZSBsb2NhdGlvbiB2aWEgYSBjb25maWd1
cmF0aW9uIGZpbGUuCisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc3BlY2lmaWVk
IHdpdGggdGhlIC0tY29uZmlnRmlsZSBvcHRpb24gdG8gSlNDIG9yIHRoZQorICAgICAgICBKU0Nf
Y29uZmlnRmlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBUaGUgZmlsZSBmb3Jt
YXQgYWxsb3dzIGZvciBvcHRpb25zIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIHZhcmlvdXMg
YXR0cmlidXRlcy4KKyAgICAgICAgQ3VycmVudGx5IHRob3NlIGF0dHJpYnV0ZXMgYXJlIHRoZSBw
cm9jZXNzIG5hbWUsIHBhcmVudCBwcm9jZXNzIG5hbWUgYW5kIGJ1aWxkCisgICAgICAgIHR5cGUg
KFJlbGVhc2Ugb3IgRGVidWcpLiAgSW4gdGhpcyBwYXRjaCwgdGhlIHBhcmVudCBwcm9jZXNzIHR5
cGUgaXMgbm90IHNldC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIHNldCB1cCBpbiBXZWJLaXQgY29k
ZSB3aXRoIGEgZm9sbG93IHVwIHBhdGNoLgorCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBj
b25maWcgZmlsZToKKworICAgICAgICAgICAgbG9nRmlsZSA9ICIvdG1wL2pzY0xvZy4lcGlkLnR4
dCIKKworICAgICAgICAgICAganNjT3B0aW9ucyB7CisgICAgICAgICAgICAgICAgZHVtcE9wdGlv
bnMgPSAyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkID09ICJEZWJ1ZyIgewor
ICAgICAgICAgICAgICAgIGpzY09wdGlvbnMgeworICAgICAgICAgICAgICAgICAgICB1c2VDb25j
dXJyZW50SklUID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5ID0g
dHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVp
bGQgPT0gIlJlbGVhc2UiICYmIHByb2Nlc3NOYW1lID09ICJqc2MiIHsKKyAgICAgICAgICAgICAg
ICBqc2NPcHRpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNEaXNhc3NlbWJseSA9IHRy
dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgRWxpbWluYXRl
ZCB0aGUgcHJpb3Igb3B0aW9ucyBmaWxlIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1l
L0NvbmZpZ0ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6
OkNvbmZpZ0ZpbGVTY2FubmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnN0
YXJ0KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmxpbmVOdW1iZXIpOgorICAg
ICAgICAoSlNDOjpDb25maWdGaWxlU2Nhbm5lcjo6Y3VycmVudEJ1ZmZlcik6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjphdEZpbGVFbmQpOgorICAgICAgICAoSlNDOjpDb25maWdG
aWxlU2Nhbm5lcjo6dHJ5Q29uc3VtZSk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVy
Ojp0cnlDb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnRy
eUNvbnN1bWVVcHRvKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmZpbGxCdWZm
ZXJJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjpmaWxsQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6Q29uZmlnRmlsZSk6CisgICAgICAgIChKU0M6
OkNvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6
c2V0UGFyZW50UHJvY2Vzc05hbWUpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlOjpwYXJzZSk6
CisgICAgICAgICogcnVudGltZS9Db25maWdGaWxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAg
ICAgICAoSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuaDoKKwogMjAxNy0wMi0yNyAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAg
ICAgICAgSW50cm9kdWNlIGEgVk0gVHJhcHMgbWVjaGFuaXNtIGFuZCByZWZhY3RvciBXYXRjaGRv
ZyB0byB1c2UgaXQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZp
c2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTY5MCw2ICs2OTAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNF
UwogICAgIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAKICAgICBydW50aW1l
L0NvbXBpbGF0aW9uUmVzdWx0LmNwcAogICAgIHJ1bnRpbWUvQ29tcGxldGlvbi5jcHAKKyAgICBy
dW50aW1lL0NvbmZpZ0ZpbGUuY3BwCiAgICAgcnVudGltZS9Db25zb2xlQ2xpZW50LmNwcAogICAg
IHJ1bnRpbWUvQ29uc29sZU9iamVjdC5jcHAKICAgICBydW50aW1lL0NvbnN0YW50TW9kZS5jcHAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvanNjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lu
Y2x1ZGUgIkJ1dHRlcmZseUlubGluZXMuaCIKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJDb21wbGV0aW9uLmgiCisjaW5jbHVkZSAiQ29uZmlnRmlsZS5oIgogI2luY2x1ZGUgIkRP
TUpJVEdldHRlclNldHRlci5oIgogI2luY2x1ZGUgIkRPTUpJVFBhdGNocG9pbnQuaCIKICNpbmNs
dWRlICJET01KSVRQYXRjaHBvaW50UGFyYW1zLmgiCkBAIC0zNzgyLDYgKzM3ODMsMTIgQEAgaW50
IGpzY21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQogICAgIC8vIGNvbWVzIGZpcnN0LgogICAg
IENvbW1hbmRMaW5lIG9wdGlvbnMoYXJnYywgYXJndik7CiAKKyAgICBpZiAoT3B0aW9uczo6Y29u
ZmlnRmlsZSgpKSB7CisgICAgICAgIENvbmZpZ0ZpbGUgY29uZmlnRmlsZShPcHRpb25zOjpjb25m
aWdGaWxlKCkpOworICAgICAgICBjb25maWdGaWxlLnNldFByb2Nlc3NOYW1lKCJqc2MiKTsKKyAg
ICAgICAgY29uZmlnRmlsZS5wYXJzZSgpOworICAgIH0KKwogICAgIC8vIEluaXRpYWxpemUgSlND
IGJlZm9yZSBnZXR0aW5nIFZNLgogICAgIFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQoKTsKICAg
ICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTM4
Niw2ICsxMzg2LDggQEAKIAkJNjU1RUIyOUIxMENFMjU4MTAwMUE5OTBFIC8qIE5vZGVzQ29kZWdl
bi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTVF
QjI5QTEwQ0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCAqLzsgfTsKIAkJNjU3Q0Y0
NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1N0NGNDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0Nh
bGxlZS5jcHAgKi87IH07CiAJCTY1N0NGNDU5MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU3Q0Y0NTcx
OUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3MzU5IC8qIENvbmZp
Z0ZpbGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi87IH07CisJCTY1ODgyNEIx
MUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1ODgyNEIwMUU1Q0ZERjQwMEZCNzM1OSAvKiBDb25m
aWdGaWxlLmNwcCAqLzsgfTsKIAkJNjU4RDNBNTYxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlS
ZWNvcmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAvKiBWTUVudHJ5UmVjb3JkLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjVCODM5MkUxQkFDQUQzNjAwNDRF
ODI0IC8qIENhY2hlZFJlY292ZXJ5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2NUI4MzkyQzFCQUNBOTJBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zlcnku
aCAqLzsgfTsKIAkJNjVCODM5MkYxQkFDQUQ2QTAwNDRFODI0IC8qIENhY2hlZFJlY292ZXJ5LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QjgzOTJE
MUJBQ0E5RDMwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5jcHAgKi87IH07CkBAIC0zODY4LDYg
KzM4NzAsOCBAQAogCQk2NTdDRjQ1NjE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDYWxsZWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxs
ZWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsZWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjU4NjAxNzcxODVBOEY1RTAwMDMwRUVFIC8qIE1heEZy
YW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IE1heEZyYW1lRXh0ZW50Rm9yU2xvd1BhdGhDYWxsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTY1ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbmZpZ0ZpbGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29uZmlnRmlsZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OEQzQTU1MTk2MzgyNjgwMDNDNDVENiAvKiBW
TUVudHJ5UmVjb3JkLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGluZUVuZGluZyA9IDA7
IHBhdGggPSBWTUVudHJ5UmVjb3JkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHhjTGFuZ3Vh
Z2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcub2JqY3BwOyB9OwogCQk2NTk4
N0YyQzE2N0ZFODRCMDAzQzJGOEQgLyogREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmg7
IHBhdGggPSBkZmcvREZHT1NSRXhpdENvbXBpbGF0aW9uSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk2NTk4N0YyRjE2ODI4QTdFMDAzQzJGOEQgLyogVW51c2VkUG9pbnRlci5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbnVzZWRQb2ludGVyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC02MzUwLDYgKzYzNTQsOCBAQAogCQkJCUE3RTVBM0E2
MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oICovLAogCQkJCTk2OUEwOTIy
MEVEMUUwOUMwMEYxRjY4MSAvKiBDb21wbGV0aW9uLmNwcCAqLywKIAkJCQlGNUJCMkJDNTAzMEY3
NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovLAorCQkJCTY1ODgyNEIwMUU1Q0ZERjQwMEZC
NzM1OSAvKiBDb25maWdGaWxlLmNwcCAqLywKKwkJCQk2NTg4MjRBRTFFNUNGREIwMDBGQjczNTkg
LyogQ29uZmlnRmlsZS5oICovLAogCQkJCTBGREIyQ0U5MTc0ODk2QzcwMDdCM0MxQiAvKiBDb25j
dXJyZW50SlNMb2NrLmggKi8sCiAJCQkJQTVCNkE3NEMxOEM2REJBNjAwRjExRTkxIC8qIENvbnNv
bGVDbGllbnQuY3BwICovLAogCQkJCUE1M0NFMDg5MThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xl
Q2xpZW50LmggKi8sCkBAIC04MzU4LDYgKzgzNjQsNyBAQAogCQkJCUE3RDg5Q0ZFMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdPU1JBdmFpbGFiaWxpdHlBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkQ4MkU1NzE0MURBRjEwMDAxNzlDOTQgLyogREZHT1NSRW50cnkuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDhBMzI2MTdENTFGNTcwMENBMkM0MCAvKiBERkdPU1JFbnRyeXBvaW50
Q3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNjU4ODI0QUYxRTVDRkRCMDAwRkI3
MzU5IC8qIENvbmZpZ0ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5NzZBMTQ2OEE2Rjcw
MENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLywKQEAgLTEwMzY5LDYgKzEwMzc2LDcgQEAKIAkJCQkxNDBCN0QxRDBEQzY5QUY3MDA5
QzQyQjggLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQy
ODA4NzUxMDdFQzEzRTAwMTNFN0IyIC8qIEpTTG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlD
MjVENzA5QjE2REU5OUY0MDBGQ0E2QkMgLyogSlNNYW5hZ2VkVmFsdWUubW0gaW4gU291cmNlcyAq
LywKKwkJCQk2NTg4MjRCMTFFNUNGREY0MDBGQjczNTkgLyogQ29uZmlnRmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzAwODc0MTE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0REVGOTUxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTNEMjM5QzgxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9k
dWxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAkobm9uZXhpc3RlbnQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDb25maWdGaWxlLmgiCisKKyNpbmNs
dWRlICJPcHRpb25zLmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4K
KyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvQVNDSUlDVHlwZS5oPgorI2luY2x1
ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRp
YyBjb25zdCBzaXplX3Qgc19wcm9jZXNzTmFtZU1heCA9IDEyODsKKyNpZiBQTEFURk9STShXSU4p
CitzdGF0aWMgY29uc3Qgc2l6ZV90IHNfbWF4UGF0aExlbmd0aCA9IE1BWF9QQVRICisjZWxzZQor
c3RhdGljIGNvbnN0IHNpemVfdCBzX21heFBhdGhMZW5ndGggPSBQQVRIX01BWDsKKyNlbmRpZgor
Y2hhciBDb25maWdGaWxlOjpzX3Byb2Nlc3NOYW1lW3NfcHJvY2Vzc05hbWVNYXggKyAxXSA9IHsg
MCB9OworY2hhciBDb25maWdGaWxlOjpzX3BhcmVudFByb2Nlc3NOYW1lW3NfcHJvY2Vzc05hbWVN
YXggKyAxXSA9IHsgMCB9OworCitjbGFzcyBDb25maWdGaWxlU2Nhbm5lciB7CitwdWJsaWM6Cisg
ICAgQ29uZmlnRmlsZVNjYW5uZXIoY29uc3QgY2hhciogZmlsZW5hbWUpCisgICAgICAgIDogbV9m
aWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAgICB7CisgICAg
ICAgIG1fc3JjUHRyID0gJm1fYnVmZmVyWzBdOworICAgICAgICBtX2J1ZmZlckVuZCA9ICZtX2J1
ZmZlclswXTsKKyAgICB9CisKKyAgICBib29sIHN0YXJ0KCkKKyAgICB7CisgICAgICAgIG1fZmls
ZSA9IGZvcGVuKG1fZmlsZW5hbWUsICJyIik7CisgICAgICAgIGlmICghbV9maWxlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIG9wZW4gZmlsZSBKU0MgQ29uZmlnIGZpbGUgJyVz
Jy5cbiIsIG1fZmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQgbGluZU51bWJl
cigpCisgICAgeworICAgICAgICByZXR1cm4gbV9saW5lTnVtYmVyOworICAgIH0KKworICAgIGNv
bnN0IGNoYXIqIGN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX3NyY1B0ciB8
fCBtX3NyY1B0ciA9PSBtX2J1ZmZlckVuZCkKKyAgICAgICAgICAgIHJldHVybiAiIjsKKworICAg
ICAgICByZXR1cm4gbV9zcmNQdHI7CisgICAgfQorCisgICAgYm9vbCBhdEZpbGVFbmQoKQorICAg
IHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHRyeUNv
bnN1bWUoY2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoYyA9PSAqbV9zcmNQdHIp
IHsKKyAgICAgICAgICAgIG1fc3JjUHRyKys7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZSA8
c2l6ZV90IGxlbmd0aD4KKyAgICBib29sIHRyeUNvbnN1bWUoY29uc3QgY2hhciAoJnRva2VuKSBb
bGVuZ3RoXSkKKyAgICB7CisgICAgICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IHRva2VuTGVuZ3RoID0gbGVu
Z3RoIC0gMTsKKyAgICAgICAgaWYgKCFzdHJuY21wKG1fc3JjUHRyLCB0b2tlbiwgdG9rZW5MZW5n
dGgpKSB7CisgICAgICAgICAgICBtX3NyY1B0ciArPSB0b2tlbkxlbmd0aDsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIGNoYXIqIHRyeUNvbnN1bWVTdHJpbmcoKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxs
QnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgICAg
IGlmICgqbV9zcmNQdHIgIT0gJyInKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAg
ICAgICAgY2hhciogc3RyaW5nU3RhcnQgPSArK21fc3JjUHRyOworCisgICAgICAgIGNoYXIqIHN0
cmluZ0VuZCA9IHN0cmNocihtX3NyY1B0ciwgJyInKTsKKyAgICAgICAgaWYgKHN0cmluZ0VuZCkg
eworICAgICAgICAgICAgKnN0cmluZ0VuZCA9ICdcMCc7CisgICAgICAgICAgICBtX3NyY1B0ciA9
IHN0cmluZ0VuZCArIDE7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nU3RhcnQ7CisgICAgICAg
IH0KKworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjaGFyKiB0cnlDb25z
dW1lVXB0byhib29sJiBmb3VuZENoYXIsIGNoYXIgYykKKyAgICB7CisgICAgICAgIGlmICghZmls
bEJ1ZmZlcklmTmVlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAg
ICBjaGFyKiBzdGFydCA9IG1fc3JjUHRyOworICAgICAgICBmb3VuZENoYXIgPSBmYWxzZTsKKwor
ICAgICAgICBjaGFyKiBjUG9zaXRpb24gPSBzdHJjaHIobV9zcmNQdHIsIGMpOworICAgICAgICBp
ZiAoY1Bvc2l0aW9uKSB7CisgICAgICAgICAgICAqY1Bvc2l0aW9uID0gJ1wwJzsKKyAgICAgICAg
ICAgIG1fc3JjUHRyID0gY1Bvc2l0aW9uICsgMTsKKyAgICAgICAgICAgIGZvdW5kQ2hhciA9IHRy
dWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zcmNQdHIgPSBtX2J1ZmZlckVuZDsK
KworICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgfQorCitwcml2YXRlOgorICAgIGJvb2wgZmls
bEJ1ZmZlcklmTmVlZGVkKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zcmNQdHIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAg
IHdoaWxlIChtX3NyY1B0ciAhPSBtX2J1ZmZlckVuZCAmJiBpc0FTQ0lJU3BhY2UoKm1fc3JjUHRy
KSkKKyAgICAgICAgICAgICAgICBtX3NyY1B0cisrOworCisgICAgICAgICAgICBpZiAobV9zcmNQ
dHIgIT0gbV9idWZmZXJFbmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAg
IGlmICghZmlsbEJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgZmlsbEJ1ZmZl
cigpCisgICAgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBtX3NyY1B0ciA9IGZnZXRzKG1f
YnVmZmVyLCBzaXplb2YobV9idWZmZXIpLCBtX2ZpbGUpOworICAgICAgICAgICAgaWYgKCFtX3Ny
Y1B0cikgeworICAgICAgICAgICAgICAgIGZjbG9zZShtX2ZpbGUpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9saW5lTnVtYmVy
Kys7CisKKyAgICAgICAgICAgIG1fYnVmZmVyRW5kID0gc3RyY2hyKG1fc3JjUHRyLCAnIycpOwor
CisgICAgICAgICAgICBpZiAobV9idWZmZXJFbmQpCisgICAgICAgICAgICAgICAgKm1fYnVmZmVy
RW5kID0gJ1wwJzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1fYnVmZmVy
RW5kID0gbV9zcmNQdHIgKyBzdHJsZW4obV9zcmNQdHIpOworICAgICAgICAgICAgICAgIGlmICht
X2J1ZmZlckVuZCA+IG1fc3JjUHRyICYmIG1fYnVmZmVyRW5kWy0xXSA9PSAnXG4nKSB7CisgICAg
ICAgICAgICAgICAgICAgIG1fYnVmZmVyRW5kLS07CisgICAgICAgICAgICAgICAgICAgICptX2J1
ZmZlckVuZCA9ICdcMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9IHdoaWxlIChtX2J1ZmZlckVuZCA9PSBtX3NyY1B0cik7CisKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgY29uc3QgY2hhciogbV9maWxlbmFtZTsKKyAgICB1bnNpZ25lZCBt
X2xpbmVOdW1iZXI7CisgICAgRklMRSogbV9maWxlOworICAgIGNoYXIgbV9idWZmZXJbQlVGU0la
XTsKKyAgICBjaGFyKiBtX3NyY1B0cjsKKyAgICBjaGFyKiBtX2J1ZmZlckVuZDsKK307CisKK0Nv
bmZpZ0ZpbGU6OkNvbmZpZ0ZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpCisgICAgOiBtX2ZpbGVu
YW1lKGZpbGVuYW1lKQoreworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKGNv
bnN0IGNoYXIqIHByb2Nlc3NOYW1lKQoreworICAgIHN0cm5jcHkoc19wcm9jZXNzTmFtZSwgcHJv
Y2Vzc05hbWUsIHNfcHJvY2Vzc05hbWVNYXgpOworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnNldFBh
cmVudFByb2Nlc3NOYW1lKGNvbnN0IGNoYXIqIHBhcmVudFByb2Nlc3NOYW1lKQoreworICAgIHN0
cm5jcHkoc19wYXJlbnRQcm9jZXNzTmFtZSwgcGFyZW50UHJvY2Vzc05hbWUsIHNfcHJvY2Vzc05h
bWVNYXgpOworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnBhcnNlKCkKK3sKKyAgICBlbnVtIFN0YXRl
bWVudE5lc3RpbmcgeyBUb3BMZXZlbFN0YXRtZW50LCBOZXN0ZWRTdGF0ZW1lbnQsIE5lc3RlZFN0
YXRlbWVudEZhaWxlZENyaXRlcmlhIH07CisgICAgZW51bSBQYXJzZVJlc3VsdCB7IFBhcnNlT0ss
IFBhcnNlRXJyb3IsIE5lc3RlZFN0YXRlbWVudERvbmUgfTsKKworICAgIENvbmZpZ0ZpbGVTY2Fu
bmVyIHNjYW5uZXIobV9maWxlbmFtZSk7CisKKyAgICBpZiAoIXNjYW5uZXIuc3RhcnQoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY2hhciBsb2dQYXRobmFtZVtzX21heFBhdGhMZW5ndGggKyAx
XSA9IHsgMCB9OworCisgICAgU3RyaW5nQnVpbGRlciBqc2NPcHRpb25zQnVpbGRlcjsKKworICAg
IGF1dG8gcGFyc2VMb2dGaWxlID0gWyZdKFN0YXRlbWVudE5lc3Rpbmcgc3RhdGVtZW50TmVzdGlu
ZykgeworICAgICAgICBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7CisgICAgICAgIGlmIChzY2Fu
bmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAoZmlsZW5hbWUgPSBzY2FubmVyLnRyeUNvbnN1bWVTdHJp
bmcoKSkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nICE9IE5lc3RlZFN0YXRl
bWVudEZhaWxlZENyaXRlcmlhKQorICAgICAgICAgICAgICAgIHN0cm5jcHkobG9nUGF0aG5hbWUs
IGZpbGVuYW1lLCBzX21heFBhdGhMZW5ndGgpOworCisgICAgICAgICAgICByZXR1cm4gUGFyc2VP
SzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworICAgIH07CisKKyAg
ICBhdXRvIHBhcnNlSlNDT3B0aW9ucyA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVudE5l
c3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgneycpKSB7CisgICAgICAg
ICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICAgICAgICAgIGJvb2wgZm91bmRDbG9z
aW5nQnJhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGNoYXIqIGN1cnJlbnRMaW5lID0gbnVsbHB0
cjsKKworICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50TGluZSA9IHNjYW5uZXIudHJ5Q29uc3Vt
ZVVwdG8oZm91bmRDbG9zaW5nQnJhY2UsICd9JykpKSB7CisgICAgICAgICAgICAgICAgY2hhciog
cCA9IGN1cnJlbnRMaW5lOworCisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAg
ICAgICBpZiAoZm91bmRDbG9zaW5nQnJhY2UgJiYgISpwKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2hhciogb3B0aW9uTmFtZVN0YXJ0ID0g
cDsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgIWlzQVNDSUlTcGFjZSgqcCkg
JiYgKnAgIT0gJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAgICAg
ICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG9wdGlvbk5hbWVTdGFydCwgcCAtIG9wdGlvbk5hbWVT
dGFydCk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmIGlzQVNDSUlTcGFjZSgq
cCkgJiYgKnAgIT0gJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworCisgICAgICAg
ICAgICAgICAgICAgIGlmICghKnApCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFy
c2VFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcCsrOyAvLyBBZHZhbmNlIHBhc3QgdGhlICc9
JworCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc9Jyk7CisKKyAgICAgICAg
ICAgICAgICAgICAgd2hpbGUgKCpwICYmIGlzQVNDSUlTcGFjZSgqcCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqcCkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworCisgICAgICAgICAgICAgICAgICAg
IGNoYXIqIG9wdGlvblZhbHVlU3RhcnQgPSBwOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxl
ICgqcCAmJiAhaXNBU0NJSVNwYWNlKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsK
KworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChvcHRpb25WYWx1ZVN0YXJ0LCBw
IC0gb3B0aW9uVmFsdWVTdGFydCk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCdcbicpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAmJiBpc0FTQ0lJU3BhY2Uo
KnApKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAgICAgIH0gd2hp
bGUgKCpwKTsKKworICAgICAgICAgICAgICAgIGlmIChmb3VuZENsb3NpbmdCcmFjZSkKKyAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChz
dGF0ZW1lbnROZXN0aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKQorICAgICAg
ICAgICAgICAgIGpzY09wdGlvbnNCdWlsZGVyLmFwcGVuZChidWlsZGVyKTsKKworICAgICAgICAg
ICAgcmV0dXJuIFBhcnNlT0s7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gUGFyc2VFcnJv
cjsKKyAgICB9OworCisgICAgYXV0byBwYXJzZU5lc3RlZFN0YXRlbWVudCA9IFsmXShTdGF0ZW1l
bnROZXN0aW5nIHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29u
c3VtZSgianNjT3B0aW9ucyIpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlSlNDT3B0aW9ucyhz
dGF0ZW1lbnROZXN0aW5nKTsKKworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCJsb2dG
aWxlIikpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VMb2dGaWxlKHN0YXRlbWVudE5lc3Rpbmcp
OworCisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJ30nKSkKKyAgICAgICAgICAgIHJl
dHVybiBOZXN0ZWRTdGF0ZW1lbnREb25lOworCisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOwor
ICAgIH07CisKKyAgICBhdXRvIHBhcnNlUHJlZGljYXRlID0gWyZdKGJvb2wmIHByZWRpY2F0ZU1h
dGNoZXMsIGNvbnN0IGNoYXIqIG1hdGNoVmFsdWUpIHsKKyAgICAgICAgY2hhciogcHJlZGljYXRl
VmFsdWUgPSBudWxscHRyOworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1lKCI9PSIpCisg
ICAgICAgICAgICAmJiAocHJlZGljYXRlVmFsdWUgPSBzY2FubmVyLnRyeUNvbnN1bWVTdHJpbmco
KSkgJiYgbWF0Y2hWYWx1ZSkgeworICAgICAgICAgICAgICAgIHByZWRpY2F0ZU1hdGNoZXMgPSAh
c3RyY21wKHByZWRpY2F0ZVZhbHVlLCBtYXRjaFZhbHVlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9OworCisg
ICAgYXV0byBwYXJzZUNvbmRpdGlvbmFsQmxvY2sgPSBbJl0oU3RhdGVtZW50TmVzdGluZyBzdGF0
ZW1lbnROZXN0aW5nKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nID09IE5lc3RlZFN0
YXRlbWVudCkgeworICAgICAgICAgICAgU3RhdGVtZW50TmVzdGluZyBzdWJOZXN0aW5nID0gTmVz
dGVkU3RhdGVtZW50OworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAgICAgICAgICAg
ICAgIGJvb2wgcHJlZGljYXRlTWF0Y2hlczsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBh
Y3R1YWxWYWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICBpZiAoc2Nhbm5lci50cnlD
b25zdW1lKCJwcm9jZXNzTmFtZSIpKQorICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1ZSA9
IHNfcHJvY2Vzc05hbWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Nhbm5lci50cnlDb25z
dW1lKCJwYXJlbnRQcm9jZXNzTmFtZSIpKQorICAgICAgICAgICAgICAgICAgICBhY3R1YWxWYWx1
ZSA9IHNfcGFyZW50UHJvY2Vzc05hbWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Nhbm5l
ci50cnlDb25zdW1lKCJidWlsZCIpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAgICAgICAgICAg
ICAgYWN0dWFsVmFsdWUgPSAiRGVidWciOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgYWN0
dWFsVmFsdWUgPSAiUmVsZWFzZSI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworCisgICAgICAgICAgICAgICAgaWYg
KHBhcnNlUHJlZGljYXRlKHByZWRpY2F0ZU1hdGNoZXMsIGFjdHVhbFZhbHVlKSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZU1hdGNoZXMpCisgICAgICAgICAgICAgICAgICAg
ICAgICBzdWJOZXN0aW5nID0gTmVzdGVkU3RhdGVtZW50RmFpbGVkQ3JpdGVyaWE7CisKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFzY2FubmVyLnRyeUNvbnN1bWUoIiYmIikpCisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGlmICghc2Nhbm5lci50cnlDb25zdW1lKCd7JykpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIFBhcnNlRXJyb3I7CisKKyAgICAgICAgICAgIFBhcnNlUmVzdWx0IHBhcnNlUmVz
dWx0ID0gUGFyc2VPSzsKKyAgICAgICAgICAgIHdoaWxlIChwYXJzZVJlc3VsdCA9PSBQYXJzZU9L
ICYmICFzY2FubmVyLmF0RmlsZUVuZCgpKQorICAgICAgICAgICAgICAgIHBhcnNlUmVzdWx0ID0g
cGFyc2VOZXN0ZWRTdGF0ZW1lbnQoc3ViTmVzdGluZyk7CisKKyAgICAgICAgICAgIGlmIChwYXJz
ZVJlc3VsdCA9PSBOZXN0ZWRTdGF0ZW1lbnREb25lKQorICAgICAgICAgICAgICAgIHJldHVybiBQ
YXJzZU9LOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisgICAgfTsK
KworICAgIGF1dG8gcGFyc2VTdGF0ZW1lbnQgPSBbJl0oU3RhdGVtZW50TmVzdGluZyBzdGF0ZW1l
bnROZXN0aW5nKSB7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoImpzY09wdGlvbnMi
KSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUpTQ09wdGlvbnMoc3RhdGVtZW50TmVzdGluZyk7
CisKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgibG9nRmlsZSIpKQorICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlTG9nRmlsZShzdGF0ZW1lbnROZXN0aW5nKTsKKworICAgICAgICBpZiAo
c3RhdGVtZW50TmVzdGluZyA9PSBUb3BMZXZlbFN0YXRtZW50KQorICAgICAgICAgICAgcmV0dXJu
IHBhcnNlQ29uZGl0aW9uYWxCbG9jayhOZXN0ZWRTdGF0ZW1lbnQpOworCisgICAgICAgIHJldHVy
biBQYXJzZUVycm9yOworICAgIH07CisKKyAgICBQYXJzZVJlc3VsdCBwYXJzZVJlc3VsdCA9IFBh
cnNlT0s7CisKKyAgICB3aGlsZSAocGFyc2VSZXN1bHQgPT0gUGFyc2VPSyAmJiAhc2Nhbm5lci5h
dEZpbGVFbmQoKSkKKyAgICAgICAgcGFyc2VSZXN1bHQgPSBwYXJzZVN0YXRlbWVudChUb3BMZXZl
bFN0YXRtZW50KTsKKworICAgIGlmIChwYXJzZVJlc3VsdCA9PSBQYXJzZU9LKSB7CisgICAgICAg
IGlmIChzdHJsZW4obG9nUGF0aG5hbWUpKQorICAgICAgICAgICAgV1RGOjpzZXREYXRhRmlsZShs
b2dQYXRobmFtZSk7CisKKyAgICAgICAgaWYgKCFqc2NPcHRpb25zQnVpbGRlci5pc0VtcHR5KCkp
IHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlvbnNTdHIgPSBqc2NPcHRpb25zQnVpbGRl
ci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCk7CisgICAgICAgICAgICBPcHRpb25zOjpzZXRPcHRp
b25zKG9wdGlvbnNTdHIpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIFdURjo6ZGF0
YUxvZ0YoIkVycm9yIGluIEpTQyBDb25maWcgZmlsZSBvbiBvciBuZWFyIGxpbmUgJXUsIHBhcnNp
bmcgJyVzJ1xuIiwgc2Nhbm5lci5saW5lTnVtYmVyKCksIHNjYW5uZXIuY3VycmVudEJ1ZmZlcigp
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db25maWdGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvQ29uZmlnRmlsZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBv
bmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25maWdGaWxlIHsKK3B1YmxpYzoKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBDb25maWdGaWxlKGNvbnN0IGNoYXIqKTsKKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldFByb2Nlc3NOYW1lKGNvbnN0IGNoYXIqKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRQYXJlbnRQcm9jZXNzTmFtZShjb25z
dCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwYXJzZSgpOworCitwcml2YXRl
OgorICAgIHN0YXRpYyBjaGFyIHNfcHJvY2Vzc05hbWVbXTsKKyAgICBzdGF0aWMgY2hhciBzX3Bh
cmVudFByb2Nlc3NOYW1lW107CisKKyAgICBjb25zdCBjaGFyKiBtX2ZpbGVuYW1lOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9P
cHRpb25zLmNwcAkocmV2aXNpb24gMjEzMDc0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYgQEAKICNpbmNs
dWRlICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogI2VuZGlmCiAKLSNkZWZpbmUgVVNFX09QVElPTlNf
RklMRSAwCi0jZGVmaW5lIE9QVElPTlNfRklMRU5BTUUgIi90bXAvanNjLm9wdGlvbnMiCi0KIG5h
bWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewpAQCAtNDk2LDMxICs0OTMsNiBAQCB2b2lkIE9w
dGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgICAgIDsgLy8gRGVjb25mdXNlIGVkaXRv
cnMgdGhhdCBkbyBhdXRvIGluZGVudGF0aW9uCiAjZW5kaWYKICAgICAKLSNpZiBVU0UoT1BUSU9O
U19GSUxFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVu
YW1lID0gT1BUSU9OU19GSUxFTkFNRTsKLSAgICAgICAgICAgICAgICBGSUxFKiBvcHRpb25zRmls
ZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAgICAgICAgICAgICAgIGlmICghb3B0aW9uc0Zp
bGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBvcGVuIGZpbGUg
JXMuIERpZCB5b3UgYWRkIHRoZSBmaWxlLXJlYWQtZGF0YSBlbnRpdGxlbWVudCB0byBXZWJQcm9j
ZXNzLnNiP1xuIiwgZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgICAgICBjaGFyKiBsaW5lOwotICAgICAgICAgICAg
ICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChsaW5lID0g
ZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgb3B0aW9uc0ZpbGUpKSkKLSAgICAgICAgICAg
ICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25zU3RyID0gYnVpbGRlci50b1N0cmluZygpLnV0
ZjgoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlNldHRpbmcgb3B0aW9uczog
JXNcbiIsIG9wdGlvbnNTdHIpOwotICAgICAgICAgICAgICAgIHNldE9wdGlvbnMob3B0aW9uc1N0
cik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW50IHJlc3VsdCA9IGZjbG9z
ZShvcHRpb25zRmlsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBjbG9zZSBmaWxlICVzOiAlc1xuIiwgZmlsZW5h
bWUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLQogICAgICAgICAg
ICAgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOwogCiAgICAgICAgICAgICAvLyBEbyByYW5n
ZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtlIGNvcnJlY3Rpb25zIHRvIHRoZSBvcHRpb25z
OgpAQCAtNjI4LDcgKzYwMCwxMiBAQCBib29sIE9wdGlvbnM6OnNldE9wdGlvbnMoY29uc3QgY2hh
ciogb3B0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICByZWNvbXB1dGVEZXBlbmRlbnRPcHRpb25z
KCk7CisKICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CisKKyAgICBlbnN1cmVPcHRpb25zQXJl
Q29oZXJlbnQoKTsKKwogICAgIHJldHVybiBzdWNjZXNzOwogfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMyw2
ICsxMDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICNkZWZpbmUgSlND
X09QVElPTlModikgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVPcHRpb25zLCBmYWxzZSwgTm9ybWFs
LCAiY3Jhc2hlcyBpZiBtaXMtdHlwZWQgSlNDIG9wdGlvbnMgd2VyZSBwYXNzZWQgdG8gdGhlIFZN
IikgXAogICAgIHYodW5zaWduZWQsIGR1bXBPcHRpb25zLCAwLCBOb3JtYWwsICJkdW1wcyBKU0Mg
b3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlkZGVuIG9ubHksIDIgPSBBbGwsIDMgPSBWZXJi
b3NlKSIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgY29uZmlnRmlsZSwgbnVsbHB0ciwgTm9ybWFs
LCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMgYW5kIGxvZ2dpbmcgbG9jYXRpb24iKSBc
CiAgICAgXAogICAgIHYoYm9vbCwgdXNlTExJbnQsICB0cnVlLCBOb3JtYWwsICJhbGxvd3MgdGhl
IExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAgICB2KGJvb2wsIHVzZUpJVCwgICAgdHJ1
ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBiYXNlbGluZSBKSVQgdG8gYmUgdXNlZCBpZiB0cnVlIikg
XApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDIxMzA3NCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDItMjcgIE1pY2hhZWwgU2Fib2ZmICA8
bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29uZmlndXJlIEpT
QyBvcHRpb25zIGZyb20gYSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjg5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxpcCBQaXpsby4K
KworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBhbmQgRGF0YUxvZyBm
aWxlIGxvY2F0aW9uIHZpYSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAgVGhlIHBhdGhu
YW1lIGNhbiBpbmNsdWRlIHRoZSBwcmludGYgc3R5bGUgIiVwaWQiLCB3aGljaCB3aWxsIGJlIHJl
cGxhY2VkIHdpdGggdGhlCisgICAgICAgIGN1cnJlbnQgcHJvY2VzcyBpZC4KKworICAgICAgICAq
IHd0Zi9EYXRhTG9nLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKToK
KyAgICAgICAgKFdURjo6c2V0RGF0YUZpbGUpOgorICAgICAgICAqIHd0Zi9EYXRhTG9nLmg6CisK
IDIwMTctMDItMjQgIEplciBOb2JsZSAgPGplci5ub2JsZUBhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIHB1YmxpYyBtZXRob2QgdG8gTWVkaWFUaW1lIGZvciBkb2luZyB0aW1lU2NhbGUgY29udmVy
c2lvbi4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0RhdGFMb2cuY3BwCShyZXZpc2lvbiAyMTMwNzQpCisrKyBTb3VyY2UvV1RG
L3d0Zi9EYXRhTG9nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsMzAgKzUwLDIyIEBACiAKIG5h
bWVzcGFjZSBXVEYgewogCi1zdGF0aWMgUHJpbnRTdHJlYW0qIHNfZmlsZTsKK3N0YXRpYyBjb25z
dCBzaXplX3QgbWF4UGF0aExlbmd0aCA9IDEwMjQ7CiAKK3N0YXRpYyBQcmludFN0cmVhbSogc19m
aWxlOwogc3RhdGljIHVpbnQ2NF90IHNfZmlsZURhdGFbKHNpemVvZihGaWxlUHJpbnRTdHJlYW0p
ICsgNykgLyA4XTsKIHN0YXRpYyB1aW50NjRfdCBzX2xvY2tlZEZpbGVEYXRhWyhzaXplb2YoTG9j
a2VkUHJpbnRTdHJlYW0pICsgNykgLyA4XTsKIAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0Zp
bGVPbmNlKCkKIHsKLSAgICBGaWxlUHJpbnRTdHJlYW0qIGZpbGUgPSBudWxscHRyOwotICAgIAot
I2lmIERBVEFfTE9HX1RPX0ZJTEUKLSAgICBjb25zdCBsb25nIG1heFBhdGhMZW5ndGggPSAxMDI0
OwotCi0gICAgY2hhciBmaWxlbmFtZVN1ZmZpeFttYXhQYXRoTGVuZ3RoICsgMV07CisgICAgY29u
c3QgY2hhciogZmlsZW5hbWUgPSBudWxscHRyOwogCi0jaWYgUExBVEZPUk0oV0lOKQotICAgIF9z
bnByaW50ZihmaWxlbmFtZVN1ZmZpeCwgc2l6ZW9mKGZpbGVuYW1lU3VmZml4KSwgIi4lZC50eHQi
LCBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwotI2Vsc2UKLSAgICBzbnByaW50ZihmaWxlbmFtZVN1
ZmZpeCwgc2l6ZW9mKGZpbGVuYW1lU3VmZml4KSwgIi4lZC50eHQiLCBnZXRwaWQoKSk7Ci0jZW5k
aWYKKyAgICBpZiAoc19maWxlKQorICAgICAgICByZXR1cm47CiAKKyNpZiBEQVRBX0xPR19UT19G
SUxFCiAjaWYgREFUQV9MT0dfVE9fREFSV0lOX1RFTVBfRElSCiAgICAgY2hhciBmaWxlbmFtZUJ1
ZmZlclttYXhQYXRoTGVuZ3RoICsgMV07Ci0gICAgdW5zaWduZWQgc3VmZml4TGVuZ3RoID0gc3Ry
bGVuKGZpbGVuYW1lU3VmZml4KTsKLQogI2lmIGRlZmluZWQoREFUQV9MT0dfRklMRU5BTUUpCiAg
ICAgY2hhciogbG9nQmFzZW5hbWUgPSBzdHJyY2hyKERBVEFfTE9HX0ZJTEVOQU1FLCAnLycpOwog
ICAgIGlmICghbG9nQmFzZW5hbWUpCkBAIC04MiwxMyArNzQsMTEgQEAgc3RhdGljIHZvaWQgaW5p
dGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICBjb25zdCBjaGFyKiBsb2dCYXNlbmFtZSA9ICJXVEZM
b2ciOwogI2VuZGlmCiAKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7Ci0KICAg
ICBib29sIHN1Y2Nlc3MgPSBjb25mc3RyKF9DU19EQVJXSU5fVVNFUl9URU1QX0RJUiwgZmlsZW5h
bWVCdWZmZXIsIHNpemVvZihmaWxlbmFtZUJ1ZmZlcikpOwogICAgIGlmIChzdWNjZXNzKSB7CiAg
ICAgICAgIC8vIEZJWE1FOiBBc3NlcnQgdGhhdCB0aGUgcGF0aCBlbmRzIHdpdGggYSBzbGFzaCBp
bnN0ZWFkIG9mIGFkZGluZyBhIHNsYXNoIGlmIGl0IGRvZXMgbm90IGV4aXN0CiAgICAgICAgIC8v
IG9uY2UgPHJkYXI6Ly9wcm9ibGVtLzIzNTc5MDc3PiBpcyBmaXhlZCBpbiBhbGwgaU9TIFNpbXVs
YXRvciB2ZXJzaW9ucyB0aGF0IHdlIHVzZS4KLSAgICAgICAgc2l6ZV90IGxhc3RDb21wb25lbnRM
ZW5ndGggPSBzdHJsZW4obG9nQmFzZW5hbWUpICsgc3VmZml4TGVuZ3RoOworICAgICAgICBzaXpl
X3QgbGFzdENvbXBvbmVudExlbmd0aCA9IHN0cmxlbihsb2dCYXNlbmFtZSkgKyAyMDsgLy8gTW9y
ZSB0aGFuIGVub3VnaCBmb3IgIi48cGlkPi50eHQiCiAgICAgICAgIHNpemVfdCBkaXJuYW1lTGVu
Z3RoID0gc3RybGVuKGZpbGVuYW1lQnVmZmVyKTsKICAgICAgICAgYm9vbCBzaG91bGRBZGRQYXRo
U2VwYXJhdG9yID0gZmlsZW5hbWVCdWZmZXJbZGlybmFtZUxlbmd0aCAtIDFdICE9ICcvJyAmJiBs
b2dCYXNlbmFtZVswXSAhPSAnLyc7CiAgICAgICAgIGlmIChsYXN0Q29tcG9uZW50TGVuZ3RoICsg
c2hvdWxkQWRkUGF0aFNlcGFyYXRvciA8PSBzaXplb2YoZmlsZW5hbWVCdWZmZXIpIC0gZGlybmFt
ZUxlbmd0aCAtIDEpIHsKQEAgLTk5LDM2ICs4OSwyMyBAQCBzdGF0aWMgdm9pZCBpbml0aWFsaXpl
TG9nRmlsZU9uY2UoKQogICAgICAgICB9CiAgICAgfQogI2VsaWYgZGVmaW5lZChEQVRBX0xPR19G
SUxFTkFNRSkKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IERBVEFfTE9HX0ZJTEVOQU1FOwor
ICAgIGZpbGVuYW1lID0gREFUQV9MT0dfRklMRU5BTUU7CiAjZWxzZQotICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lID0gZ2V0ZW52KCJXVEZfREFUQV9MT0dfRklMRU5BTUUiKTsKKyAgICBmaWxlbmFt
ZSA9IGdldGVudigiV1RGX0RBVEFfTE9HX0ZJTEVOQU1FIik7CiAjZW5kaWYKICAgICBjaGFyIGFj
dHVhbEZpbGVuYW1lW21heFBhdGhMZW5ndGggKyAxXTsKIAotICAgIGlmIChmaWxlbmFtZSkgewor
ICAgIGlmIChmaWxlbmFtZSAmJiAhc3Ryc3RyKGZpbGVuYW1lLCAiJXBpZCIpKSB7CiAjaWYgUExB
VEZPUk0oV0lOKQotICAgICAgICBfc25wcmludGYoYWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1
YWxGaWxlbmFtZSksICIlcyVzIiwgZmlsZW5hbWUsIGZpbGVuYW1lU3VmZml4KTsKKyAgICAgICAg
X3NucHJpbnRmKGFjdHVhbEZpbGVuYW1lLCBzaXplb2YoYWN0dWFsRmlsZW5hbWUpLCAiJXMuJSVw
aWQudHh0IiwgZmlsZW5hbWUpOwogI2Vsc2UKLSAgICAgICAgc25wcmludGYoYWN0dWFsRmlsZW5h
bWUsIHNpemVvZihhY3R1YWxGaWxlbmFtZSksICIlcyVzIiwgZmlsZW5hbWUsIGZpbGVuYW1lU3Vm
Zml4KTsKKyAgICAgICAgc25wcmludGYoYWN0dWFsRmlsZW5hbWUsIHNpemVvZihhY3R1YWxGaWxl
bmFtZSksICIlcy4lJXBpZC50eHQiLCBmaWxlbmFtZSk7CiAjZW5kaWYKLSAgICAgICAgCi0gICAg
ICAgIGZpbGUgPSBGaWxlUHJpbnRTdHJlYW06Om9wZW4oYWN0dWFsRmlsZW5hbWUsICJ3IikucmVs
ZWFzZSgpOwotICAgICAgICBpZiAoZmlsZSkKLSAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiKioq
IERhdGFMb2cgb3V0cHV0IHRvIFwiJXNcIiAqKipcbiIsIGFjdHVhbEZpbGVuYW1lKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgV1RGTG9nQWx3YXlzKCJXYXJuaW5nOiBDb3VsZCBub3Qgb3Bl
biBEYXRhTG9nIGZpbGUgJXMgZm9yIHdyaXRpbmcuXG4iLCBhY3R1YWxGaWxlbmFtZSk7CisgICAg
ICAgIGZpbGVuYW1lID0gYWN0dWFsRmlsZW5hbWU7CiAgICAgfQogI2VuZGlmIC8vIERBVEFfTE9H
X1RPX0ZJTEUKLSAgICAKLSAgICBpZiAoIWZpbGUpIHsKLSAgICAgICAgLy8gVXNlIHBsYWNlbWVu
dCBuZXc7IHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHVzZSBkYXRhTG9nKCkgdG8gZGVidWcKLSAg
ICAgICAgLy8gZmFzdE1hbGxvYy4KLSAgICAgICAgZmlsZSA9IG5ldyAoc19maWxlRGF0YSkgRmls
ZVByaW50U3RyZWFtKHN0ZGVyciwgRmlsZVByaW50U3RyZWFtOjpCb3Jyb3cpOwotICAgIH0KLSAg
ICAKLSAgICBzZXR2YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lPTkJGLCAwKTsgLy8gUHJlZmVyIHVu
YnVmZmVyZWQgb3V0cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1bGwgbG9nIHVwb24gY3Jhc2ggb3Ig
ZGVhZGxvY2suCi0gICAgCi0gICAgc19maWxlID0gbmV3IChzX2xvY2tlZEZpbGVEYXRhKSBMb2Nr
ZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8RmlsZVByaW50U3RyZWFtPihmaWxlKSk7CisK
KyAgICBzZXREYXRhRmlsZShmaWxlbmFtZSk7CiB9CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVM
b2dGaWxlKCkKQEAgLTE0MSw2ICsxMTgsNjAgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0Zp
bGUoKQogICAgICAgICB9KTsKIH0KIAordm9pZCBzZXREYXRhRmlsZShjb25zdCBjaGFyKiBwYXRo
KQoreworICAgIEZpbGVQcmludFN0cmVhbSogZmlsZSA9IG51bGxwdHI7CisgICAgY2hhciBmb3Jt
YXR0ZWRQYXRoW21heFBhdGhMZW5ndGggKyAxXTsKKyAgICBjb25zdCBjaGFyKiBwYXRoVG9PcGVu
ID0gcGF0aDsKKworICAgIGlmIChwYXRoKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHBpZEZvcm1h
dCA9IHN0cnN0cihwYXRoLCAiJXBpZCIpOworICAgICAgICBpZiAocGlkRm9ybWF0KSB7CisgICAg
ICAgICAgICBzaXplX3QgbGVhZGluZ1BhdGhMZW5ndGggPSBwaWRGb3JtYXQgLSBwYXRoOworICAg
ICAgICAgICAgc2l6ZV90IHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlID0gc3RkOjptaW4obWF4UGF0
aExlbmd0aCwgbGVhZGluZ1BhdGhMZW5ndGgpOworICAgICAgICAgICAgc3RybmNweShmb3JtYXR0
ZWRQYXRoLCBwYXRoLCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSk7CisgICAgICAgICAgICBjaGFy
KiBuZXh0RGVzdCA9IGZvcm1hdHRlZFBhdGggKyBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZTsKKyAg
ICAgICAgICAgIHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlID0gbWF4UGF0aExlbmd0aCAtIHBhdGhD
aGFyYWN0ZXJzQXZhaWxhYmxlOworICAgICAgICAgICAgaWYgKHBhdGhDaGFyYWN0ZXJzQXZhaWxh
YmxlKSB7CisgICAgICAgICAgICAgICAgaW50IHBpZFRleHRMZW5ndGg7CisjaWYgUExBVEZPUk0o
V0lOKQorICAgICAgICAgICAgICAgIHBpZFRleHRMZW5ndGggPSBfc25wcmludGYobmV4dERlc3Qs
IHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAiJWQiLCBHZXRDdXJyZW50UHJvY2Vzc0lkKCkpOwor
I2Vsc2UKKyAgICAgICAgICAgICAgICBwaWRUZXh0TGVuZ3RoID0gc25wcmludGYobmV4dERlc3Qs
IHBhdGhDaGFyYWN0ZXJzQXZhaWxhYmxlLCAiJWQiLCBnZXRwaWQoKSk7CisjZW5kaWYKKyAgICAg
ICAgICAgICAgICBpZiAocGlkVGV4dExlbmd0aCA8IDAgfHwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihw
aWRUZXh0TGVuZ3RoKSA+PSBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSkKKyAgICAgICAgICAgICAg
ICAgICAgcGF0aENoYXJhY3RlcnNBdmFpbGFibGUgPSAwOworICAgICAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgICAgICBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSAtPSBzdGF0aWNf
Y2FzdDxzaXplX3Q+KHBpZFRleHRMZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBuZXh0RGVz
dCArPSBwaWRUZXh0TGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBzdHJuY3B5KG5leHREZXN0
LCBwaWRGb3JtYXQgKyA0LCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9ybWF0dGVkUGF0aFttYXhQYXRoTGVu
Z3RoXSA9ICdcMCc7CisgICAgICAgICAgICBwYXRoVG9PcGVuID0gZm9ybWF0dGVkUGF0aDsKKyAg
ICAgICAgfQorCisgICAgICAgIGZpbGUgPSBGaWxlUHJpbnRTdHJlYW06Om9wZW4ocGF0aFRvT3Bl
biwgInciKS5yZWxlYXNlKCk7CisgICAgICAgIGlmIChmaWxlKQorICAgICAgICAgICAgV1RGTG9n
QWx3YXlzKCIqKiogRGF0YUxvZyBvdXRwdXQgdG8gXCIlc1wiICoqKlxuIiwgcGF0aFRvT3Blbik7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiV2FybmluZzogQ291bGQg
bm90IG9wZW4gRGF0YUxvZyBmaWxlICVzIGZvciB3cml0aW5nLlxuIiwgcGF0aFRvT3Blbik7Cisg
ICAgfQorCisgICAgaWYgKCFmaWxlKSB7CisgICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3OyB0
aGlzIG1ha2VzIGl0IGVhc2llciB0byB1c2UgZGF0YUxvZygpIHRvIGRlYnVnCisgICAgICAgIC8v
IGZhc3RNYWxsb2MuCisgICAgICAgIGZpbGUgPSBuZXcgKHNfZmlsZURhdGEpIEZpbGVQcmludFN0
cmVhbShzdGRlcnIsIEZpbGVQcmludFN0cmVhbTo6Qm9ycm93KTsKKyAgICB9CisKKyAgICBzZXR2
YnVmKGZpbGUtPmZpbGUoKSwgMCwgX0lPTkJGLCAwKTsgLy8gUHJlZmVyIHVuYnVmZmVyZWQgb3V0
cHV0LCBzbyB0aGF0IHdlIGdldCBhIGZ1bGwgbG9nIHVwb24gY3Jhc2ggb3IgZGVhZGxvY2suCisK
KyAgICBpZiAoc19maWxlKQorICAgICAgICBzX2ZpbGUtPmZsdXNoKCk7CisKKyAgICBzX2ZpbGUg
PSBuZXcgKHNfbG9ja2VkRmlsZURhdGEpIExvY2tlZFByaW50U3RyZWFtKHN0ZDo6dW5pcXVlX3B0
cjxGaWxlUHJpbnRTdHJlYW0+KGZpbGUpKTsKK30KKwogUHJpbnRTdHJlYW0mIGRhdGFGaWxlKCkK
IHsKICAgICBpbml0aWFsaXplTG9nRmlsZSgpOwpJbmRleDogU291cmNlL1dURi93dGYvRGF0YUxv
Zy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAkocmV2aXNpb24gMjEz
MDc0KQorKysgU291cmNlL1dURi93dGYvRGF0YUxvZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2
ICszNCw3IEBACiBuYW1lc3BhY2UgV1RGIHsKIAogV1RGX0VYUE9SVF9QUklWQVRFIFByaW50U3Ry
ZWFtJiBkYXRhRmlsZSgpOworV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0RGF0YUZpbGUoY29u
c3QgY2hhciogcGF0aCk7CiAKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRhdGFMb2dGVihjb25z
dCBjaGFyKiBmb3JtYXQsIHZhX2xpc3QpIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDApOwogV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGF0YUxvZ0YoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdU
Rl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>302944</attachid>
            <date>2017-02-28 10:03:33 -0800</date>
            <delta_ts>2017-02-28 10:03:33 -0800</delta_ts>
            <desc>Last try for a speculative windows build fix</desc>
            <filename>168914-5.patch</filename>
            <type>text/plain</type>
            <size>32946</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMTUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE3LTAyLTI4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEFkZCBhYmlsaXR5IHRvIGNvbmZpZ3VyZSBKU0Mgb3B0aW9ucyBmcm9tIGEgZmlsZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4OTE0CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgRmlsaXAgUGl6bG8uCisKKyAgICAgICAgQWRkZWQgdGhlIGFiaWxp
dHkgdG8gc2V0IG9wdGlvbnMgYW5kIERhdGFMb2cgZmlsZSBsb2NhdGlvbiB2aWEgYSBjb25maWd1
cmF0aW9uIGZpbGUuCisgICAgICAgIFRoZSBjb25maWd1cmF0aW9uIGZpbGUgaXMgc3BlY2lmaWVk
IHdpdGggdGhlIC0tY29uZmlnRmlsZSBvcHRpb24gdG8gSlNDIG9yIHRoZQorICAgICAgICBKU0Nf
Y29uZmlnRmlsZSBlbnZpcm9ubWVudCB2YXJpYWJsZS4KKworICAgICAgICBUaGUgZmlsZSBmb3Jt
YXQgYWxsb3dzIGZvciBvcHRpb25zIGNvbmRpdGlvbmFsbHkgZGVwZW5kZW50IG9uIHZhcmlvdXMg
YXR0cmlidXRlcy4KKyAgICAgICAgQ3VycmVudGx5IHRob3NlIGF0dHJpYnV0ZXMgYXJlIHRoZSBw
cm9jZXNzIG5hbWUsIHBhcmVudCBwcm9jZXNzIG5hbWUgYW5kIGJ1aWxkCisgICAgICAgIHR5cGUg
KFJlbGVhc2Ugb3IgRGVidWcpLiAgSW4gdGhpcyBwYXRjaCwgdGhlIHBhcmVudCBwcm9jZXNzIHR5
cGUgaXMgbm90IHNldC4KKyAgICAgICAgVGhhdCB3aWxsIGJlIHNldCB1cCBpbiBXZWJLaXQgY29k
ZSB3aXRoIGEgZm9sbG93IHVwIHBhdGNoLgorCisgICAgICAgIEhlcmUgaXMgYW4gZXhhbXBsZSBj
b25maWcgZmlsZToKKworICAgICAgICAgICAgbG9nRmlsZSA9ICIvdG1wL2pzY0xvZy4lcGlkLnR4
dCIKKworICAgICAgICAgICAganNjT3B0aW9ucyB7CisgICAgICAgICAgICAgICAgZHVtcE9wdGlv
bnMgPSAyCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJ1aWxkID09ICJEZWJ1ZyIgewor
ICAgICAgICAgICAgICAgIGpzY09wdGlvbnMgeworICAgICAgICAgICAgICAgICAgICB1c2VDb25j
dXJyZW50SklUID0gZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgZHVtcERpc2Fzc2VtYmx5ID0g
dHJ1ZQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnVp
bGQgPT0gIlJlbGVhc2UiICYmIHByb2Nlc3NOYW1lID09ICJqc2MiIHsKKyAgICAgICAgICAgICAg
ICBqc2NPcHRpb25zIHsKKyAgICAgICAgICAgICAgICAgICAgYXN5bmNEaXNhc3NlbWJseSA9IHRy
dWUKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgRWxpbWluYXRl
ZCB0aGUgcHJpb3Igb3B0aW9ucyBmaWxlIGNvZGUuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIGpzYy5jcHA6CisgICAgICAgIChqc2NtYWluKToKKyAgICAgICAgKiBydW50aW1l
L0NvbmZpZ0ZpbGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6
OkNvbmZpZ0ZpbGVTY2FubmVyKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnN0
YXJ0KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmxpbmVOdW1iZXIpOgorICAg
ICAgICAoSlNDOjpDb25maWdGaWxlU2Nhbm5lcjo6Y3VycmVudEJ1ZmZlcik6CisgICAgICAgIChK
U0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjphdEZpbGVFbmQpOgorICAgICAgICAoSlNDOjpDb25maWdG
aWxlU2Nhbm5lcjo6dHJ5Q29uc3VtZSk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVy
Ojp0cnlDb25zdW1lU3RyaW5nKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OnRy
eUNvbnN1bWVVcHRvKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZVNjYW5uZXI6OmZpbGxCdWZm
ZXJJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkNvbmZpZ0ZpbGVTY2FubmVyOjpmaWxsQnVmZmVy
KToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6Q29uZmlnRmlsZSk6CisgICAgICAgIChKU0M6
OkNvbmZpZ0ZpbGU6OnNldFByb2Nlc3NOYW1lKToKKyAgICAgICAgKEpTQzo6Q29uZmlnRmlsZTo6
c2V0UGFyZW50UHJvY2Vzc05hbWUpOgorICAgICAgICAoSlNDOjpDb25maWdGaWxlOjpwYXJzZSk6
CisgICAgICAgICogcnVudGltZS9Db25maWdGaWxlLmg6IEFkZGVkLgorICAgICAgICAqIHJ1bnRp
bWUvT3B0aW9ucy5jcHA6CisgICAgICAgIChKU0M6Ok9wdGlvbnM6OmluaXRpYWxpemUpOgorICAg
ICAgICAoSlNDOjpPcHRpb25zOjpzZXRPcHRpb25zKToKKyAgICAgICAgKiBydW50aW1lL09wdGlv
bnMuaDoKKwogMjAxNy0wMi0yNyAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIEJlZ2luIGVuYWJsaW5nIFdlYlJUQyBvbiA2NC1iaXQKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNjkw
LDYgKzY5MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgcnVudGltZS9Db21t
b25TbG93UGF0aHNFeGNlcHRpb25zLmNwcAogICAgIHJ1bnRpbWUvQ29tcGlsYXRpb25SZXN1bHQu
Y3BwCiAgICAgcnVudGltZS9Db21wbGV0aW9uLmNwcAorICAgIHJ1bnRpbWUvQ29uZmlnRmlsZS5j
cHAKICAgICBydW50aW1lL0NvbnNvbGVDbGllbnQuY3BwCiAgICAgcnVudGltZS9Db25zb2xlT2Jq
ZWN0LmNwcAogICAgIHJ1bnRpbWUvQ29uc3RhbnRNb2RlLmNwcApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2pzYy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pz
Yy5jcHAJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qc2MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiQnV0dGVyZmx5SW5s
aW5lcy5oIgogI2luY2x1ZGUgIkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkNvbXBsZXRpb24uaCIK
KyNpbmNsdWRlICJDb25maWdGaWxlLmgiCiAjaW5jbHVkZSAiRE9NSklUR2V0dGVyU2V0dGVyLmgi
CiAjaW5jbHVkZSAiRE9NSklUUGF0Y2hwb2ludC5oIgogI2luY2x1ZGUgIkRPTUpJVFBhdGNocG9p
bnRQYXJhbXMuaCIKQEAgLTM3NjIsNiArMzc2MywxMiBAQCBpbnQganNjbWFpbihpbnQgYXJnYywg
Y2hhcioqIGFyZ3YpCiAgICAgLy8gY29tZXMgZmlyc3QuCiAgICAgQ29tbWFuZExpbmUgb3B0aW9u
cyhhcmdjLCBhcmd2KTsKIAorICAgIGlmIChPcHRpb25zOjpjb25maWdGaWxlKCkpIHsKKyAgICAg
ICAgQ29uZmlnRmlsZSBjb25maWdGaWxlKE9wdGlvbnM6OmNvbmZpZ0ZpbGUoKSk7CisgICAgICAg
IGNvbmZpZ0ZpbGUuc2V0UHJvY2Vzc05hbWUoImpzYyIpOworICAgICAgICBjb25maWdGaWxlLnBh
cnNlKCk7CisgICAgfQorCiAgICAgLy8gSW5pdGlhbGl6ZSBKU0MgYmVmb3JlIGdldHRpbmcgVk0u
CiAgICAgV1RGOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogICAgIEpTQzo6aW5pdGlhbGl6ZVRo
cmVhZGluZygpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDIx
MzE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg2LDYgKzEzODYsOCBAQAogCQk2
NTVFQjI5QjEwQ0UyNTgxMDAxQTk5MEUgLyogTm9kZXNDb2RlZ2VuLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1NUVCMjlBMTBDRTI1ODEwMDFBOTkw
RSAvKiBOb2Rlc0NvZGVnZW4uY3BwICovOyB9OwogCQk2NTdDRjQ1ODE5QkY2NjYyMDA0QUNCRjIg
LyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU3Q0Y0NTYxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCAqLzsgfTsKIAkJ
NjU3Q0Y0NTkxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTdDRjQ1NzE5QkY2NjYyMDA0QUNCRjIgLyog
SlNDYWxsZWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OworCQk2NTg4MjRBRjFFNUNGREIwMDBGQjczNTkgLyogQ29uZmlnRmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4ODI0QUUxRTVDRkRCMDAwRkI3
MzU5IC8qIENvbmZpZ0ZpbGUuaCAqLzsgfTsKKwkJNjU4ODI0QjExRTVDRkRGNDAwRkI3MzU5IC8q
IENvbmZpZ0ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuY3BwICovOyB9Owog
CQk2NThEM0E1NjE5NjM4MjY4MDAzQzQ1RDYgLyogVk1FbnRyeVJlY29yZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjU4RDNBNTUxOTYzODI2ODAwM0M0
NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQk2NUI4MzkyRTFCQUNBRDM2MDA0NEU4MjQgLyogQ2FjaGVkUmVjb3Zl
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1Qjgz
OTJDMUJBQ0E5MkEwMDQ0RTgyNCAvKiBDYWNoZWRSZWNvdmVyeS5oICovOyB9OwogCQk2NUI4Mzky
RjFCQUNBRDZBMDA0NEU4MjQgLyogQ2FjaGVkUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVCODM5MkQxQkFDQTlEMzAwNDRFODI0IC8q
IENhY2hlZFJlY292ZXJ5LmNwcCAqLzsgfTsKQEAgLTM4NzAsNiArMzg3Miw4IEBACiAJCTY1N0NG
NDU2MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBKU0NhbGxlZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTY1N0NGNDU3MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU0NhbGxlZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk2NTg2MDE3NzE4NUE4RjVFMDAwMzBFRUUgLyogTWF4RnJhbWVFeHRlbnRGb3JTbG93UGF0
aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWF4RnJhbWVFeHRlbnRG
b3JTbG93UGF0aENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjU4ODI0QUUx
RTVDRkRCMDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ29uZmlnRmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk2NTg4
MjRCMDFFNUNGREY0MDBGQjczNTkgLyogQ29uZmlnRmlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb25maWdGaWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNjU4RDNBNTUxOTYzODI2ODAwM0M0NUQ2IC8qIFZNRW50cnlSZWNvcmQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5nID0gMDsgcGF0aCA9IFZNRW50cnlSZWNv
cmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgeGNMYW5ndWFnZVNwZWNpZmljYXRpb25JZGVu
dGlmaWVyID0geGNvZGUubGFuZy5vYmpjcHA7IH07CiAJCTY1OTg3RjJDMTY3RkU4NEIwMDNDMkY4
RCAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaDsgcGF0aCA9IGRmZy9ERkdPU1JF
eGl0Q29tcGlsYXRpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTY1OTg3
RjJGMTY4MjhBN0UwMDNDMkY4RCAvKiBVbnVzZWRQb2ludGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFVudXNlZFBvaW50ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTYzNTQsNiArNjM1OCw4IEBACiAJCQkJQTdFNUEzQTYxNzk3NDMyRDAwRTg5M0MwIC8q
IENvbXBpbGF0aW9uUmVzdWx0LmggKi8sCiAJCQkJOTY5QTA5MjIwRUQxRTA5QzAwRjFGNjgxIC8q
IENvbXBsZXRpb24uY3BwICovLAogCQkJCUY1QkIyQkM1MDMwRjc3MjEwMUZDRkUxRCAvKiBDb21w
bGV0aW9uLmggKi8sCisJCQkJNjU4ODI0QjAxRTVDRkRGNDAwRkI3MzU5IC8qIENvbmZpZ0ZpbGUu
Y3BwICovLAorCQkJCTY1ODgyNEFFMUU1Q0ZEQjAwMEZCNzM1OSAvKiBDb25maWdGaWxlLmggKi8s
CiAJCQkJMEZEQjJDRTkxNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCAqLywK
IAkJCQlBNUI2QTc0QzE4QzZEQkE2MDBGMTFFOTEgLyogQ29uc29sZUNsaWVudC5jcHAgKi8sCiAJ
CQkJQTUzQ0UwODkxOEJDMjFDMzAwQkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCAqLywKQEAgLTgz
NjQsNiArODM3MCw3IEBACiAJCQkJQTdEODlDRkUxN0EwQjhDQzAwNzczQUQ4IC8qIERGR09TUkF2
YWlsYWJpbGl0eUFuYWx5c2lzUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTU3MTQx
REFGMTAwMDE3OUM5NCAvKiBERkdPU1JFbnRyeS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEz
MjYxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR09TUkVudHJ5cG9pbnRDcmVhdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKKwkJCQk2NTg4MjRBRjFFNUNGREIwMDBGQjczNTkgLyogQ29uZmlnRmlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4
aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdP
U1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURC
IC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtMTAzNzcs
NiArMTAzODQsNyBAQAogCQkJCTE0MEI3RDFEMERDNjlBRjcwMDlDNDJCOCAvKiBKU0xleGljYWxF
bnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3NTEwN0VDMTNFMDAxM0U3
QjIgLyogSlNMb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUQ3MDlCMTZERTk5RjQwMEZD
QTZCQyAvKiBKU01hbmFnZWRWYWx1ZS5tbSBpbiBTb3VyY2VzICovLAorCQkJCTY1ODgyNEIxMUU1
Q0ZERjQwMEZCNzM1OSAvKiBDb25maWdGaWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzQxMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRE
RUY5NTE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlFM0QyMzlDODFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5jcHAg
aW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZp
Z0ZpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Nv
bmZpZ0ZpbGUuY3BwCShub25leGlzdGVudCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0NvbmZpZ0ZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkNvbmZpZ0ZpbGUuaCIKKworI2luY2x1ZGUgIk9wdGlvbnMuaCIKKyNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5o
PgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4K
KyNpbmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
QnVpbGRlci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworc3RhdGljIGNvbnN0IHNpemVfdCBzX3By
b2Nlc3NOYW1lTWF4ID0gMTI4OworI2lmIFBMQVRGT1JNKFdJTikKK3N0YXRpYyBjb25zdCBzaXpl
X3Qgc19tYXhQYXRoTGVuZ3RoID0gMjYwOyAvLyBXaW5kb3dzIHZhbHVlIGZvciAiTUFYX1BBVEgi
CisjZWxzZQorc3RhdGljIGNvbnN0IHNpemVfdCBzX21heFBhdGhMZW5ndGggPSBQQVRIX01BWDsK
KyNlbmRpZgorY2hhciBDb25maWdGaWxlOjpzX3Byb2Nlc3NOYW1lW3NfcHJvY2Vzc05hbWVNYXgg
KyAxXSA9IHsgMCB9OworY2hhciBDb25maWdGaWxlOjpzX3BhcmVudFByb2Nlc3NOYW1lW3NfcHJv
Y2Vzc05hbWVNYXggKyAxXSA9IHsgMCB9OworCitjbGFzcyBDb25maWdGaWxlU2Nhbm5lciB7Citw
dWJsaWM6CisgICAgQ29uZmlnRmlsZVNjYW5uZXIoY29uc3QgY2hhciogZmlsZW5hbWUpCisgICAg
ICAgIDogbV9maWxlbmFtZShmaWxlbmFtZSkKKyAgICAgICAgLCBtX2xpbmVOdW1iZXIoMCkKKyAg
ICB7CisgICAgICAgIG1fc3JjUHRyID0gJm1fYnVmZmVyWzBdOworICAgICAgICBtX2J1ZmZlckVu
ZCA9ICZtX2J1ZmZlclswXTsKKyAgICB9CisKKyAgICBib29sIHN0YXJ0KCkKKyAgICB7CisgICAg
ICAgIG1fZmlsZSA9IGZvcGVuKG1fZmlsZW5hbWUsICJyIik7CisgICAgICAgIGlmICghbV9maWxl
KSB7CisgICAgICAgICAgICBkYXRhTG9nRigiRmFpbGVkIHRvIG9wZW4gZmlsZSBKU0MgQ29uZmln
IGZpbGUgJyVzJy5cbiIsIG1fZmlsZW5hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdW5zaWduZWQg
bGluZU51bWJlcigpCisgICAgeworICAgICAgICByZXR1cm4gbV9saW5lTnVtYmVyOworICAgIH0K
KworICAgIGNvbnN0IGNoYXIqIGN1cnJlbnRCdWZmZXIoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X3NyY1B0ciB8fCBtX3NyY1B0ciA9PSBtX2J1ZmZlckVuZCkKKyAgICAgICAgICAgIHJldHVybiAi
IjsKKworICAgICAgICByZXR1cm4gbV9zcmNQdHI7CisgICAgfQorCisgICAgYm9vbCBhdEZpbGVF
bmQoKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBi
b29sIHRyeUNvbnN1bWUoY2hhciBjKQorICAgIHsKKyAgICAgICAgaWYgKCFmaWxsQnVmZmVySWZO
ZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoYyA9PSAq
bV9zcmNQdHIpIHsKKyAgICAgICAgICAgIG1fc3JjUHRyKys7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZSA8c2l6ZV90IGxlbmd0aD4KKyAgICBib29sIHRyeUNvbnN1bWUoY29uc3QgY2hhciAo
JnRva2VuKSBbbGVuZ3RoXSkKKyAgICB7CisgICAgICAgIGlmICghZmlsbEJ1ZmZlcklmTmVlZGVk
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc2l6ZV90IHRva2VuTGVu
Z3RoID0gbGVuZ3RoIC0gMTsKKyAgICAgICAgaWYgKCFzdHJuY21wKG1fc3JjUHRyLCB0b2tlbiwg
dG9rZW5MZW5ndGgpKSB7CisgICAgICAgICAgICBtX3NyY1B0ciArPSB0b2tlbkxlbmd0aDsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGNoYXIqIHRyeUNvbnN1bWVTdHJpbmcoKQorICAgIHsKKyAgICAgICAg
aWYgKCFmaWxsQnVmZmVySWZOZWVkZWQoKSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgICAgIGlmICgqbV9zcmNQdHIgIT0gJyInKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisKKyAgICAgICAgY2hhciogc3RyaW5nU3RhcnQgPSArK21fc3JjUHRyOworCisgICAgICAg
IGNoYXIqIHN0cmluZ0VuZCA9IHN0cmNocihtX3NyY1B0ciwgJyInKTsKKyAgICAgICAgaWYgKHN0
cmluZ0VuZCkgeworICAgICAgICAgICAgKnN0cmluZ0VuZCA9ICdcMCc7CisgICAgICAgICAgICBt
X3NyY1B0ciA9IHN0cmluZ0VuZCArIDE7CisgICAgICAgICAgICByZXR1cm4gc3RyaW5nU3RhcnQ7
CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICBjaGFy
KiB0cnlDb25zdW1lVXB0byhib29sJiBmb3VuZENoYXIsIGNoYXIgYykKKyAgICB7CisgICAgICAg
IGlmICghZmlsbEJ1ZmZlcklmTmVlZGVkKCkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgICAgICBjaGFyKiBzdGFydCA9IG1fc3JjUHRyOworICAgICAgICBmb3VuZENoYXIgPSBm
YWxzZTsKKworICAgICAgICBjaGFyKiBjUG9zaXRpb24gPSBzdHJjaHIobV9zcmNQdHIsIGMpOwor
ICAgICAgICBpZiAoY1Bvc2l0aW9uKSB7CisgICAgICAgICAgICAqY1Bvc2l0aW9uID0gJ1wwJzsK
KyAgICAgICAgICAgIG1fc3JjUHRyID0gY1Bvc2l0aW9uICsgMTsKKyAgICAgICAgICAgIGZvdW5k
Q2hhciA9IHRydWU7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9zcmNQdHIgPSBtX2J1
ZmZlckVuZDsKKworICAgICAgICByZXR1cm4gc3RhcnQ7CisgICAgfQorCitwcml2YXRlOgorICAg
IGJvb2wgZmlsbEJ1ZmZlcklmTmVlZGVkKCkKKyAgICB7CisgICAgICAgIGlmICghbV9zcmNQdHIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIHdoaWxlIChtX3NyY1B0ciAhPSBtX2J1ZmZlckVuZCAmJiBpc0FTQ0lJU3BhY2Uo
Km1fc3JjUHRyKSkKKyAgICAgICAgICAgICAgICBtX3NyY1B0cisrOworCisgICAgICAgICAgICBp
ZiAobV9zcmNQdHIgIT0gbV9idWZmZXJFbmQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgICAgIGlmICghZmlsbEJ1ZmZlcigpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
ZmlsbEJ1ZmZlcigpCisgICAgeworICAgICAgICBkbyB7CisgICAgICAgICAgICBtX3NyY1B0ciA9
IGZnZXRzKG1fYnVmZmVyLCBzaXplb2YobV9idWZmZXIpLCBtX2ZpbGUpOworICAgICAgICAgICAg
aWYgKCFtX3NyY1B0cikgeworICAgICAgICAgICAgICAgIGZjbG9zZShtX2ZpbGUpOworICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbV9s
aW5lTnVtYmVyKys7CisKKyAgICAgICAgICAgIG1fYnVmZmVyRW5kID0gc3RyY2hyKG1fc3JjUHRy
LCAnIycpOworCisgICAgICAgICAgICBpZiAobV9idWZmZXJFbmQpCisgICAgICAgICAgICAgICAg
Km1fYnVmZmVyRW5kID0gJ1wwJzsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAg
IG1fYnVmZmVyRW5kID0gbV9zcmNQdHIgKyBzdHJsZW4obV9zcmNQdHIpOworICAgICAgICAgICAg
ICAgIGlmIChtX2J1ZmZlckVuZCA+IG1fc3JjUHRyICYmIG1fYnVmZmVyRW5kWy0xXSA9PSAnXG4n
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fYnVmZmVyRW5kLS07CisgICAgICAgICAgICAgICAg
ICAgICptX2J1ZmZlckVuZCA9ICdcMCc7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9IHdoaWxlIChtX2J1ZmZlckVuZCA9PSBtX3NyY1B0cik7CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgY2hhciogbV9maWxlbmFtZTsKKyAgICB1
bnNpZ25lZCBtX2xpbmVOdW1iZXI7CisgICAgRklMRSogbV9maWxlOworICAgIGNoYXIgbV9idWZm
ZXJbQlVGU0laXTsKKyAgICBjaGFyKiBtX3NyY1B0cjsKKyAgICBjaGFyKiBtX2J1ZmZlckVuZDsK
K307CisKK0NvbmZpZ0ZpbGU6OkNvbmZpZ0ZpbGUoY29uc3QgY2hhciogZmlsZW5hbWUpCisgICAg
OiBtX2ZpbGVuYW1lKGZpbGVuYW1lKQoreworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnNldFByb2Nl
c3NOYW1lKGNvbnN0IGNoYXIqIHByb2Nlc3NOYW1lKQoreworICAgIHN0cm5jcHkoc19wcm9jZXNz
TmFtZSwgcHJvY2Vzc05hbWUsIHNfcHJvY2Vzc05hbWVNYXgpOworfQorCit2b2lkIENvbmZpZ0Zp
bGU6OnNldFBhcmVudFByb2Nlc3NOYW1lKGNvbnN0IGNoYXIqIHBhcmVudFByb2Nlc3NOYW1lKQor
eworICAgIHN0cm5jcHkoc19wYXJlbnRQcm9jZXNzTmFtZSwgcGFyZW50UHJvY2Vzc05hbWUsIHNf
cHJvY2Vzc05hbWVNYXgpOworfQorCit2b2lkIENvbmZpZ0ZpbGU6OnBhcnNlKCkKK3sKKyAgICBl
bnVtIFN0YXRlbWVudE5lc3RpbmcgeyBUb3BMZXZlbFN0YXRtZW50LCBOZXN0ZWRTdGF0ZW1lbnQs
IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhIH07CisgICAgZW51bSBQYXJzZVJlc3VsdCB7
IFBhcnNlT0ssIFBhcnNlRXJyb3IsIE5lc3RlZFN0YXRlbWVudERvbmUgfTsKKworICAgIENvbmZp
Z0ZpbGVTY2FubmVyIHNjYW5uZXIobV9maWxlbmFtZSk7CisKKyAgICBpZiAoIXNjYW5uZXIuc3Rh
cnQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2hhciBsb2dQYXRobmFtZVtzX21heFBhdGhM
ZW5ndGggKyAxXSA9IHsgMCB9OworCisgICAgU3RyaW5nQnVpbGRlciBqc2NPcHRpb25zQnVpbGRl
cjsKKworICAgIGF1dG8gcGFyc2VMb2dGaWxlID0gWyZdKFN0YXRlbWVudE5lc3Rpbmcgc3RhdGVt
ZW50TmVzdGluZykgeworICAgICAgICBjaGFyKiBmaWxlbmFtZSA9IG51bGxwdHI7CisgICAgICAg
IGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJz0nKSAmJiAoZmlsZW5hbWUgPSBzY2FubmVyLnRyeUNv
bnN1bWVTdHJpbmcoKSkpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nICE9IE5l
c3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlhKQorICAgICAgICAgICAgICAgIHN0cm5jcHkobG9n
UGF0aG5hbWUsIGZpbGVuYW1lLCBzX21heFBhdGhMZW5ndGgpOworCisgICAgICAgICAgICByZXR1
cm4gUGFyc2VPSzsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworICAg
IH07CisKKyAgICBhdXRvIHBhcnNlSlNDT3B0aW9ucyA9IFsmXShTdGF0ZW1lbnROZXN0aW5nIHN0
YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgneycpKSB7
CisgICAgICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisKKyAgICAgICAgICAgIGJvb2wg
Zm91bmRDbG9zaW5nQnJhY2UgPSBmYWxzZTsKKyAgICAgICAgICAgIGNoYXIqIGN1cnJlbnRMaW5l
ID0gbnVsbHB0cjsKKworICAgICAgICAgICAgd2hpbGUgKChjdXJyZW50TGluZSA9IHNjYW5uZXIu
dHJ5Q29uc3VtZVVwdG8oZm91bmRDbG9zaW5nQnJhY2UsICd9JykpKSB7CisgICAgICAgICAgICAg
ICAgY2hhciogcCA9IGN1cnJlbnRMaW5lOworCisgICAgICAgICAgICAgICAgZG8geworICAgICAg
ICAgICAgICAgICAgICBpZiAoZm91bmRDbG9zaW5nQnJhY2UgJiYgISpwKQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2hhciogb3B0aW9uTmFt
ZVN0YXJ0ID0gcDsKKworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKnAgJiYgIWlzQVNDSUlT
cGFjZSgqcCkgJiYgKnAgIT0gJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworCisg
ICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG9wdGlvbk5hbWVTdGFydCwgcCAtIG9w
dGlvbk5hbWVTdGFydCk7CisKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmIGlzQVND
SUlTcGFjZSgqcCkgJiYgKnAgIT0gJz0nKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOwor
CisgICAgICAgICAgICAgICAgICAgIGlmICghKnApCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gUGFyc2VFcnJvcjsKKyAgICAgICAgICAgICAgICAgICAgcCsrOyAvLyBBZHZhbmNlIHBh
c3QgdGhlICc9JworCisgICAgICAgICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCc9Jyk7CisK
KyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmIGlzQVNDSUlTcGFjZSgqcCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBwKys7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCEqcCkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworCisgICAgICAgICAg
ICAgICAgICAgIGNoYXIqIG9wdGlvblZhbHVlU3RhcnQgPSBwOworCisgICAgICAgICAgICAgICAg
ICAgIHdoaWxlICgqcCAmJiAhaXNBU0NJSVNwYWNlKCpwKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHArKzsKKworICAgICAgICAgICAgICAgICAgICBidWlsZGVyLmFwcGVuZChvcHRpb25WYWx1
ZVN0YXJ0LCBwIC0gb3B0aW9uVmFsdWVTdGFydCk7CisgICAgICAgICAgICAgICAgICAgIGJ1aWxk
ZXIuYXBwZW5kKCdcbicpOworCisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqcCAmJiBpc0FT
Q0lJU3BhY2UoKnApKQorICAgICAgICAgICAgICAgICAgICAgICAgcCsrOworICAgICAgICAgICAg
ICAgIH0gd2hpbGUgKCpwKTsKKworICAgICAgICAgICAgICAgIGlmIChmb3VuZENsb3NpbmdCcmFj
ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nICE9IE5lc3RlZFN0YXRlbWVudEZhaWxlZENyaXRlcmlh
KQorICAgICAgICAgICAgICAgIGpzY09wdGlvbnNCdWlsZGVyLmFwcGVuZChidWlsZGVyKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIFBhcnNlT0s7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
UGFyc2VFcnJvcjsKKyAgICB9OworCisgICAgYXV0byBwYXJzZU5lc3RlZFN0YXRlbWVudCA9IFsm
XShTdGF0ZW1lbnROZXN0aW5nIHN0YXRlbWVudE5lc3RpbmcpIHsKKyAgICAgICAgaWYgKHNjYW5u
ZXIudHJ5Q29uc3VtZSgianNjT3B0aW9ucyIpKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlSlND
T3B0aW9ucyhzdGF0ZW1lbnROZXN0aW5nKTsKKworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25z
dW1lKCJsb2dGaWxlIikpCisgICAgICAgICAgICByZXR1cm4gcGFyc2VMb2dGaWxlKHN0YXRlbWVu
dE5lc3RpbmcpOworCisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoJ30nKSkKKyAgICAg
ICAgICAgIHJldHVybiBOZXN0ZWRTdGF0ZW1lbnREb25lOworCisgICAgICAgIHJldHVybiBQYXJz
ZUVycm9yOworICAgIH07CisKKyAgICBhdXRvIHBhcnNlUHJlZGljYXRlID0gWyZdKGJvb2wmIHBy
ZWRpY2F0ZU1hdGNoZXMsIGNvbnN0IGNoYXIqIG1hdGNoVmFsdWUpIHsKKyAgICAgICAgY2hhciog
cHJlZGljYXRlVmFsdWUgPSBudWxscHRyOworICAgICAgICBpZiAoc2Nhbm5lci50cnlDb25zdW1l
KCI9PSIpCisgICAgICAgICAgICAmJiAocHJlZGljYXRlVmFsdWUgPSBzY2FubmVyLnRyeUNvbnN1
bWVTdHJpbmcoKSkgJiYgbWF0Y2hWYWx1ZSkgeworICAgICAgICAgICAgICAgIHByZWRpY2F0ZU1h
dGNoZXMgPSAhc3RyY21wKHByZWRpY2F0ZVZhbHVlLCBtYXRjaFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9OworCisgICAgYXV0byBwYXJzZUNvbmRpdGlvbmFsQmxvY2sgPSBbJl0oU3RhdGVtZW50TmVz
dGluZyBzdGF0ZW1lbnROZXN0aW5nKSB7CisgICAgICAgIGlmIChzdGF0ZW1lbnROZXN0aW5nID09
IE5lc3RlZFN0YXRlbWVudCkgeworICAgICAgICAgICAgU3RhdGVtZW50TmVzdGluZyBzdWJOZXN0
aW5nID0gTmVzdGVkU3RhdGVtZW50OworCisgICAgICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgICAgIGJvb2wgcHJlZGljYXRlTWF0Y2hlczsKKyAgICAgICAgICAgICAgICBjb25z
dCBjaGFyKiBhY3R1YWxWYWx1ZSA9IG51bGxwdHI7CisKKyAgICAgICAgICAgICAgICBpZiAoc2Nh
bm5lci50cnlDb25zdW1lKCJwcm9jZXNzTmFtZSIpKQorICAgICAgICAgICAgICAgICAgICBhY3R1
YWxWYWx1ZSA9IHNfcHJvY2Vzc05hbWU7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2Nhbm5l
ci50cnlDb25zdW1lKCJwYXJlbnRQcm9jZXNzTmFtZSIpKQorICAgICAgICAgICAgICAgICAgICBh
Y3R1YWxWYWx1ZSA9IHNfcGFyZW50UHJvY2Vzc05hbWU7CisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoc2Nhbm5lci50cnlDb25zdW1lKCJidWlsZCIpKQorI2lmbmRlZiBOREVCVUcKKyAgICAgICAg
ICAgICAgICAgICAgYWN0dWFsVmFsdWUgPSAiRGVidWciOworI2Vsc2UKKyAgICAgICAgICAgICAg
ICAgICAgYWN0dWFsVmFsdWUgPSAiUmVsZWFzZSI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZUVycm9yOworCisgICAgICAgICAg
ICAgICAgaWYgKHBhcnNlUHJlZGljYXRlKHByZWRpY2F0ZU1hdGNoZXMsIGFjdHVhbFZhbHVlKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIXByZWRpY2F0ZU1hdGNoZXMpCisgICAgICAgICAg
ICAgICAgICAgICAgICBzdWJOZXN0aW5nID0gTmVzdGVkU3RhdGVtZW50RmFpbGVkQ3JpdGVyaWE7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFzY2FubmVyLnRyeUNvbnN1bWUoIiYmIikpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2Nhbm5lci50cnlDb25zdW1lKCd7JykpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7CisKKyAgICAgICAgICAgIFBhcnNlUmVzdWx0
IHBhcnNlUmVzdWx0ID0gUGFyc2VPSzsKKyAgICAgICAgICAgIHdoaWxlIChwYXJzZVJlc3VsdCA9
PSBQYXJzZU9LICYmICFzY2FubmVyLmF0RmlsZUVuZCgpKQorICAgICAgICAgICAgICAgIHBhcnNl
UmVzdWx0ID0gcGFyc2VOZXN0ZWRTdGF0ZW1lbnQoc3ViTmVzdGluZyk7CisKKyAgICAgICAgICAg
IGlmIChwYXJzZVJlc3VsdCA9PSBOZXN0ZWRTdGF0ZW1lbnREb25lKQorICAgICAgICAgICAgICAg
IHJldHVybiBQYXJzZU9LOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIFBhcnNlRXJyb3I7
CisgICAgfTsKKworICAgIGF1dG8gcGFyc2VTdGF0ZW1lbnQgPSBbJl0oU3RhdGVtZW50TmVzdGlu
ZyBzdGF0ZW1lbnROZXN0aW5nKSB7CisgICAgICAgIGlmIChzY2FubmVyLnRyeUNvbnN1bWUoImpz
Y09wdGlvbnMiKSkKKyAgICAgICAgICAgIHJldHVybiBwYXJzZUpTQ09wdGlvbnMoc3RhdGVtZW50
TmVzdGluZyk7CisKKyAgICAgICAgaWYgKHNjYW5uZXIudHJ5Q29uc3VtZSgibG9nRmlsZSIpKQor
ICAgICAgICAgICAgcmV0dXJuIHBhcnNlTG9nRmlsZShzdGF0ZW1lbnROZXN0aW5nKTsKKworICAg
ICAgICBpZiAoc3RhdGVtZW50TmVzdGluZyA9PSBUb3BMZXZlbFN0YXRtZW50KQorICAgICAgICAg
ICAgcmV0dXJuIHBhcnNlQ29uZGl0aW9uYWxCbG9jayhOZXN0ZWRTdGF0ZW1lbnQpOworCisgICAg
ICAgIHJldHVybiBQYXJzZUVycm9yOworICAgIH07CisKKyAgICBQYXJzZVJlc3VsdCBwYXJzZVJl
c3VsdCA9IFBhcnNlT0s7CisKKyAgICB3aGlsZSAocGFyc2VSZXN1bHQgPT0gUGFyc2VPSyAmJiAh
c2Nhbm5lci5hdEZpbGVFbmQoKSkKKyAgICAgICAgcGFyc2VSZXN1bHQgPSBwYXJzZVN0YXRlbWVu
dChUb3BMZXZlbFN0YXRtZW50KTsKKworICAgIGlmIChwYXJzZVJlc3VsdCA9PSBQYXJzZU9LKSB7
CisgICAgICAgIGlmIChzdHJsZW4obG9nUGF0aG5hbWUpKQorICAgICAgICAgICAgV1RGOjpzZXRE
YXRhRmlsZShsb2dQYXRobmFtZSk7CisKKyAgICAgICAgaWYgKCFqc2NPcHRpb25zQnVpbGRlci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIqIG9wdGlvbnNTdHIgPSBqc2NPcHRp
b25zQnVpbGRlci50b1N0cmluZygpLnV0ZjgoKS5kYXRhKCk7CisgICAgICAgICAgICBPcHRpb25z
OjpzZXRPcHRpb25zKG9wdGlvbnNTdHIpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAg
IFdURjo6ZGF0YUxvZ0YoIkVycm9yIGluIEpTQyBDb25maWcgZmlsZSBvbiBvciBuZWFyIGxpbmUg
JXUsIHBhcnNpbmcgJyVzJ1xuIiwgc2Nhbm5lci5saW5lTnVtYmVyKCksIHNjYW5uZXIuY3VycmVu
dEJ1ZmZlcigpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db25maWdGaWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29uZmlnRmlsZS5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbmZpZ0ZpbGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDb25maWdGaWxlIHsKK3B1
YmxpYzoKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb25maWdGaWxlKGNvbnN0IGNoYXIqKTsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHNldFByb2Nlc3NOYW1lKGNvbnN0IGNo
YXIqKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCBzZXRQYXJlbnRQcm9jZXNz
TmFtZShjb25zdCBjaGFyKik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBwYXJzZSgpOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyBjaGFyIHNfcHJvY2Vzc05hbWVbXTsKKyAgICBzdGF0aWMg
Y2hhciBzX3BhcmVudFByb2Nlc3NOYW1lW107CisKKyAgICBjb25zdCBjaGFyKiBtX2ZpbGVuYW1l
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9PcHRpb25zLmNwcAkocmV2aXNpb24gMjEzMTUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDkgKzUxLDYg
QEAKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogI2VuZGlmCiAKLSNkZWZpbmUgVVNF
X09QVElPTlNfRklMRSAwCi0jZGVmaW5lIE9QVElPTlNfRklMRU5BTUUgIi90bXAvanNjLm9wdGlv
bnMiCi0KIG5hbWVzcGFjZSBKU0MgewogCiBuYW1lc3BhY2UgewpAQCAtNDk2LDMxICs0OTMsNiBA
QCB2b2lkIE9wdGlvbnM6OmluaXRpYWxpemUoKQogICAgICAgICAgICAgICAgIDsgLy8gRGVjb25m
dXNlIGVkaXRvcnMgdGhhdCBkbyBhdXRvIGluZGVudGF0aW9uCiAjZW5kaWYKICAgICAKLSNpZiBV
U0UoT1BUSU9OU19GSUxFKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGNvbnN0IGNo
YXIqIGZpbGVuYW1lID0gT1BUSU9OU19GSUxFTkFNRTsKLSAgICAgICAgICAgICAgICBGSUxFKiBv
cHRpb25zRmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpOwotICAgICAgICAgICAgICAgIGlmICgh
b3B0aW9uc0ZpbGUpIHsKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBv
cGVuIGZpbGUgJXMuIERpZCB5b3UgYWRkIHRoZSBmaWxlLXJlYWQtZGF0YSBlbnRpdGxlbWVudCB0
byBXZWJQcm9jZXNzLnNiP1xuIiwgZmlsZW5hbWUpOwotICAgICAgICAgICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKLSAgICAgICAgICAgICAgICBjaGFyKiBsaW5lOwotICAg
ICAgICAgICAgICAgIGNoYXIgYnVmZmVyW0JVRlNJWl07Ci0gICAgICAgICAgICAgICAgd2hpbGUg
KChsaW5lID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgb3B0aW9uc0ZpbGUpKSkKLSAg
ICAgICAgICAgICAgICAgICAgYnVpbGRlci5hcHBlbmQoYnVmZmVyKTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBvcHRpb25zU3RyID0gYnVpbGRlci50b1N0
cmluZygpLnV0ZjgoKS5kYXRhKCk7Ci0gICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlNldHRpbmcg
b3B0aW9uczogJXNcbiIsIG9wdGlvbnNTdHIpOwotICAgICAgICAgICAgICAgIHNldE9wdGlvbnMo
b3B0aW9uc1N0cik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaW50IHJlc3Vs
dCA9IGZjbG9zZShvcHRpb25zRmlsZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKLSAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkZhaWxlZCB0byBjbG9zZSBmaWxlICVzOiAlc1xu
IiwgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICB9Ci0jZW5kaWYKLQog
ICAgICAgICAgICAgcmVjb21wdXRlRGVwZW5kZW50T3B0aW9ucygpOwogCiAgICAgICAgICAgICAv
LyBEbyByYW5nZSBjaGVja3Mgd2hlcmUgbmVlZGVkIGFuZCBtYWtlIGNvcnJlY3Rpb25zIHRvIHRo
ZSBvcHRpb25zOgpAQCAtNjI4LDcgKzYwMCwxMiBAQCBib29sIE9wdGlvbnM6OnNldE9wdGlvbnMo
Y29uc3QgY2hhciogb3B0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICByZWNvbXB1dGVEZXBlbmRl
bnRPcHRpb25zKCk7CisKICAgICBkdW1wT3B0aW9uc0lmTmVlZGVkKCk7CisKKyAgICBlbnN1cmVP
cHRpb25zQXJlQ29oZXJlbnQoKTsKKwogICAgIHJldHVybiBzdWNjZXNzOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAyMTMxNTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwMyw2ICsxMDMsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICNk
ZWZpbmUgSlNDX09QVElPTlModikgXAogICAgIHYoYm9vbCwgdmFsaWRhdGVPcHRpb25zLCBmYWxz
ZSwgTm9ybWFsLCAiY3Jhc2hlcyBpZiBtaXMtdHlwZWQgSlNDIG9wdGlvbnMgd2VyZSBwYXNzZWQg
dG8gdGhlIFZNIikgXAogICAgIHYodW5zaWduZWQsIGR1bXBPcHRpb25zLCAwLCBOb3JtYWwsICJk
dW1wcyBKU0Mgb3B0aW9ucyAoMCA9IE5vbmUsIDEgPSBPdmVycmlkZGVuIG9ubHksIDIgPSBBbGws
IDMgPSBWZXJib3NlKSIpIFwKKyAgICB2KG9wdGlvblN0cmluZywgY29uZmlnRmlsZSwgbnVsbHB0
ciwgTm9ybWFsLCAiZmlsZSB0byBjb25maWd1cmUgSlNDIG9wdGlvbnMgYW5kIGxvZ2dpbmcgbG9j
YXRpb24iKSBcCiAgICAgXAogICAgIHYoYm9vbCwgdXNlTExJbnQsICB0cnVlLCBOb3JtYWwsICJh
bGxvd3MgdGhlIExMSU5UIHRvIGJlIHVzZWQgaWYgdHJ1ZSIpIFwKICAgICB2KGJvb2wsIHVzZUpJ
VCwgICAgdHJ1ZSwgTm9ybWFsLCAiYWxsb3dzIHRoZSBiYXNlbGluZSBKSVQgdG8gYmUgdXNlZCBp
ZiB0cnVlIikgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTctMDItMjggIE1pY2hhZWwg
U2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgQWRkIGFiaWxpdHkgdG8gY29u
ZmlndXJlIEpTQyBvcHRpb25zIGZyb20gYSBmaWxlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjg5MTQKKworICAgICAgICBSZXZpZXdlZCBieSBGaWxp
cCBQaXpsby4KKworICAgICAgICBBZGRlZCB0aGUgYWJpbGl0eSB0byBzZXQgb3B0aW9ucyBhbmQg
RGF0YUxvZyBmaWxlIGxvY2F0aW9uIHZpYSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAgICAgICAg
VGhlIHBhdGhuYW1lIGNhbiBpbmNsdWRlIHRoZSBwcmludGYgc3R5bGUgIiVwaWQiLCB3aGljaCB3
aWxsIGJlIHJlcGxhY2VkIHdpdGggdGhlCisgICAgICAgIGN1cnJlbnQgcHJvY2VzcyBpZC4KKwor
ICAgICAgICAqIHd0Zi9EYXRhTG9nLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZUxvZ0Zp
bGVPbmNlKToKKyAgICAgICAgKFdURjo6c2V0RGF0YUZpbGUpOgorICAgICAgICAqIHd0Zi9EYXRh
TG9nLmg6CisKIDIwMTctMDItMjcgIEFuZHkgRXN0ZXMgIDxhZXN0ZXNAYXBwbGUuY29tPgogCiAg
ICAgICAgIFtpT1NdIEVuYWJsZSBmaWxlIHJlcGxhY2VtZW50CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9EYXRhTG9nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9EYXRhTG9nLmNwcAko
cmV2aXNpb24gMjEzMTUwKQorKysgU291cmNlL1dURi93dGYvRGF0YUxvZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDMwICs1MCwyMiBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotc3RhdGljIFBy
aW50U3RyZWFtKiBzX2ZpbGU7CitzdGF0aWMgY29uc3Qgc2l6ZV90IG1heFBhdGhMZW5ndGggPSAx
MDI0OwogCitzdGF0aWMgUHJpbnRTdHJlYW0qIHNfZmlsZTsKIHN0YXRpYyB1aW50NjRfdCBzX2Zp
bGVEYXRhWyhzaXplb2YoRmlsZVByaW50U3RyZWFtKSArIDcpIC8gOF07CiBzdGF0aWMgdWludDY0
X3Qgc19sb2NrZWRGaWxlRGF0YVsoc2l6ZW9mKExvY2tlZFByaW50U3RyZWFtKSArIDcpIC8gOF07
CiAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlT25jZSgpCiB7Ci0gICAgRmlsZVByaW50
U3RyZWFtKiBmaWxlID0gbnVsbHB0cjsKLSAgICAKLSNpZiBEQVRBX0xPR19UT19GSUxFCi0gICAg
Y29uc3QgbG9uZyBtYXhQYXRoTGVuZ3RoID0gMTAyNDsKLQotICAgIGNoYXIgZmlsZW5hbWVTdWZm
aXhbbWF4UGF0aExlbmd0aCArIDFdOworICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lID0gbnVsbHB0
cjsKIAotI2lmIFBMQVRGT1JNKFdJTikKLSAgICBfc25wcmludGYoZmlsZW5hbWVTdWZmaXgsIHNp
emVvZihmaWxlbmFtZVN1ZmZpeCksICIuJWQudHh0IiwgR2V0Q3VycmVudFByb2Nlc3NJZCgpKTsK
LSNlbHNlCi0gICAgc25wcmludGYoZmlsZW5hbWVTdWZmaXgsIHNpemVvZihmaWxlbmFtZVN1ZmZp
eCksICIuJWQudHh0IiwgZ2V0cGlkKCkpOwotI2VuZGlmCisgICAgaWYgKHNfZmlsZSkKKyAgICAg
ICAgcmV0dXJuOwogCisjaWYgREFUQV9MT0dfVE9fRklMRQogI2lmIERBVEFfTE9HX1RPX0RBUldJ
Tl9URU1QX0RJUgogICAgIGNoYXIgZmlsZW5hbWVCdWZmZXJbbWF4UGF0aExlbmd0aCArIDFdOwot
ICAgIHVuc2lnbmVkIHN1ZmZpeExlbmd0aCA9IHN0cmxlbihmaWxlbmFtZVN1ZmZpeCk7Ci0KICNp
ZiBkZWZpbmVkKERBVEFfTE9HX0ZJTEVOQU1FKQogICAgIGNoYXIqIGxvZ0Jhc2VuYW1lID0gc3Ry
cmNocihEQVRBX0xPR19GSUxFTkFNRSwgJy8nKTsKICAgICBpZiAoIWxvZ0Jhc2VuYW1lKQpAQCAt
ODIsMTMgKzc0LDExIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlT25jZSgpCiAgICAg
Y29uc3QgY2hhciogbG9nQmFzZW5hbWUgPSAiV1RGTG9nIjsKICNlbmRpZgogCi0gICAgY29uc3Qg
Y2hhciogZmlsZW5hbWUgPSBudWxscHRyOwotCiAgICAgYm9vbCBzdWNjZXNzID0gY29uZnN0cihf
Q1NfREFSV0lOX1VTRVJfVEVNUF9ESVIsIGZpbGVuYW1lQnVmZmVyLCBzaXplb2YoZmlsZW5hbWVC
dWZmZXIpKTsKICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAvLyBGSVhNRTogQXNzZXJ0IHRo
YXQgdGhlIHBhdGggZW5kcyB3aXRoIGEgc2xhc2ggaW5zdGVhZCBvZiBhZGRpbmcgYSBzbGFzaCBp
ZiBpdCBkb2VzIG5vdCBleGlzdAogICAgICAgICAvLyBvbmNlIDxyZGFyOi8vcHJvYmxlbS8yMzU3
OTA3Nz4gaXMgZml4ZWQgaW4gYWxsIGlPUyBTaW11bGF0b3IgdmVyc2lvbnMgdGhhdCB3ZSB1c2Uu
Ci0gICAgICAgIHNpemVfdCBsYXN0Q29tcG9uZW50TGVuZ3RoID0gc3RybGVuKGxvZ0Jhc2VuYW1l
KSArIHN1ZmZpeExlbmd0aDsKKyAgICAgICAgc2l6ZV90IGxhc3RDb21wb25lbnRMZW5ndGggPSBz
dHJsZW4obG9nQmFzZW5hbWUpICsgMjA7IC8vIE1vcmUgdGhhbiBlbm91Z2ggZm9yICIuPHBpZD4u
dHh0IgogICAgICAgICBzaXplX3QgZGlybmFtZUxlbmd0aCA9IHN0cmxlbihmaWxlbmFtZUJ1ZmZl
cik7CiAgICAgICAgIGJvb2wgc2hvdWxkQWRkUGF0aFNlcGFyYXRvciA9IGZpbGVuYW1lQnVmZmVy
W2Rpcm5hbWVMZW5ndGggLSAxXSAhPSAnLycgJiYgbG9nQmFzZW5hbWVbMF0gIT0gJy8nOwogICAg
ICAgICBpZiAobGFzdENvbXBvbmVudExlbmd0aCArIHNob3VsZEFkZFBhdGhTZXBhcmF0b3IgPD0g
c2l6ZW9mKGZpbGVuYW1lQnVmZmVyKSAtIGRpcm5hbWVMZW5ndGggLSAxKSB7CkBAIC05OSwzNiAr
ODksMjMgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZUxvZ0ZpbGVPbmNlKCkKICAgICAgICAgfQog
ICAgIH0KICNlbGlmIGRlZmluZWQoREFUQV9MT0dfRklMRU5BTUUpCi0gICAgY29uc3QgY2hhciog
ZmlsZW5hbWUgPSBEQVRBX0xPR19GSUxFTkFNRTsKKyAgICBmaWxlbmFtZSA9IERBVEFfTE9HX0ZJ
TEVOQU1FOwogI2Vsc2UKLSAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSA9IGdldGVudigiV1RGX0RB
VEFfTE9HX0ZJTEVOQU1FIik7CisgICAgZmlsZW5hbWUgPSBnZXRlbnYoIldURl9EQVRBX0xPR19G
SUxFTkFNRSIpOwogI2VuZGlmCiAgICAgY2hhciBhY3R1YWxGaWxlbmFtZVttYXhQYXRoTGVuZ3Ro
ICsgMV07CiAKLSAgICBpZiAoZmlsZW5hbWUpIHsKKyAgICBpZiAoZmlsZW5hbWUgJiYgIXN0cnN0
cihmaWxlbmFtZSwgIiVwaWQiKSkgewogI2lmIFBMQVRGT1JNKFdJTikKLSAgICAgICAgX3NucHJp
bnRmKGFjdHVhbEZpbGVuYW1lLCBzaXplb2YoYWN0dWFsRmlsZW5hbWUpLCAiJXMlcyIsIGZpbGVu
YW1lLCBmaWxlbmFtZVN1ZmZpeCk7CisgICAgICAgIF9zbnByaW50ZihhY3R1YWxGaWxlbmFtZSwg
c2l6ZW9mKGFjdHVhbEZpbGVuYW1lKSwgIiVzLiUlcGlkLnR4dCIsIGZpbGVuYW1lKTsKICNlbHNl
Ci0gICAgICAgIHNucHJpbnRmKGFjdHVhbEZpbGVuYW1lLCBzaXplb2YoYWN0dWFsRmlsZW5hbWUp
LCAiJXMlcyIsIGZpbGVuYW1lLCBmaWxlbmFtZVN1ZmZpeCk7CisgICAgICAgIHNucHJpbnRmKGFj
dHVhbEZpbGVuYW1lLCBzaXplb2YoYWN0dWFsRmlsZW5hbWUpLCAiJXMuJSVwaWQudHh0IiwgZmls
ZW5hbWUpOwogI2VuZGlmCi0gICAgICAgIAotICAgICAgICBmaWxlID0gRmlsZVByaW50U3RyZWFt
OjpvcGVuKGFjdHVhbEZpbGVuYW1lLCAidyIpLnJlbGVhc2UoKTsKLSAgICAgICAgaWYgKGZpbGUp
Ci0gICAgICAgICAgICBXVEZMb2dBbHdheXMoIioqKiBEYXRhTG9nIG91dHB1dCB0byBcIiVzXCIg
KioqXG4iLCBhY3R1YWxGaWxlbmFtZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIFdURkxv
Z0Fsd2F5cygiV2FybmluZzogQ291bGQgbm90IG9wZW4gRGF0YUxvZyBmaWxlICVzIGZvciB3cml0
aW5nLlxuIiwgYWN0dWFsRmlsZW5hbWUpOworICAgICAgICBmaWxlbmFtZSA9IGFjdHVhbEZpbGVu
YW1lOwogICAgIH0KICNlbmRpZiAvLyBEQVRBX0xPR19UT19GSUxFCi0gICAgCi0gICAgaWYgKCFm
aWxlKSB7Ci0gICAgICAgIC8vIFVzZSBwbGFjZW1lbnQgbmV3OyB0aGlzIG1ha2VzIGl0IGVhc2ll
ciB0byB1c2UgZGF0YUxvZygpIHRvIGRlYnVnCi0gICAgICAgIC8vIGZhc3RNYWxsb2MuCi0gICAg
ICAgIGZpbGUgPSBuZXcgKHNfZmlsZURhdGEpIEZpbGVQcmludFN0cmVhbShzdGRlcnIsIEZpbGVQ
cmludFN0cmVhbTo6Qm9ycm93KTsKLSAgICB9Ci0gICAgCi0gICAgc2V0dmJ1ZihmaWxlLT5maWxl
KCksIDAsIF9JT05CRiwgMCk7IC8vIFByZWZlciB1bmJ1ZmZlcmVkIG91dHB1dCwgc28gdGhhdCB3
ZSBnZXQgYSBmdWxsIGxvZyB1cG9uIGNyYXNoIG9yIGRlYWRsb2NrLgotICAgIAotICAgIHNfZmls
ZSA9IG5ldyAoc19sb2NrZWRGaWxlRGF0YSkgTG9ja2VkUHJpbnRTdHJlYW0oc3RkOjp1bmlxdWVf
cHRyPEZpbGVQcmludFN0cmVhbT4oZmlsZSkpOworCisgICAgc2V0RGF0YUZpbGUoZmlsZW5hbWUp
OwogfQogCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplTG9nRmlsZSgpCkBAIC0xNDEsNiArMTE4LDYw
IEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVMb2dGaWxlKCkKICAgICAgICAgfSk7CiB9CiAKK3Zv
aWQgc2V0RGF0YUZpbGUoY29uc3QgY2hhciogcGF0aCkKK3sKKyAgICBGaWxlUHJpbnRTdHJlYW0q
IGZpbGUgPSBudWxscHRyOworICAgIGNoYXIgZm9ybWF0dGVkUGF0aFttYXhQYXRoTGVuZ3RoICsg
MV07CisgICAgY29uc3QgY2hhciogcGF0aFRvT3BlbiA9IHBhdGg7CisKKyAgICBpZiAocGF0aCkg
eworICAgICAgICBjb25zdCBjaGFyKiBwaWRGb3JtYXQgPSBzdHJzdHIocGF0aCwgIiVwaWQiKTsK
KyAgICAgICAgaWYgKHBpZEZvcm1hdCkgeworICAgICAgICAgICAgc2l6ZV90IGxlYWRpbmdQYXRo
TGVuZ3RoID0gcGlkRm9ybWF0IC0gcGF0aDsKKyAgICAgICAgICAgIHNpemVfdCBwYXRoQ2hhcmFj
dGVyc0F2YWlsYWJsZSA9IHN0ZDo6bWluKG1heFBhdGhMZW5ndGgsIGxlYWRpbmdQYXRoTGVuZ3Ro
KTsKKyAgICAgICAgICAgIHN0cm5jcHkoZm9ybWF0dGVkUGF0aCwgcGF0aCwgcGF0aENoYXJhY3Rl
cnNBdmFpbGFibGUpOworICAgICAgICAgICAgY2hhciogbmV4dERlc3QgPSBmb3JtYXR0ZWRQYXRo
ICsgcGF0aENoYXJhY3RlcnNBdmFpbGFibGU7CisgICAgICAgICAgICBwYXRoQ2hhcmFjdGVyc0F2
YWlsYWJsZSA9IG1heFBhdGhMZW5ndGggLSBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZTsKKyAgICAg
ICAgICAgIGlmIChwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSkgeworICAgICAgICAgICAgICAgIGlu
dCBwaWRUZXh0TGVuZ3RoOworI2lmIFBMQVRGT1JNKFdJTikKKyAgICAgICAgICAgICAgICBwaWRU
ZXh0TGVuZ3RoID0gX3NucHJpbnRmKG5leHREZXN0LCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSwg
IiVkIiwgR2V0Q3VycmVudFByb2Nlc3NJZCgpKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgcGlk
VGV4dExlbmd0aCA9IHNucHJpbnRmKG5leHREZXN0LCBwYXRoQ2hhcmFjdGVyc0F2YWlsYWJsZSwg
IiVkIiwgZ2V0cGlkKCkpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHBpZFRleHRMZW5n
dGggPCAwIHx8IHN0YXRpY19jYXN0PHNpemVfdD4ocGlkVGV4dExlbmd0aCkgPj0gcGF0aENoYXJh
Y3RlcnNBdmFpbGFibGUpCisgICAgICAgICAgICAgICAgICAgIHBhdGhDaGFyYWN0ZXJzQXZhaWxh
YmxlID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgcGF0
aENoYXJhY3RlcnNBdmFpbGFibGUgLT0gc3RhdGljX2Nhc3Q8c2l6ZV90PihwaWRUZXh0TGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICAgICAgbmV4dERlc3QgKz0gcGlkVGV4dExlbmd0aDsKKyAgICAg
ICAgICAgICAgICAgICAgc3RybmNweShuZXh0RGVzdCwgcGlkRm9ybWF0ICsgNCwgcGF0aENoYXJh
Y3RlcnNBdmFpbGFibGUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvcm1hdHRlZFBhdGhbbWF4UGF0aExlbmd0aF0gPSAnXDAnOworICAgICAgICAgICAg
cGF0aFRvT3BlbiA9IGZvcm1hdHRlZFBhdGg7CisgICAgICAgIH0KKworICAgICAgICBmaWxlID0g
RmlsZVByaW50U3RyZWFtOjpvcGVuKHBhdGhUb09wZW4sICJ3IikucmVsZWFzZSgpOworICAgICAg
ICBpZiAoZmlsZSkKKyAgICAgICAgICAgIFdURkxvZ0Fsd2F5cygiKioqIERhdGFMb2cgb3V0cHV0
IHRvIFwiJXNcIiAqKipcbiIsIHBhdGhUb09wZW4pOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBXVEZMb2dBbHdheXMoIldhcm5pbmc6IENvdWxkIG5vdCBvcGVuIERhdGFMb2cgZmlsZSAlcyBm
b3Igd3JpdGluZy5cbiIsIHBhdGhUb09wZW4pOworICAgIH0KKworICAgIGlmICghZmlsZSkgewor
ICAgICAgICAvLyBVc2UgcGxhY2VtZW50IG5ldzsgdGhpcyBtYWtlcyBpdCBlYXNpZXIgdG8gdXNl
IGRhdGFMb2coKSB0byBkZWJ1ZworICAgICAgICAvLyBmYXN0TWFsbG9jLgorICAgICAgICBmaWxl
ID0gbmV3IChzX2ZpbGVEYXRhKSBGaWxlUHJpbnRTdHJlYW0oc3RkZXJyLCBGaWxlUHJpbnRTdHJl
YW06OkJvcnJvdyk7CisgICAgfQorCisgICAgc2V0dmJ1ZihmaWxlLT5maWxlKCksIDAsIF9JT05C
RiwgMCk7IC8vIFByZWZlciB1bmJ1ZmZlcmVkIG91dHB1dCwgc28gdGhhdCB3ZSBnZXQgYSBmdWxs
IGxvZyB1cG9uIGNyYXNoIG9yIGRlYWRsb2NrLgorCisgICAgaWYgKHNfZmlsZSkKKyAgICAgICAg
c19maWxlLT5mbHVzaCgpOworCisgICAgc19maWxlID0gbmV3IChzX2xvY2tlZEZpbGVEYXRhKSBM
b2NrZWRQcmludFN0cmVhbShzdGQ6OnVuaXF1ZV9wdHI8RmlsZVByaW50U3RyZWFtPihmaWxlKSk7
Cit9CisKIFByaW50U3RyZWFtJiBkYXRhRmlsZSgpCiB7CiAgICAgaW5pdGlhbGl6ZUxvZ0ZpbGUo
KTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0RhdGFMb2cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9EYXRhTG9nLmgJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9XVEYvd3RmL0Rh
dGFMb2cuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogbmFtZXNwYWNlIFdURiB7
CiAKIFdURl9FWFBPUlRfUFJJVkFURSBQcmludFN0cmVhbSYgZGF0YUZpbGUoKTsKK1dURl9FWFBP
UlRfUFJJVkFURSB2b2lkIHNldERhdGFGaWxlKGNvbnN0IGNoYXIqIHBhdGgpOwogCiBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBkYXRhTG9nRlYoY29uc3QgY2hhciogZm9ybWF0LCB2YV9saXN0KSBX
VEZfQVRUUklCVVRFX1BSSU5URigxLCAwKTsKIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRhdGFM
b2dGKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAyKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>