<?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>201754</bug_id>
          
          <creation_ts>2019-09-12 21:21:58 -0700</creation_ts>
          <short_desc>[LFC] FormattingContext::displayBoxForLayoutBox should be split into 2 functions</short_desc>
          <delta_ts>2019-09-13 08:42:36 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>koivisto</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1570496</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2019-09-12 21:21:58 -0700</bug_when>
    <thetext>1. const Display::Box FormattingContext::geometryForBox(); when only interested in the geometry like containing block&apos;s content box width
2. Display::Box FormattingState::displayBox() when computing the geometry for a particular layout box.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570497</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-12 21:22:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/55328753&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570502</commentid>
    <comment_count>2</comment_count>
      <attachid>378714</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-12 21:33:11 -0700</bug_when>
    <thetext>Created attachment 378714
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570556</commentid>
    <comment_count>3</comment_count>
      <attachid>378725</attachid>
    <who name="alan">zalan</who>
    <bug_when>2019-09-13 05:27:39 -0700</bug_when>
    <thetext>Created attachment 378725
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570588</commentid>
    <comment_count>4</comment_count>
      <attachid>378725</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-13 08:42:34 -0700</bug_when>
    <thetext>Comment on attachment 378725
Patch

Clearing flags on attachment: 378725

Committed r249834: &lt;https://trac.webkit.org/changeset/249834&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1570589</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-13 08:42:36 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378714</attachid>
            <date>2019-09-12 21:33:11 -0700</date>
            <delta_ts>2019-09-13 05:27:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201754-20190912213307.patch</filename>
            <type>text/plain</type>
            <size>102293</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk5MjgwYWU0MzJmM2Mw
MjA3N2FjZjU4YzRmNDllMDNmMTJiMzFjYi4uZWRmZjk2YmRjMjZlMjQ3NTRlYTBlMWFlZmRmYTQz
NTA0NzMwYThjOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMiBAQAorMjAxOS0wOS0xMiAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIEZvcm1hdHRpbmdD
b250ZXh0OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94IHNob3VsZCBiZSBzcGxpdCBpbnRvIDIgZnVu
Y3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDE3NTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1MzI4NzUzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZvcm1hdHRpbmdDb250ZXh0OjpnZW9t
ZXRyeUZvckJveCgpIHJldHVybnMgYSBjb25zdCBEaXNwbGF5OjpCb3guIFVzZSB0aGlzIGZ1bmN0
aW9uIHRvIGFjY2VzcworICAgICAgICBhbHJlYWR5IGNvbXB1dGVkIGdlb21ldHJ5IHN1Y2ggYXMg
dGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveCB3aWR0aCB3aGlsZSBjb21wdXRpbmcK
KyAgICAgICAgY2hpbGQgYmxvY2sgbGV2ZWwgYm94J3MgYXV0byB3aWR0aC4gVGhpcyBmdW5jdGlv
biBjYW4gZXNjYXBlIHRoZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dCBpbiBjZXJ0YWluIGNh
c2VzIGFuZAorICAgICAgICByZWFkIGFuY2VzdG9yIGdlb21ldHJ5LiAKKyAgICAgICAgRm9ybWF0
dGluZ1N0YXRlOjpkaXNwbGF5Qm94KCkgcmV0dXJucyBhIG5vbi1jb25zdCB2ZXJzaW9uIG9mIHRo
ZSBEaXNwbGF5OjpCb3guIFVzZSB0aGlzIGZ1bmN0aW9uIHRvCisgICAgICAgIGdldCB0aGUgZGlz
cGxheSBib3ggb2YgYSBwYXJ0aWN1bGFyIGxheW91dCBib3ggdG8gc2V0IGNvbXB1dGVkIHZhbHVl
cy4gVGhpcyBjYWxsIHNob3VsZCBuZXZlciBlc2NhcGUgdGhlCisgICAgICAgIGN1cnJlbnQgZm9y
bWF0dGluZyBjb250ZXh0IChhcyBubyBvbmUgc2hvdWxkIG11dGF0ZSBhbmNlc3RvciBib3hlcyku
CisKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250
YWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyk6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6Om1hcEhvcml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bWFwVG9wVG9Gb3Jt
YXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6bWFwTGVmdFRvRm9ybWF0dGluZ0NvbnRleHRSb290IGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Om1hcFJpZ2h0VG9Gb3Jt
YXR0aW5nQ29udGV4dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6Z2VvbWV0cnlGb3JCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6dmFsaWRhdGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0
ZXJMYXlvdXQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29u
dGV4dDo6ZGlzcGxheUJveEZvckxheW91dEJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICog
bGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZv
cm1hdHRpbmdDb250ZXh0OjpoYXNEaXNwbGF5Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1
ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6Y29udGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3Rh
dGljVmVydGljYWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hv
cml6b250YWxQb3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05v
blJlcGxhY2VkVmVydGljYWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jp
em9udGFsR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29u
dGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6
b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0cnkgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2Vk
SGVpZ2h0QW5kTWFyZ2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQgY29u
c3QpOgorICAgICAgICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmhlaWdodFZh
bHVlT2ZOZWFyZXN0Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KToKKyAgICAgICAgKiBs
YXlvdXQvRm9ybWF0dGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9y
bWF0dGluZ1N0YXRlOjpkaXNwbGF5Qm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0
dGluZ1N0YXRlLmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1h
dHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6dXNlZEF2YWlsYWJsZVdpZHRoRm9yRmxvYXRBdm9pZGVyIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZs
b3dQb3NpdGlvbmVkQ2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNI
b3Jpem9udGFsUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0
ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ1Bvc2l0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBv
c2l0aW9uVG9Bdm9pZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4p
OgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2ZXJ0
aWNhbFBvc2l0aW9uV2l0aE1hcmdpbiBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9y
bWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93
Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFu
ZE1hcmdpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0
YXRpY0hvcml6b250YWxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4p
OgorICAgICAgICAqIGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4
dFF1aXJrcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KToKKyAgICAgICAgKiBsYXlvdXQv
YmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6aGFzQ2xl
YXJhbmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRN
YXJnaW5CZWZvcmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1h
dHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBy
ZXZpb3VzU2libGluZ01hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNv
bGxhcHNlc1dpdGhGaXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6
Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNl
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGls
ZE1hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlv
dXNTaWJsaW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6ZXN0aW1hdGVkTWFyZ2luQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZVBvc2l0aXZlTmVn
YXRpdmVNYXJnaW5WYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYXNDbGVhcmFu
Y2UpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0Ojpwb3NpdGlvbkZv
ckZsb2F0IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0
Ojp2ZXJ0aWNhbFBvc2l0aW9uV2l0aENsZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZsb2F0aW5nQ29udGV4dDo6YWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0ZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6Om1hcFRv
RmxvYXRpbmdTdGF0ZVJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9h
dGluZ0NvbnRleHQ6Om1hcFRvcFRvRmxvYXRpbmdTdGF0ZVJvb3QgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6Om1hcFBvaW50RnJvbUZvcm1hdHRpbmdD
b250ZXh0Um9vdFRvRmxvYXRpbmdTdGF0ZVJvb3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJp
bnNpY1dpZHRoQ29uc3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JHZW5l
cmljSW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9ySW5saW5lQ29udGFpbmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVJbnRyaW5zaWNXaWR0aEZvckZvcm1hdHRpbmdSb290KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2lu
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250
ZXh0Um9vdCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0
dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4g
Y29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlubGlu
ZUl0ZW1XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OnBsYWNl
SW5saW5lSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpJbmxpbmVMYXlvdXQ6OmxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNvbXB1dGVkSW50
cmluc2ljV2lkdGggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0OjpjcmVhdGVEaXNwbGF5UnVucyBjb25zdCk6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRR
dWlya3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyBjb25zdCk6CisgICAgICAg
ICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OmlzSW5saW5lQ29udGFpbmVyQ29uc2lkZXJlZEVtcHR5KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZTo6aXNWaXN1YWxseUVtcHR5IGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpMaW5lOjphcHBlbmROb25SZXBsYWNlZElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkxpbmU6OmlubGluZUl0ZW1Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBs
YXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJs
ZUNlbGxCb3gpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250
ZXh0Ojpwb3NpdGlvblRhYmxlQ2VsbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJs
ZUZvcm1hdHRpbmdDb250ZXh0OjpzZXRDb21wdXRlZEdlb21ldHJ5Rm9yUm93cyk6CisgICAgICAg
IChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldENvbXB1dGVkR2Vv
bWV0cnlGb3JTZWN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCk6CisKIDIwMTktMDktMTEgIFRydWl0dCBT
YXZlbGwgIDx0c2F2ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5n
IG91dCByMjQ5NzUzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5j
cHAKaW5kZXggMGQ0YTc4YmRkN2UzZTU5YmY2NDgzMTRkYmI1M2RkN2I1ZjQ5NWM0Zi4uZDk1OWYz
NTFhMzc4ZGQzM2YxMGE3NTE4YzBiNzFhMTM3MWJkZTA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBAIC02Niw3ICs2Niw3IEBAIExheW91dFN0YXRl
JiBGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0U3RhdGUoKSBjb25zdAogCiB2b2lkIEZvcm1hdHRp
bmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYg
bGF5b3V0Qm94KQogewotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBkaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0
aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBnZW9tZXRyeUZvckJveCgqbGF5
b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5wYWRkaW5nQm94V2lkdGgoKTsKIAogICAgIGF1dG8g
Y29tcHV0ZSA9IFsmXShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIHsKICAgICAgICAg
YXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250YWluaW5nQmxvY2tX
aWR0aCwgdXNlZFdpZHRoLCB7IH0gfTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGb3JtYXR0aW5n
Q29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxh
eW91dEJveCkKICAgICAgICAgICAgIGhvcml6b250YWxHZW9tZXRyeSA9IG1pbkhvcml6b250YWxH
ZW9tZXRyeTsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRMZWZ0KGhvcml6
b250YWxHZW9tZXRyeS5sZWZ0ICsgaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2luLnVz
ZWRNYXJnaW4uc3RhcnQpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGhvcml6
b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRI
b3Jpem9udGFsTWFyZ2luKGhvcml6b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi51c2VkTWFy
Z2luKTsKQEAgLTExMiw3ICsxMTIsNyBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRl
T3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAg
ICAgIHZlcnRpY2FsR2VvbWV0cnkgPSBtaW5WZXJ0aWNhbEdlb21ldHJ5OwogICAgIH0KIAotICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Cisg
ICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0
Qm94KTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luID0gdmVydGljYWxHZW9t
ZXRyeS5oZWlnaHRBbmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOwogICAgIGRpc3BsYXlCb3gu
c2V0VG9wKHZlcnRpY2FsR2VvbWV0cnkudG9wICsgbm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW4u
YmVmb3JlKTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQodmVydGljYWxHZW9t
ZXRyeS5oZWlnaHRBbmRNYXJnaW4uaGVpZ2h0KTsKQEAgLTEyMyw4ICsxMjMsOCBAQCB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBC
b3gmIGxheW91dEJveCkKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQ
YWRkaW5nKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVl
cz4gdXNlZFZhbHVlcykKIHsKICAgICBpZiAoIXVzZWRWYWx1ZXMpCi0gICAgICAgIHVzZWRWYWx1
ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKLSAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICB1
c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0
Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGF1dG8mIGRp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAg
ZGlzcGxheUJveC5zZXRCb3JkZXIoZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gp
KTsKICAgICBkaXNwbGF5Qm94LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmco
bGF5b3V0Qm94LCAqdXNlZFZhbHVlcykpOwogfQpAQCAtMTU1LDcgKzE1NSw3IEBAIHN0YXRpYyBM
YXlvdXRVbml0IG1hcEhvcml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IoY29uc3QgRm9ybWF0dGlu
Z0NvbnRleHQmIGZvcm1hCiAgICAgICAgIHJldHVybiBob3Jpem9udGFsUG9zaXRpb247CiAgICAg
QVNTRVJUKGNvbnRhaW5pbmdCbG9jay5pc0NvbnRhaW5pbmdCbG9ja0Rlc2NlbmRhbnRPZihhbmNl
c3RvcikpOwogICAgIGZvciAoYXV0byogY29udGFpbmVyID0gJmNvbnRhaW5pbmdCbG9jazsgY29u
dGFpbmVyICYmIGNvbnRhaW5lciAhPSAmYW5jZXN0b3I7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+
Y29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiArPSBmb3JtYXR0
aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluZXIpLmxlZnQoKTsKKyAg
ICAgICAgaG9yaXpvbnRhbFBvc2l0aW9uICs9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KCpjb250YWluZXIpLmxlZnQoKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFBvc2l0aW9uOwog
fQogCkBAIC0xNjUsMjggKzE2NSwyNyBAQCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0Ojpt
YXBUb3BUb0Zvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIGxheW91dEJveAogICAgIEFT
U0VSVChsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwogICAgIGF1dG8mIGZvcm1hdHRpbmdD
b250ZXh0Um9vdCA9IGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKTsKICAgICBBU1NFUlQobGF5
b3V0Qm94LmlzQ29udGFpbmluZ0Jsb2NrRGVzY2VuZGFudE9mKGZvcm1hdHRpbmdDb250ZXh0Um9v
dCkpOwotICAgIGF1dG8gdG9wID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnRv
cCgpOworICAgIGF1dG8gdG9wID0gZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS50b3AoKTsKICAg
ICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsgY29u
dGFpbmVyICYmIGNvbnRhaW5lciAhPSAmZm9ybWF0dGluZ0NvbnRleHRSb290OyBjb250YWluZXIg
PSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICB0b3AgKz0gZGlzcGxheUJv
eEZvckxheW91dEJveCgqY29udGFpbmVyKS50b3AoKTsKKyAgICAgICAgdG9wICs9IGdlb21ldHJ5
Rm9yQm94KCpjb250YWluZXIpLnRvcCgpOwogICAgIHJldHVybiB0b3A7CiB9CiAKIExheW91dFVu
aXQgRm9ybWF0dGluZ0NvbnRleHQ6Om1hcExlZnRUb0Zvcm1hdHRpbmdDb250ZXh0Um9vdChjb25z
dCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpKTsKLSAgICByZXR1cm4gbWFwSG9yaXpvbnRhbFBvc2l0aW9uVG9BbmNlc3Rvcigq
dGhpcywgZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmxlZnQoKSwgKmxheW91dEJv
eC5jb250YWluaW5nQmxvY2soKSwgZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpKTsKKyAgICBy
ZXR1cm4gbWFwSG9yaXpvbnRhbFBvc2l0aW9uVG9BbmNlc3RvcigqdGhpcywgZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KS5sZWZ0KCksICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25j
YXN0PENvbnRhaW5lcj4ocm9vdCgpKSk7CiB9CiAKIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRl
eHQ6Om1hcFJpZ2h0VG9Gb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiBsYXlvdXRCb3gp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7Ci0gICAg
cmV0dXJuIG1hcEhvcml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IoKnRoaXMsIGRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KS5yaWdodCgpLCAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpLCBkb3duY2FzdDxDb250YWluZXI+KHJvb3QoKSkpOworICAgIHJldHVybiBtYXBIb3Jpem9u
dGFsUG9zaXRpb25Ub0FuY2VzdG9yKCp0aGlzLCBnZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLnJp
Z2h0KCksICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25jYXN0PENvbnRhaW5lcj4o
cm9vdCgpKSk7CiB9CiAKLURpc3BsYXk6OkJveCYgRm9ybWF0dGluZ0NvbnRleHQ6OmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPEVzY2FwZVR5cGU+
IGVzY2FwZVR5cGUpIGNvbnN0Citjb25zdCBEaXNwbGF5OjpCb3gmIEZvcm1hdHRpbmdDb250ZXh0
OjpnZW9tZXRyeUZvckJveChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8RXNjYXBlVHlw
ZT4gZXNjYXBlVHlwZSkgY29uc3QKIHsKICAgICBVTlVTRURfUEFSQU0oZXNjYXBlVHlwZSk7Ci0K
ICNpZm5kZWYgTkRFQlVHCiAgICAgYXV0byBpc09rVG9BY2Nlc3NEaXNwbGF5Qm94ID0gWyZdIHsK
ICAgICAgICAgLy8gMS4gSGlnaGx5IGNvbW1vbiBjYXNlIG9mIGFjY2Vzc2luZyB0aGUgZm9ybWF0
dGluZyByb290J3MgZGlzcGxheSBib3ggaXRzZWxmLiBUaGlzIGlzIGZvcm1hdHRpbmcgY29udGV4
dCBlc2NhcGluZyBpbiB0aGUgc3RyaWN0IHNlbnNlLCBzaW5jZQpAQCAtMjM3LDYgKzIzNiw3IEBA
IERpc3BsYXk6OkJveCYgRm9ybWF0dGluZ0NvbnRleHQ6OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
Y29uc3QgQm94JiBsYXlvdXRCb3gsIE9wCiAgICAgfTsKICNlbmRpZgogICAgIEFTU0VSVChpc09r
VG9BY2Nlc3NEaXNwbGF5Qm94KCkpOworICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmhhc0Rpc3Bs
YXlCb3gobGF5b3V0Qm94KSk7CiAgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpOwogfQogCkBAIC0yNTAsMjMgKzI1MCwyMyBAQCB2b2lkIEZv
cm1hdHRpbmdDb250ZXh0Ojp2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dCgp
IGNvbnN0CiAgICAgZm9yIChhdXRvJiBsYXlvdXRCb3ggOiBkZXNjZW5kYW50c09mVHlwZTxCb3g+
KGZvcm1hdHRpbmdDb250ZXh0Um9vdCkpIHsKICAgICAgICAgaWYgKCZsYXlvdXRCb3guZm9ybWF0
dGluZ0NvbnRleHRSb290KCkgIT0gJmZvcm1hdHRpbmdDb250ZXh0Um9vdCkKICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gZGlz
cGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICAg
ICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
KyAgICAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBnZW9tZXRyeUZvckJveCgq
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkg
PSBnZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIC8vIDEwLjMuMyBCbG9jay1s
ZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CiAgICAgICAgIC8vIDEw
LjMuNyBBYnNvbHV0ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwogICAgICAg
ICBpZiAoKGxheW91dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNPdXRPZkZs
b3dQb3NpdGlvbmVkKCkpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewogICAgICAgICAgICAg
Ly8gbWFyZ2luLWxlZnQgKyBib3JkZXItbGVmdC13aWR0aCArIHBhZGRpbmctbGVmdCArIHdpZHRo
ICsgcGFkZGluZy1yaWdodCArIGJvcmRlci1yaWdodC13aWR0aCArIG1hcmdpbi1yaWdodCA9IHdp
ZHRoIG9mIGNvbnRhaW5pbmcgYmxvY2sKLSAgICAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2Nr
V2lkdGggPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpOwotICAg
ICAgICAgICAgQVNTRVJUKGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRp
bmcoKSArIGRpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkgPT0gY29udGFpbmluZ0Jsb2NrV2lk
dGgpOworICAgICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdC
bG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAgICAgICAgQVNTRVJUKGJveEdl
b21ldHJ5Lmhvcml6b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgKyBib3hHZW9tZXRyeS5j
b250ZW50Qm94V2lkdGgoKSA9PSBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgICAgIH0KIAog
ICAgICAgICAvLyAxMC42LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxl
bWVudHMKICAgICAgICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAh
bGF5b3V0Qm94LnJlcGxhY2VkKCkpIHsKICAgICAgICAgICAgIC8vIHRvcCArIG1hcmdpbi10b3Ag
KyBib3JkZXItdG9wLXdpZHRoICsgcGFkZGluZy10b3AgKyBoZWlnaHQgKyBwYWRkaW5nLWJvdHRv
bSArIGJvcmRlci1ib3R0b20td2lkdGggKyBtYXJnaW4tYm90dG9tICsgYm90dG9tID0gaGVpZ2h0
IG9mIGNvbnRhaW5pbmcgYmxvY2sKLSAgICAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVp
Z2h0ID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94SGVpZ2h0KCk7Ci0gICAg
ICAgICAgICBBU1NFUlQoZGlzcGxheUJveC50b3AoKSArIGRpc3BsYXlCb3gubWFyZ2luQmVmb3Jl
KCkgKyBkaXNwbGF5Qm94LmJvcmRlclRvcCgpICsgZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFs
dWVPcigwKSArIGRpc3BsYXlCb3guY29udGVudEJveEhlaWdodCgpCi0gICAgICAgICAgICAgICAg
KyBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApICsgZGlzcGxheUJveC5ib3Jk
ZXJCb3R0b20oKSArIGRpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKSA9PSBjb250YWluaW5nQmxvY2tI
ZWlnaHQpOworICAgICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWlu
aW5nQmxvY2tHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisgICAgICAgICAgICBBU1NFUlQo
Ym94R2VvbWV0cnkudG9wKCkgKyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21l
dHJ5LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBi
b3hHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCkKKyAgICAgICAgICAgICAgICArIGJveEdlb21l
dHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkuYm9yZGVyQm90dG9t
KCkgKyBib3hHZW9tZXRyeS5tYXJnaW5BZnRlcigpID09IGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7
CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29u
dGV4dC5oCmluZGV4IDM1M2FkMTk2MzVjZGQzYjhlOTZjNWU5ZDZkNjI1MTM2NTU4OTNkYTUuLmNl
YWUxYTJlOGY0NWI0ZDIxMjY0Y2ZjNWQ0ZDgzZWQ3MGQzZTNlODQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCkBAIC03NCw4ICs3NCw3IEBAIHB1YmxpYzoKICAg
ICAgICAgQWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQsCiAgICAgICAgIEFjY2Vzc0FuY2Vz
dG9yRm9ybWF0dGluZ0NvbnRleHQKICAgICB9OwotICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJv
eEZvckxheW91dEJveChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVUeXBlPiA9IFdURjo6bnVs
bG9wdCkgY29uc3Q7Ci0gICAgYm9vbCBoYXNEaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94
KSBjb25zdCB7IHJldHVybiBsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KTsg
fQorICAgIGNvbnN0IERpc3BsYXk6OkJveCYgZ2VvbWV0cnlGb3JCb3goY29uc3QgQm94JiwgT3B0
aW9uYWw8RXNjYXBlVHlwZT4gPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogCiAgICAgY29uc3QgQm94
JiByb290KCkgY29uc3QgeyByZXR1cm4gKm1fcm9vdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZDM5NTU4N2Jm
MDMxMmYxMmExNmQ3YzYzZTg0ZWQwZDhiOTFlNmJhMi4uMGFhNTc4NmUyNmIwZDhmZjZjZTQ1OWY4
NTc5YWMxMGUzOTRjOGRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNzIsNyArNzIsNyBAQCBPcHRpb25hbDxMYXlv
dXRVbml0PiBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUo
Y29uc3QgQm94JgogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdo
dFZhbHVlOwogICAgIGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAg
ICAgICAgLy8gQ29udGFpbmluZyBibG9jaydzIGhlaWdodCBpcyBhbHJlYWR5IGNvbXB1dGVkIHNp
bmNlIHdlIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgYXMgdGhlIGxhc3Qgc3RlcC4KLSAg
ICAgICAgY29udGFpbmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuaGVpZ2h0
KCk7CisgICAgICAgIGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5oZWlnaHQo
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUo
KSkKICAgICAgICAgICAgIGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gZm9ybWF0dGluZ0Nv
bnRleHQoKS5xdWlya3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhG
aXhlZEhlaWdodChsYXlvdXRCb3gpOwpAQCAtMTA3LDggKzEwNyw4IEBAIExheW91dFVuaXQgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRl
eHRSb290KGNvCiAKICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7
CiAgICAgYXV0byYgZm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgp
OwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0gZGlz
cGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7
CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJv
eChsYXlvdXRCb3gpOworICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5
LmJvcmRlclRvcCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CiAgICAg
YXV0byB0b3AgPSBib3JkZXJBbmRQYWRkaW5nVG9wOwogICAgIGF1dG8gYm90dG9tID0gYm9yZGVy
QW5kUGFkZGluZ1RvcDsKICAgICBhdXRvJiBmb3JtYXR0aW5nUm9vdENvbnRhaW5lciA9IGRvd25j
YXN0PENvbnRhaW5lcj4obGF5b3V0Qm94KTsKQEAgLTEyMCwxMCArMTIwLDEwIEBAIExheW91dFVu
aXQgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGNvCiAgICAgICAgIGJvdHRvbSA9IGxpbmVCb3hlcy5sYXN0KCkubG9naWNh
bEJvdHRvbSgpOwogICAgIH0gZWxzZSBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJs
aXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KCkgfHwgZm9ybWF0dGluZ1Jvb3RDb250YWluZXIu
ZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1l
bnRCb3goKSkgewogICAgICAgICBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuaGFzSW5GbG93
Q2hpbGQoKSkgewotICAgICAgICAgICAgYXV0byYgZmlyc3REaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWluZXIu
Zmlyc3RJbkZsb3dDaGlsZCgpLCBFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250
ZXh0KTsKLSAgICAgICAgICAgIGF1dG8mIGxhc3REaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWluZXIubGFzdElu
Rmxvd0NoaWxkKCksIEVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOwot
ICAgICAgICAgICAgdG9wID0gZmlyc3REaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7
Ci0gICAgICAgICAgICBib3R0b20gPSBsYXN0RGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpLmJv
dHRvbSgpOworICAgICAgICAgICAgYXV0byYgZmlyc3RCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdD
b250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxv
d0NoaWxkKCksIEVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOworICAg
ICAgICAgICAgYXV0byYgbGFzdEJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0
cnlGb3JCb3goKmZvcm1hdHRpbmdSb290Q29udGFpbmVyLmxhc3RJbkZsb3dDaGlsZCgpLCBFc2Nh
cGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIHRvcCA9
IGZpcnN0Qm94R2VvbWV0cnkucmVjdFdpdGhNYXJnaW4oKS50b3AoKTsKKyAgICAgICAgICAgIGJv
dHRvbSA9IGxhc3RCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigpLmJvdHRvbSgpOwogICAgICAg
ICB9CiAgICAgfSBlbHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk5LDI0
ICsxOTksMjQgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRp
Y1ZlcnRpY2FsUG9zaXRpb25Gb3JPdXRPZkZsb3dQb3NpdGkKICAgICBMYXlvdXRVbml0IHRvcDsK
ICAgICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3Vz
SW5GbG93U2libGluZygpKSB7CiAgICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAotICAgICAg
ICBhdXRvJiBwcmV2aW91c0luRmxvd0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNw
bGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcsIEZvcm1hdHRpbmdDb250
ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKLSAgICAgICAg
dG9wICs9IHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93
RGlzcGxheUJveC5ub25Db2xsYXBzZWRNYXJnaW5BZnRlcigpOworICAgICAgICBhdXRvJiBwcmV2
aW91c0luRmxvd0JveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
KnByZXZpb3VzSW5GbG93U2libGluZywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFj
Y2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICB0b3AgKz0gcHJldmlvdXNJbkZs
b3dCb3hHZW9tZXRyeS5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubm9uQ29s
bGFwc2VkTWFyZ2luQWZ0ZXIoKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobGF5b3V0
Qm94LnBhcmVudCgpKTsKLSAgICAgICAgdG9wID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveCgqbGF5b3V0Qm94LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNj
YXBlVHlwZTo6QWNjZXNzQ2hpbGRGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveFRvcCgpOwor
ICAgICAgICB0b3AgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94
LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQ2hpbGRGb3Jt
YXR0aW5nQ29udGV4dCkuY29udGVudEJveFRvcCgpOwogICAgIH0KIAogICAgIC8vIFJlc29sdmUg
dG9wIGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5nIGJsb2NrLgogICAgIGF1dG8mIGNv
bnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgLy8gU3Rh
cnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0aGlzIGJveCBpcyBub3Jt
YWwgZmxvdy4KICAgICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9IGxheW91dEJveC5wYXJlbnQoKTsg
Y29udGFpbmVyICE9ICZjb250YWluaW5nQmxvY2s7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29u
dGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lciwgRm9ybWF0dGluZ0NvbnRl
eHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBh
dXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250
YWluZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRp
bmdDb250ZXh0KTsKICAgICAgICAgLy8gRGlzcGxheTo6Qm94Ojp0b3AgaXMgdGhlIGJvcmRlciBi
b3ggdG9wIHBvc2l0aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0
ZW0uCi0gICAgICAgIHRvcCArPSBkaXNwbGF5Qm94LnRvcCgpOworICAgICAgICB0b3AgKz0gYm94
R2VvbWV0cnkudG9wKCk7CiAgICAgICAgIEFTU0VSVCghY29udGFpbmVyLT5pc1Bvc2l0aW9uZWQo
KSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAgfQogICAgIC8vIE1vdmUg
dGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMg
dmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICBhdXRvIHBh
ZGRpbmdCb3hUb3AgPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNv
bnRhaW5pbmdCbG9jaykucGFkZGluZ0JveFRvcCgpOworICAgIGF1dG8gcGFkZGluZ0JveFRvcCA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGlu
Z0JveFRvcCgpOwogICAgIHJldHVybiB0b3AgLSBwYWRkaW5nQm94VG9wOwogfQogCkBAIC0yMjgs
MTkgKzIyOCwxOSBAQCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3Rh
dGljSG9yaXpvbnRhbFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaQogICAgIC8vIFN0YXJ0IHdpdGgg
dGhpcyBib3gncyBib3JkZXIgYm94IG9mZnNldCBmcm9tIHRoZSBwYXJlbnQncyBib3JkZXIgYm94
LgogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQo
KTsKICAgICBBU1NFUlQobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICBhdXRvIGxlZnQgPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFyZW50KCks
IEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250
ZXh0KS5jb250ZW50Qm94TGVmdCgpOworICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3gucGFyZW50KCksIEZvcm1hdHRpbmdDb250ZXh0OjpF
c2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5jb250ZW50Qm94TGVmdCgp
OwogCiAgICAgLy8gUmVzb2x2ZSBsZWZ0IGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5n
IGJsb2NrLgogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCk7CiAgICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQg
dGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KICAgICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9
IGxheW91dEJveC5wYXJlbnQoKTsgY29udGFpbmVyICE9ICZjb250YWluaW5nQmxvY2s7IGNvbnRh
aW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgYXV0byYgZGlz
cGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRh
aW5lciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGlu
Z0NvbnRleHQpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBl
OjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKICAgICAgICAgLy8gRGlzcGxheTo6Qm94
OjpsZWZ0IGlzIHRoZSBib3JkZXIgYm94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcg
YmxvY2sncyBjb29yZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGVmdCArPSBkaXNwbGF5Qm94Lmxl
ZnQoKTsKKyAgICAgICAgbGVmdCArPSBib3hHZW9tZXRyeS5sZWZ0KCk7CiAgICAgICAgIEFTU0VS
VCghY29udGFpbmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9u
ZWQoKSk7CiAgICAgfQogICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0
byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9z
aXRpb25lZCBib3hlcy4KLSAgICBhdXRvIHBhZGRpbmdCb3hMZWZ0ID0gZm9ybWF0dGluZ0NvbnRl
eHQuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250
ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5wYWRkaW5nQm94
TGVmdCgpOworICAgIGF1dG8gcGFkZGluZ0JveExlZnQgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBl
OjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5wYWRkaW5nQm94TGVmdCgpOwogICAgIHJl
dHVybiBsZWZ0IC0gcGFkZGluZ0JveExlZnQ7CiB9CiAKQEAgLTI5NiwyMCArMjk2LDIwIEBAIFZl
cnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25S
ZXBsYWNlZFZlcnRpY2FsR2VvbWV0CiAKICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRo
aXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5
bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3Bs
YXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0g
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5wYWRkaW5nQm94SGVpZ2h0KCk7Ci0gICAgYXV0byBj
b250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0Jv
eFdpZHRoKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5
ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5n
QmxvY2soKSk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxv
Y2tHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tX
aWR0aCA9IGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpOwogCiAgICAg
YXV0byB0b3AgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29u
dGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZUlmTm90
QXV0byhzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBh
dXRvIGhlaWdodCA9IHVzZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUo
KSA6IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwog
ICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRp
Y2FsTWFyZ2luKGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250YWluaW5nQmxv
Y2tXaWR0aCB9KTsKICAgICBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB1
c2VkVmVydGljYWxNYXJnaW47IAotICAgIGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFk
ZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJv
eC5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3Bs
YXlCb3guYm9yZGVyVG9wKCk7Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJv
cmRlckJvdHRvbSgpOworICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdU
b3AoKS52YWx1ZU9yKDApOworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBh
ZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0
cnkuYm9yZGVyVG9wKCk7CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3Jk
ZXJCb3R0b20oKTsKICAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBbJl0gewogICAgICAgICBBU1NF
UlQoaGVpZ2h0KTsKICAgICAgICAgcmV0dXJuIHN0eWxlLmJveFNpemluZygpID09IEJveFNpemlu
Zzo6Q29udGVudEJveCA/ICpoZWlnaHQgOiAqaGVpZ2h0IC0gKGJvcmRlclRvcCArIHBhZGRpbmdU
b3AgKyBwYWRkaW5nQm90dG9tICsgYm9yZGVyQm90dG9tKTsgIApAQCAtMzgxLDcgKzM4MSw3IEBA
IFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dO
b25SZXBsYWNlZFZlcnRpY2FsR2VvbWV0CiAKICAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVu
dHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2Yg
dGhlIGFuY2VzdG9yLgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUg
aXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29u
dmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFp
bmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gu
cGFkZGluZ0JveFRvcCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2Fs
RWRnZSA9IGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKTsKICAgICAqdG9w
ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAgICAgKmJvdHRvbSArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC00MjEsOSArNDIxLDkgQEAg
SG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93
Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2UKIAogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0g
dGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5z
dHlsZSgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8mIGNvbnRh
aW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgY29u
dGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goY29udGFpbmluZ0Jsb2NrKTsKKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2tHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9jayk7
CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Js
b2NrV2lkdGgudmFsdWVPcigwKTsKICAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBj
b250YWluaW5nQmxvY2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgCkBA
IC00MzIsMTAgKzQzMiwxMCBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgIGF1dG8gd2lk
dGggPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1
c2VkVmFsdWVzLndpZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwg
Y29udGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
ID0gR2VvbWV0cnk6OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1
ZXMpOwogICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAg
IGF1dG8gcGFkZGluZ0xlZnQgPSBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsK
LSAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVP
cigwKTsKLSAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKTsKLSAg
ICBhdXRvIGJvcmRlclJpZ2h0ID0gZGlzcGxheUJveC5ib3JkZXJSaWdodCgpOworICAgIGF1dG8g
cGFkZGluZ0xlZnQgPSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAg
YXV0byBwYWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDAp
OworICAgIGF1dG8gYm9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKKyAgICBh
dXRvIGJvcmRlclJpZ2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKICAgICBhdXRvIGNv
bnRlbnRXaWR0aCA9IFsmXSB7CiAgICAgICAgIEFTU0VSVCh3aWR0aCk7CiAgICAgICAgIHJldHVy
biBzdHlsZS5ib3hTaXppbmcoKSA9PSBCb3hTaXppbmc6OkNvbnRlbnRCb3ggPyAqd2lkdGggOiAq
d2lkdGggLSAoYm9yZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVy
UmlnaHQpOwpAQCAtNTMxLDcgKzUzMSw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5n
Q29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAKICAg
ICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9y
bWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8vIEF0IHRoaXMg
cG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9m
IHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5h
dGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9
IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNv
bnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBjb250YWluaW5nQmxvY2tHZW9tZXRy
eS5wYWRkaW5nQm94TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdW
ZXJ0aWNhbEVkZ2U7CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CiAKQEAgLTU1NSwxMCArNTU1LDEwIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoCiAK
ICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7
CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4
dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJv
eC5wYWRkaW5nQm94SGVpZ2h0KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveFdpZHRoKCk7CisgICAgYXV0byYgYm94
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwor
ICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2Vv
bWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgYXV0byBjb250
YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5wYWRkaW5nQm94SGVp
Z2h0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0dl
b21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpOwogCiAgICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVl
SWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogICAg
IGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsQm90dG9t
KCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKQEAgLTU2NiwxMCArNTY2LDEwIEBAIFZlcnRpY2Fs
R2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZl
cnRpY2FsR2VvbWV0cnkoCiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0
cnk6OmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVl
cyB7IGNvbnRhaW5pbmdCbG9ja1dpZHRoIH0pOwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVz
ZWRNYXJnaW5CZWZvcmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKICAgICBPcHRp
b25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
LmFmdGVyOwotICAgIGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZh
bHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5wYWRkaW5nQm90
dG9tKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3BsYXlCb3guYm9yZGVy
VG9wKCk7Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgp
OworICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApOworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20o
KS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCk7CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsK
IAogICAgIGlmICghdG9wICYmICFib3R0b20pIHsKICAgICAgICAgLy8gIzEKQEAgLTYwOSw3ICs2
MDksNyBAQCBWZXJ0aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93UmVwbGFjZWRWZXJ0aWNhbEdlb21ldHJ5KAogCiAgICAgLy8gRm9yIG91dC1vZi1mbG93
IGVsZW1lbnRzIHRoZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBl
ZGdlIG9mIHRoZSBhbmNlc3Rvci4KICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVk
IHZhbHVlIGlzIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExl
dCdzIGNvbnZlcnQgaXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBjb250YWluaW5nQmxvY2tEaXNw
bGF5Qm94LnBhZGRpbmdCb3hUb3AoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdW
ZXJ0aWNhbEVkZ2UgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5wYWRkaW5nQm94VG9wKCk7CiAg
ICAgKnRvcCArPSBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpib3R0
b20gKz0gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKIApAQCAtNjQxLDcgKzY0
MSw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91
dE9mRmxvd1JlcGxhY2VkSG9yaXpvbnRhbEdlb21lCiAKICAgICBhdXRvJiBmb3JtYXR0aW5nQ29u
dGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlv
dXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQu
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICBhdXRv
JiBjb250YWluaW5nQmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwogICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRo
LnZhbHVlT3IoMCk7CiAgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gY29udGFpbmlu
Z0Jsb2NrLnN0eWxlKCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwpAQCAtNjUyLDEwICs2NTIs
MTAgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0
T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1
c2VkTWFyZ2luU3RhcnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CiAgICAgT3B0
aW9uYWw8TGF5b3V0VW5pdD4gdXNlZE1hcmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdp
bi5lbmQ7CiAgICAgYXV0byB3aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzKS53aWR0aDsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxh
eUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBk
aXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBib3JkZXJMZWZ0
ID0gZGlzcGxheUJveC5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3Bs
YXlCb3guYm9yZGVyUmlnaHQoKTsKKyAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnku
cGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2Vv
bWV0cnkucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlckxlZnQgPSBi
b3hHZW9tZXRyeS5ib3JkZXJMZWZ0KCk7CisgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21l
dHJ5LmJvcmRlclJpZ2h0KCk7CiAKICAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7CiAgICAgICAg
IC8vICMxCkBAIC03MTgsNyArNzE4LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKIAogICAg
IC8vIEZvciBvdXQtb2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3Jt
ZWQgYnkgdGhlIHBhZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCiAgICAgLy8gQXQgdGhpcyBw
b2ludCB0aGUgcG9zaXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2Yg
dGhlIHBhZGRpbmcgYm94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0
ZSBzeXN0ZW0uCi0gICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0g
Zm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2sp
LnBhZGRpbmdCb3hMZWZ0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGlj
YWxFZGdlID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goY29udGFpbmluZ0Jsb2Nr
KS5wYWRkaW5nQm94TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdW
ZXJ0aWNhbEVkZ2U7CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNh
bEVkZ2U7CiAKQEAgLTg1Niw3ICs4NTYsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdAogCiAg
ICAgLy8gIzEKICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdD
b250ZXh0KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250
ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSku
Y29udGVudEJveFdpZHRoKCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1h
dHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkp
LmNvbnRlbnRCb3hXaWR0aCgpOwogICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdl
b21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgVXNlZEhvcml6b250YWxW
YWx1ZXMgeyBjb250YWluaW5nQmxvY2tXaWR0aCB9KTsKICAgICBhdXRvIHVzZWRWZXJ0aWNhbE1h
cmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5h
ZnRlci52YWx1ZU9yKDApIH07CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsK
QEAgLTg3MSw3ICs4NzEsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdAogICAgICAgICBoZWln
aHQgPSByZXBsYWNlZC0+aW50cmluc2ljSGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmIChoZWlnaHRJ
c0F1dG8gJiYgcmVwbGFjZWQtPmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKICAgICAgICAgLy8gIzMK
LSAgICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCkud2lkdGgoKTsKKyAgICAgICAgYXV0byB1c2VkV2lkdGggPSBm
b3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLndpZHRoKCk7CiAgICAg
ICAgIGhlaWdodCA9IHVzZWRXaWR0aCAvIHJlcGxhY2VkLT5pbnRyaW5zaWNSYXRpbygpOwogICAg
IH0gZWxzZSBpZiAoaGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNIZWlnaHQo
KSkgewogICAgICAgICAvLyAjNApAQCAtOTczLDcgKzk3Myw3IEBAIExheW91dFNpemUgRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29u
c3QgQm94CiAKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1dG8m
IGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0
byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZv
ckxheW91dEJveChjb250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAgICBhdXRvIHRvcCA9IGNv
bXB1dGVkVmFsdWVJZk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tX
aWR0aCk7CiAgICAgYXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxv
Z2ljYWxCb3R0b20oKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNTY1MzllMTZjNjA0
ZDU2NzI2NDVhMThjMzIxMGZlZjgwYmZjMDc4Zi4uNDgyOGQwMDJjYmJiYzRlMTdkOTliOGJjN2Nh
MTNhNmQ5OTdhZWRmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRp
bmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwCkBAIC01MCwxOSArNTAsMTkgQEAgTGF5b3V0VW5pdCBGb3JtYXR0
aW5nQ29udGV4dDo6UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dp
dGhGaXgKICAgICAgICAgLy8gSWYgdGhlIG9ubHkgZml4ZWQgdmFsdWUgYm94IHdlIGZpbmQgaXMg
dGhlIElDQiwgdGhlbiBpZ25vcmUgdGhlIGJvZHkgYW5kIHRoZSBkb2N1bWVudCAodmVydGljYWwp
IG1hcmdpbiwgcGFkZGluZyBhbmQgYm9yZGVyLiBTbyBtdWNoIHF1aXJraW5lc3MuCiAgICAgICAg
IC8vIC1hbmQgaXQncyB0b3RhbGx5IGluc2FuZSBiZWNhdXNlIG5vdyB3ZSBmcmVlbHkgdHJhdmVs
IGFjcm9zcyBmb3JtYXR0aW5nIGNvbnRleHQgYm91bmRhcmllcyBhbmQgY29tcHV0ZWQgbWFyZ2lu
cyBhcmUgbm9uZXhpc3RlbnQuCiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm9keUJv
eCgpIHx8IGNvbnRhaW5pbmdCbG9jay0+aXNEb2N1bWVudEJveCgpKSB7Ci0gICAgICAgICAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eCgqY29udGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNz
QW5jZXN0b3JGb3JtYXR0aW5nQ29udGV4dCk7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ssIEZv
cm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NBbmNlc3RvckZvcm1hdHRpbmdDb250
ZXh0KTsKIAotICAgICAgICAgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1
ZXMgeyBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5n
QmxvY2stPmNvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6
QWNjZXNzQW5jZXN0b3JGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveFdpZHRoKCkgfTsKKyAg
ICAgICAgICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0
dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Js
b2NrKCksIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NBbmNlc3RvckZvcm1h
dHRpbmdDb250ZXh0KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAgICAgICAgYXV0byB2ZXJ0
aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNh
bE1hcmdpbigqY29udGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKLSAgICAgICAgICAgIGF1dG8g
dmVydGljYWxQYWRkaW5nID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGRp
c3BsYXlCb3gucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICBhdXRvIHZl
cnRpY2FsQm9yZGVyID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3guYm9yZGVy
Qm90dG9tKCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdlb21ldHJ5
LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZh
bHVlT3IoMCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVyID0gYm94R2VvbWV0cnku
Ym9yZGVyVG9wKCkgKyBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKICAgICAgICAgICAgIGJv
ZHlBbmREb2N1bWVudFZlcnRpY2FsTWFyZ2luUGFkZGluZ0FuZEJvcmRlciArPSB2ZXJ0aWNhbE1h
cmdpbi5iZWZvcmUudmFsdWVPcigwKSArIHZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkg
KyB2ZXJ0aWNhbFBhZGRpbmcgKyB2ZXJ0aWNhbEJvcmRlcjsKICAgICAgICAgfQogCiAgICAgICAg
IGNvbnRhaW5pbmdCbG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgfQogICAgIC8vIEluaXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdo
dC4KLSAgICByZXR1cm4gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3guaW5pdGlhbENvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNj
YXBlVHlwZTo6QWNjZXNzQW5jZXN0b3JGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveCgpLmhl
aWdodCgpIC0gYm9keUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOwor
ICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3guaW5p
dGlhbENvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNj
ZXNzQW5jZXN0b3JGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9k
eUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOwogfQogCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCmluZGV4IDIxNzgxNjU3ZGI2ZTc5
YmIwZTI2MjEzMDIxMTMwMjFlYmQwNmIwMDAuLjliMWRjNDFkYTk0YThhNDMzMGNkNGEzZjlhMTg4
MjhkNzAyYWZjZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5n
U3RhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3Bw
CkBAIC0yOCw2ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVY
VCkKIAorI2luY2x1ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5s
aW5lcy5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw2ICs0NywxMyBAQCBGb3JtYXR0
aW5nU3RhdGU6On5Gb3JtYXR0aW5nU3RhdGUoKQogewogfQogCitEaXNwbGF5OjpCb3gmIEZvcm1h
dHRpbmdTdGF0ZTo6ZGlzcGxheUJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAg
ICAvLyBTaG91bGQgbmV2ZXIgbmVlZCB0byBtdXRhdGUgYSBkaXNwbGF5IGJveCBvdXRzaWRlIG9m
IHRoZSBmb3JtYXR0aW5nIGNvbnRleHQuCisgICAgQVNTRVJUKCZsYXlvdXRTdGF0ZSgpLmVzdGFi
bGlzaGVkRm9ybWF0dGluZ1N0YXRlKGxheW91dEJveC5mb3JtYXR0aW5nQ29udGV4dFJvb3QoKSkg
PT0gdGhpcyk7CisgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworfQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nU3RhdGUuaAppbmRleCAzNTc3Y2Q1ODYyOWIzY2Y2MWFhNjg0ZDVmODk4YjZmZGU5NWNj
ZmM1Li41NDFiZWQ4MDNiOGU0ZWY0YTQ0ZDk3YjM4MjI0NWVhM2ExZjViNjkzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdTdGF0ZS5oCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoK
IAogICAgIExheW91dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0
U3RhdGU7IH0KIAorICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJveChjb25zdCBCb3gmIGxheW91
dEJveCkgY29uc3Q7IAogICAgIC8vIFNpbmNlIHdlIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgYm94
ZXMgYXQgdGhlIGVuZCBvZiB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGxheW91dCwgaXQncyBva2F5
IHRvIHN0b3JlIHRoZW0gaW4gdGhlIGZvcm1hdHRpbmcgc3RhdGUgLWFzIG9wcG9zZWQgdG8gdGhl
IGNvbnRhaW5pbmcgYmxvY2sgbGV2ZWwuCiAgICAgdXNpbmcgT3V0T2ZGbG93Qm94TGlzdCA9IFZl
Y3RvcjxXZWFrUHRyPGNvbnN0IEJveD4+OwogICAgIHZvaWQgYWRkT3V0T2ZGbG93Qm94KGNvbnN0
IEJveCYgb3V0T2ZGbG93Qm94KSB7IG1fb3V0T2ZGbG93Qm94ZXMuYXBwZW5kKG1ha2VXZWFrUHRy
KG91dE9mRmxvd0JveCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxv
Y2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBk
YWExNzE2YTA0NzZhNTgzNTM4NmZmM2Q0NjI3MmE2NDU0NGFkYTk5Li5kZGUwNWFhYjFhODkzN2Vi
NTE4MGFkYWMxNWJkYjVkYWFlMDJkYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5j
cHAKQEAgLTEzMiwxOCArMTMyLDE4IEBAIE9wdGlvbmFsPExheW91dFVuaXQ+IEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6OnVzZWRBdmFpbGFibGVXaWR0aEZvckZsb2F0QXZvaWRlcihjCiAgICAgaWYg
KCFjb25zdHJhaW50cy5sZWZ0ICYmICFjb25zdHJhaW50cy5yaWdodCkKICAgICAgICAgcmV0dXJu
IHsgfTsKICAgICBhdXRvJiBjb250YWluaW5nQmxvY2sgPSBkb3duY2FzdDxDb250YWluZXI+KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rp
c3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jayk7Ci0gICAg
YXV0byBhdmFpbGFibGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJv
eFdpZHRoKCk7CisgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBnZW9tZXRyeUZv
ckJveChjb250YWluaW5nQmxvY2spOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWlu
aW5nQmxvY2tHZW9tZXRyeS5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIExheW91dFVuaXQgY29u
dGFpbmluZ0Jsb2NrTGVmdDsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1JpZ2h0ID0g
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5yaWdodCgpOworICAgIExheW91dFVuaXQgY29udGFp
bmluZ0Jsb2NrUmlnaHQgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5yaWdodCgpOwogICAgIGlm
ICgmY29udGFpbmluZ0Jsb2NrICE9ICZmb3JtYXR0aW5nUm9vdCkgewogICAgICAgICAvLyBNb3Zl
IGNvbnRhaW5pbmcgYmxvY2sgbGVmdC9yaWdodCB0byB0aGUgcm9vdCdzIGNvb3JkaW5hdGUgc3lz
dGVtLgogICAgICAgICBjb250YWluaW5nQmxvY2tMZWZ0ID0gbWFwTGVmdFRvRm9ybWF0dGluZ0Nv
bnRleHRSb290KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1JpZ2h0
ID0gbWFwUmlnaHRUb0Zvcm1hdHRpbmdDb250ZXh0Um9vdChjb250YWluaW5nQmxvY2spOwogICAg
IH0KLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hMZWZ0ID0gY29udGFpbmluZ0Js
b2NrTGVmdCArIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgY29udGFp
bmluZ0Jsb2NrRGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBj
b250YWluaW5nQmxvY2tDb250ZW50Qm94UmlnaHQgPSBjb250YWluaW5nQmxvY2tSaWdodCAtIGNv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGNvbnRhaW5pbmdCbG9ja0Rp
c3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja0NvbnRlbnRCb3hMZWZ0ID0gY29udGFpbmluZ0Jsb2NrTGVmdCArIGNvbnRhaW5pbmdCbG9j
a0dlb21ldHJ5LmJvcmRlckxlZnQoKSArIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdM
ZWZ0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hSaWdo
dCA9IGNvbnRhaW5pbmdCbG9ja1JpZ2h0IC0gY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkuYm9yZGVy
UmlnaHQoKSArIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3Io
MCk7CiAKICAgICAvLyBTaHJpbmsgdGhlIGF2YWlsYWJsZSBzcGFjZSBpZiB0aGUgZmxvYXRzIGFy
ZSBhY3R1YWxseSBpbnRydWRpbmcgYXQgdGhpcyB2ZXJ0aWNhbCBwb3NpdGlvbi4KICAgICBpZiAo
Y29uc3RyYWludHMubGVmdCkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OnBsYWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IEJveCYgbGF5b3V0
Qm94KQogICAgICAgICBhdXRvIGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24gPSBbJl0g
ewogICAgICAgICAgICAgYXV0byBwb3NpdGlvbk9mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9z
aXRpb25lZFBvc2l0aW9uT2Zmc2V0KGNoaWxkQm94KTsKIAotICAgICAgICAgICAgYXV0byYgZGlz
cGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY2hpbGRCb3gpOworICAgICAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goY2hpbGRCb3gp
OwogICAgICAgICAgICAgYXV0byB0b3BMZWZ0ID0gZGlzcGxheUJveC50b3BMZWZ0KCk7CiAKICAg
ICAgICAgICAgIHRvcExlZnQubW92ZShwb3NpdGlvbk9mZnNldCk7CkBAIC0yMTQsNyArMjE0LDcg
QEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGls
ZHJlbihjb25zdCBCb3gmIGxheW91dEJveCkKIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZs
b2F0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9z
aXRpb24obGF5b3V0Qm94KSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlv
dXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94
KSk7CiAgICAgaWYgKGxheW91dEJveC5oYXNGbG9hdENsZWFyKCkpCiAgICAgICAgIGNvbXB1dGVF
c3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihmbG9hdGluZ0NvbnRleHQsIGxh
eW91dEJveCk7CiAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0Nv
bnRleHQoKSkKQEAgLTIyMyw3ICsyMjMsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVTdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dAogCiB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRp
b24oY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5
b3V0Qm94KSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNl
dExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94KSk7CiB9
CiAKIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNv
bnN0IEZsb2F0aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJv
eCkKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1
dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0QgogICAgIGF1dG8g
ZXN0aW1hdGVkTWFyZ2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5lc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUobGF5b3V0Qm94KTsKICAgICBzZXRFc3RpbWF0ZWRNYXJnaW5CZWZvcmUobGF5b3V0Qm94
LCBlc3RpbWF0ZWRNYXJnaW5CZWZvcmUpOwogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gbm9uQ29sbGFw
c2VkVmFsdWVzID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBlc3Rp
bWF0ZWRNYXJnaW5CZWZvcmUubm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwogICAgIGF1dG8gY29s
bGFwc2VkVmFsdWVzID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xsYXBzZWRWYWx1ZXMgeyBlc3Rp
bWF0ZWRNYXJnaW5CZWZvcmUuY29sbGFwc2VkVmFsdWUsIHsgfSwgZXN0aW1hdGVkTWFyZ2luQmVm
b3JlLmlzQ29sbGFwc2VkVGhyb3VnaCB9OwogICAgIGF1dG8gdmVydGljYWxNYXJnaW4gPSBVc2Vk
VmVydGljYWxNYXJnaW4geyBub25Db2xsYXBzZWRWYWx1ZXMsIGNvbGxhcHNlZFZhbHVlcyB9OwpA
QCAtMzA2LDcgKzMwNiw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVz
dGltYXRlZFZlcnRpY2FsUG9zaXRpb25Gb3JGbG9hdENsZWFyKGNvbnN0CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5k
aXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgQVNTRVJUKCp2ZXJ0aWNhbFBvc2l0aW9uQW5kQ2xl
YXJhbmNlLnBvc2l0aW9uID49IGRpc3BsYXlCb3gudG9wKCkpOwogICAgIGRpc3BsYXlCb3guc2V0
VG9wKCp2ZXJ0aWNhbFBvc2l0aW9uQW5kQ2xlYXJhbmNlLnBvc2l0aW9uKTsKICAgICBpZiAodmVy
dGljYWxQb3NpdGlvbkFuZENsZWFyYW5jZS5jbGVhcmFuY2UpCkBAIC0zMjksNyArMzI5LDcgQEAg
dm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihjb25z
dCBGbG9hdGluZ0NvbnRleHQmIGZsb2EKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRp
bmdQb3NpdGlvbmVkKCkpOwogICAgIEFTU0VSVChoYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShs
YXlvdXRCb3gpKTsKLSAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9w
TGVmdChmbG9hdGluZ0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChsYXlvdXRCb3gpKTsKKyAgICBm
b3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGlu
Z0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChsYXlvdXRCb3gpKTsKIH0KIAogdm9pZCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0
aW5nQ29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKQEAgLTM0
NCw3ICszNDQsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlv
blRvQXZvaWRGbG9hdHMoY29uc3QgRmxvYXRpbmdDb250ZXh0JgogICAgICAgICByZXR1cm47CiAK
ICAgICBpZiAoYXV0byBhZGp1c3RlZFBvc2l0aW9uID0gZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9u
Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGxheW91dEJveCkpCi0gICAgICAgIGRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9uKTsKKyAg
ICAgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldFRvcExlZnQo
KmFkanVzdGVkUG9zaXRpb24pOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gdXNlZEF2YWlsYWJsZVdpZHRoKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0
Qm94LCBPcHRpb25hCiAgICAgaWYgKHVzZWRBdmFpbGFibGVXaWR0aCkKICAgICAgICAgYXZhaWxh
YmxlV2lkdGggPSAqdXNlZEF2YWlsYWJsZVdpZHRoOwogICAgIGVsc2UKLSAgICAgICAgYXZhaWxh
YmxlV2lkdGggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Js
b2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGdlb21l
dHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgp
OwogCiAgICAgYXV0byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0
aCkgLT4gV2lkdGhBbmRNYXJnaW4gewogICAgICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB7IGF2YWlsYWJsZVdpZHRoLCB1c2VkV2lkdGgsIHsgfSB9OwpAQCAtMzgw
LDcgKzM4MCw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5k
TWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hCiAgICAgaWYgKHdpZHRoQW5kTWFy
Z2luLndpZHRoIDwgbWluV2lkdGhBbmRNYXJnaW4ud2lkdGgpCiAgICAgICAgIHdpZHRoQW5kTWFy
Z2luID0gbWluV2lkdGhBbmRNYXJnaW47CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3Jt
YXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRD
b250ZW50Qm94V2lkdGgod2lkdGhBbmRNYXJnaW4ud2lkdGgpOwogICAgIGRpc3BsYXlCb3guc2V0
SG9yaXpvbnRhbE1hcmdpbih3aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luKTsKICAgICBkaXNwbGF5
Qm94LnNldEhvcml6b250YWxDb21wdXRlZE1hcmdpbih3aWR0aEFuZE1hcmdpbi5jb21wdXRlZE1h
cmdpbik7CkBAIC0zOTQsNyArMzk0LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlSGVpZ2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgICAgICAgICAg
cmV0dXJuIGdlb21ldHJ5KCkuaW5GbG93SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZh
bHVlcyk7CiAKICAgICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4obGF5
b3V0Qm94LCB1c2VkVmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkg
fSk7CisgICAgICAgICAgICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9hdGluZ0hlaWdodEFuZE1hcmdp
bihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZ2VvbWV0cnlG
b3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7
CiAKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CkBA
IC00MjQsNyArNDI0LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIC8vIDMuIEFkanVzdCBwcmV2
aW91cyBpbi1mbG93IHNpYmxpbmcgbWFyZ2luIGFmdGVyIHVzaW5nIHRoaXMgbWFyZ2luLgogICAg
IGF1dG8gY29sbGFwc2VkTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xsYXBzZWRWZXJ0aWNh
bFZhbHVlcyhsYXlvdXRCb3gsIGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOwog
ICAgIGF1dG8gdmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW4geyBoZWlnaHRBbmRN
YXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luLCBjb2xsYXBzZWRNYXJnaW4gfTsKLSAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAK
ICAgICAvLyBPdXQgb2YgZmxvdyBib3hlcyBkb24ndCBuZWVkIHZlcnRpY2FsIGFkanVzdG1lbnQg
YWZ0ZXIgbWFyZ2luIGNvbGxhcHNpbmcuCiAgICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bv
c2l0aW9uZWQoKSkgewpAQCAtNDk5LDkgKzQ5OSw5IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRC
CiAgICAgLy8gMi4gQ2hlY2sgaWYgdGhlIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhl
IHByZXZpb3VzIGJveCdzIG1hcmdpbiBhZnRlci4gaWYgbm90IC0+IHJldHVybiBwcmV2aW91cyBi
b3gncyBib3R0b20gaW5jbHVkaW5nIG1hcmdpbiBhZnRlciArIG1hcmdpbkJlZm9yZQogICAgIC8v
IDMuIENoZWNrIGlmIHRoZSBwcmV2aW91cyBib3gncyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2gu
IElmIG5vdCAtPiByZXR1cm4gcHJldmlvdXMgYm94JyBib3R0b20gZXhjbHVkaW5nIG1hcmdpbiBh
ZnRlciArIG1hcmdpbkJlZm9yZSAodGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgZXF1YWwpCiAgICAg
Ly8gNC4gR28gdG8gcHJldmlvdXMgYm94IGFuZCBzdGFydCBmcm9tIHN0ZXAgIzEgdW50aWwgd2Ug
aGl0IHRoZSBwYXJlbnQgYm94LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgaWYgKGRpc3BsYXlCb3guaGFzQ2xlYXJhbmNlKCkp
Ci0gICAgICAgIHJldHVybiBkaXNwbGF5Qm94LnRvcCgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5
ID0gZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAoYm94R2VvbWV0cnkuaGFzQ2xl
YXJhbmNlKCkpCisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS50b3AoKTsKIAogICAgIGF1dG8q
IGN1cnJlbnRMYXlvdXRCb3ggPSAmbGF5b3V0Qm94OwogICAgIHdoaWxlIChjdXJyZW50TGF5b3V0
Qm94KSB7CkBAIC01MDksMTkgKzUwOSwxOSBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0QgogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93U2libGluZyA9ICpj
dXJyZW50TGF5b3V0Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICAgICAgaWYgKCFt
YXJnaW5Db2xsYXBzZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdN
YXJnaW5BZnRlcigqY3VycmVudExheW91dEJveCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZp
b3VzRGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJldmlvdXNJbkZsb3dTaWJs
aW5nKTsKLSAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0Rpc3BsYXlCb3gucmVjdFdpdGhNYXJn
aW4oKS5ib3R0b20oKSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOworICAgICAgICAgICAgYXV0
byYgcHJldmlvdXNCb3hHZW9tZXRyeSA9IGdlb21ldHJ5Rm9yQm94KHByZXZpb3VzSW5GbG93U2li
bGluZyk7CisgICAgICAgICAgICByZXR1cm4gcHJldmlvdXNCb3hHZW9tZXRyeS5yZWN0V2l0aE1h
cmdpbigpLmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIW1hcmdpbkNvbGxhcHNlKCkubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2
aW91c0luRmxvd1NpYmxpbmcpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmV2aW91c0Rpc3BsYXlC
b3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzSW5GbG93U2libGluZyk7Ci0gICAg
ICAgICAgICByZXR1cm4gcHJldmlvdXNEaXNwbGF5Qm94LmJvdHRvbSgpICsgdmVydGljYWxNYXJn
aW4uYmVmb3JlKCk7CisgICAgICAgICAgICBhdXRvJiBwcmV2aW91c0JveEdlb21ldHJ5ID0gZ2Vv
bWV0cnlGb3JCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBw
cmV2aW91c0JveEdlb21ldHJ5LmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7CiAg
ICAgICAgIH0KICAgICAgICAgY3VycmVudExheW91dEJveCA9ICZwcmV2aW91c0luRmxvd1NpYmxp
bmc7CiAgICAgfQogCiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250
YWluaW5nQmxvY2soKTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3AgPSBk
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFRvcCgpOwor
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrQ29udGVudEJveFRvcCA9IGdlb21ldHJ5Rm9yQm94KGNv
bnRhaW5pbmdCbG9jaykuY29udGVudEJveFRvcCgpOwogICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBw
b3NpdGlvbiBkZXBlbmRpbmcgd2hldGhlciB0aGlzIGJveCBkaXJlY3RseSBvciBpbmRpcmVjdGx5
IGFkam9pbnMgd2l0aCBpdHMgcGFyZW50LgogICAgIGF1dG8gZGlyZWN0bHlBZGpvaW5zUGFyZW50
ID0gIWxheW91dEJveC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICBpZiAoZGlyZWN0bHlB
ZGpvaW5zUGFyZW50KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tm
b3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDI2MWFjM2Nk
YWUwNGRlODU1ZDk3MzdlZjM4NzRlMjhiODkyYjlkOWMuLmVlNzU3OTcxMGM1ZjExMDA4MDc0OTdj
OWVmNGY2ZTBiYTg5OWE1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0xMjYs
NiArMTI2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2Fs
TWFyZ2luOjpWYWx1ZXMgcG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmLCBNYXJnaW5U
eXBlKTsKICAgICAgICAgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpWYWx1ZXMg
cG9zaXRpdmVOZWdhdGl2ZU1hcmdpbkJlZm9yZShjb25zdCBCb3gmLCBjb25zdCBVc2VkVmVydGlj
YWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyYpOwogICAgICAgICBQb3NpdGl2ZUFuZE5lZ2F0
aXZlVmVydGljYWxNYXJnaW46OlZhbHVlcyBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIoY29u
c3QgQm94JiwgY29uc3QgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMmKTsK
KyAgICAgICAgYm9vbCBoYXNDbGVhcmFuY2UoY29uc3QgQm94JikgY29uc3Q7CiAKICAgICAgICAg
TGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgeyByZXR1cm4gbV9ibG9ja0Zvcm1hdHRpbmdDb250
ZXh0LmxheW91dFN0YXRlKCk7IH0KICAgICAgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0
YXRlKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja0Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRl
KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRl
eCBiOGFmMThmNDdkNWQ3NTkzZGRlNzRjYjVjOWMwODhlN2Y1MjQxYjJmLi5jNDg3MzFiNTMwNDk4
OTZkOTkxZTFkZmVhMmViODc1NDA5ZDVlZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRp
bmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC01OSwxNSArNTksMTUgQEAgSGVpZ2h0QW5kTWFyZ2lu
IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdo
dEFuZE1hcmcKIAogICAgICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRl
KCk7CiAgICAgICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0Nv
bnRleHQoKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRp
c3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgYXV0byBjb250YWluaW5n
QmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGF1
dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKKyAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250
ZXh0Lmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRC
b3hXaWR0aCgpOwogICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRy
eTo6Y29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVz
IHsgY29udGFpbmluZ0Jsb2NrV2lkdGggfSk7CiAgICAgICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFy
Z2luID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZl
cnRpY2FsTWFyZ2luLmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFm
dGVyLnZhbHVlT3IoMCkgfTsgCi0gICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGRp
c3BsYXlCb3guYm9yZGVyVG9wKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDAp
OworICAgICAgICBhdXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJU
b3AoKSArIGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgICAgICBhdXRv
IGhlaWdodCA9IHVzZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6
IGNvbXB1dGVkSGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogCiAg
ICAgICAgIGlmIChoZWlnaHQpIHsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ0Jv
dHRvbSA9IGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0
b20oKS52YWx1ZU9yKDApOworICAgICAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nQm90dG9t
ID0gYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9t
KCkudmFsdWVPcigwKTsKICAgICAgICAgICAgIGF1dG8gY29udGVudEhlaWdodCA9IGxheW91dEJv
eC5zdHlsZSgpLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCA/ICpoZWlnaHQg
OiAqaGVpZ2h0IC0gKGJvcmRlckFuZFBhZGRpbmdUb3AgKyBib3JkZXJBbmRQYWRkaW5nQm90dG9t
KTsgIAogICAgICAgICAgICAgcmV0dXJuIHsgY29udGVudEhlaWdodCwgbm9uQ29sbGFwc2VkTWFy
Z2luIH07CiAgICAgICAgIH0KQEAgLTg4LDggKzg4LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1h
cmcKICAgICAgICAgQVNTRVJUKGxhc3RJbkZsb3dDaGlsZCk7CiAgICAgICAgIGF1dG8gbWFyZ2lu
Q29sbGFwc2UgPSBNYXJnaW5Db2xsYXBzZShmb3JtYXR0aW5nQ29udGV4dCk7CiAgICAgICAgIGlm
ICghbWFyZ2luQ29sbGFwc2UubWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0
ZXIoKmxhc3RJbkZsb3dDaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dEaXNw
bGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGFzdElu
Rmxvd0NoaWxkKTsKLSAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luID0g
bGFzdEluRmxvd0Rpc3BsYXlCb3guYm90dG9tKCkgKyAobGFzdEluRmxvd0Rpc3BsYXlCb3guaGFz
Q29sbGFwc2VkVGhyb3VnaE1hcmdpbigpID8gTGF5b3V0VW5pdCgpIDogbGFzdEluRmxvd0Rpc3Bs
YXlCb3gubWFyZ2luQWZ0ZXIoKSk7IAorICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0JveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmxhc3RJbkZsb3dDaGls
ZCk7CisgICAgICAgICAgICBhdXRvIGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiA9IGxhc3RJbkZs
b3dCb3hHZW9tZXRyeS5ib3R0b20oKSArIChsYXN0SW5GbG93Qm94R2VvbWV0cnkuaGFzQ29sbGFw
c2VkVGhyb3VnaE1hcmdpbigpID8gTGF5b3V0VW5pdCgpIDogbGFzdEluRmxvd0JveEdlb21ldHJ5
Lm1hcmdpbkFmdGVyKCkpOyAKICAgICAgICAgICAgIHJldHVybiB7IGJvdHRvbUVkZ2VPZkJvdHRv
bU1hcmdpbiAtIGJvcmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAg
ICAgICB9CiAKQEAgLTk4LDggKzk4LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKICAgICAg
ICAgd2hpbGUgKGluRmxvd0NoaWxkICYmIG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxh
cHNlc1dpdGhQYXJlbnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQogICAgICAgICAgICAgaW5G
bG93Q2hpbGQgPSBpbkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAgICAg
IGlmIChpbkZsb3dDaGlsZCkgewotICAgICAgICAgICAgYXV0byYgaW5GbG93RGlzcGxheUJveCA9
IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmluRmxvd0NoaWxkKTsK
LSAgICAgICAgICAgIHJldHVybiB7IGluRmxvd0Rpc3BsYXlCb3gudG9wKCkgKyBpbkZsb3dEaXNw
bGF5Qm94LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dEaXNwbGF5Qm94R2VvbWV0
cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOworICAg
ICAgICAgICAgcmV0dXJuIHsgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93
RGlzcGxheUJveEdlb21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGlu
Z1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KIAogICAgICAgICAvLyA0LiB6
ZXJvLCBvdGhlcndpc2UKQEAgLTE0MSwxNSArMTQxLDE1IEBAIFdpZHRoQW5kTWFyZ2luIEJsb2Nr
Rm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFy
Z2luCiAgICAgICAgIGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAgICAgICAgIGF1
dG8qIGNvbnRhaW5pbmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICAg
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2Nr
V2lkdGgudmFsdWVPcigwKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKIAogICAgICAgICBhdXRvIHdpZHRoID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byh1c2Vk
VmFsdWVzLndpZHRoID8gTGVuZ3RoIHsgdXNlZFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9
IDogc3R5bGUubG9naWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICAgICAg
YXV0byBjb21wdXRlZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgIFVzZWRIb3Jpem9udGFs
TWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBk
aXNwbGF5Qm94LmJvcmRlckxlZnQoKTsKLSAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3Bs
YXlCb3guYm9yZGVyUmlnaHQoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGRpc3BsYXlC
b3gucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwotICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9
IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBib3Jk
ZXJMZWZ0ID0gYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpOworICAgICAgICBhdXRvIGJvcmRlclJp
Z2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKKyAgICAgICAgYXV0byBwYWRkaW5nTGVm
dCA9IGJveEdlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBw
YWRkaW5nUmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwogICAg
ICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9IFsmXSB7CiAgICAgICAgICAgICBBU1NFUlQod2lkdGgp
OwogICAgICAgICAgICAgcmV0dXJuIHN0eWxlLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29u
dGVudEJveCA/ICp3aWR0aCA6ICp3aWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBw
YWRkaW5nUmlnaHQgKyBib3JkZXJSaWdodCk7CkBAIC0yMzIsMTcgKzIzMiwxNyBAQCBMYXlvdXRV
bml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0
aW9uKGNvbnN0IEJveCYgbAogICAgIC8vIFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBiZXR3ZWVuIHR3
byBzaWJsaW5nIGJveGVzIGlzIGRldGVybWluZWQgYnkgdGhlICdtYXJnaW4nIHByb3BlcnRpZXMu
CiAgICAgLy8gVmVydGljYWwgbWFyZ2lucyBiZXR3ZWVuIGFkamFjZW50IGJsb2NrLWxldmVsIGJv
eGVzIGluIGEgYmxvY2sgZm9ybWF0dGluZyBjb250ZXh0IGNvbGxhcHNlLgogICAgIGlmIChhdXRv
KiBwcmV2aW91c0luRmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5n
KCkpIHsKLSAgICAgICAgYXV0byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcp
OwotICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94LmJvdHRvbSgpICsgcHJl
dmlvdXNJbkZsb3dEaXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCk7CisgICAgICAgIGF1dG8mIHByZXZp
b3VzSW5GbG93Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94
KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOworICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dC
b3hHZW9tZXRyeS5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubWFyZ2luQWZ0
ZXIoKTsKICAgICB9Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZv
ckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94VG9wKCk7
CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJv
eC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFRvcCgpOwogfQogCiBMYXlvdXRVbml0IEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24o
Y29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3Jn
L1RSL0NTUzIyL3Zpc3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCiAgICAgLy8gSW4gYSBibG9j
ayBmb3JtYXR0aW5nIGNvbnRleHQsIGVhY2ggYm94J3MgbGVmdCBvdXRlciBlZGdlIHRvdWNoZXMg
dGhlIGxlZnQgZWRnZSBvZiB0aGUgY29udGFpbmluZyBibG9jayAoZm9yIHJpZ2h0LXRvLWxlZnQg
Zm9ybWF0dGluZywgcmlnaHQgZWRnZXMgdG91Y2gpLgotICAgIHJldHVybiBmb3JtYXR0aW5nQ29u
dGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveExlZnQoKSArIGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxh
eW91dEJveChsYXlvdXRCb3gpLm1hcmdpblN0YXJ0KCk7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdD
b250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29u
dGVudEJveExlZnQoKSArIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KS5tYXJnaW5TdGFydCgpOwogfQogCiBQb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpH
ZW9tZXRyeTo6c3RhdGljUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CkBAIC0y
NjIsNyArMjYyLDcgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm8KICAgICBIZWlnaHRBbmRNYXJn
aW4gaGVpZ2h0QW5kTWFyZ2luOwogICAgIC8vIEZJWE1FOiBMZXQncyBzcGVjaWFsIGNhc2UgdGhl
IHRhYmxlIGhlaWdodCBjb21wdXRhdGlvbiBmb3Igbm93IC0+IGZpZ3VyZSBvdXQgd2hldGhlciB0
YWJsZXMgZmFsbCBpbnRvIHRoZSAiaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4iIGNh
dGVnb3J5LgogICAgIGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250
ZXh0KCkpIHsKLSAgICAgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9u
dGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgICAg
IGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1h
dHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gY29tcGxp
Y2F0ZWRDYXNlcyhsYXlvdXRCb3gsIHVzZWRWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsK
ICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpICYmICFsYXlvdXRC
b3guaXNEb2N1bWVudEJveCgpKSB7CiAgICAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgdGhlIGNh
c2UgZm9yIHRoZSBkb2N1bWVudCBlbGVtZW50LiBMZXQncyBqdXN0IGNvbXBsaWNhdGVkLWNhc2Ug
aXQgZm9yIG5vdy4KQEAgLTI3MCw3ICsyNzAsNyBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBCbwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBjYXNlcwogICAgICAg
ICAvLyBCbG9jay1sZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdo
ZW4gJ292ZXJmbG93JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRo
ZSAnb3ZlcmZsb3cnIHByb3BlcnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUg
dmlld3BvcnQpLgotICAgICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6
b250YWxWYWx1ZXMgeyBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAg
ICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9j
aygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBjb21w
bGljYXRlZENhc2VzKGxheW91dEJveCwgdXNlZFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1ZXMp
OwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0
dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5k
ZXggM2VkM2ZmODcxZmZmZTY5Nzg3OGZlZTFhMTc2ZGU4MTU0NWJhNTZhMC4uMWNmNTk4MGM0ZTAy
Mjk5NThkNDM2NWE1NWVlNjY1MGQ0ZWI0YmJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
bGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGlu
Z0NvbnRleHRRdWlya3MuY3BwCkBAIC02NywxMSArNjcsMTEgQEAgSGVpZ2h0QW5kTWFyZ2luIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0
IEJveCYKIAogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0Nv
bnRleHQoKTsKICAgICBhdXRvJiBkb2N1bWVudEJveCA9IGxheW91dEJveC5pc0RvY3VtZW50Qm94
KCkgPyBsYXlvdXRCb3ggOiAqbGF5b3V0Qm94LnBhcmVudCgpOwotICAgIGF1dG8mIGRvY3VtZW50
Qm94RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
ZG9jdW1lbnRCb3gpOworICAgIGF1dG8mIGRvY3VtZW50Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dC5nZW9tZXRyeUZvckJveChkb2N1bWVudEJveCk7CiAKLSAgICBhdXRvJiBpbml0aWFs
Q29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goaW5pdGlhbENvbnRhaW5pbmdCbG9jayhsYXlvdXRCb3gpKTsKLSAgICBhdXRv
IHN0cmVjaGVkSGVpZ2h0ID0gaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVu
dEJveEhlaWdodCgpOwotICAgIHN0cmVjaGVkSGVpZ2h0IC09IGRvY3VtZW50Qm94RGlzcGxheUJv
eC52ZXJ0aWNhbEJvcmRlcigpICsgZG9jdW1lbnRCb3hEaXNwbGF5Qm94LnZlcnRpY2FsUGFkZGlu
ZygpLnZhbHVlT3IoMCk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jR2VvbWV0cnkg
PSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChpbml0aWFsQ29udGFpbmluZ0Jsb2Nr
KGxheW91dEJveCkpOworICAgIGF1dG8gc3RyZWNoZWRIZWlnaHQgPSBpbml0aWFsQ29udGFpbmlu
Z0Jsb2NHZW9tZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisgICAgc3RyZWNoZWRIZWlnaHQgLT0g
ZG9jdW1lbnRCb3hHZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgZG9jdW1lbnRCb3hHZW9tZXRy
eS52ZXJ0aWNhbFBhZGRpbmcoKS52YWx1ZU9yKDApOwogCiAgICAgTGF5b3V0VW5pdCB0b3RhbFZl
cnRpY2FsTWFyZ2luOwogICAgIGlmIChsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7CkBAIC04
MiwxMSArODIsMTEgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1
aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYKICAgICAgICAgLy8gSGVyZSBp
cyB0aGUgcXVpcmt5IHBhcnQgZm9yIGJvZHkgYm94OgogICAgICAgICAvLyBTdHJldGNoIHRoZSBi
b2R5IHVzaW5nIHRoZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sncyBoZWlnaHQgYW5kIHNocmlu
ayBpdCB3aXRoIGRvY3VtZW50IGJveCdzIG1hcmdpbi9ib3JkZXIvcGFkZGluZy4KICAgICAgICAg
Ly8gVGhpcyBsb29rcyBleHRyZW1lbHkgb2RkIHdoZW4gaHRtbCBoYXMgbm9uLWF1dG8gaGVpZ2h0
LgotICAgICAgICBhdXRvIGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nQ29u
dGV4dC5nZW9tZXRyeSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIFVzZWRI
b3Jpem9udGFsVmFsdWVzIHsgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVu
dEJveFdpZHRoKCkgfSk7CisgICAgICAgIGF1dG8gZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1
bWVudEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBpbml0aWFsQ29udGFpbmluZ0Jsb2NHZW9t
ZXRyeS5jb250ZW50Qm94V2lkdGgoKSB9KTsKICAgICAgICAgc3RyZWNoZWRIZWlnaHQgLT0gKGRv
Y3VtZW50Qm94VmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBkb2N1bWVudEJveFZl
cnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkpOwogCi0gICAgICAgIGF1dG8mIGJvZHlCb3hE
aXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOwotICAgICAgICBzdHJlY2hlZEhlaWdodCAtPSBib2R5Qm94RGlzcGxheUJveC52ZXJ0
aWNhbEJvcmRlcigpICsgYm9keUJveERpc3BsYXlCb3gudmVydGljYWxQYWRkaW5nKCkudmFsdWVP
cigwKTsKKyAgICAgICAgYXV0byYgYm9keUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQu
Z2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgc3RyZWNoZWRIZWlnaHQgLT0gYm9k
eUJveEdlb21ldHJ5LnZlcnRpY2FsQm9yZGVyKCkgKyBib2R5Qm94R2VvbWV0cnkudmVydGljYWxQ
YWRkaW5nKCkudmFsdWVPcigwKTsKIAogICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9
IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW47CiAgICAgICAgIGF1dG8gY29sbGFw
c2VkTWFyZ2luID0gTWFyZ2luQ29sbGFwc2UoZm9ybWF0dGluZ0NvbnRleHQpLmNvbGxhcHNlZFZl
cnRpY2FsVmFsdWVzKGxheW91dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBz
ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2lu
Q29sbGFwc2UuY3BwCmluZGV4IGMwNDY3MTAxNzM1MTc4ZTBhMjkwMWJjMWUyMDJiN2QwOTdlMmYz
MjkuLmY2NmEzMDI3NjE0OWVjMGM5ODNhY2U3NGM2OTI0M2Q0NWNiNmQxYzggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBz
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01h
cmdpbkNvbGxhcHNlLmNwcApAQCAtNzAsMTMgKzcwLDYgQEAgc3RhdGljIGJvb2wgaGFzUGFkZGlu
Z0FmdGVyKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIHJldHVybiBoYXNQYWRkaW5nKGxheW91
dEJveC5zdHlsZSgpLnBhZGRpbmdBZnRlcigpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFzQ2xlYXJh
bmNlKGNvbnN0IEZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQm94
JiBsYXlvdXRCb3gpCi17Ci0gICAgaWYgKCFsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KS5oYXNDbGVhcmFuY2UoKTsKLX0KLQogc3RhdGljIGJv
b2wgZXN0YWJsaXNoZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgbGF5b3V0Qm94
KQogewogICAgIC8vIFdlYktpdCB0cmVhdHMgdGhlIGRvY3VtZW50IGVsZW1lbnQgcmVuZGVyZXIg
YXMgYSBibG9jayBmb3JtYXR0aW5nIGNvbnRleHQgcm9vdC4gSXQgcHJvYmFibHkgb25seSBpbXBh
Y3RzIG1hcmdpbiBjb2xsYXBzaW5nLCBzbyBsZXQncyBub3QgZG8KQEAgLTg2LDYgKzc5LDE3IEBA
IHN0YXRpYyBib29sIGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gm
IGxheW91dEJveCkKICAgICByZXR1cm4gbGF5b3V0Qm94LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0
aW5nQ29udGV4dCgpOwogfQogCitib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNv
bGxhcHNlOjpoYXNDbGVhcmFuY2UoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7CisgICAg
aWYgKCFsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgLy8gRklYTUU6IGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGlu
Z1Jvb3QgbG9naWMgZW5kcyB1cCBjYWxsaW5nIGludG8gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBs
YXlvdXRCb3ggKGZpcnN0IGluZmxvdyBjaGlsZCkgaGFzCisgICAgLy8gbm90IGJlZW4gbGFpZCBv
dXQuCisgICAgaWYgKCFsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5Rm9yQm94KGxheW91dEJveCkuaGFzQ2xlYXJhbmNlKCk7Cit9CisKIGJvb2wgQmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQ
YXJlbnRNYXJnaW5BZnRlcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyAx
LiBUaGlzIGlzIHRoZSBsYXN0IGluLWZsb3cgY2hpbGQgYW5kIGl0cyBtYXJnaW5zIGNvbGxhcHNl
IHRocm91Z2ggYW5kIHRoZSBtYXJnaW4gYWZ0ZXIgY29sbGFwc2VzIHdpdGggcGFyZW50J3MgbWFy
Z2luIGFmdGVyIG9yCkBAIC0xNDEsNyArMTQ1LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmcK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gLi4uYW5kIHRoZSBjaGlsZCBoYXMgbm8g
Y2xlYXJhbmNlLgotICAgIGlmIChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgbGF5
b3V0Qm94KSkKKyAgICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dEJveCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAogICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDcgKzE4MCw3IEBAIGJvb2wgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNl
c1dpdGhQcmV2aW91c1NpCiAKICAgICAvLyBUaGUgYm90dG9tIG1hcmdpbiBvZiBhbiBpbi1mbG93
IGJsb2NrLWxldmVsIGVsZW1lbnQgYWx3YXlzIGNvbGxhcHNlcyB3aXRoIHRoZSB0b3AgbWFyZ2lu
IG9mCiAgICAgLy8gaXRzIG5leHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJsaW5nLCB1bmxlc3Mg
dGhhdCBzaWJsaW5nIGhhcyBjbGVhcmFuY2UuCi0gICAgaWYgKGhhc0NsZWFyYW5jZShmb3JtYXR0
aW5nQ29udGV4dCgpLCBsYXlvdXRCb3gpKQorICAgIGlmIChoYXNDbGVhcmFuY2UobGF5b3V0Qm94
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDksNyAr
MjEzLDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFy
Z2luQmVmb3JlQ29sbGFwc2VzV2l0aEZpcnN0SW5GbG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gLi4uYW5kIHRoZSBjaGlsZCBoYXMgbm8gY2xlYXJhbmNlLgotICAgIGlmIChoYXND
bGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgZmlyc3RJbkZsb3dDaGlsZCkpCisgICAgaWYg
KGhhc0NsZWFyYW5jZShmaXJzdEluRmxvd0NoaWxkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgLy8gTWFyZ2lucyBvZiBpbmxpbmUtYmxvY2sgYm94ZXMgZG8gbm90IGNvbGxhcHNlLgpA
QCAtMjI5LDcgKzIzMyw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29s
bGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnCiAgICAgZm9yIChhdXRv
KiBwcmV2aW91c1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7IHBy
ZXZpb3VzU2libGluZzsgcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nLT5wcmV2aW91
c0luRmxvd1NpYmxpbmcoKSkgewogICAgICAgICBpZiAoIW1hcmdpbnNDb2xsYXBzZVRocm91Z2go
KnByZXZpb3VzU2libGluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlm
IChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgKnByZXZpb3VzU2libGluZykpCisg
ICAgICAgIGlmIChoYXNDbGVhcmFuY2UoKnByZXZpb3VzU2libGluZykpCiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5LDcgKzM0Myw3IEBA
IGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVy
Q29sbGFwc2VzV2l0aExhc3RJbkZsb3dDCiAgICAgLy8gbm9yIChpZiB0aGUgYm94J3MgbWluLWhl
aWdodCBpcyBub24temVybykgd2l0aCB0aGUgYm94J3MgdG9wIG1hcmdpbi4KICAgICBhdXRvIGNv
bXB1dGVkTWluSGVpZ2h0ID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbE1pbkhlaWdodCgpOwog
ICAgIGlmICghY29tcHV0ZWRNaW5IZWlnaHQuaXNBdXRvKCkgJiYgY29tcHV0ZWRNaW5IZWlnaHQu
dmFsdWUoKQotICAgICAgICAmJiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2lu
QmVmb3JlKGxhc3RJbkZsb3dDaGlsZCkgfHwgaGFzQ2xlYXJhbmNlKGZvcm1hdHRpbmdDb250ZXh0
KCksIGxhc3RJbkZsb3dDaGlsZCkpKQorICAgICAgICAmJiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNX
aXRoUGFyZW50TWFyZ2luQmVmb3JlKGxhc3RJbkZsb3dDaGlsZCkgfHwgaGFzQ2xlYXJhbmNlKGxh
c3RJbkZsb3dDaGlsZCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYXJnaW5z
IG9mIGlubGluZS1ibG9jayBib3hlcyBkbyBub3QgY29sbGFwc2UuCkBAIC00NzIsMTEgKzQ3Niwx
MSBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVN
YXJnaW5BZnRlckZvclByZXZpb3VzU2libGluZwogICAgIGF1dG8qIGN1cnJlbnRCb3ggPSAmbGF5
b3V0Qm94OwogICAgIHdoaWxlIChtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJs
aW5nTWFyZ2luQWZ0ZXIoKmN1cnJlbnRCb3gpKSB7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzU2li
bGluZyA9ICpjdXJyZW50Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKLSAgICAgICAgYXV0
byYgcHJldmlvdXNTaWJsaW5nRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxh
eUJveEZvckxheW91dEJveChwcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhdXRvJiBwcmV2aW91
c1NpYmxpbmdEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KHByZXZpb3VzU2libGluZyk7CiAgICAgICAgIGF1dG8gcHJldmlvdXNTaWJs
aW5nVmVydGljYWxNYXJnaW4gPSBwcmV2aW91c1NpYmxpbmdEaXNwbGF5Qm94LnZlcnRpY2FsTWFy
Z2luKCk7CiAKICAgICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkJlZm9yZSA9IHBy
ZXZpb3VzU2libGluZ1ZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmJlZm9yZTsKLSAg
ICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVyID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjdXJyZW50Qm94KS52ZXJ0aWNhbE1hcmdpbigp
LmJlZm9yZSgpOworICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luQWZ0ZXIgPSBm
b3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpjdXJyZW50Qm94KS52ZXJ0aWNhbE1h
cmdpbigpLmJlZm9yZSgpOwogCiAgICAgICAgIGF1dG8gbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCA9
IHRoaXMtPm1hcmdpbnNDb2xsYXBzZVRocm91Z2gocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICAg
aWYgKG1hcmdpbnNDb2xsYXBzZVRocm91Z2gpCkBAIC01MTQsNyArNTE4LDcgQEAgUG9zaXRpdmVB
bmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZ2luQ29sbGFwc2UKICAgICAgICAgcmV0dXJuIG1hcmdpblR5cGUgPT0gTWFyZ2luVHlwZTo6
QmVmb3JlID8gcG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luLmJlZm9yZSA6IHBvc2l0
aXZlQW5kTmVnYXRpdmVWZXJ0aWNhbE1hcmdpbi5hZnRlcjsgCiAgICAgfQogICAgIC8vIFRoaXMg
aXMgdGhlIGVzdGltYXRlIHBhdGguIFdlIGRvbid0IHlldCBoYXZlIHBvc2l0aXZlL25lZ2F0aXZl
IG1hcmdpbiBjb21wdXRlZC4KLSAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZh
bHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0
Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGF1dG8gdXNl
ZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9t
ZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgo
KSB9OwogICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnkoKS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVl
cyk7CiAgICAgYXV0byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5v
bkNvbGxhcHNlZFZhbHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3Io
MCksIGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKIApAQCAtNTgy
LDcgKzU4Niw3IEBAIEVzdGltYXRlZE1hcmdpbkJlZm9yZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6ZXN0aW1hdGVkTWFyZ2luQmVmCiAgICAgQVNTRVJUKGxheW91dEJv
eC5pc0luRmxvdygpIHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKICAgICBB
U1NFUlQoIWxheW91dEJveC5yZXBsYWNlZCgpKTsKIAotICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVz
ZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07
CisgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3JtYXR0aW5n
Q29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNv
bnRlbnRCb3hXaWR0aCgpIH07CiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0
Qm94LCB1c2VkVmFsdWVzKTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0
aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5i
ZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDAp
IH07CiAgICAgYXV0byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gdGhpcy0+bWFyZ2luc0NvbGxh
cHNlVGhyb3VnaChsYXlvdXRCb3gpOwpAQCAtNjA0LDcgKzYwOCw3IEBAIExheW91dFVuaXQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUlnbm9yaW5n
Q29sbGFwc2luCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1
cGRhdGVQb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
ewogICAgIEFTU0VSVChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwotICAgIGF1dG8gbm9u
Q29sbGFwc2VkVmFsdWVzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveCkudmVydGljYWxNYXJnaW4oKS5ub25Db2xsYXBzZWRWYWx1ZXMoKTsKKyAg
ICBhdXRvIG5vbkNvbGxhcHNlZFZhbHVlcyA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KS52ZXJ0aWNhbE1hcmdpbigpLm5vbkNvbGxhcHNlZFZhbHVlcygpOwog
CiAgICAgYXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gdGhpcy0+cG9zaXRpdmVO
ZWdhdGl2ZU1hcmdpbkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7CiAgICAg
YXV0byBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSB0aGlzLT5wb3NpdGl2ZU5lZ2F0aXZl
TWFyZ2luQWZ0ZXIobGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IDg3ZWI5NDE4
ZjlhM2YxZTM0YzhmY2M4MTljNDJiODAxNDgwMmE2YzAuLmExNjI5MGU0ZjA2YzVmZjUxMzhiMWFi
OGEyZmVhOTgxYWQ1MzQ3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9h
dHMvRmxvYXRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRz
L0Zsb2F0aW5nQ29udGV4dC5jcHAKQEAgLTE2OCwyMCArMTY4LDIwIEBAIFBvaW50IEZsb2F0aW5n
Q29udGV4dDo6cG9zaXRpb25Gb3JGbG9hdChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKICAg
ICBBU1NFUlQoYXJlRmxvYXRzSG9yaXpvbnRhbGx5U29ydGVkKG1fZmxvYXRpbmdTdGF0ZSkpOwog
CiAgICAgaWYgKGlzRW1wdHkoKSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0
dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgICAg
IGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOwogCiAgICAgICAgIGF1dG8gYWxpZ25XaXRoQ29udGFpbmluZ0Jsb2NrID0gWyZd
KCkgLT4gUG9zaXRpb24gewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZmxvYXRpbmcg
dG8gYWxpZ24gd2l0aCwgcHVzaCB0aGUgYm94IHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ugb2YgaXRz
IGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveC4KLSAgICAgICAgICAgIGF1dG8mIGNvbnRh
aW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgICAgICAgICBhdXRv
JiBjb250YWluaW5nQmxvY2tHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CiAKICAgICAgICAgICAgIGlmIChs
YXlvdXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIFBvc2l0aW9uIHsgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgp
ICsgZGlzcGxheUJveC5tYXJnaW5TdGFydCgpIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIFBv
c2l0aW9uIHsgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkuY29udGVudEJveExlZnQoKSArIGJveEdl
b21ldHJ5Lm1hcmdpblN0YXJ0KCkgfTsKIAotICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uIHsg
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSAtIGRpc3BsYXlCb3gu
bWFyZ2luRW5kKCkgLSBkaXNwbGF5Qm94LndpZHRoKCkgfTsKKyAgICAgICAgICAgIHJldHVybiBQ
b3NpdGlvbiB7IGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hSaWdodCgpIC0gYm94
R2VvbWV0cnkubWFyZ2luRW5kKCkgLSBib3hHZW9tZXRyeS53aWR0aCgpIH07CiAgICAgICAgIH07
CiAKICAgICAgICAgLy8gTm8gZmxvYXQgYm94IG9uIHRoZSBjb250ZXh0IHlldCAtPiBhbGlnbiBp
dCB3aXRoIHRoZSBjb250YWluaW5nIGJsb2NrJ3MgbGVmdC9yaWdodCBlZGdlLgotICAgICAgICBy
ZXR1cm4geyBhbGlnbldpdGhDb250YWluaW5nQmxvY2soKSwgZGlzcGxheUJveC50b3AoKSB9Owor
ICAgICAgICByZXR1cm4geyBhbGlnbldpdGhDb250YWluaW5nQmxvY2soKSwgYm94R2VvbWV0cnku
dG9wKCkgfTsKICAgICB9CiAKICAgICAvLyBGaW5kIHRoZSB0b3AgbW9zdCBwb3NpdGlvbiB3aGVy
ZSB0aGUgZmxvYXQgYm94IGZpdHMuCkBAIC0yMzgsOSArMjM4LDkgQEAgRmxvYXRpbmdDb250ZXh0
OjpDbGVhcmFuY2VQb3NpdGlvbiBGbG9hdGluZ0NvbnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRo
Q2xlYXJhbmMKICAgICAgICAgLy8gQ2xlYXJhbmNlIGluaGliaXRzIG1hcmdpbiBjb2xsYXBzaW5n
LgogICAgICAgICBpZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnBy
ZXZpb3VzSW5GbG93U2libGluZygpKSB7CiAgICAgICAgICAgICAvLyBEb2VzIHRoaXMgYm94IHdp
dGggY2xlYXJhbmNlIGFjdHVhbGx5IGNvbGxhcHNlIGl0cyBtYXJnaW4gYmVmb3JlIHdpdGggdGhl
IHByZXZpb3VzIGluZmxvdyBib3gncyBtYXJnaW4gYWZ0ZXI/IAotICAgICAgICAgICAgYXV0byB2
ZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpLnZlcnRpY2FsTWFyZ2luKCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2Fs
TWFyZ2luID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLnZl
cnRpY2FsTWFyZ2luKCk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxNYXJnaW4uaGFzQ29sbGFw
c2VkVmFsdWVzKCkgJiYgdmVydGljYWxNYXJnaW4uY29sbGFwc2VkVmFsdWVzKCkuYmVmb3JlKSB7
Ci0gICAgICAgICAgICAgICAgYXV0byBwcmV2aW91c1ZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGlu
Z0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcp
LnZlcnRpY2FsTWFyZ2luKCk7CisgICAgICAgICAgICAgICAgYXV0byBwcmV2aW91c1ZlcnRpY2Fs
TWFyZ2luID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZs
b3dTaWJsaW5nKS52ZXJ0aWNhbE1hcmdpbigpOwogICAgICAgICAgICAgICAgIGF1dG8gY29sbGFw
c2VkTWFyZ2luID0gKnZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmJlZm9yZTsKICAg
ICAgICAgICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IHByZXZpb3VzVmVydGljYWxN
YXJnaW4uYWZ0ZXIoKSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOwogICAgICAgICAgICAgICAg
IGF1dG8gbWFyZ2luRGlmZmVyZW5jZSA9IG5vbkNvbGxhcHNlZE1hcmdpbiAtIGNvbGxhcHNlZE1h
cmdpbjsKQEAgLTQyNSw4ICs0MjUsOCBAQCBGbG9hdGluZ0NvbnRleHQ6OkFic29sdXRlQ29vcmRp
bmF0ZVZhbHVlc0ZvckZsb2F0QXZvaWRlciBGbG9hdGluZ0NvbnRleHQ6OmFic29sdQogICAgIGF1
dG8gZGlzcGxheUJveCA9IG1hcFRvRmxvYXRpbmdTdGF0ZVJvb3QoZmxvYXRBdm9pZGVyKTsKIAog
ICAgIGlmICgmY29udGFpbmluZ0Jsb2NrID09ICZmbG9hdGluZ1N0YXRlKCkucm9vdCgpKSB7Ci0g
ICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0
KCkuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250
ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgICAg
IHJldHVybiB7IGRpc3BsYXlCb3gsIHsgfSwgeyAgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5j
b250ZW50Qm94TGVmdCgpLCBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hSaWdo
dCgpIH0gfTsKKyAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goY29udGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29u
dGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpOworICAgICAg
ICByZXR1cm4geyBkaXNwbGF5Qm94LCB7IH0sIHsgIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNv
bnRlbnRCb3hMZWZ0KCksIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hSaWdodCgp
IH0gfTsKICAgICB9CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tBYnNvbHV0ZURpc3BsYXlCb3gg
PSBtYXBUb0Zsb2F0aW5nU3RhdGVSb290KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBjb250
YWluaW5nQmxvY2tMZWZ0ID0gY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVEaXNwbGF5Qm94LmxlZnQo
KTsKQEAgLTQzNiwxMiArNDM2LDEyIEBAIEZsb2F0aW5nQ29udGV4dDo6QWJzb2x1dGVDb29yZGlu
YXRlVmFsdWVzRm9yRmxvYXRBdm9pZGVyIEZsb2F0aW5nQ29udGV4dDo6YWJzb2x1CiBEaXNwbGF5
OjpCb3ggRmxvYXRpbmdDb250ZXh0OjptYXBUb0Zsb2F0aW5nU3RhdGVSb290KGNvbnN0IEJveCYg
ZmxvYXRCb3gpIGNvbnN0CiB7CiAgICAgYXV0byYgZmxvYXRpbmdTdGF0ZVJvb3QgPSBmbG9hdGlu
Z1N0YXRlKCkucm9vdCgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpF
c2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgYXV0byB0b3BM
ZWZ0ID0gZGlzcGxheUJveC50b3BMZWZ0KCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0Qm94LCBGb3JtYXR0aW5nQ29udGV4
dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpOworICAgIGF1dG8g
dG9wTGVmdCA9IGJveEdlb21ldHJ5LnRvcExlZnQoKTsKICAgICBmb3IgKGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9IGZsb2F0Qm94LmNvbnRhaW5pbmdCbG9jaygpOyBjb250YWluaW5nQmxvY2sgJiYg
Y29udGFpbmluZ0Jsb2NrICE9ICZmbG9hdGluZ1N0YXRlUm9vdDsgY29udGFpbmluZ0Jsb2NrID0g
Y29udGFpbmluZ0Jsb2NrLT5jb250YWluaW5nQmxvY2soKSkKLSAgICAgICAgdG9wTGVmdC5tb3Zl
QnkoZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5n
QmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0
aW5nQ29udGV4dCkudG9wTGVmdCgpKTsKKyAgICAgICAgdG9wTGVmdC5tb3ZlQnkoZm9ybWF0dGlu
Z0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqY29udGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29u
dGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpLnRvcExlZnQo
KSk7CiAKLSAgICBhdXRvIG1hcHBlZERpc3BsYXlCb3ggPSBEaXNwbGF5OjpCb3goZGlzcGxheUJv
eCk7CisgICAgYXV0byBtYXBwZWREaXNwbGF5Qm94ID0gRGlzcGxheTo6Qm94KGJveEdlb21ldHJ5
KTsKICAgICBtYXBwZWREaXNwbGF5Qm94LnNldFRvcExlZnQodG9wTGVmdCk7CiAgICAgcmV0dXJu
IG1hcHBlZERpc3BsYXlCb3g7CiB9CkBAIC00NDksOSArNDQ5LDkgQEAgRGlzcGxheTo6Qm94IEZs
b2F0aW5nQ29udGV4dDo6bWFwVG9GbG9hdGluZ1N0YXRlUm9vdChjb25zdCBCb3gmIGZsb2F0Qm94
KSBjb25zdAogTGF5b3V0VW5pdCBGbG9hdGluZ0NvbnRleHQ6Om1hcFRvcFRvRmxvYXRpbmdTdGF0
ZVJvb3QoY29uc3QgQm94JiBmbG9hdEJveCkgY29uc3QKIHsKICAgICBhdXRvJiBmbG9hdGluZ1N0
YXRlUm9vdCA9IGZsb2F0aW5nU3RhdGUoKS5yb290KCk7Ci0gICAgYXV0byB0b3AgPSBmb3JtYXR0
aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gsIEZvcm1hdHRpbmdD
b250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCkudG9wKCk7
CisgICAgYXV0byB0b3AgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0
Qm94LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGlu
Z0NvbnRleHQpLnRvcCgpOwogICAgIGZvciAoYXV0byogY29udGFpbmVyID0gZmxvYXRCb3guY29u
dGFpbmluZ0Jsb2NrKCk7IGNvbnRhaW5lciAmJiBjb250YWluZXIgIT0gJmZsb2F0aW5nU3RhdGVS
b290OyBjb250YWluZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICB0
b3AgKz0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWlu
ZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5n
Q29udGV4dCkudG9wKCk7CisgICAgICAgIHRvcCArPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21l
dHJ5Rm9yQm94KCpjb250YWluZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nl
c3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCkudG9wKCk7CiAgICAgcmV0dXJuIHRvcDsKIH0KIApA
QCAtNDYzLDcgKzQ2Myw3IEBAIFBvaW50IEZsb2F0aW5nQ29udGV4dDo6bWFwUG9pbnRGcm9tRm9y
bWF0dGluZ0NvbnRleHRSb290VG9GbG9hdGluZ1N0YXRlUm9vdChQb2luCiAgICAgICAgIHJldHVy
biBwb3NpdGlvbjsKICAgICBhdXRvIG1hcHBlZFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgZm9y
IChhdXRvKiBjb250YWluZXIgPSAmZnJvbTsgY29udGFpbmVyICYmIGNvbnRhaW5lciAhPSAmdG87
IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIG1hcHBl
ZFBvc2l0aW9uLm1vdmVCeShmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmNvbnRhaW5lciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc1BhcmVu
dEZvcm1hdHRpbmdDb250ZXh0KS50b3BMZWZ0KCkpOworICAgICAgICBtYXBwZWRQb3NpdGlvbi5t
b3ZlQnkoZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqY29udGFpbmVyLCBGb3Jt
YXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQp
LnRvcExlZnQoKSk7CiAgICAgcmV0dXJuIG1hcHBlZFBvc2l0aW9uOwogfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggZGU5NzYyZjRlZWE1NGEzZTBjY2Y0NDJiOTVj
NmQwNWFmYTU5NjA0Ny4uOTgwNTY4OWFiYjM1MDU4NGY0OTQwMTkyMzg1ZTg1ZmQ4NGI4MGEwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzIsNyArNzIsNyBAQCB2
b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKQogICAgICAgICByZXR1cm47CiAK
ICAgICBMT0dfV0lUSF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAi
W1N0YXJ0XSAtPiBpbmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgi
IDw8ICZyb290IDw8ICIpIik7Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGRpc3BsYXlCb3hG
b3JMYXlvdXRCb3gocm9vdCkuY29udGVudEJveFdpZHRoKCk7CisgICAgYXV0byBhdmFpbGFibGVX
aWR0aCA9IGdlb21ldHJ5Rm9yQm94KHJvb3QpLmNvbnRlbnRCb3hXaWR0aCgpOwogICAgIGF1dG8g
dXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGggfTsKICAg
ICBhdXRvKiBsYXlvdXRCb3ggPSByb290LmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7CiAg
ICAgLy8gQ29tcHV0ZSB3aWR0aC9oZWlnaHQgZm9yIG5vbi10ZXh0IGNvbnRlbnQgYW5kIG1hcmdp
bi9ib3JkZXIvcGFkZGluZyBmb3IgaW5saW5lIGNvbnRhaW5lcnMuCkBAIC0xMzgsNyArMTM4LDcg
QEAgRm9ybWF0dGluZ0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkSW4KICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBtaW4v
bWF4IGZvcm1hdHRpbmcgcm9vdCB3aWR0aCB2YWx1ZXMgYmVmb3JlIGZvcm1hdHRpbmcgdGhlIGxp
bmVzLgogICAgICAgICBmb3IgKGF1dG8qIGZvcm1hdHRpbmdSb290IDogZm9ybWF0dGluZ0NvbnRl
eHRSb290TGlzdCkgewogICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aHMgPSBsYXlvdXRT
dGF0ZS5mb3JtYXR0aW5nU3RhdGVGb3JCb3goKmZvcm1hdHRpbmdSb290KS5pbnRyaW5zaWNXaWR0
aENvbnN0cmFpbnRzRm9yQm94KCpmb3JtYXR0aW5nUm9vdCk7Ci0gICAgICAgICAgICBhdXRvJiBk
aXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3QpOworICAg
ICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3go
KmZvcm1hdHRpbmdSb290KTsKICAgICAgICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gKGF2YWls
YWJsZVdpZHRoID8gaW50cmluc2ljV2lkdGhzLT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhzLT5t
aW5pbXVtKSAtIGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKTsK
ICAgICAgICAgICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aCk7
CiAgICAgICAgIH0KQEAgLTE1Myw3ICsxNTMsNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmlu
c2ljV2lkdGhDb25zdHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbgog
dm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBh
ZGRpbmdGb3JHZW5lcmljSW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFT
U0VSVChsYXlvdXRCb3guaXNBbm9ueW1vdXMoKSB8fCBsYXlvdXRCb3guaXNMaW5lQnJlYWtCb3go
KSk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0
Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJv
eChsYXlvdXRCb3gpOwogCiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwg
eyB9IH0pOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwpAQCAtMTY2
LDcgKzE2Niw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5C
b3JkZXJBbmRQYWRkaW5nRm9ySW5saW5lQ29udGFpbmVyKGNvCiAgICAgY29tcHV0ZUhvcml6b250
YWxNYXJnaW4oY29udGFpbmVyLCB1c2VkVmFsdWVzKTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFk
ZGluZyhjb250YWluZXIsIHVzZWRWYWx1ZXMpOwogICAgIC8vIElubGluZSBjb250YWluZXJzICg8
c3Bhbj4pIGhhdmUgMCB2ZXJ0aWNhbCBtYXJnaW5zLgotICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOworICAgIGZvcm1h
dHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsg
fSwgeyB9IH0pOwogfQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50
cmluc2ljV2lkdGhGb3JGb3JtYXR0aW5nUm9vdChjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290KQpA
QCAtMTgzLDE0ICsxODMsMTQgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0
ZUludHJpbnNpY1dpZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JgogICAgIGVsc2UKICAg
ICAgICAgY29uc3RyYWludHMgPSBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0
KGZvcm1hdHRpbmdSb290KS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiAg
ICAgY29uc3RyYWludHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZm9ybWF0
dGluZ1Jvb3QsIGNvbnN0cmFpbnRzKTsKLSAgICBjb25zdHJhaW50cy5leHBhbmQoZGlzcGxheUJv
eEZvckxheW91dEJveChmb3JtYXR0aW5nUm9vdCkuaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBh
ZGRpbmcoKSk7CisgICAgY29uc3RyYWludHMuZXhwYW5kKGdlb21ldHJ5Rm9yQm94KGZvcm1hdHRp
bmdSb290KS5ob3Jpem9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpKTsKICAgICBmb3JtYXR0
aW5nU3RhdGUoKS5zZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGZvcm1hdHRpbmdS
b290LCBjb25zdHJhaW50cyk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVIb3Jpem9udGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRh
bFZhbHVlcyB1c2VkVmFsdWVzKQogewogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2lu
ID0gZ2VvbWV0cnkoKS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5
Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJn
aW4oY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250
YWxNYXJnaW4oeyBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29t
cHV0ZWRIb3Jpem9udGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0pOwogfQpAQCAtMjA3LDcgKzIw
Nyw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdp
bihjb25zdCBCb3gmIGxheW91dEJveCwgVXNlZEhvCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hX
aWR0aCh3aWR0aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFs
TWFyZ2luKHdpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4pOwogICAgIGRpc3BsYXlCb3guc2V0SG9y
aXpvbnRhbENvbXB1dGVkTWFyZ2luKHdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luKTsKQEAg
LTIxNyw3ICsyMTcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVp
Z2h0QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEhlaWdodEFuZE1hcmdp
biBoZWlnaHRBbmRNYXJnaW47CiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25l
ZCgpKQotICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0
QW5kTWFyZ2luKGxheW91dEJveCwgeyB9LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdp
ZHRoKCkgfSk7CisgICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuZmxvYXRpbmdI
ZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB7IH0sIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZ2Vv
bWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRo
KCkgfSk7CiAgICAgZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKICAgICAg
ICAgaGVpZ2h0QW5kTWFyZ2luID0gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdp
bihsYXlvdXRCb3gpOwogICAgIGVsc2UgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQpAQCAtMjI1
LDcgKzIyNSw3IEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRB
bmRNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCb3gpCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0
ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hI
ZWlnaHQoaGVpZ2h0QW5kTWFyZ2luLmhlaWdodCk7CiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNh
bE1hcmdpbih7IGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4sIHsgfSB9KTsKIH0K
QEAgLTIzOCw3ICsyMzgsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRG
b3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiByb290LCBVc2VkSAogICAgIGNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nKHJvb3QsIHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVXaWR0aEFuZE1h
cmdpbihyb290LCB1c2VkVmFsdWVzKTsKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gc3RhdGlj
IHBvc2l0aW9uaW5nIGluIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4gV2UganVzdCBuZWVkIHRv
IGluaXRpYWxpemUgdGhlIHRvcCBsZWZ0IHBvc2l0aW9uLgotICAgIGRpc3BsYXlCb3hGb3JMYXlv
dXRCb3gocm9vdCkuc2V0VG9wTGVmdCh7IDAsIDAgfSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCku
ZGlzcGxheUJveChyb290KS5zZXRUb3BMZWZ0KHsgMCwgMCB9KTsKICAgICAvLyBTd2ljaCBvdmVy
IHRvIHRoZSBuZXcgZm9ybWF0dGluZyBjb250ZXh0ICh0aGUgb25lIHRoYXQgdGhlIHJvb3QgY3Jl
YXRlcykuCiAgICAgYXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IGxheW91dFN0YXRlKCkuY3JlYXRl
Rm9ybWF0dGluZ0NvbnRleHQocm9vdCk7CiAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dCgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRl
eCBlYzUyOGU1NWRkMjg2YzE5NDBjOTY2NjdhNDFkZDU5ZTQ2ZGFlMDA3Li4yMWZlZTIzYzUxYTVj
MGEwMGNkNDk4NGVhODVjZTdlYzUxYThjZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9s
YXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcApAQCAtNzMsNyArNzMsNyBAQCBIZWlnaHRBbmRNYXJn
aW4gSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFu
ZE1hcmdpbihjbwogCiAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCiAgICAgLy8gLSAn
SW5saW5lLWJsb2NrJywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGF1dG8gdXNlZEhvcml6
b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0KCku
ZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250
ZW50Qm94V2lkdGgoKSB9OworICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICByZXR1cm4g
Y29tcGxpY2F0ZWRDYXNlcyhsYXlvdXRCb3gsIHsgfSwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9J
bmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNw
cAppbmRleCBjOTNkZjk3ODVmY2RjZGJjMmU0MTRlNTg1NmY5ZGJmMGZjZWI0YWQ3Li5hYTgxYWM5
YWU1MTlmMzQ5MzI4NmJlNDJhZTU0NzA4ODA5NmMyNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVM
YXlvdXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0TGluZUxheW91dC5jcHAKQEAgLTUzLDIzICs1MywyMiBAQCBz
dGF0aWMgTGF5b3V0VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQm
IGZvcm1hdHRpbmdDb250ZXh0LCBjbwogICAgIH0KIAogICAgIGF1dG8mIGxheW91dEJveCA9IGlu
bGluZUl0ZW0ubGF5b3V0Qm94KCk7Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Lmhhc0Rp
c3BsYXlCb3gobGF5b3V0Qm94KSk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBib3hH
ZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAK
ICAgICBpZiAobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVy
biBkaXNwbGF5Qm94Lm1hcmdpbkJveFdpZHRoKCk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRy
eS5tYXJnaW5Cb3hXaWR0aCgpOwogCiAgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQotICAg
ICAgICByZXR1cm4gZGlzcGxheUJveC53aWR0aCgpOworICAgICAgICByZXR1cm4gYm94R2VvbWV0
cnkud2lkdGgoKTsKIAogICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKLSAg
ICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVy
TGVmdCgpICsgZGlzcGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgICAgIHJl
dHVybiBib3hHZW9tZXRyeS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgp
ICsgYm94R2VvbWV0cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwogCiAgICAgaWYgKGlubGlu
ZUl0ZW0uaXNDb250YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2lu
RW5kKCkgKyBkaXNwbGF5Qm94LmJvcmRlclJpZ2h0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdSaWdo
dCgpLnZhbHVlT3IoMCk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKSAr
IGJveEdlb21ldHJ5LmJvcmRlclJpZ2h0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52
YWx1ZU9yKDApOwogCiAgICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5l
LWJsb2NrKQotICAgIHJldHVybiBkaXNwbGF5Qm94LndpZHRoKCk7CisgICAgcmV0dXJuIGJveEdl
b21ldHJ5LndpZHRoKCk7CiB9CiAKIHN0cnVjdCBJbmRleEFuZFJhbmdlIHsKQEAgLTIxOCw5ICsy
MTcsOCBAQCBMaW5lTGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0
ZW0oY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbQogICAgIEFTU0VSVChicmVha2luZ0NvbnRl
eHQuYnJlYWtpbmdCZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6S2Vl
cCk7CiAgICAgaWYgKGlubGluZUl0ZW0uaXNGbG9hdCgpKSB7CiAgICAgICAgIGF1dG8mIGZsb2F0
Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICAgICAgQVNTRVJUKGZvcm1hdHRpbmdD
b250ZXh0KCkuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOwogICAgICAgICAvLyBTaHJpbmsgYXZh
aWxhYmxlIHNwYWNlIGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1
bnMuCi0gICAgICAgIGF1dG8gZmxvYXRCb3hXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlz
cGxheUJveEZvckxheW91dEJveChmbG9hdEJveCkubWFyZ2luQm94V2lkdGgoKTsKKyAgICAgICAg
YXV0byBmbG9hdEJveFdpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChm
bG9hdEJveCkubWFyZ2luQm94V2lkdGgoKTsKICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRp
bmdQb3NpdGlvbmVkKCkgPyBtX2xpbmUubW92ZUxvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDog
bV9saW5lLm1vdmVMb2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CiAgICAgICAgIG1fZmxvYXRz
LmFwcGVuZChtYWtlV2Vha1B0cihpbmxpbmVJdGVtKSk7CiAgICAgICAgICsrbV9jb21taXR0ZWRJ
bmxpbmVJdGVtQ291bnQ7CkBAIC0yODEsMTEgKzI3OSwxMSBAQCB2b2lkIElubGluZUZvcm1hdHRp
bmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5l
SXRlbQogICAgIGF1dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBh
dXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAg
YXV0byYgZm9ybWF0dGluZ1Jvb3QgPSB0aGlzLT5mb3JtYXR0aW5nUm9vdCgpOwotICAgIGF1dG8m
IGZvcm1hdHRpbmdSb290RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goZm9ybWF0dGluZ1Jvb3QpOworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290R2Vv
bWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCk7
CiAgICAgYXV0byBmbG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5n
Q29udGV4dCwgbGF5b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoZm9ybWF0dGlu
Z1Jvb3QpLmZsb2F0aW5nU3RhdGUoKSB9OwogCi0gICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGZv
cm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94VG9wKCk7Ci0gICAgYXV0byBsaW5lTG9n
aWNhbExlZnQgPSBmb3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveExlZnQoKTsKKyAg
ICBhdXRvIGxpbmVMb2dpY2FsVG9wID0gZm9ybWF0dGluZ1Jvb3RHZW9tZXRyeS5jb250ZW50Qm94
VG9wKCk7CisgICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3JtYXR0aW5nUm9vdEdlb21ldHJ5
LmNvbnRlbnRCb3hMZWZ0KCk7CiAKICAgICBhdXRvIGFwcGx5RmxvYXRDb25zdHJhaW50ID0gWyZd
KGF1dG8mIGxpbmVJbnB1dCkgewogICAgICAgICAvLyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0
cyBhbmQgYWRqdXN0IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBh
Y2NvcmRpbmdseS4KQEAgLTI5NSwxMCArMjkzLDEwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQ6OklubGluZUxheW91dDo6bGF5b3V0KGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVt
CiAgICAgICAgIGF1dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZUlucHV0LmluaXRpYWxDb25zdHJh
aW50cy5sb2dpY2FsVG9wTGVmdC54KCk7CiAgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9
IGZsb2F0aW5nQ29udGV4dC5jb25zdHJhaW50cyh7IGxpbmVMb2dpY2FsVG9wIH0pOwogICAgICAg
ICAvLyBDaGVjayBpZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlvbiBv
biB0aGUgbGluZS4KLSAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENv
bnN0cmFpbnRzLmxlZnQtPnggPD0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hM
ZWZ0KCkpCisgICAgICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJh
aW50cy5sZWZ0LT54IDw9IGZvcm1hdHRpbmdSb290R2VvbWV0cnkuY29udGVudEJveExlZnQoKSkK
ICAgICAgICAgICAgIGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKIAotICAgICAgICBpZiAo
ZmxvYXRDb25zdHJhaW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGZv
cm1hdHRpbmdSb290RGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSkKKyAgICAgICAgaWYgKGZs
b2F0Q29uc3RyYWludHMucmlnaHQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBmb3Jt
YXR0aW5nUm9vdEdlb21ldHJ5LmNvbnRlbnRCb3hSaWdodCgpKQogICAgICAgICAgICAgZmxvYXRD
b25zdHJhaW50cy5yaWdodCA9IHsgfTsKIAogICAgICAgICAvLyBTZXQgdGhlIG1pbmltdW0gZmxv
YXQgYm90dG9tIHZhbHVlIGFzIGEgaGludCBmb3IgdGhlIG5leHQgbGluZSBpZiBuZWVkZWQuCkBA
IC0zNTMsNyArMzUxLDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5s
aW5lTGF5b3V0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IEkKICAgICAgICAgY3VycmVu
dElubGluZUl0ZW0gPSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4ICsgMSwgV1RG
OjpudWxsb3B0IH07CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7CiAgICAgICAgIGZv
ciAoYXV0byYgZmxvYXRJdGVtIDogbGluZUNvbnRlbnQuZmxvYXRzKQotICAgICAgICAgICAgZmxv
YXRzV2lkdGggKz0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChmbG9h
dEl0ZW0tPmxheW91dEJveCgpKS5tYXJnaW5Cb3hXaWR0aCgpOworICAgICAgICAgICAgZmxvYXRz
V2lkdGggKz0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goZmxvYXRJdGVtLT5sYXlv
dXRCb3goKSkubWFyZ2luQm94V2lkdGgoKTsKICAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0
ZDo6bWF4KG1heGltdW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRoICsgbGluZUNvbnRlbnQucnVucy0+
bG9naWNhbFdpZHRoKCkpOwogICAgIH0KICAgICByZXR1cm4gbWF4aW11bUxpbmVXaWR0aDsKQEAg
LTM2OSw4ICszNjcsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlv
dXQ6OmNyZWF0ZURpc3BsYXlSdW5zKGNvbnN0IExpbmU6OkNvbnRlbgogICAgIC8vIE1vdmUgZmxv
YXRzIHRvIHRoZWlyIGZpbmFsIHBvc2l0aW9uLgogICAgIGZvciAoYXV0byBmbG9hdEl0ZW0gOiBm
bG9hdHMpIHsKICAgICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxheW91dEJveCgp
OwotICAgICAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHQuaGFzRGlzcGxheUJveChmbG9hdEJv
eCkpOwotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxh
eUJveEZvckxheW91dEJveChmbG9hdEJveCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUuZGlzcGxheUJveChmbG9hdEJveCk7CiAgICAgICAgIC8vIFNldCBzdGF0
aWMgcG9zaXRpb24gZmlyc3QuCiAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVD
b250ZW50LmxvZ2ljYWxMZWZ0KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3AoKSB9KTsKICAgICAg
ICAgLy8gRmxvYXQgaXQuCkBAIC0zOTcsNyArMzk0LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5n
Q29udGV4dDo6SW5saW5lTGF5b3V0OjpjcmVhdGVEaXNwbGF5UnVucyhjb25zdCBMaW5lOjpDb250
ZW4KICAgICAgICAgYXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGluZGV4KTsKICAgICAgICAg
YXV0byYgbG9naWNhbFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgpOwogICAgICAgICBhdXRv
JiBsYXlvdXRCb3ggPSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgZGlzcGxh
eUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94
KTsKKyAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94
KGxheW91dEJveCk7CiAKICAgICAgICAgaWYgKGxpbmVSdW4tPmlzTGluZUJyZWFrKCkpIHsKICAg
ICAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdChsb2dpY2FsUmVjdC50b3BMZWZ0KCkpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
Rm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDZmNWZi
MjliNTU1YTZlYjYxMmM2OGRjOWM4ZjM5MmRhY2U3MGM0NWYuLjA4ZGUzZDRjYjNkYzY4M2RjZWVh
YzEyZWYxMzE1YzFkMDA3NmRiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dFF1aXJrcy5jcHAKQEAgLTU3LDggKzU3LDggQEAgYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6UXVpcmtzOjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpDb24K
ICAgICAgICAgY2FzZSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrOgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5l
clN0YXJ0OiB7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAo
ZGlzcGxheUJveC5ob3Jpem9udGFsQm9yZGVyKCkgfHwgKGRpc3BsYXlCb3guaG9yaXpvbnRhbFBh
ZGRpbmcoKSAmJiBkaXNwbGF5Qm94Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWUoKSkpCisgICAg
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgICAgIGlmIChib3hHZW9tZXRyeS5ob3Jpem9udGFs
Qm9yZGVyKCkgfHwgKGJveEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkgJiYgYm94R2VvbWV0
cnkuaG9yaXpvbnRhbFBhZGRpbmcoKS52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAppbmRleCBlZTk1
NTE5ZjI5YjNjYmUzMTY5NjBjNmMxMjhlYmMzNmM2YTEzNGMyLi4wNGE5OTIxMjEwNmM1ZWFiMzUy
YTQ4OTQ2NTdkMjVhMWJhMTFiOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcApAQCAtNjcsOCArNjcsOCBAQCBMaW5l
OjpMaW5lKGNvbnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dCwgY29uc3QgSW5pdGlhbAogc3RhdGljIGJvb2wgaXNJbmxpbmVDb250YWluZXJDb25zaWRl
cmVkRW1wdHkoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjb25z
dCBCb3gmIGxheW91dEJveCkKIHsKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVj
ayB3aGV0aGVyIHRoZSBpbmxpbmUgY29udGFpbmVyIGhhcyBjb250ZW50LiBJdCBzaW1wbHkgY2hl
Y2tzIGlmIHRoZSBjb250YWluZXIgaXRzZWxmIGlzIGNvbnNpZGVyZWQgZW1wdHkuCi0gICAgYXV0
byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KTsKLSAgICByZXR1cm4gIShkaXNwbGF5Qm94Lmhvcml6b250YWxCb3JkZXIoKSB8
fCAoZGlzcGxheUJveC5ob3Jpem9udGFsUGFkZGluZygpICYmIGRpc3BsYXlCb3guaG9yaXpvbnRh
bFBhZGRpbmcoKS52YWx1ZSgpKSk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIHJldHVybiAhKGJveEdlb21l
dHJ5Lmhvcml6b250YWxCb3JkZXIoKSB8fCAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmco
KSAmJiBib3hHZW9tZXRyeS5ob3Jpem9udGFsUGFkZGluZygpLnZhbHVlKCkpKTsKIH0KIAogYm9v
bCBMaW5lOjppc1Zpc3VhbGx5RW1wdHkoKSBjb25zdApAQCAtODYsMTAgKzg2LDEwIEBAIGJvb2wg
TGluZTo6aXNWaXN1YWxseUVtcHR5KCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICBpZiAocnVuLT5sYXlvdXRCb3goKS5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkp
IHsKICAgICAgICAgICAgIEFTU0VSVChydW4tPmxheW91dEJveCgpLmlzSW5saW5lQmxvY2tCb3go
KSk7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveChydW4tPmxheW91dEJveCgpKTsKLSAgICAgICAgICAgIGlmICgh
ZGlzcGxheUJveC53aWR0aCgpKQorICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChydW4tPmxheW91dEJveCgpKTsKKyAgICAgICAg
ICAgIGlmICghYm94R2VvbWV0cnkud2lkdGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgIGlmIChtX3NraXBWZXJ0aWNhbEFsaWdtZW50IHx8IGRpc3BsYXlCb3guaGVp
Z2h0KCkpCisgICAgICAgICAgICBpZiAobV9za2lwVmVydGljYWxBbGlnbWVudCB8fCBib3hHZW9t
ZXRyeS5oZWlnaHQoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQpAQCAtMTI4LDggKzEyOCw4IEBAIHN0ZDo6dW5pcXVlX3B0
cjxMaW5lOjpDb250ZW50PiBMaW5lOjpjbG9zZSgpCiAgICAgICAgICAgICAgICAgaWYgKHJ1bi0+
aXNMaW5lQnJlYWsoKSB8fCBydW4tPmlzVGV4dCgpKQogICAgICAgICAgICAgICAgICAgICBsb2dp
Y2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKICAgICAgICAgICAgICAgICBlbHNl
IGlmIChydW4tPmlzQ29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRv
JiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZz
ZXQoKSAtIGFzY2VudCAtIGRpc3BsYXlCb3guYm9yZGVyVG9wKCkgLSBkaXNwbGF5Qm94LnBhZGRp
bmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNldCgpIC0gYXNjZW50IC0gYm94
R2VvbWV0cnkuYm9yZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigw
KTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94
KCkgJiYgbGF5b3V0Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewog
ICAgICAgICAgICAgICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxp
bmVGb3JtYXR0aW5nU3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRl
KGxheW91dEJveCkpOwogICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVy
YXRlIGF0IGxlYXN0IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgpAQCAtMjk1LDE0ICsy
OTUsMTQgQEAgdm9pZCBMaW5lOjphcHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRl
bSYgaW5saW5lSXRlbSwgTGF5b3V0VW5pdCBsb2dpY2EKIAogdm9pZCBMaW5lOjphcHBlbmROb25S
ZXBsYWNlZElubGluZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0
IGxvZ2ljYWxXaWR0aCkKIHsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGlubGluZUl0ZW0ubGF5b3V0Qm94KCkpOwotICAg
IGF1dG8gaG9yaXpvbnRhbE1hcmdpbiA9IGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbigpOyAg
ICAKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlG
b3JCb3goaW5saW5lSXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2lu
ID0gYm94R2VvbWV0cnkuaG9yaXpvbnRhbE1hcmdpbigpOyAgICAKICAgICBhdXRvIGxvZ2ljYWxS
ZWN0ID0gRGlzcGxheTo6UmVjdCB7IH07CiAKICAgICBsb2dpY2FsUmVjdC5zZXRMZWZ0KGNvbnRl
bnRMb2dpY2FsV2lkdGgoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQpOwogICAgIGxvZ2ljYWxS
ZWN0LnNldFdpZHRoKGxvZ2ljYWxXaWR0aCk7CiAgICAgaWYgKCFtX3NraXBWZXJ0aWNhbEFsaWdt
ZW50KSB7Ci0gICAgICAgIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodChpbmxpbmVJdGVtLCBk
aXNwbGF5Qm94Lm1hcmdpbkJveEhlaWdodCgpKTsKKyAgICAgICAgYWRqdXN0QmFzZWxpbmVBbmRM
aW5lSGVpZ2h0KGlubGluZUl0ZW0sIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpKTsKICAg
ICAgICAgbG9naWNhbFJlY3Quc2V0SGVpZ2h0KGlubGluZUl0ZW1Db250ZW50SGVpZ2h0KGlubGlu
ZUl0ZW0pKTsKICAgICB9CiAKQEAgLTQxNCwyMCArNDE0LDE5IEBAIExheW91dFVuaXQgTGluZTo6
aW5saW5lSXRlbUNvbnRlbnRIZWlnaHQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkgY29u
c3QKICAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwogCiAgICAgYXV0byYgbGF5
b3V0Qm94ID0gaW5saW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICBBU1NFUlQoZm9ybWF0dGluZ0Nv
bnRleHQoKS5oYXNEaXNwbGF5Qm94KGxheW91dEJveCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3gg
PSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
KyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKIAogICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQo
KSkKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0KCk7CisgICAgICAg
IHJldHVybiBib3hHZW9tZXRyeS5ib3JkZXJCb3hIZWlnaHQoKTsKIAogICAgIGlmIChsYXlvdXRC
b3gucmVwbGFjZWQoKSkKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0
KCk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5ib3JkZXJCb3hIZWlnaHQoKTsKIAogICAg
IGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFp
bmVyRW5kKCkpCi0gICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKSArIGRpc3BsYXlC
b3gudmVydGljYWxCb3JkZXIoKSArIGRpc3BsYXlCb3gudmVydGljYWxQYWRkaW5nKCkudmFsdWVP
cigwKTsKKyAgICAgICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpICsgYm94R2VvbWV0cnku
dmVydGljYWxCb3JkZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3Io
MCk7CiAKICAgICAvLyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2sp
Ci0gICAgcmV0dXJuIGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0KCk7CisgICAgcmV0dXJuIGJv
eEdlb21ldHJ5LmJvcmRlckJveEhlaWdodCgpOwogfQogCiBMaW5lQm94OjpCYXNlbGluZSBMaW5l
OjpoYWxmTGVhZGluZ01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBMYXlv
dXRVbml0IGxpbmVMb2dpY2FsSGVpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2xheW91dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAK
aW5kZXggYzdhNzBhOTMwODlhZDAwYzNjODkxZWFiYThlNjZmNTgyYWQyZDNiYS4uODk5Nzc1ZTBl
NTUzMDU1NjJjZTEzZTkxNGY4OTgwYjRlMjVlZTQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L3RhYmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCkBAIC02OSw3ICs2OSw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6
bGF5b3V0KCkKICAgICAgICAgbGF5b3V0VGFibGVDZWxsQm94KGNlbGxMYXlvdXRCb3gsIGNvbHVt
bkxpc3QuYXQoY2VsbC0+cG9zaXRpb24ueCgpKSk7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3Vw
cG9ydCBmb3IgY29sdW1uIGFuZCByb3cgc3Bhbm5pbmcgYW5kIHRoaXMgcmVxdWlyZXMgYSAyIHBh
c3MgbGF5b3V0LgogICAgICAgICBhdXRvJiByb3cgPSBncmlkLnJvd3MoKS5hdChjZWxsLT5wb3Np
dGlvbi55KCkpOwotICAgICAgICByb3cuc2V0TG9naWNhbEhlaWdodChzdGQ6Om1heChyb3cubG9n
aWNhbEhlaWdodCgpLCBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNlbGxMYXlvdXRCb3gpLm1hcmdp
bkJveEhlaWdodCgpKSk7CisgICAgICAgIHJvdy5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KHJv
dy5sb2dpY2FsSGVpZ2h0KCksIGdlb21ldHJ5Rm9yQm94KGNlbGxMYXlvdXRCb3gpLm1hcmdpbkJv
eEhlaWdodCgpKSk7CiAgICAgfQogICAgIC8vIFRoaXMgaXMgYWZ0ZXIgdGhlIHNlY29uZCBwYXNz
IHdoZW4gY2VsbCBoZWlnaHRzIGFyZSBmdWxseSBjb21wdXRlZC4KICAgICBhdXRvIHJvd0xvZ2lj
YWxUb3AgPSBncmlkLnZlcnRpY2FsU3BhY2luZygpOwpAQCAtODYsNyArODYsNyBAQCB2b2lkIFRh
YmxlRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCgpCiAKIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29u
dGV4dDo6bGF5b3V0VGFibGVDZWxsQm94KGNvbnN0IEJveCYgY2VsbExheW91dEJveCwgY29uc3Qg
VGFibGVHcmlkOjpDb2x1bW4mIGNvbHVtbikKIHsKLSAgICBhdXRvJiBjZWxsRGlzcGxheUJveCA9
IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY2VsbExheW91dEJveCk7CisgICAgYXV0byYgY2VsbERp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGxMYXlvdXRCb3gpOwog
ICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNlbGxMYXlvdXRCb3gpOwogICAgIC8vIE1hcmdp
bnMgZG8gbm90IGFwcGx5IHRvIGludGVybmFsIHRhYmxlIGVsZW1lbnRzLgogICAgIGNlbGxEaXNw
bGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyB9KTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lk
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnBvc2l0aW9uVGFibGVDZWxscygpCiAgICAgYXV0byYg
cm93TGlzdCA9IGdyaWQucm93cygpOwogICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBncmlkLmNvbHVt
bnNDb250ZXh0KCkuY29sdW1ucygpOwogICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2VsbHMo
KSkgewotICAgICAgICBhdXRvJiBjZWxsRGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goY2VsbC0+dGFibGVDZWxsQm94KTsKKyAgICAgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGwtPnRhYmxlQ2VsbEJveCk7CiAgICAgICAg
IGNlbGxEaXNwbGF5Qm94LnNldFRvcChyb3dMaXN0LmF0KGNlbGwtPnBvc2l0aW9uLnkoKSkubG9n
aWNhbFRvcCgpKTsKICAgICAgICAgY2VsbERpc3BsYXlCb3guc2V0TGVmdChjb2x1bW5MaXN0LmF0
KGNlbGwtPnBvc2l0aW9uLngoKSkubG9naWNhbExlZnQoKSk7CiAgICAgfQpAQCAtMTIwLDcgKzEy
MCw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0Q29tcHV0ZWRHZW9tZXRyeUZv
clJvd3MoKQogCiAgICAgYXV0byYgcm93TGlzdCA9IGdyaWQucm93cygpOwogICAgIGZvciAoYXV0
byYgcm93IDogcm93TGlzdCkgewotICAgICAgICBhdXRvJiByb3dEaXNwbGF5Qm94ID0gZGlzcGxh
eUJveEZvckxheW91dEJveChyb3cuYm94KCkpOworICAgICAgICBhdXRvJiByb3dEaXNwbGF5Qm94
ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChyb3cuYm94KCkpOwogICAgICAgICBpbml0
aWFsaXplRGlzcGxheUJveFRvQmxhbmsocm93RGlzcGxheUJveCk7CiAgICAgICAgIHJvd0Rpc3Bs
YXlCb3guc2V0Q29udGVudEJveEhlaWdodChyb3cubG9naWNhbEhlaWdodCgpKTsKICAgICAgICAg
cm93RGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lkdGgocm93V2lkdGgpOwpAQCAtMTM0LDcgKzEz
NCw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0Q29tcHV0ZWRHZW9tZXRyeUZv
clNlY3Rpb25zKCkKICAgICBhdXRvIHNlY3Rpb25XaWR0aCA9IGdyaWQuY29sdW1uc0NvbnRleHQo
KS5sb2dpY2FsV2lkdGgoKSArIDIgKiBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CiAKICAgICBm
b3IgKGF1dG8mIHNlY3Rpb24gOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENvbnRhaW5l
cj4ocm9vdCgpKSkpIHsKLSAgICAgICAgYXV0byYgc2VjdGlvbkRpc3BsYXlCb3ggPSBkaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KHNlY3Rpb24pOworICAgICAgICBhdXRvJiBzZWN0aW9uRGlzcGxheUJv
eCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goc2VjdGlvbik7CiAgICAgICAgIGluaXRp
YWxpemVEaXNwbGF5Qm94VG9CbGFuayhzZWN0aW9uRGlzcGxheUJveCk7CiAgICAgICAgIC8vIEZJ
WE1FOiBTaXplIHRhYmxlIHNlY3Rpb25zIHByb3Blcmx5LgogICAgICAgICBzZWN0aW9uRGlzcGxh
eUJveC5zZXRDb250ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRoKTsKQEAgLTIzOSw4ICsyMzksNyBA
QCBMYXlvdXRVbml0IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCgp
CiAgICAgYXV0byYgdGFibGVXcmFwcGVyQm94ID0gcm9vdCgpOwogICAgIGF1dG8mIHN0eWxlID0g
dGFibGVXcmFwcGVyQm94LnN0eWxlKCk7CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKnRh
YmxlV3JhcHBlckJveC5jb250YWluaW5nQmxvY2soKTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxv
Y2tEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spOwot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94
LmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBnZW9t
ZXRyeUZvckJveChjb250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgYXV0
byYgZ3JpZCA9IGZvcm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNvbHVt
bnNDb250ZXh0ID0gZ3JpZC5jb2x1bW5zQ29udGV4dCgpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378725</attachid>
            <date>2019-09-13 05:27:39 -0700</date>
            <delta_ts>2019-09-13 08:42:34 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201754-20190913052735.patch</filename>
            <type>text/plain</type>
            <size>102794</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5Nzc4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDk5MjgwYWU0MzJmM2Mw
MjA3N2FjZjU4YzRmNDllMDNmMTJiMzFjYi4uN2M1ZDNkZWIzZWE0ZjhjNTdhOWE2MTJmMjk1NjEz
MDBiMTFlNzgxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyNiBAQAorMjAxOS0wOS0xMiAgWmFs
YW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgorCisgICAgICAgIFtMRkNdIEZvcm1hdHRpbmdD
b250ZXh0OjpkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94IHNob3VsZCBiZSBzcGxpdCBpbnRvIDIgZnVu
Y3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MDE3NTQKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzU1MzI4NzUzPgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIDEuIEZvcm1hdHRpbmdDb250ZXh0Ojpn
ZW9tZXRyeUZvckJveCgpIHJldHVybnMgYSBjb25zdCBEaXNwbGF5OjpCb3guIFVzZSB0aGlzIGZ1
bmN0aW9uIHRvIGFjY2VzcworICAgICAgICBhbHJlYWR5IGNvbXB1dGVkIGdlb21ldHJ5IHN1Y2gg
YXMgdGhlIGNvbnRhaW5pbmcgYmxvY2sncyBjb250ZW50IGJveCB3aWR0aC4KKyAgICAgICAgVGhp
cyBmdW5jdGlvbiBjYW4gZXNjYXBlIHRoZSBjdXJyZW50IGZvcm1hdHRpbmcgY29udGV4dCBpbiBj
ZXJ0YWluIGNhc2VzIGFuZCByZWFkIGdlb21ldHJ5IGZyb20gcGFyZW50L2FuY2VzdG9yIGZvcm1h
dHRpbmcgY29udGV4dHMuIAorICAgICAgICAyLiBGb3JtYXR0aW5nU3RhdGU6OmRpc3BsYXlCb3go
KSByZXR1cm5zIGEgbm9uLWNvbnN0IHZlcnNpb24gb2YgdGhlIERpc3BsYXk6OkJveC4gVXNlIHRo
aXMgZnVuY3Rpb24gdG8KKyAgICAgICAgY3JlYXRlL2dldCB0aGUgZGlzcGxheSBib3ggb2YgYSBw
YXJ0aWN1bGFyIGxheW91dCBib3ggdG8gc2V0IGNvbXB1dGVkIHZhbHVlcy4gVGhpcyBjYWxsIHNo
b3VsZCBuZXZlciBlc2NhcGUgdGhlCisgICAgICAgIGN1cnJlbnQgZm9ybWF0dGluZyBjb250ZXh0
IChhcyBubyBvbmUgc2hvdWxkIG11dGF0ZSBhbmNlc3RvciBib3hlcykuCisgICAgICAgIAorICAg
ICAgICBOb3JtYWxseSB3aGlsZSBsYXlpbmcgb3V0IGEgcGFydGljdWxhciBib3gsIHdlIG5lZWQg
dG8gY29sbGVjdCBzb21lIGdlb21ldHJ5IGluZm9ybWF0aW9uIGZyb20gb3RoZXIgYm94ZXMgaW4g
dGhlIHRyZWUgbGlrZSBwcmV2aW91cyBzaWJsaW5nLCBjb250YWluaW5nIGJsb2NrLgorICAgICAg
ICA8ZGl2IHN0eWxlPSJ3aWR0aDogMTAwcHgiPjxkaXY+PC9kaXY+PC9kaXY+IDwtIHRoZSBpbm5l
ciBkaXYncyB1c2VkIHdpZHRoIGlzIGJhc2VkIG9uIHRoZSBvdXRlciBkaXYncyB3aWR0aC4gCisg
ICAgICAgIEhvd2V2ZXIgd2Ugc2hvdWxkIG5ldmVyIG11dGF0ZSB0aGUgZ2VvbWV0cnkgaW5mb3Jt
YXRpb24gb24gdGhvc2Ugb3RoZXIgYm94ZXMgKG91dGVyIGRpdikuIFRoaXMgcGF0Y2ggaGVscHMg
YXZvaWRpbmcgYWNjaWRlbnRhbCBtdXRhdGlvbiBvbiBhbmNlc3RvcnMgYnkKKyAgICAgICAgcmV0
dXJuaW5nIGEgY29uc3QgdmVyc2lvbiBvZiB0aGUgRGlzcGxheTo6Qm94LiAgCisKKyAgICAgICAg
KiBsYXlvdXQvRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0
T2ZGbG93VmVydGljYWxHZW9tZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1h
dHRpbmdDb250ZXh0Ojpjb21wdXRlQm9yZGVyQW5kUGFkZGluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6Om1hcEhvcml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6bWFwVG9wVG9Gb3JtYXR0aW5nQ29udGV4
dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6bWFwTGVmdFRvRm9ybWF0dGluZ0NvbnRleHRSb290IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6Om1hcFJpZ2h0VG9Gb3JtYXR0aW5nQ29udGV4
dFJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4
dDo6Z2VvbWV0cnlGb3JCb3ggY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3Jt
YXR0aW5nQ29udGV4dDo6dmFsaWRhdGVHZW9tZXRyeUNvbnN0cmFpbnRzQWZ0ZXJMYXlvdXQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6ZGlzcGxh
eUJveEZvckxheW91dEJveCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgICogbGF5b3V0L0Zvcm1h
dHRpbmdDb250ZXh0Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250
ZXh0OjpoYXNEaXNwbGF5Qm94IGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBsYXlvdXQvRm9y
bWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZv
cm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRIZWlnaHRWYWx1ZSBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29u
dGVudEhlaWdodEZvckZvcm1hdHRpbmdDb250ZXh0Um9vdCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljVmVydGljYWxQ
b3NpdGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250YWxQb3Np
dGlvbkZvck91dE9mRmxvd1Bvc2l0aW9uZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkVmVy
dGljYWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRIb3Jpem9udGFsR2VvbWV0
cnkpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0
cnk6Om91dE9mRmxvd1JlcGxhY2VkVmVydGljYWxHZW9tZXRyeSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVw
bGFjZWRIb3Jpem9udGFsR2VvbWV0cnkgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0
OjpGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmlubGluZVJlcGxhY2VkSGVpZ2h0QW5kTWFy
Z2luIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQgY29uc3QpOgorICAgICAg
ICAqIGxheW91dC9Gb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkZvcm1hdHRpbmdDb250ZXh0OjpRdWlya3M6OmhlaWdodFZhbHVlT2ZOZWFyZXN0
Q29udGFpbmluZ0Jsb2NrV2l0aEZpeGVkSGVpZ2h0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0
dGluZ1N0YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6Rm9ybWF0dGluZ1N0YXRl
OjpkaXNwbGF5Qm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmg6
CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
dXNlZEF2YWlsYWJsZVdpZHRoRm9yRmxvYXRBdm9pZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6cGxhY2VJbkZsb3dQb3NpdGlvbmVk
Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlU3RhdGljVmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9z
aXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
Ojpjb21wdXRlRXN0aW1hdGVkVmVydGljYWxQb3NpdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBv
c2l0aW9uRm9yRmxvYXRDbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVGbG9hdGluZ1Bvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVBvc2l0aW9uVG9Bdm9p
ZEZsb2F0cyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBvc2l0aW9u
V2l0aE1hcmdpbiBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9j
a0Zvcm1hdHRpbmdDb250ZXh0Lmg6CisgICAgICAgICogbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9C
bG9ja0Zvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRI
ZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRp
bmdDb250ZXh0OjpHZW9tZXRyeTo6aW5GbG93Tm9uUmVwbGFjZWRXaWR0aEFuZE1hcmdpbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY0hvcml6b250
YWxQb3NpdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dIZWlnaHRBbmRNYXJnaW4pOgorICAgICAgICAq
IGxheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJr
czo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KToKKyAgICAgICAgKiBsYXlvdXQvYmxvY2tmb3JtYXR0
aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpC
bG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6aGFzQ2xlYXJhbmNlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFy
Z2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5CZWZvcmUg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0
OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFByZXZpb3VzU2libGlu
Z01hcmdpbkFmdGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3Jt
YXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhG
aXJzdEluRmxvd0NoaWxkTWFyZ2luQmVmb3JlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVy
Q29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnaW5CZWZvcmVXaXRoQ2xlYXJhbmNlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29s
bGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0aExhc3RJbkZsb3dDaGlsZE1hcmdpbkFmdGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZU1hcmdpbkFmdGVyRm9yUHJldmlvdXNTaWJsaW5nIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
TWFyZ2luQ29sbGFwc2U6OnBvc2l0aXZlTmVnYXRpdmVWYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6ZXN0aW1h
dGVkTWFyZ2luQmVmb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6QmxvY2tGb3JtYXR0
aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6OnVwZGF0ZVBvc2l0aXZlTmVnYXRpdmVNYXJnaW5W
YWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpoYXNDbGVhcmFuY2UpOiBEZWxldGVk
LgorICAgICAgICAqIGxheW91dC9mbG9hdHMvRmxvYXRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0Ojpwb3NpdGlvbkZvckZsb2F0IGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6RmxvYXRpbmdDb250ZXh0Ojp2ZXJ0aWNhbFBv
c2l0aW9uV2l0aENsZWFyYW5jZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkZs
b2F0aW5nQ29udGV4dDo6YWJzb2x1dGVEaXNwbGF5Qm94Q29vcmRpbmF0ZXMgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6Om1hcFRvRmxvYXRpbmdTdGF0
ZVJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpGbG9hdGluZ0NvbnRleHQ6
Om1hcFRvcFRvRmxvYXRpbmdTdGF0ZVJvb3QgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5
b3V0OjpGbG9hdGluZ0NvbnRleHQ6Om1hcFBvaW50RnJvbUZvcm1hdHRpbmdDb250ZXh0Um9vdFRv
RmxvYXRpbmdTdGF0ZVJvb3QgY29uc3QpOgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkxheW91
dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dCk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlZEludHJpbnNpY1dpZHRoQ29u
c3RyYWludHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29u
dGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JHZW5lcmljSW5saW5lQm94
KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNv
bXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nRm9ySW5saW5lQ29udGFpbmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVJbnRyaW5z
aWNXaWR0aEZvckZvcm1hdHRpbmdSb290KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9udGFsTWFyZ2luKToKKyAgICAgICAg
KFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFu
ZE1hcmdpbik6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmxheW91dEZvcm1hdHRpbmdDb250ZXh0Um9vdCk6Cisg
ICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRH
ZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6aW5saW5lQmxvY2tIZWlnaHRBbmRNYXJnaW4gY29uc3QpOgorICAg
ICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0TGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OmlubGluZUl0ZW1XaWR0aCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVMYXlvdXQ6OnBsYWNlSW5saW5lSXRlbSk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxp
bmVMYXlvdXQ6OmxheW91dCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGlu
ZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNvbXB1dGVkSW50cmluc2ljV2lkdGgg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4
dDo6SW5saW5lTGF5b3V0OjpjcmVhdGVEaXNwbGF5UnVucyBjb25zdCk6CisgICAgICAgICogbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtz
OjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyBjb25zdCk6CisgICAgICAgICogbGF5b3V0L2lu
bGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6
OmlzSW5saW5lQ29udGFpbmVyQ29uc2lkZXJlZEVtcHR5KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6aXNWaXN1YWxseUVtcHR5IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Okxh
eW91dDo6TGluZTo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lOjphcHBl
bmROb25SZXBsYWNlZElubGluZUJveCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmU6
OmlubGluZUl0ZW1Db250ZW50SGVpZ2h0IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvdGFibGVm
b3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAoV2ViQ29y
ZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRUYWJsZUNlbGxCb3gpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdDb250ZXh0Ojpwb3NpdGlv
blRhYmxlQ2VsbHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpUYWJsZUZvcm1hdHRpbmdD
b250ZXh0OjpzZXRDb21wdXRlZEdlb21ldHJ5Rm9yUm93cyk6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OnNldENvbXB1dGVkR2VvbWV0cnlGb3JTZWN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OlRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6
OmNvbXB1dGVkVGFibGVXaWR0aCk6CisKIDIwMTktMDktMTEgIFRydWl0dCBTYXZlbGwgIDx0c2F2
ZWxsQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjQ5NzUz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggMGQ0
YTc4YmRkN2UzZTU5YmY2NDgzMTRkYmI1M2RkN2I1ZjQ5NWM0Zi4uZDk1OWYzNTFhMzc4ZGQzM2Yx
MGE3NTE4YzBiNzFhMTM3MWJkZTA4OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0
dGluZ0NvbnRleHQuY3BwCkBAIC02Niw3ICs2Niw3IEBAIExheW91dFN0YXRlJiBGb3JtYXR0aW5n
Q29udGV4dDo6bGF5b3V0U3RhdGUoKSBjb25zdAogCiB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlT3V0T2ZGbG93SG9yaXpvbnRhbEdlb21ldHJ5KGNvbnN0IEJveCYgbGF5b3V0Qm94KQog
ewotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94
KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLnBhZGRpbmdCb3hXaWR0aCgpOworICAgIGF1
dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRh
aW5pbmdCbG9jaygpKS5wYWRkaW5nQm94V2lkdGgoKTsKIAogICAgIGF1dG8gY29tcHV0ZSA9IFsm
XShPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkV2lkdGgpIHsKICAgICAgICAgYXV0byB1c2VkVmFs
dWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250YWluaW5nQmxvY2tXaWR0aCwgdXNlZFdp
ZHRoLCB7IH0gfTsKQEAgLTg2LDcgKzg2LDcgQEAgdm9pZCBGb3JtYXR0aW5nQ29udGV4dDo6Y29t
cHV0ZU91dE9mRmxvd0hvcml6b250YWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCkKICAg
ICAgICAgICAgIGhvcml6b250YWxHZW9tZXRyeSA9IG1pbkhvcml6b250YWxHZW9tZXRyeTsKICAg
ICB9CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5
Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRMZWZ0KGhvcml6b250YWxHZW9tZXRy
eS5sZWZ0ICsgaG9yaXpvbnRhbEdlb21ldHJ5LndpZHRoQW5kTWFyZ2luLnVzZWRNYXJnaW4uc3Rh
cnQpOwogICAgIGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGhvcml6b250YWxHZW9tZXRy
eS53aWR0aEFuZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFy
Z2luKGhvcml6b250YWxHZW9tZXRyeS53aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luKTsKQEAgLTEx
Miw3ICsxMTIsNyBAQCB2b2lkIEZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVy
dGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJveCkKICAgICAgICAgICAgIHZlcnRpY2Fs
R2VvbWV0cnkgPSBtaW5WZXJ0aWNhbEdlb21ldHJ5OwogICAgIH0KIAotICAgIGF1dG8mIGRpc3Bs
YXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgZGlz
cGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3gobGF5b3V0Qm94KTsKICAgICBh
dXRvIG5vbkNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luID0gdmVydGljYWxHZW9tZXRyeS5oZWlnaHRB
bmRNYXJnaW4ubm9uQ29sbGFwc2VkTWFyZ2luOwogICAgIGRpc3BsYXlCb3guc2V0VG9wKHZlcnRp
Y2FsR2VvbWV0cnkudG9wICsgbm9uQ29sbGFwc2VkVmVydGljYWxNYXJnaW4uYmVmb3JlKTsKICAg
ICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQodmVydGljYWxHZW9tZXRyeS5oZWlnaHRB
bmRNYXJnaW4uaGVpZ2h0KTsKQEAgLTEyMyw4ICsxMjMsOCBAQCB2b2lkIEZvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlT3V0T2ZGbG93VmVydGljYWxHZW9tZXRyeShjb25zdCBCb3gmIGxheW91dEJv
eCkKIHZvaWQgRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVCb3JkZXJBbmRQYWRkaW5nKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hbDxVc2VkSG9yaXpvbnRhbFZhbHVlcz4gdXNlZFZhbHVl
cykKIHsKICAgICBpZiAoIXVzZWRWYWx1ZXMpCi0gICAgICAgIHVzZWRWYWx1ZXMgPSBVc2VkSG9y
aXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICB1c2VkVmFsdWVzID0g
VXNlZEhvcml6b250YWxWYWx1ZXMgeyBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5z
ZXRCb3JkZXIoZ2VvbWV0cnkoKS5jb21wdXRlZEJvcmRlcihsYXlvdXRCb3gpKTsKICAgICBkaXNw
bGF5Qm94LnNldFBhZGRpbmcoZ2VvbWV0cnkoKS5jb21wdXRlZFBhZGRpbmcobGF5b3V0Qm94LCAq
dXNlZFZhbHVlcykpOwogfQpAQCAtMTU1LDcgKzE1NSw3IEBAIHN0YXRpYyBMYXlvdXRVbml0IG1h
cEhvcml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZv
cm1hCiAgICAgICAgIHJldHVybiBob3Jpem9udGFsUG9zaXRpb247CiAgICAgQVNTRVJUKGNvbnRh
aW5pbmdCbG9jay5pc0NvbnRhaW5pbmdCbG9ja0Rlc2NlbmRhbnRPZihhbmNlc3RvcikpOwogICAg
IGZvciAoYXV0byogY29udGFpbmVyID0gJmNvbnRhaW5pbmdCbG9jazsgY29udGFpbmVyICYmIGNv
bnRhaW5lciAhPSAmYW5jZXN0b3I7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Js
b2NrKCkpCi0gICAgICAgIGhvcml6b250YWxQb3NpdGlvbiArPSBmb3JtYXR0aW5nQ29udGV4dC5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluZXIpLmxlZnQoKTsKKyAgICAgICAgaG9yaXpv
bnRhbFBvc2l0aW9uICs9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWlu
ZXIpLmxlZnQoKTsKICAgICByZXR1cm4gaG9yaXpvbnRhbFBvc2l0aW9uOwogfQogCkBAIC0xNjUs
MjggKzE2NSwyNyBAQCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjptYXBUb3BUb0Zvcm1h
dHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIGxheW91dEJveAogICAgIEFTU0VSVChsYXlvdXRC
b3guY29udGFpbmluZ0Jsb2NrKCkpOwogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0Um9vdCA9
IGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKTsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzQ29u
dGFpbmluZ0Jsb2NrRGVzY2VuZGFudE9mKGZvcm1hdHRpbmdDb250ZXh0Um9vdCkpOwotICAgIGF1
dG8gdG9wID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnRvcCgpOworICAgIGF1
dG8gdG9wID0gZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS50b3AoKTsKICAgICBmb3IgKGF1dG8q
IGNvbnRhaW5lciA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsgY29udGFpbmVyICYmIGNv
bnRhaW5lciAhPSAmZm9ybWF0dGluZ0NvbnRleHRSb290OyBjb250YWluZXIgPSBjb250YWluZXIt
PmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICB0b3AgKz0gZGlzcGxheUJveEZvckxheW91dEJv
eCgqY29udGFpbmVyKS50b3AoKTsKKyAgICAgICAgdG9wICs9IGdlb21ldHJ5Rm9yQm94KCpjb250
YWluZXIpLnRvcCgpOwogICAgIHJldHVybiB0b3A7CiB9CiAKIExheW91dFVuaXQgRm9ybWF0dGlu
Z0NvbnRleHQ6Om1hcExlZnRUb0Zvcm1hdHRpbmdDb250ZXh0Um9vdChjb25zdCBCb3gmIGxheW91
dEJveCkgY29uc3QKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsK
LSAgICByZXR1cm4gbWFwSG9yaXpvbnRhbFBvc2l0aW9uVG9BbmNlc3RvcigqdGhpcywgZGlzcGxh
eUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLmxlZnQoKSwgKmxheW91dEJveC5jb250YWluaW5n
QmxvY2soKSwgZG93bmNhc3Q8Q29udGFpbmVyPihyb290KCkpKTsKKyAgICByZXR1cm4gbWFwSG9y
aXpvbnRhbFBvc2l0aW9uVG9BbmNlc3RvcigqdGhpcywgZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KS5sZWZ0KCksICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25jYXN0PENvbnRhaW5l
cj4ocm9vdCgpKSk7CiB9CiAKIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRleHQ6Om1hcFJpZ2h0
VG9Gb3JtYXR0aW5nQ29udGV4dFJvb3QoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CiB7CiAg
ICAgQVNTRVJUKGxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7Ci0gICAgcmV0dXJuIG1hcEhv
cml6b250YWxQb3NpdGlvblRvQW5jZXN0b3IoKnRoaXMsIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KS5yaWdodCgpLCAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpLCBkb3duY2Fz
dDxDb250YWluZXI+KHJvb3QoKSkpOworICAgIHJldHVybiBtYXBIb3Jpem9udGFsUG9zaXRpb25U
b0FuY2VzdG9yKCp0aGlzLCBnZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLnJpZ2h0KCksICpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCksIGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKSk7CiB9
CiAKLURpc3BsYXk6OkJveCYgRm9ybWF0dGluZ0NvbnRleHQ6OmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goY29uc3QgQm94JiBsYXlvdXRCb3gsIE9wdGlvbmFsPEVzY2FwZVR5cGU+IGVzY2FwZVR5cGUp
IGNvbnN0Citjb25zdCBEaXNwbGF5OjpCb3gmIEZvcm1hdHRpbmdDb250ZXh0OjpnZW9tZXRyeUZv
ckJveChjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8RXNjYXBlVHlwZT4gZXNjYXBlVHlw
ZSkgY29uc3QKIHsKICAgICBVTlVTRURfUEFSQU0oZXNjYXBlVHlwZSk7Ci0KICNpZm5kZWYgTkRF
QlVHCiAgICAgYXV0byBpc09rVG9BY2Nlc3NEaXNwbGF5Qm94ID0gWyZdIHsKICAgICAgICAgLy8g
MS4gSGlnaGx5IGNvbW1vbiBjYXNlIG9mIGFjY2Vzc2luZyB0aGUgZm9ybWF0dGluZyByb290J3Mg
ZGlzcGxheSBib3ggaXRzZWxmLiBUaGlzIGlzIGZvcm1hdHRpbmcgY29udGV4dCBlc2NhcGluZyBp
biB0aGUgc3RyaWN0IHNlbnNlLCBzaW5jZQpAQCAtMjM3LDYgKzIzNiw3IEBAIERpc3BsYXk6OkJv
eCYgRm9ybWF0dGluZ0NvbnRleHQ6OmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBs
YXlvdXRCb3gsIE9wCiAgICAgfTsKICNlbmRpZgogICAgIEFTU0VSVChpc09rVG9BY2Nlc3NEaXNw
bGF5Qm94KCkpOworICAgIEFTU0VSVChsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0
Qm94KSk7CiAgICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpOwogfQogCkBAIC0yNTAsMjMgKzI1MCwyMyBAQCB2b2lkIEZvcm1hdHRpbmdDb250
ZXh0Ojp2YWxpZGF0ZUdlb21ldHJ5Q29uc3RyYWludHNBZnRlckxheW91dCgpIGNvbnN0CiAgICAg
Zm9yIChhdXRvJiBsYXlvdXRCb3ggOiBkZXNjZW5kYW50c09mVHlwZTxCb3g+KGZvcm1hdHRpbmdD
b250ZXh0Um9vdCkpIHsKICAgICAgICAgaWYgKCZsYXlvdXRCb3guZm9ybWF0dGluZ0NvbnRleHRS
b290KCkgIT0gJmZvcm1hdHRpbmdDb250ZXh0Um9vdCkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxh
eW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKTsKLSAgICAgICAgYXV0byYgZGlz
cGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAgYXV0
byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBnZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNv
bnRhaW5pbmdCbG9jaygpKTsKKyAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBnZW9tZXRyeUZv
ckJveChsYXlvdXRCb3gpOwogCiAgICAgICAgIC8vIDEwLjMuMyBCbG9jay1sZXZlbCwgbm9uLXJl
cGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93CiAgICAgICAgIC8vIDEwLjMuNyBBYnNvbHV0
ZWx5IHBvc2l0aW9uZWQsIG5vbi1yZXBsYWNlZCBlbGVtZW50cwogICAgICAgICBpZiAoKGxheW91
dEJveC5pc0Jsb2NrTGV2ZWxCb3goKSB8fCBsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVk
KCkpICYmICFsYXlvdXRCb3gucmVwbGFjZWQoKSkgewogICAgICAgICAgICAgLy8gbWFyZ2luLWxl
ZnQgKyBib3JkZXItbGVmdC13aWR0aCArIHBhZGRpbmctbGVmdCArIHdpZHRoICsgcGFkZGluZy1y
aWdodCArIGJvcmRlci1yaWdodC13aWR0aCArIG1hcmdpbi1yaWdodCA9IHdpZHRoIG9mIGNvbnRh
aW5pbmcgYmxvY2sKLSAgICAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBjb250
YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hXaWR0aCgpOwotICAgICAgICAgICAgQVNT
RVJUKGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSArIGRpc3Bs
YXlCb3guY29udGVudEJveFdpZHRoKCkgPT0gY29udGFpbmluZ0Jsb2NrV2lkdGgpOworICAgICAg
ICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5
LmNvbnRlbnRCb3hXaWR0aCgpOworICAgICAgICAgICAgQVNTRVJUKGJveEdlb21ldHJ5Lmhvcml6
b250YWxNYXJnaW5Cb3JkZXJBbmRQYWRkaW5nKCkgKyBib3hHZW9tZXRyeS5jb250ZW50Qm94V2lk
dGgoKSA9PSBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyAx
MC42LjQgQWJzb2x1dGVseSBwb3NpdGlvbmVkLCBub24tcmVwbGFjZWQgZWxlbWVudHMKICAgICAg
ICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhbGF5b3V0Qm94LnJl
cGxhY2VkKCkpIHsKICAgICAgICAgICAgIC8vIHRvcCArIG1hcmdpbi10b3AgKyBib3JkZXItdG9w
LXdpZHRoICsgcGFkZGluZy10b3AgKyBoZWlnaHQgKyBwYWRkaW5nLWJvdHRvbSArIGJvcmRlci1i
b3R0b20td2lkdGggKyBtYXJnaW4tYm90dG9tICsgYm90dG9tID0gaGVpZ2h0IG9mIGNvbnRhaW5p
bmcgYmxvY2sKLSAgICAgICAgICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFp
bmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94SGVpZ2h0KCk7Ci0gICAgICAgICAgICBBU1NF
UlQoZGlzcGxheUJveC50b3AoKSArIGRpc3BsYXlCb3gubWFyZ2luQmVmb3JlKCkgKyBkaXNwbGF5
Qm94LmJvcmRlclRvcCgpICsgZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGRp
c3BsYXlCb3guY29udGVudEJveEhlaWdodCgpCi0gICAgICAgICAgICAgICAgKyBkaXNwbGF5Qm94
LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDApICsgZGlzcGxheUJveC5ib3JkZXJCb3R0b20oKSAr
IGRpc3BsYXlCb3gubWFyZ2luQWZ0ZXIoKSA9PSBjb250YWluaW5nQmxvY2tIZWlnaHQpOworICAg
ICAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxvY2tHZW9t
ZXRyeS5jb250ZW50Qm94SGVpZ2h0KCk7CisgICAgICAgICAgICBBU1NFUlQoYm94R2VvbWV0cnku
dG9wKCkgKyBib3hHZW9tZXRyeS5tYXJnaW5CZWZvcmUoKSArIGJveEdlb21ldHJ5LmJvcmRlclRv
cCgpICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCkgKyBib3hHZW9tZXRyeS5j
b250ZW50Qm94SGVpZ2h0KCkKKyAgICAgICAgICAgICAgICArIGJveEdlb21ldHJ5LnBhZGRpbmdC
b3R0b20oKS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkuYm9yZGVyQm90dG9tKCkgKyBib3hHZW9t
ZXRyeS5tYXJnaW5BZnRlcigpID09IGNvbnRhaW5pbmdCbG9ja0hlaWdodCk7CiAgICAgICAgIH0K
ICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0Nv
bnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4
IDM1M2FkMTk2MzVjZGQzYjhlOTZjNWU5ZDZkNjI1MTM2NTU4OTNkYTUuLmNlYWUxYTJlOGY0NWI0
ZDIxMjY0Y2ZjNWQ0ZDgzZWQ3MGQzZTNlODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9Gb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3Jt
YXR0aW5nQ29udGV4dC5oCkBAIC03NCw4ICs3NCw3IEBAIHB1YmxpYzoKICAgICAgICAgQWNjZXNz
UGFyZW50Rm9ybWF0dGluZ0NvbnRleHQsCiAgICAgICAgIEFjY2Vzc0FuY2VzdG9yRm9ybWF0dGlu
Z0NvbnRleHQKICAgICB9OwotICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJveEZvckxheW91dEJv
eChjb25zdCBCb3gmLCBPcHRpb25hbDxFc2NhcGVUeXBlPiA9IFdURjo6bnVsbG9wdCkgY29uc3Q7
Ci0gICAgYm9vbCBoYXNEaXNwbGF5Qm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KSBjb25zdCB7IHJl
dHVybiBsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KTsgfQorICAgIGNvbnN0
IERpc3BsYXk6OkJveCYgZ2VvbWV0cnlGb3JCb3goY29uc3QgQm94JiwgT3B0aW9uYWw8RXNjYXBl
VHlwZT4gPSBXVEY6Om51bGxvcHQpIGNvbnN0OwogCiAgICAgY29uc3QgQm94JiByb290KCkgY29u
c3QgeyByZXR1cm4gKm1fcm9vdDsgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
Rm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKaW5kZXggZDM5NTU4N2JmMDMxMmYxMmExNmQ3
YzYzZTg0ZWQwZDhiOTFlNmJhMi4uMGFhNTc4NmUyNmIwZDhmZjZjZTQ1OWY4NTc5YWMxMGUzOTRj
OGRhZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0
R2VvbWV0cnkuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcApAQCAtNzIsNyArNzIsNyBAQCBPcHRpb25hbDxMYXlvdXRVbml0PiBGb3Jt
YXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkSGVpZ2h0VmFsdWUoY29uc3QgQm94Jgog
ICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlOwogICAg
IGlmIChsYXlvdXRCb3guaXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpIHsKICAgICAgICAgLy8gQ29u
dGFpbmluZyBibG9jaydzIGhlaWdodCBpcyBhbHJlYWR5IGNvbXB1dGVkIHNpbmNlIHdlIGxheW91
dCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgYXMgdGhlIGxhc3Qgc3RlcC4KLSAgICAgICAgY29udGFp
bmluZ0Jsb2NrSGVpZ2h0VmFsdWUgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuaGVpZ2h0KCk7CisgICAgICAg
IGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRy
eUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5oZWlnaHQoKTsKICAgICB9IGVs
c2UgewogICAgICAgICBpZiAobGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKSkKICAgICAgICAg
ICAgIGNvbnRhaW5pbmdCbG9ja0hlaWdodFZhbHVlID0gZm9ybWF0dGluZ0NvbnRleHQoKS5xdWly
a3MoKS5oZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXhlZEhlaWdodChs
YXlvdXRCb3gpOwpAQCAtMTA3LDggKzEwNyw4IEBAIExheW91dFVuaXQgRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290KGNvCiAK
ICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgYXV0byYg
Zm9ybWF0dGluZ0NvbnRleHQgPSB0aGlzLT5mb3JtYXR0aW5nQ29udGV4dCgpOwotICAgIGF1dG8m
IGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7Ci0gICAgYXV0byBib3JkZXJBbmRQYWRkaW5nVG9wID0gZGlzcGxheUJveC5ib3Jk
ZXJUb3AoKSArIGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byYg
Ym94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gp
OworICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LmJvcmRlclRvcCgp
ICsgYm94R2VvbWV0cnkucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7CiAgICAgYXV0byB0b3AgPSBi
b3JkZXJBbmRQYWRkaW5nVG9wOwogICAgIGF1dG8gYm90dG9tID0gYm9yZGVyQW5kUGFkZGluZ1Rv
cDsKICAgICBhdXRvJiBmb3JtYXR0aW5nUm9vdENvbnRhaW5lciA9IGRvd25jYXN0PENvbnRhaW5l
cj4obGF5b3V0Qm94KTsKQEAgLTEyMCwxMCArMTIwLDEwIEBAIExheW91dFVuaXQgRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5Ojpjb250ZW50SGVpZ2h0Rm9yRm9ybWF0dGluZ0NvbnRleHRSb290
KGNvCiAgICAgICAgIGJvdHRvbSA9IGxpbmVCb3hlcy5sYXN0KCkubG9naWNhbEJvdHRvbSgpOwog
ICAgIH0gZWxzZSBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0KCkgfHwgZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZXN0YWJsaXNoZXNU
YWJsZUZvcm1hdHRpbmdDb250ZXh0KCkgfHwgbGF5b3V0Qm94LmlzRG9jdW1lbnRCb3goKSkgewog
ICAgICAgICBpZiAoZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuaGFzSW5GbG93Q2hpbGQoKSkgewot
ICAgICAgICAgICAgYXV0byYgZmlyc3REaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlz
cGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWluZXIuZmlyc3RJbkZsb3dD
aGlsZCgpLCBFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKLSAgICAg
ICAgICAgIGF1dG8mIGxhc3REaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3RDb250YWluZXIubGFzdEluRmxvd0NoaWxkKCks
IEVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOwotICAgICAgICAgICAg
dG9wID0gZmlyc3REaXNwbGF5Qm94LnJlY3RXaXRoTWFyZ2luKCkudG9wKCk7Ci0gICAgICAgICAg
ICBib3R0b20gPSBsYXN0RGlzcGxheUJveC5yZWN0V2l0aE1hcmdpbigpLmJvdHRvbSgpOworICAg
ICAgICAgICAgYXV0byYgZmlyc3RCb3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21l
dHJ5Rm9yQm94KCpmb3JtYXR0aW5nUm9vdENvbnRhaW5lci5maXJzdEluRmxvd0NoaWxkKCksIEVz
Y2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICAgICAgYXV0
byYgbGFzdEJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmZv
cm1hdHRpbmdSb290Q29udGFpbmVyLmxhc3RJbkZsb3dDaGlsZCgpLCBFc2NhcGVUeXBlOjpBY2Nl
c3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKKyAgICAgICAgICAgIHRvcCA9IGZpcnN0Qm94R2Vv
bWV0cnkucmVjdFdpdGhNYXJnaW4oKS50b3AoKTsKKyAgICAgICAgICAgIGJvdHRvbSA9IGxhc3RC
b3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigpLmJvdHRvbSgpOwogICAgICAgICB9CiAgICAgfSBl
bHNlCiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMTk5LDI0ICsxOTksMjQgQEAg
TGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OnN0YXRpY1ZlcnRpY2FsUG9z
aXRpb25Gb3JPdXRPZkZsb3dQb3NpdGkKICAgICBMYXlvdXRVbml0IHRvcDsKICAgICBpZiAoYXV0
byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93U2libGlu
ZygpKSB7CiAgICAgICAgIC8vIEFkZCBzaWJsaW5nIG9mZnNldAotICAgICAgICBhdXRvJiBwcmV2
aW91c0luRmxvd0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5
b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVU
eXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsKLSAgICAgICAgdG9wICs9IHByZXZp
b3VzSW5GbG93RGlzcGxheUJveC5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93RGlzcGxheUJveC5u
b25Db2xsYXBzZWRNYXJnaW5BZnRlcigpOworICAgICAgICBhdXRvJiBwcmV2aW91c0luRmxvd0Jv
eEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKnByZXZpb3VzSW5G
bG93U2libGluZywgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9y
bWF0dGluZ0NvbnRleHQpOworICAgICAgICB0b3AgKz0gcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRy
eS5ib3R0b20oKSArIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubm9uQ29sbGFwc2VkTWFyZ2lu
QWZ0ZXIoKTsKICAgICB9IGVsc2UgewogICAgICAgICBBU1NFUlQobGF5b3V0Qm94LnBhcmVudCgp
KTsKLSAgICAgICAgdG9wID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eCgqbGF5b3V0Qm94LnBhcmVudCgpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNj
ZXNzQ2hpbGRGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveFRvcCgpOworICAgICAgICB0b3Ag
PSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LnBhcmVudCgpLCBG
b3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQ2hpbGRGb3JtYXR0aW5nQ29udGV4
dCkuY29udGVudEJveFRvcCgpOwogICAgIH0KIAogICAgIC8vIFJlc29sdmUgdG9wIGFsbCB0aGUg
d2F5IHVwIHRvIHRoZSBjb250YWluaW5nIGJsb2NrLgogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9j
ayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgLy8gU3RhcnQgd2l0aCB0aGUg
cGFyZW50IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0aGlzIGJveCBpcyBub3JtYWwgZmxvdy4KICAg
ICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9IGxheW91dEJveC5wYXJlbnQoKTsgY29udGFpbmVyICE9
ICZjb250YWluaW5nQmxvY2s7IGNvbnRhaW5lciA9IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2Nr
KCkpIHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5
cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICBhdXRvJiBib3hHZW9t
ZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluZXIsIEZvcm1h
dHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KTsK
ICAgICAgICAgLy8gRGlzcGxheTo6Qm94Ojp0b3AgaXMgdGhlIGJvcmRlciBib3ggdG9wIHBvc2l0
aW9uIGluIGl0cyBjb250YWluaW5nIGJsb2NrJ3MgY29vcmRpbmF0ZSBzeXN0ZW0uCi0gICAgICAg
IHRvcCArPSBkaXNwbGF5Qm94LnRvcCgpOworICAgICAgICB0b3AgKz0gYm94R2VvbWV0cnkudG9w
KCk7CiAgICAgICAgIEFTU0VSVCghY29udGFpbmVyLT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRC
b3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAgfQogICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBw
b3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGluZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZp
YyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hlcy4KLSAgICBhdXRvIHBhZGRpbmdCb3hUb3Ag
PSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9j
aykucGFkZGluZ0JveFRvcCgpOworICAgIGF1dG8gcGFkZGluZ0JveFRvcCA9IGZvcm1hdHRpbmdD
b250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9jaykucGFkZGluZ0JveFRvcCgpOwog
ICAgIHJldHVybiB0b3AgLSBwYWRkaW5nQm94VG9wOwogfQogCkBAIC0yMjgsMTkgKzIyOCwxOSBA
QCBMYXlvdXRVbml0IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3RhdGljSG9yaXpvbnRh
bFBvc2l0aW9uRm9yT3V0T2ZGbG93UG9zaQogICAgIC8vIFN0YXJ0IHdpdGggdGhpcyBib3gncyBi
b3JkZXIgYm94IG9mZnNldCBmcm9tIHRoZSBwYXJlbnQncyBib3JkZXIgYm94LgogICAgIGF1dG8m
IGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAgICBBU1NF
UlQobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICBhdXRvIGxlZnQgPSBmb3JtYXR0aW5nQ29udGV4
dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3gucGFyZW50KCksIEZvcm1hdHRpbmdD
b250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5jb250ZW50
Qm94TGVmdCgpOworICAgIGF1dG8gbGVmdCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KCpsYXlvdXRCb3gucGFyZW50KCksIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpB
Y2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5jb250ZW50Qm94TGVmdCgpOwogCiAgICAgLy8g
UmVzb2x2ZSBsZWZ0IGFsbCB0aGUgd2F5IHVwIHRvIHRoZSBjb250YWluaW5nIGJsb2NrLgogICAg
IGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7CiAg
ICAgLy8gU3RhcnQgd2l0aCB0aGUgcGFyZW50IHNpbmNlIHdlIHByZXRlbmQgdGhhdCB0aGlzIGJv
eCBpcyBub3JtYWwgZmxvdy4KICAgICBmb3IgKGF1dG8qIGNvbnRhaW5lciA9IGxheW91dEJveC5w
YXJlbnQoKTsgY29udGFpbmVyICE9ICZjb250YWluaW5nQmxvY2s7IGNvbnRhaW5lciA9IGNvbnRh
aW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpIHsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZv
cm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5lciwgRm9ybWF0
dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc0NoaWxkRm9ybWF0dGluZ0NvbnRleHQpOwor
ICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9y
Qm94KCpjb250YWluZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGls
ZEZvcm1hdHRpbmdDb250ZXh0KTsKICAgICAgICAgLy8gRGlzcGxheTo6Qm94OjpsZWZ0IGlzIHRo
ZSBib3JkZXIgYm94IGxlZnQgcG9zaXRpb24gaW4gaXRzIGNvbnRhaW5pbmcgYmxvY2sncyBjb29y
ZGluYXRlIHN5c3RlbS4KLSAgICAgICAgbGVmdCArPSBkaXNwbGF5Qm94LmxlZnQoKTsKKyAgICAg
ICAgbGVmdCArPSBib3hHZW9tZXRyeS5sZWZ0KCk7CiAgICAgICAgIEFTU0VSVCghY29udGFpbmVy
LT5pc1Bvc2l0aW9uZWQoKSB8fCBsYXlvdXRCb3guaXNGaXhlZFBvc2l0aW9uZWQoKSk7CiAgICAg
fQogICAgIC8vIE1vdmUgdGhlIHN0YXRpYyBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgcGFkZGlu
ZyBib3guIFRoaXMgaXMgdmVyeSBzcGVjaWZpYyB0byBhYm9sdXRlbHkgcG9zaXRpb25lZCBib3hl
cy4KLSAgICBhdXRvIHBhZGRpbmdCb3hMZWZ0ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJv
eEZvckxheW91dEJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVU
eXBlOjpBY2Nlc3NDaGlsZEZvcm1hdHRpbmdDb250ZXh0KS5wYWRkaW5nQm94TGVmdCgpOworICAg
IGF1dG8gcGFkZGluZ0JveExlZnQgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChj
b250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NDaGls
ZEZvcm1hdHRpbmdDb250ZXh0KS5wYWRkaW5nQm94TGVmdCgpOwogICAgIHJldHVybiBsZWZ0IC0g
cGFkZGluZ0JveExlZnQ7CiB9CiAKQEAgLTI5NiwyMCArMjk2LDIwIEBAIFZlcnRpY2FsR2VvbWV0
cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZlcnRp
Y2FsR2VvbWV0CiAKICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRp
bmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJv
eChsYXlvdXRCb3gpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3Jt
YXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmlu
Z0Jsb2NrKCkpOwotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5wYWRkaW5nQm94SGVpZ2h0KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxv
Y2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveFdpZHRoKCk7Cisg
ICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChs
YXlvdXRCb3gpOworICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7Cisg
ICAgYXV0byBjb250YWluaW5nQmxvY2tIZWlnaHQgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5w
YWRkaW5nQm94SGVpZ2h0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRh
aW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hXaWR0aCgpOwogCiAgICAgYXV0byB0b3AgPSBj
b21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2Nr
V2lkdGgpOwogICAgIGF1dG8gYm90dG9tID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5s
b2dpY2FsQm90dG9tKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICBhdXRvIGhlaWdodCA9
IHVzZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVk
SGVpZ2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogICAgIGF1dG8gY29t
cHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxh
eW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250YWluaW5nQmxvY2tXaWR0aCB9KTsK
ICAgICBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZhbHVlcyB1c2VkVmVydGljYWxN
YXJnaW47IAotICAgIGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZh
bHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5wYWRkaW5nQm90
dG9tKCkudmFsdWVPcigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3BsYXlCb3guYm9yZGVy
VG9wKCk7Ci0gICAgYXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgp
OworICAgIGF1dG8gcGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9y
KDApOworICAgIGF1dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20o
KS52YWx1ZU9yKDApOworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9w
KCk7CisgICAgYXV0byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsK
ICAgICBhdXRvIGNvbnRlbnRIZWlnaHQgPSBbJl0gewogICAgICAgICBBU1NFUlQoaGVpZ2h0KTsK
ICAgICAgICAgcmV0dXJuIHN0eWxlLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJv
eCA/ICpoZWlnaHQgOiAqaGVpZ2h0IC0gKGJvcmRlclRvcCArIHBhZGRpbmdUb3AgKyBwYWRkaW5n
Qm90dG9tICsgYm9yZGVyQm90dG9tKTsgIApAQCAtMzgxLDcgKzM4MSw3IEBAIFZlcnRpY2FsR2Vv
bWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dOb25SZXBsYWNlZFZl
cnRpY2FsR2VvbWV0CiAKICAgICAvLyBGb3Igb3V0LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRh
aW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBwYWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9y
LgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBvc2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNv
b3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5nIGJveC4gTGV0J3MgY29udmVydCBpdCB0byBi
b3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgotICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFk
ZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveFRv
cCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRh
aW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdCb3hUb3AoKTsKICAgICAqdG9wICs9IGNvbnRhaW5p
bmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAgICAgKmJvdHRvbSArPSBjb250YWluaW5nQmxv
Y2tQYWRkaW5nVmVydGljYWxFZGdlOwogCkBAIC00MjEsOSArNDIxLDkgQEAgSG9yaXpvbnRhbEdl
b21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93Tm9uUmVwbGFjZWRI
b3Jpem9udGFsR2UKIAogICAgIGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0
dGluZ0NvbnRleHQoKTsKICAgICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwotICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9jayA9
ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byYgY29udGFpbmluZ0Jsb2Nr
RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29u
dGFpbmluZ0Jsb2NrKTsKKyAgICBhdXRvJiBjb250YWluaW5nQmxvY2tHZW9tZXRyeSA9IGZvcm1h
dHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBj
b250YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFs
dWVPcigwKTsKICAgICBhdXRvIGlzTGVmdFRvUmlnaHREaXJlY3Rpb24gPSBjb250YWluaW5nQmxv
Y2suc3R5bGUoKS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCk7CiAgICAgCkBAIC00MzIsMTAgKzQz
MiwxMCBAQCBIb3Jpem9udGFsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpv
dXRPZkZsb3dOb25SZXBsYWNlZEhvcml6b250YWxHZQogICAgIGF1dG8gd2lkdGggPSBjb21wdXRl
ZFZhbHVlSWZOb3RBdXRvKHVzZWRWYWx1ZXMud2lkdGggPyBMZW5ndGggeyB1c2VkVmFsdWVzLndp
ZHRoLnZhbHVlKCksIEZpeGVkIH0gOiBzdHlsZS5sb2dpY2FsV2lkdGgoKSwgY29udGFpbmluZ0Js
b2NrV2lkdGgpOwogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gR2VvbWV0cnk6
OmNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbihsYXlvdXRCb3gsIHVzZWRWYWx1ZXMpOwogICAgIFVz
ZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRIb3Jpem9udGFsTWFyZ2luOwotICAgIGF1dG8gcGFkZGlu
Z0xlZnQgPSBkaXNwbGF5Qm94LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKLSAgICBhdXRvIHBh
ZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gucGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKLSAgICBh
dXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94LmJvcmRlckxlZnQoKTsKLSAgICBhdXRvIGJvcmRl
clJpZ2h0ID0gZGlzcGxheUJveC5ib3JkZXJSaWdodCgpOworICAgIGF1dG8gcGFkZGluZ0xlZnQg
PSBib3hHZW9tZXRyeS5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgYXV0byBwYWRkaW5n
UmlnaHQgPSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOworICAgIGF1dG8g
Ym9yZGVyTGVmdCA9IGJveEdlb21ldHJ5LmJvcmRlckxlZnQoKTsKKyAgICBhdXRvIGJvcmRlclJp
Z2h0ID0gYm94R2VvbWV0cnkuYm9yZGVyUmlnaHQoKTsKICAgICBhdXRvIGNvbnRlbnRXaWR0aCA9
IFsmXSB7CiAgICAgICAgIEFTU0VSVCh3aWR0aCk7CiAgICAgICAgIHJldHVybiBzdHlsZS5ib3hT
aXppbmcoKSA9PSBCb3hTaXppbmc6OkNvbnRlbnRCb3ggPyAqd2lkdGggOiAqd2lkdGggLSAoYm9y
ZGVyTGVmdCArIHBhZGRpbmdMZWZ0ICsgcGFkZGluZ1JpZ2h0ICsgYm9yZGVyUmlnaHQpOwpAQCAt
NTMxLDcgKzUzMSw3IEBAIEhvcml6b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2Vv
bWV0cnk6Om91dE9mRmxvd05vblJlcGxhY2VkSG9yaXpvbnRhbEdlCiAKICAgICAvLyBGb3Igb3V0
LW9mLWZsb3cgZWxlbWVudHMgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaXMgZm9ybWVkIGJ5IHRoZSBw
YWRkaW5nIGVkZ2Ugb2YgdGhlIGFuY2VzdG9yLgogICAgIC8vIEF0IHRoaXMgcG9pbnQgdGhlIHBv
c2l0aW9uZWQgdmFsdWUgaXMgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBwYWRkaW5n
IGJveC4gTGV0J3MgY29udmVydCBpdCB0byBib3JkZXIgYm94IGNvb3JkaW5hdGUgc3lzdGVtLgot
ICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZSA9IGNvbnRhaW5pbmdC
bG9ja0Rpc3BsYXlCb3gucGFkZGluZ0JveExlZnQoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9j
a1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5wYWRkaW5nQm94
TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7
CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAKQEAg
LTU1NSwxMCArNTU1LDEwIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0cnkoCiAKICAgICBhdXRvJiBm
b3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYg
c3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0
dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAgIGF1dG8m
IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94
Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpOwotICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrSGVpZ2h0ID0gY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5wYWRkaW5nQm94
SGVpZ2h0KCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9j
a0Rpc3BsYXlCb3gucGFkZGluZ0JveFdpZHRoKCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBm
b3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGNv
bnRhaW5pbmdCbG9ja0dlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tI
ZWlnaHQgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5wYWRkaW5nQm94SGVpZ2h0KCk7CisgICAg
YXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRp
bmdCb3hXaWR0aCgpOwogCiAgICAgYXV0byB0b3AgPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0
eWxlLmxvZ2ljYWxUb3AoKSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwogICAgIGF1dG8gYm90dG9t
ID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byhzdHlsZS5sb2dpY2FsQm90dG9tKCksIGNvbnRhaW5p
bmdCbG9ja1dpZHRoKTsKQEAgLTU2NiwxMCArNTY2LDEwIEBAIFZlcnRpY2FsR2VvbWV0cnkgRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpvdXRPZkZsb3dSZXBsYWNlZFZlcnRpY2FsR2VvbWV0
cnkoCiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gR2VvbWV0cnk6OmNvbXB1dGVk
VmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGNvbnRhaW5p
bmdCbG9ja1dpZHRoIH0pOwogICAgIE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRNYXJnaW5CZWZv
cmUgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmJlZm9yZTsKICAgICBPcHRpb25hbDxMYXlvdXRV
bml0PiB1c2VkTWFyZ2luQWZ0ZXIgPSBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyOwotICAg
IGF1dG8gcGFkZGluZ1RvcCA9IGRpc3BsYXlCb3gucGFkZGluZ1RvcCgpLnZhbHVlT3IoMCk7Ci0g
ICAgYXV0byBwYWRkaW5nQm90dG9tID0gZGlzcGxheUJveC5wYWRkaW5nQm90dG9tKCkudmFsdWVP
cigwKTsKLSAgICBhdXRvIGJvcmRlclRvcCA9IGRpc3BsYXlCb3guYm9yZGVyVG9wKCk7Ci0gICAg
YXV0byBib3JkZXJCb3R0b20gPSBkaXNwbGF5Qm94LmJvcmRlckJvdHRvbSgpOworICAgIGF1dG8g
cGFkZGluZ1RvcCA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgIGF1
dG8gcGFkZGluZ0JvdHRvbSA9IGJveEdlb21ldHJ5LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9yKDAp
OworICAgIGF1dG8gYm9yZGVyVG9wID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCk7CisgICAgYXV0
byBib3JkZXJCb3R0b20gPSBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKIAogICAgIGlmICgh
dG9wICYmICFib3R0b20pIHsKICAgICAgICAgLy8gIzEKQEAgLTYwOSw3ICs2MDksNyBAQCBWZXJ0
aWNhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFj
ZWRWZXJ0aWNhbEdlb21ldHJ5KAogCiAgICAgLy8gRm9yIG91dC1vZi1mbG93IGVsZW1lbnRzIHRo
ZSBjb250YWluaW5nIGJsb2NrIGlzIGZvcm1lZCBieSB0aGUgcGFkZGluZyBlZGdlIG9mIHRoZSBh
bmNlc3Rvci4KICAgICAvLyBBdCB0aGlzIHBvaW50IHRoZSBwb3NpdGlvbmVkIHZhbHVlIGlzIGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgcGFkZGluZyBib3guIExldCdzIGNvbnZlcnQg
aXQgdG8gYm9yZGVyIGJveCBjb29yZGluYXRlIHN5c3RlbS4KLSAgICBhdXRvIGNvbnRhaW5pbmdC
bG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2UgPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LnBhZGRp
bmdCb3hUb3AoKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2Ug
PSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5wYWRkaW5nQm94VG9wKCk7CiAgICAgKnRvcCArPSBj
b250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlOwogICAgICpib3R0b20gKz0gY29udGFp
bmluZ0Jsb2NrUGFkZGluZ1ZlcnRpY2FsRWRnZTsKIApAQCAtNjQxLDcgKzY0MSw3IEBAIEhvcml6
b250YWxHZW9tZXRyeSBGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6Om91dE9mRmxvd1JlcGxh
Y2VkSG9yaXpvbnRhbEdlb21lCiAKICAgICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMt
PmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUo
KTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZm9ybWF0dGlu
Z0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2sgPSAqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpOwogICAgIGF1dG8gY29udGFpbmlu
Z0Jsb2NrV2lkdGggPSB1c2VkVmFsdWVzLmNvbnRhaW5pbmdCbG9ja1dpZHRoLnZhbHVlT3IoMCk7
CiAgICAgYXV0byBpc0xlZnRUb1JpZ2h0RGlyZWN0aW9uID0gY29udGFpbmluZ0Jsb2NrLnN0eWxl
KCkuaXNMZWZ0VG9SaWdodERpcmVjdGlvbigpOwpAQCAtNjUyLDEwICs2NTIsMTAgQEAgSG9yaXpv
bnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6b3V0T2ZGbG93UmVwbGFj
ZWRIb3Jpem9udGFsR2VvbWUKICAgICBPcHRpb25hbDxMYXlvdXRVbml0PiB1c2VkTWFyZ2luU3Rh
cnQgPSBjb21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQ7CiAgICAgT3B0aW9uYWw8TGF5b3V0
VW5pdD4gdXNlZE1hcmdpbkVuZCA9IGNvbXB1dGVkSG9yaXpvbnRhbE1hcmdpbi5lbmQ7CiAgICAg
YXV0byB3aWR0aCA9IGlubGluZVJlcGxhY2VkV2lkdGhBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
VmFsdWVzKS53aWR0aDsKLSAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gZGlzcGxheUJveC5wYWRkaW5n
TGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBwYWRkaW5nUmlnaHQgPSBkaXNwbGF5Qm94LnBh
ZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBib3JkZXJMZWZ0ID0gZGlzcGxheUJv
eC5ib3JkZXJMZWZ0KCk7Ci0gICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3guYm9yZGVy
UmlnaHQoKTsKKyAgICBhdXRvIHBhZGRpbmdMZWZ0ID0gYm94R2VvbWV0cnkucGFkZGluZ0xlZnQo
KS52YWx1ZU9yKDApOworICAgIGF1dG8gcGFkZGluZ1JpZ2h0ID0gYm94R2VvbWV0cnkucGFkZGlu
Z1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGJvcmRlckxlZnQgPSBib3hHZW9tZXRyeS5i
b3JkZXJMZWZ0KCk7CisgICAgYXV0byBib3JkZXJSaWdodCA9IGJveEdlb21ldHJ5LmJvcmRlclJp
Z2h0KCk7CiAKICAgICBpZiAoIWxlZnQgJiYgIXJpZ2h0KSB7CiAgICAgICAgIC8vICMxCkBAIC03
MTgsNyArNzE4LDcgQEAgSG9yaXpvbnRhbEdlb21ldHJ5IEZvcm1hdHRpbmdDb250ZXh0OjpHZW9t
ZXRyeTo6b3V0T2ZGbG93UmVwbGFjZWRIb3Jpem9udGFsR2VvbWUKIAogICAgIC8vIEZvciBvdXQt
b2YtZmxvdyBlbGVtZW50cyB0aGUgY29udGFpbmluZyBibG9jayBpcyBmb3JtZWQgYnkgdGhlIHBh
ZGRpbmcgZWRnZSBvZiB0aGUgYW5jZXN0b3IuCiAgICAgLy8gQXQgdGhpcyBwb2ludCB0aGUgcG9z
aXRpb25lZCB2YWx1ZSBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIHBhZGRpbmcg
Ym94LiBMZXQncyBjb252ZXJ0IGl0IHRvIGJvcmRlciBib3ggY29vcmRpbmF0ZSBzeXN0ZW0uCi0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gZm9ybWF0dGluZ0Nv
bnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spLnBhZGRpbmdCb3hM
ZWZ0KCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tQYWRkaW5nVmVydGljYWxFZGdlID0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goY29udGFpbmluZ0Jsb2NrKS5wYWRkaW5nQm94
TGVmdCgpOwogICAgICpsZWZ0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7
CiAgICAgKnJpZ2h0ICs9IGNvbnRhaW5pbmdCbG9ja1BhZGRpbmdWZXJ0aWNhbEVkZ2U7CiAKQEAg
LTg1Niw3ICs4NTYsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21l
dHJ5OjppbmxpbmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdAogCiAgICAgLy8gIzEKICAg
ICBhdXRvJiBmb3JtYXR0aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7Ci0g
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdp
ZHRoKCk7CisgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0
Lmdlb21ldHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hX
aWR0aCgpOwogICAgIGF1dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IEdlb21ldHJ5Ojpjb21w
dXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgVXNlZEhvcml6b250YWxWYWx1ZXMgeyBjb250
YWluaW5nQmxvY2tXaWR0aCB9KTsKICAgICBhdXRvIHVzZWRWZXJ0aWNhbE1hcmdpbiA9IFVzZWRW
ZXJ0aWNhbE1hcmdpbjo6Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdp
bi5iZWZvcmUudmFsdWVPcigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9y
KDApIH07CiAgICAgYXV0byYgc3R5bGUgPSBsYXlvdXRCb3guc3R5bGUoKTsKQEAgLTg3MSw3ICs4
NzEsNyBAQCBIZWlnaHRBbmRNYXJnaW4gRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojppbmxp
bmVSZXBsYWNlZEhlaWdodEFuZE1hcmdpbihjb25zdAogICAgICAgICBoZWlnaHQgPSByZXBsYWNl
ZC0+aW50cmluc2ljSGVpZ2h0KCk7CiAgICAgfSBlbHNlIGlmIChoZWlnaHRJc0F1dG8gJiYgcmVw
bGFjZWQtPmhhc0ludHJpbnNpY1JhdGlvKCkpIHsKICAgICAgICAgLy8gIzMKLSAgICAgICAgYXV0
byB1c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCkud2lkdGgoKTsKKyAgICAgICAgYXV0byB1c2VkV2lkdGggPSBmb3JtYXR0aW5nQ29u
dGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLndpZHRoKCk7CiAgICAgICAgIGhlaWdodCA9
IHVzZWRXaWR0aCAvIHJlcGxhY2VkLT5pbnRyaW5zaWNSYXRpbygpOwogICAgIH0gZWxzZSBpZiAo
aGVpZ2h0SXNBdXRvICYmIHJlcGxhY2VkLT5oYXNJbnRyaW5zaWNIZWlnaHQoKSkgewogICAgICAg
ICAvLyAjNApAQCAtOTczLDcgKzk3Myw3IEBAIExheW91dFNpemUgRm9ybWF0dGluZ0NvbnRleHQ6
Okdlb21ldHJ5OjppbkZsb3dQb3NpdGlvbmVkUG9zaXRpb25PZmZzZXQoY29uc3QgQm94CiAKICAg
ICBhdXRvJiBzdHlsZSA9IGxheW91dEJveC5zdHlsZSgpOwogICAgIGF1dG8mIGNvbnRhaW5pbmdC
bG9jayA9ICpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgYXV0byBjb250YWluaW5n
QmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChj
b250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Js
b2NrV2lkdGggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdC
bG9jaykuY29udGVudEJveFdpZHRoKCk7CiAKICAgICBhdXRvIHRvcCA9IGNvbXB1dGVkVmFsdWVJ
Zk5vdEF1dG8oc3R5bGUubG9naWNhbFRvcCgpLCBjb250YWluaW5nQmxvY2tXaWR0aCk7CiAgICAg
YXV0byBib3R0b20gPSBjb21wdXRlZFZhbHVlSWZOb3RBdXRvKHN0eWxlLmxvZ2ljYWxCb3R0b20o
KSwgY29udGFpbmluZ0Jsb2NrV2lkdGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggNTY1MzllMTZjNjA0ZDU2NzI2NDVhMThj
MzIxMGZlZjgwYmZjMDc4Zi4uNDgyOGQwMDJjYmJiYzRlMTdkOTliOGJjN2NhMTNhNmQ5OTdhZWRm
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L0Zvcm1hdHRpbmdDb250ZXh0UXVp
cmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwCkBAIC01MCwxOSArNTAsMTkgQEAgTGF5b3V0VW5pdCBGb3JtYXR0aW5nQ29udGV4dDo6
UXVpcmtzOjpoZWlnaHRWYWx1ZU9mTmVhcmVzdENvbnRhaW5pbmdCbG9ja1dpdGhGaXgKICAgICAg
ICAgLy8gSWYgdGhlIG9ubHkgZml4ZWQgdmFsdWUgYm94IHdlIGZpbmQgaXMgdGhlIElDQiwgdGhl
biBpZ25vcmUgdGhlIGJvZHkgYW5kIHRoZSBkb2N1bWVudCAodmVydGljYWwpIG1hcmdpbiwgcGFk
ZGluZyBhbmQgYm9yZGVyLiBTbyBtdWNoIHF1aXJraW5lc3MuCiAgICAgICAgIC8vIC1hbmQgaXQn
cyB0b3RhbGx5IGluc2FuZSBiZWNhdXNlIG5vdyB3ZSBmcmVlbHkgdHJhdmVsIGFjcm9zcyBmb3Jt
YXR0aW5nIGNvbnRleHQgYm91bmRhcmllcyBhbmQgY29tcHV0ZWQgbWFyZ2lucyBhcmUgbm9uZXhp
c3RlbnQuCiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmlzQm9keUJveCgpIHx8IGNvbnRh
aW5pbmdCbG9jay0+aXNEb2N1bWVudEJveCgpKSB7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5
Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqY29udGFpbmlu
Z0Jsb2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQW5jZXN0b3JGb3Jt
YXR0aW5nQ29udGV4dCk7CisgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KCpjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250
ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NBbmNlc3RvckZvcm1hdHRpbmdDb250ZXh0KTsKIAotICAg
ICAgICAgICAgYXV0byB1c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3JtYXR0
aW5nQ29udGV4dC5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2stPmNvbnRh
aW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQW5jZXN0
b3JGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAgICAgICAgIGF1
dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQu
Z2VvbWV0cnlGb3JCb3goKmNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCksIEZvcm1h
dHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NBbmNlc3RvckZvcm1hdHRpbmdDb250ZXh0
KS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdpbiA9
IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbigqY29u
dGFpbmluZ0Jsb2NrLCB1c2VkVmFsdWVzKTsKLSAgICAgICAgICAgIGF1dG8gdmVydGljYWxQYWRk
aW5nID0gZGlzcGxheUJveC5wYWRkaW5nVG9wKCkudmFsdWVPcigwKSArIGRpc3BsYXlCb3gucGFk
ZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVy
ID0gZGlzcGxheUJveC5ib3JkZXJUb3AoKSArIGRpc3BsYXlCb3guYm9yZGVyQm90dG9tKCk7Cisg
ICAgICAgICAgICBhdXRvIHZlcnRpY2FsUGFkZGluZyA9IGJveEdlb21ldHJ5LnBhZGRpbmdUb3Ao
KS52YWx1ZU9yKDApICsgYm94R2VvbWV0cnkucGFkZGluZ0JvdHRvbSgpLnZhbHVlT3IoMCk7Cisg
ICAgICAgICAgICBhdXRvIHZlcnRpY2FsQm9yZGVyID0gYm94R2VvbWV0cnkuYm9yZGVyVG9wKCkg
KyBib3hHZW9tZXRyeS5ib3JkZXJCb3R0b20oKTsKICAgICAgICAgICAgIGJvZHlBbmREb2N1bWVu
dFZlcnRpY2FsTWFyZ2luUGFkZGluZ0FuZEJvcmRlciArPSB2ZXJ0aWNhbE1hcmdpbi5iZWZvcmUu
dmFsdWVPcigwKSArIHZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3IoMCkgKyB2ZXJ0aWNhbFBh
ZGRpbmcgKyB2ZXJ0aWNhbEJvcmRlcjsKICAgICAgICAgfQogCiAgICAgICAgIGNvbnRhaW5pbmdC
bG9jayA9IGNvbnRhaW5pbmdCbG9jay0+Y29udGFpbmluZ0Jsb2NrKCk7CiAgICAgfQogICAgIC8v
IEluaXRpYWwgY29udGFpbmluZyBibG9jayBoYXMgdG8gaGF2ZSBhIGhlaWdodC4KLSAgICByZXR1
cm4gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3guaW5p
dGlhbENvbnRhaW5pbmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNj
ZXNzQW5jZXN0b3JGb3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9k
eUFuZERvY3VtZW50VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOworICAgIHJldHVybiBm
b3JtYXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChsYXlvdXRCb3guaW5pdGlhbENvbnRhaW5p
bmdCbG9jaygpLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzQW5jZXN0b3JG
b3JtYXR0aW5nQ29udGV4dCkuY29udGVudEJveCgpLmhlaWdodCgpIC0gYm9keUFuZERvY3VtZW50
VmVydGljYWxNYXJnaW5QYWRkaW5nQW5kQm9yZGVyOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCmluZGV4IDIxNzgxNjU3ZGI2ZTc5YmIwZTI2MjEzMDIx
MTMwMjFlYmQwNmIwMDAuLjliMWRjNDFkYTk0YThhNDMzMGNkNGEzZjlhMTg4MjhkNzAyYWZjZTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUuY3BwCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpZiBFTkFCTEUoTEFZT1VUX0ZPUk1BVFRJTkdfQ09OVEVYVCkKIAorI2luY2x1
ZGUgIkRpc3BsYXlCb3guaCIKICNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00Niw2ICs0NywxMyBAQCBGb3JtYXR0aW5nU3RhdGU6On5G
b3JtYXR0aW5nU3RhdGUoKQogewogfQogCitEaXNwbGF5OjpCb3gmIEZvcm1hdHRpbmdTdGF0ZTo6
ZGlzcGxheUJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKK3sKKyAgICAvLyBTaG91bGQg
bmV2ZXIgbmVlZCB0byBtdXRhdGUgYSBkaXNwbGF5IGJveCBvdXRzaWRlIG9mIHRoZSBmb3JtYXR0
aW5nIGNvbnRleHQuCisgICAgQVNTRVJUKCZsYXlvdXRTdGF0ZSgpLmVzdGFibGlzaGVkRm9ybWF0
dGluZ1N0YXRlKGxheW91dEJveC5mb3JtYXR0aW5nQ29udGV4dFJvb3QoKSkgPT0gdGhpcyk7Cisg
ICAgcmV0dXJuIGxheW91dFN0YXRlKCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OworfQorCiB9CiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9G
b3JtYXR0aW5nU3RhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9Gb3JtYXR0aW5nU3RhdGUu
aAppbmRleCAzNTc3Y2Q1ODYyOWIzY2Y2MWFhNjg0ZDVmODk4YjZmZGU5NWNjZmM1Li41NDFiZWQ4
MDNiOGU0ZWY0YTQ0ZDk3YjM4MjI0NWVhM2ExZjViNjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvRm9ybWF0dGluZ1N0YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0
L0Zvcm1hdHRpbmdTdGF0ZS5oCkBAIC02NSw2ICs2NSw3IEBAIHB1YmxpYzoKIAogICAgIExheW91
dFN0YXRlJiBsYXlvdXRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGF5b3V0U3RhdGU7IH0KIAor
ICAgIERpc3BsYXk6OkJveCYgZGlzcGxheUJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3Q7
IAogICAgIC8vIFNpbmNlIHdlIGxheW91dCB0aGUgb3V0LW9mLWZsb3cgYm94ZXMgYXQgdGhlIGVu
ZCBvZiB0aGUgZm9ybWF0dGluZyBjb250ZXh0IGxheW91dCwgaXQncyBva2F5IHRvIHN0b3JlIHRo
ZW0gaW4gdGhlIGZvcm1hdHRpbmcgc3RhdGUgLWFzIG9wcG9zZWQgdG8gdGhlIGNvbnRhaW5pbmcg
YmxvY2sgbGV2ZWwuCiAgICAgdXNpbmcgT3V0T2ZGbG93Qm94TGlzdCA9IFZlY3RvcjxXZWFrUHRy
PGNvbnN0IEJveD4+OwogICAgIHZvaWQgYWRkT3V0T2ZGbG93Qm94KGNvbnN0IEJveCYgb3V0T2ZG
bG93Qm94KSB7IG1fb3V0T2ZGbG93Qm94ZXMuYXBwZW5kKG1ha2VXZWFrUHRyKG91dE9mRmxvd0Jv
eCkpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5n
L0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0LmNwcAppbmRleCBkYWExNzE2YTA0NzZh
NTgzNTM4NmZmM2Q0NjI3MmE2NDU0NGFkYTk5Li5kZGUwNWFhYjFhODkzN2ViNTE4MGFkYWMxNWJk
YjVkYWFlMDJkYzEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3Jt
YXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTEzMiwx
OCArMTMyLDE4IEBAIE9wdGlvbmFsPExheW91dFVuaXQ+IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6
OnVzZWRBdmFpbGFibGVXaWR0aEZvckZsb2F0QXZvaWRlcihjCiAgICAgaWYgKCFjb25zdHJhaW50
cy5sZWZ0ICYmICFjb25zdHJhaW50cy5yaWdodCkKICAgICAgICAgcmV0dXJuIHsgfTsKICAgICBh
dXRvJiBjb250YWluaW5nQmxvY2sgPSBkb3duY2FzdDxDb250YWluZXI+KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpOwotICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3ggPSBk
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jayk7Ci0gICAgYXV0byBhdmFpbGFi
bGVXaWR0aCA9IGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCk7Cisg
ICAgYXV0byYgY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkgPSBnZW9tZXRyeUZvckJveChjb250YWlu
aW5nQmxvY2spOworICAgIGF1dG8gYXZhaWxhYmxlV2lkdGggPSBjb250YWluaW5nQmxvY2tHZW9t
ZXRyeS5jb250ZW50Qm94V2lkdGgoKTsKIAogICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2Nr
TGVmdDsKLSAgICBMYXlvdXRVbml0IGNvbnRhaW5pbmdCbG9ja1JpZ2h0ID0gY29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5yaWdodCgpOworICAgIExheW91dFVuaXQgY29udGFpbmluZ0Jsb2NrUmln
aHQgPSBjb250YWluaW5nQmxvY2tHZW9tZXRyeS5yaWdodCgpOwogICAgIGlmICgmY29udGFpbmlu
Z0Jsb2NrICE9ICZmb3JtYXR0aW5nUm9vdCkgewogICAgICAgICAvLyBNb3ZlIGNvbnRhaW5pbmcg
YmxvY2sgbGVmdC9yaWdodCB0byB0aGUgcm9vdCdzIGNvb3JkaW5hdGUgc3lzdGVtLgogICAgICAg
ICBjb250YWluaW5nQmxvY2tMZWZ0ID0gbWFwTGVmdFRvRm9ybWF0dGluZ0NvbnRleHRSb290KGNv
bnRhaW5pbmdCbG9jayk7CiAgICAgICAgIGNvbnRhaW5pbmdCbG9ja1JpZ2h0ID0gbWFwUmlnaHRU
b0Zvcm1hdHRpbmdDb250ZXh0Um9vdChjb250YWluaW5nQmxvY2spOwogICAgIH0KLSAgICBhdXRv
IGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hMZWZ0ID0gY29udGFpbmluZ0Jsb2NrTGVmdCArIGNv
bnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgY29udGFpbmluZ0Jsb2NrRGlz
cGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7Ci0gICAgYXV0byBjb250YWluaW5nQmxv
Y2tDb250ZW50Qm94UmlnaHQgPSBjb250YWluaW5nQmxvY2tSaWdodCAtIGNvbnRhaW5pbmdCbG9j
a0Rpc3BsYXlCb3guYm9yZGVyUmlnaHQoKSArIGNvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3gucGFk
ZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRC
b3hMZWZ0ID0gY29udGFpbmluZ0Jsb2NrTGVmdCArIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmJv
cmRlckxlZnQoKSArIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVP
cigwKTsKKyAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hSaWdodCA9IGNvbnRhaW5p
bmdCbG9ja1JpZ2h0IC0gY29udGFpbmluZ0Jsb2NrR2VvbWV0cnkuYm9yZGVyUmlnaHQoKSArIGNv
bnRhaW5pbmdCbG9ja0dlb21ldHJ5LnBhZGRpbmdSaWdodCgpLnZhbHVlT3IoMCk7CiAKICAgICAv
LyBTaHJpbmsgdGhlIGF2YWlsYWJsZSBzcGFjZSBpZiB0aGUgZmxvYXRzIGFyZSBhY3R1YWxseSBp
bnRydWRpbmcgYXQgdGhpcyB2ZXJ0aWNhbCBwb3NpdGlvbi4KICAgICBpZiAoY29uc3RyYWludHMu
bGVmdCkKQEAgLTE5OSw3ICsxOTksNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnBs
YWNlSW5GbG93UG9zaXRpb25lZENoaWxkcmVuKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgICAg
ICBhdXRvIGNvbXB1dGVJbkZsb3dQb3NpdGlvbmVkUG9zaXRpb24gPSBbJl0gewogICAgICAgICAg
ICAgYXV0byBwb3NpdGlvbk9mZnNldCA9IGdlb21ldHJ5KCkuaW5GbG93UG9zaXRpb25lZFBvc2l0
aW9uT2Zmc2V0KGNoaWxkQm94KTsKIAotICAgICAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGRp
c3BsYXlCb3hGb3JMYXlvdXRCb3goY2hpbGRCb3gpOworICAgICAgICAgICAgYXV0byYgZGlzcGxh
eUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goY2hpbGRCb3gpOwogICAgICAgICAg
ICAgYXV0byB0b3BMZWZ0ID0gZGlzcGxheUJveC50b3BMZWZ0KCk7CiAKICAgICAgICAgICAgIHRv
cExlZnQubW92ZShwb3NpdGlvbk9mZnNldCk7CkBAIC0yMTQsNyArMjE0LDcgQEAgdm9pZCBCbG9j
a0Zvcm1hdHRpbmdDb250ZXh0OjpwbGFjZUluRmxvd1Bvc2l0aW9uZWRDaGlsZHJlbihjb25zdCBC
b3gmIGxheW91dEJveCkKIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlU3Rh
dGljVmVydGljYWxQb3NpdGlvbihjb25zdCBGbG9hdGluZ0NvbnRleHQmIGZsb2F0aW5nQ29udGV4
dCwgY29uc3QgQm94JiBsYXlvdXRCb3gpCiB7Ci0gICAgZGlzcGxheUJveEZvckxheW91dEJveChs
YXlvdXRCb3gpLnNldFRvcChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0
Qm94KSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldFRv
cChnZW9tZXRyeSgpLnN0YXRpY1ZlcnRpY2FsUG9zaXRpb24obGF5b3V0Qm94KSk7CiAgICAgaWYg
KGxheW91dEJveC5oYXNGbG9hdENsZWFyKCkpCiAgICAgICAgIGNvbXB1dGVFc3RpbWF0ZWRWZXJ0
aWNhbFBvc2l0aW9uRm9yRmxvYXRDbGVhcihmbG9hdGluZ0NvbnRleHQsIGxheW91dEJveCk7CiAg
ICAgZWxzZSBpZiAobGF5b3V0Qm94LmVzdGFibGlzaGVzRm9ybWF0dGluZ0NvbnRleHQoKSkKQEAg
LTIyMyw3ICsyMjMsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0
aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEZsb2F0aW5nQ29udGV4dAogCiB2b2lkIEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVTdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94
JiBsYXlvdXRCb3gpCiB7Ci0gICAgZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpLnNl
dExlZnQoZ2VvbWV0cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94KSk7Cisg
ICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldExlZnQoZ2VvbWV0
cnkoKS5zdGF0aWNIb3Jpem9udGFsUG9zaXRpb24obGF5b3V0Qm94KSk7CiB9CiAKIHZvaWQgQmxv
Y2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVN0YXRpY1Bvc2l0aW9uKGNvbnN0IEZsb2F0aW5n
Q29udGV4dCYgZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKQEAgLTIzNyw3
ICsyMzcsNyBAQCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVFc3RpbWF0ZWRW
ZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJveCYgbGF5b3V0QgogICAgIGF1dG8gZXN0aW1hdGVkTWFy
Z2luQmVmb3JlID0gbWFyZ2luQ29sbGFwc2UoKS5lc3RpbWF0ZWRNYXJnaW5CZWZvcmUobGF5b3V0
Qm94KTsKICAgICBzZXRFc3RpbWF0ZWRNYXJnaW5CZWZvcmUobGF5b3V0Qm94LCBlc3RpbWF0ZWRN
YXJnaW5CZWZvcmUpOwogCi0gICAgYXV0byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlv
dXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRl
KCkuZGlzcGxheUJveChsYXlvdXRCb3gpOwogICAgIGF1dG8gbm9uQ29sbGFwc2VkVmFsdWVzID0g
VXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBlc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUubm9uQ29sbGFwc2VkVmFsdWUsIHsgfSB9OwogICAgIGF1dG8gY29sbGFwc2VkVmFsdWVz
ID0gVXNlZFZlcnRpY2FsTWFyZ2luOjpDb2xsYXBzZWRWYWx1ZXMgeyBlc3RpbWF0ZWRNYXJnaW5C
ZWZvcmUuY29sbGFwc2VkVmFsdWUsIHsgfSwgZXN0aW1hdGVkTWFyZ2luQmVmb3JlLmlzQ29sbGFw
c2VkVGhyb3VnaCB9OwogICAgIGF1dG8gdmVydGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJn
aW4geyBub25Db2xsYXBzZWRWYWx1ZXMsIGNvbGxhcHNlZFZhbHVlcyB9OwpAQCAtMzA2LDcgKzMw
Niw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUVzdGltYXRlZFZlcnRp
Y2FsUG9zaXRpb25Gb3JGbG9hdENsZWFyKGNvbnN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
OworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxh
eW91dEJveCk7CiAgICAgQVNTRVJUKCp2ZXJ0aWNhbFBvc2l0aW9uQW5kQ2xlYXJhbmNlLnBvc2l0
aW9uID49IGRpc3BsYXlCb3gudG9wKCkpOwogICAgIGRpc3BsYXlCb3guc2V0VG9wKCp2ZXJ0aWNh
bFBvc2l0aW9uQW5kQ2xlYXJhbmNlLnBvc2l0aW9uKTsKICAgICBpZiAodmVydGljYWxQb3NpdGlv
bkFuZENsZWFyYW5jZS5jbGVhcmFuY2UpCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBCbG9ja0Zv
cm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlRmxvYXRpbmdQb3NpdGlvbihjb25zdCBGbG9hdGluZ0Nv
bnRleHQmIGZsb2EKIHsKICAgICBBU1NFUlQobGF5b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVk
KCkpOwogICAgIEFTU0VSVChoYXNQcmVjb21wdXRlZE1hcmdpbkJlZm9yZShsYXlvdXRCb3gpKTsK
LSAgICBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGlu
Z0NvbnRleHQucG9zaXRpb25Gb3JGbG9hdChsYXlvdXRCb3gpKTsKKyAgICBmb3JtYXR0aW5nU3Rh
dGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCkuc2V0VG9wTGVmdChmbG9hdGluZ0NvbnRleHQucG9z
aXRpb25Gb3JGbG9hdChsYXlvdXRCb3gpKTsKIH0KIAogdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250
ZXh0Ojpjb21wdXRlUG9zaXRpb25Ub0F2b2lkRmxvYXRzKGNvbnN0IEZsb2F0aW5nQ29udGV4dCYg
ZmxvYXRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91dEJveCkKQEAgLTM0NCw3ICszNDQsNyBA
QCB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVQb3NpdGlvblRvQXZvaWRGbG9h
dHMoY29uc3QgRmxvYXRpbmdDb250ZXh0JgogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoYXV0
byBhZGp1c3RlZFBvc2l0aW9uID0gZmxvYXRpbmdDb250ZXh0LnBvc2l0aW9uRm9yRm9ybWF0dGlu
Z0NvbnRleHRSb290KGxheW91dEJveCkpCi0gICAgICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
bGF5b3V0Qm94KS5zZXRUb3BMZWZ0KCphZGp1c3RlZFBvc2l0aW9uKTsKKyAgICAgICAgZm9ybWF0
dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gpLnNldFRvcExlZnQoKmFkanVzdGVkUG9z
aXRpb24pOwogfQogCiB2b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFu
ZE1hcmdpbihjb25zdCBCb3gmIGxheW91dEJveCwgT3B0aW9uYWw8TGF5b3V0VW5pdD4gdXNlZEF2
YWlsYWJsZVdpZHRoKQpAQCAtMzUzLDcgKzM1Myw3IEBAIHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29u
dGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBPcHRpb25h
CiAgICAgaWYgKHVzZWRBdmFpbGFibGVXaWR0aCkKICAgICAgICAgYXZhaWxhYmxlV2lkdGggPSAq
dXNlZEF2YWlsYWJsZVdpZHRoOwogICAgIGVsc2UKLSAgICAgICAgYXZhaWxhYmxlV2lkdGggPSBk
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRl
bnRCb3hXaWR0aCgpOworICAgICAgICBhdmFpbGFibGVXaWR0aCA9IGdlb21ldHJ5Rm9yQm94KCps
YXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgYXV0
byBjb21wdXRlID0gWyZdKE9wdGlvbmFsPExheW91dFVuaXQ+IHVzZWRXaWR0aCkgLT4gV2lkdGhB
bmRNYXJnaW4gewogICAgICAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVl
cyB7IGF2YWlsYWJsZVdpZHRoLCB1c2VkV2lkdGgsIHsgfSB9OwpAQCAtMzgwLDcgKzM4MCw3IEBA
IHZvaWQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZVdpZHRoQW5kTWFyZ2luKGNvbnN0
IEJveCYgbGF5b3V0Qm94LCBPcHRpb25hCiAgICAgaWYgKHdpZHRoQW5kTWFyZ2luLndpZHRoIDwg
bWluV2lkdGhBbmRNYXJnaW4ud2lkdGgpCiAgICAgICAgIHdpZHRoQW5kTWFyZ2luID0gbWluV2lk
dGhBbmRNYXJnaW47CiAKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91
dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUo
KS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAgICAgZGlzcGxheUJveC5zZXRDb250ZW50Qm94V2lk
dGgod2lkdGhBbmRNYXJnaW4ud2lkdGgpOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1h
cmdpbih3aWR0aEFuZE1hcmdpbi51c2VkTWFyZ2luKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6
b250YWxDb21wdXRlZE1hcmdpbih3aWR0aEFuZE1hcmdpbi5jb21wdXRlZE1hcmdpbik7CkBAIC0z
OTQsNyArMzk0LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0
QW5kTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgICAgICAgICAgcmV0dXJuIGdlb21l
dHJ5KCkuaW5GbG93SGVpZ2h0QW5kTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAKICAg
ICAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAgICAgICAg
cmV0dXJuIGdlb21ldHJ5KCkuZmxvYXRpbmdIZWlnaHRBbmRNYXJnaW4obGF5b3V0Qm94LCB1c2Vk
VmFsdWVzLCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7CisgICAgICAg
ICAgICByZXR1cm4gZ2VvbWV0cnkoKS5mbG9hdGluZ0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gs
IHVzZWRWYWx1ZXMsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZ2VvbWV0cnlGb3JCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7CiAKICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybiB7IH07CkBAIC00MjQsNyArNDI0
LDcgQEAgdm9pZCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogICAgIC8vIDMuIEFkanVzdCBwcmV2aW91cyBpbi1mbG93
IHNpYmxpbmcgbWFyZ2luIGFmdGVyIHVzaW5nIHRoaXMgbWFyZ2luLgogICAgIGF1dG8gY29sbGFw
c2VkTWFyZ2luID0gbWFyZ2luQ29sbGFwc2UoKS5jb2xsYXBzZWRWZXJ0aWNhbFZhbHVlcyhsYXlv
dXRCb3gsIGhlaWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4pOwogICAgIGF1dG8gdmVy
dGljYWxNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW4geyBoZWlnaHRBbmRNYXJnaW4ubm9uQ29s
bGFwc2VkTWFyZ2luLCBjb2xsYXBzZWRNYXJnaW4gfTsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
ZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8mIGRpc3BsYXlCb3gg
PSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJveCk7CiAKICAgICAvLyBPdXQg
b2YgZmxvdyBib3hlcyBkb24ndCBuZWVkIHZlcnRpY2FsIGFkanVzdG1lbnQgYWZ0ZXIgbWFyZ2lu
IGNvbGxhcHNpbmcuCiAgICAgaWYgKGxheW91dEJveC5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkg
ewpAQCAtNDk5LDkgKzQ5OSw5IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6
dmVydGljYWxQb3NpdGlvbldpdGhNYXJnaW4oY29uc3QgQm94JiBsYXlvdXRCCiAgICAgLy8gMi4g
Q2hlY2sgaWYgdGhlIG1hcmdpbiBiZWZvcmUgY29sbGFwc2VzIHdpdGggdGhlIHByZXZpb3VzIGJv
eCdzIG1hcmdpbiBhZnRlci4gaWYgbm90IC0+IHJldHVybiBwcmV2aW91cyBib3gncyBib3R0b20g
aW5jbHVkaW5nIG1hcmdpbiBhZnRlciArIG1hcmdpbkJlZm9yZQogICAgIC8vIDMuIENoZWNrIGlm
IHRoZSBwcmV2aW91cyBib3gncyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2guIElmIG5vdCAtPiBy
ZXR1cm4gcHJldmlvdXMgYm94JyBib3R0b20gZXhjbHVkaW5nIG1hcmdpbiBhZnRlciArIG1hcmdp
bkJlZm9yZSAodGhleSBhcmUgc3VwcG9zZWQgdG8gYmUgZXF1YWwpCiAgICAgLy8gNC4gR28gdG8g
cHJldmlvdXMgYm94IGFuZCBzdGFydCBmcm9tIHN0ZXAgIzEgdW50aWwgd2UgaGl0IHRoZSBwYXJl
bnQgYm94LgotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxh
eW91dEJveCk7Ci0gICAgaWYgKGRpc3BsYXlCb3guaGFzQ2xlYXJhbmNlKCkpCi0gICAgICAgIHJl
dHVybiBkaXNwbGF5Qm94LnRvcCgpOworICAgIGF1dG8mIGJveEdlb21ldHJ5ID0gZ2VvbWV0cnlG
b3JCb3gobGF5b3V0Qm94KTsKKyAgICBpZiAoYm94R2VvbWV0cnkuaGFzQ2xlYXJhbmNlKCkpCisg
ICAgICAgIHJldHVybiBib3hHZW9tZXRyeS50b3AoKTsKIAogICAgIGF1dG8qIGN1cnJlbnRMYXlv
dXRCb3ggPSAmbGF5b3V0Qm94OwogICAgIHdoaWxlIChjdXJyZW50TGF5b3V0Qm94KSB7CkBAIC01
MDksMTkgKzUwOSwxOSBAQCBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OnZlcnRp
Y2FsUG9zaXRpb25XaXRoTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0QgogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93U2libGluZyA9ICpjdXJyZW50TGF5b3V0
Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICAgICAgaWYgKCFtYXJnaW5Db2xsYXBz
ZSgpLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91c1NpYmxpbmdNYXJnaW5BZnRlcigq
Y3VycmVudExheW91dEJveCkpIHsKLSAgICAgICAgICAgIGF1dG8mIHByZXZpb3VzRGlzcGxheUJv
eCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKLSAgICAg
ICAgICAgIHJldHVybiBwcmV2aW91c0Rpc3BsYXlCb3gucmVjdFdpdGhNYXJnaW4oKS5ib3R0b20o
KSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOworICAgICAgICAgICAgYXV0byYgcHJldmlvdXNC
b3hHZW9tZXRyeSA9IGdlb21ldHJ5Rm9yQm94KHByZXZpb3VzSW5GbG93U2libGluZyk7CisgICAg
ICAgICAgICByZXR1cm4gcHJldmlvdXNCb3hHZW9tZXRyeS5yZWN0V2l0aE1hcmdpbigpLmJvdHRv
bSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IW1hcmdpbkNvbGxhcHNlKCkubWFyZ2luc0NvbGxhcHNlVGhyb3VnaChwcmV2aW91c0luRmxvd1Np
YmxpbmcpKSB7Ci0gICAgICAgICAgICBhdXRvJiBwcmV2aW91c0Rpc3BsYXlCb3ggPSBkaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KHByZXZpb3VzSW5GbG93U2libGluZyk7Ci0gICAgICAgICAgICByZXR1
cm4gcHJldmlvdXNEaXNwbGF5Qm94LmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7
CisgICAgICAgICAgICBhdXRvJiBwcmV2aW91c0JveEdlb21ldHJ5ID0gZ2VvbWV0cnlGb3JCb3go
cHJldmlvdXNJbkZsb3dTaWJsaW5nKTsKKyAgICAgICAgICAgIHJldHVybiBwcmV2aW91c0JveEdl
b21ldHJ5LmJvdHRvbSgpICsgdmVydGljYWxNYXJnaW4uYmVmb3JlKCk7CiAgICAgICAgIH0KICAg
ICAgICAgY3VycmVudExheW91dEJveCA9ICZwcmV2aW91c0luRmxvd1NpYmxpbmc7CiAgICAgfQog
CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKmxheW91dEJveC5jb250YWluaW5nQmxvY2so
KTsKLSAgICBhdXRvIGNvbnRhaW5pbmdCbG9ja0NvbnRlbnRCb3hUb3AgPSBkaXNwbGF5Qm94Rm9y
TGF5b3V0Qm94KGNvbnRhaW5pbmdCbG9jaykuY29udGVudEJveFRvcCgpOworICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrQ29udGVudEJveFRvcCA9IGdlb21ldHJ5Rm9yQm94KGNvbnRhaW5pbmdCbG9j
aykuY29udGVudEJveFRvcCgpOwogICAgIC8vIEFkanVzdCB2ZXJ0aWNhbCBwb3NpdGlvbiBkZXBl
bmRpbmcgd2hldGhlciB0aGlzIGJveCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGFkam9pbnMgd2l0
aCBpdHMgcGFyZW50LgogICAgIGF1dG8gZGlyZWN0bHlBZGpvaW5zUGFyZW50ID0gIWxheW91dEJv
eC5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKICAgICBpZiAoZGlyZWN0bHlBZGpvaW5zUGFyZW50
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Js
b2NrRm9ybWF0dGluZ0NvbnRleHQuaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1h
dHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCmluZGV4IDI2MWFjM2NkYWUwNGRlODU1ZDk3
MzdlZjM4NzRlMjhiODkyYjlkOWMuLmVlNzU3OTcxMGM1ZjExMDA4MDc0OTdjOWVmNGY2ZTBiYTg5
OWE1YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcv
QmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9j
a2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dC5oCkBAIC0xMjYsNiArMTI2LDcgQEAg
cHJpdmF0ZToKICAgICAgICAgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpWYWx1
ZXMgcG9zaXRpdmVOZWdhdGl2ZVZhbHVlcyhjb25zdCBCb3gmLCBNYXJnaW5UeXBlKTsKICAgICAg
ICAgUG9zaXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luOjpWYWx1ZXMgcG9zaXRpdmVOZWdh
dGl2ZU1hcmdpbkJlZm9yZShjb25zdCBCb3gmLCBjb25zdCBVc2VkVmVydGljYWxNYXJnaW46Ok5v
bkNvbGxhcHNlZFZhbHVlcyYpOwogICAgICAgICBQb3NpdGl2ZUFuZE5lZ2F0aXZlVmVydGljYWxN
YXJnaW46OlZhbHVlcyBwb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIoY29uc3QgQm94JiwgY29u
c3QgVXNlZFZlcnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMmKTsKKyAgICAgICAgYm9v
bCBoYXNDbGVhcmFuY2UoY29uc3QgQm94JikgY29uc3Q7CiAKICAgICAgICAgTGF5b3V0U3RhdGUm
IGxheW91dFN0YXRlKCkgeyByZXR1cm4gbV9ibG9ja0Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0
YXRlKCk7IH0KICAgICAgICAgY29uc3QgTGF5b3V0U3RhdGUmIGxheW91dFN0YXRlKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9ja0Zvcm1hdHRpbmdDb250ZXh0LmxheW91dFN0YXRlKCk7IH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tGb3JtYXR0
aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zvcm1h
dHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBiOGFmMThmNDdk
NWQ3NTkzZGRlNzRjYjVjOWMwODhlN2Y1MjQxYjJmLi5jNDg3MzFiNTMwNDk4OTZkOTkxZTFkZmVh
MmViODc1NDA5ZDVlZmJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tm
b3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0R2Vv
bWV0cnkuY3BwCkBAIC01OSwxNSArNTksMTUgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0
dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKIAog
ICAgICAgICBhdXRvJiBsYXlvdXRTdGF0ZSA9IHRoaXMtPmxheW91dFN0YXRlKCk7CiAgICAgICAg
IGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKLSAg
ICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JM
YXlvdXRCb3gobGF5b3V0Qm94KTsKLSAgICAgICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9
IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250
YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCk7CisgICAgICAgIGF1dG8mIGJveEdlb21l
dHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKKyAgICAg
ICAgYXV0byBjb250YWluaW5nQmxvY2tXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5
Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpOwog
ICAgICAgICBhdXRvIGNvbXB1dGVkVmVydGljYWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRW
ZXJ0aWNhbE1hcmdpbihsYXlvdXRCb3gsIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgY29udGFpbmlu
Z0Jsb2NrV2lkdGggfSk7CiAgICAgICAgIGF1dG8gbm9uQ29sbGFwc2VkTWFyZ2luID0gVXNlZFZl
cnRpY2FsTWFyZ2luOjpOb25Db2xsYXBzZWRWYWx1ZXMgeyBjb21wdXRlZFZlcnRpY2FsTWFyZ2lu
LmJlZm9yZS52YWx1ZU9yKDApLCBjb21wdXRlZFZlcnRpY2FsTWFyZ2luLmFmdGVyLnZhbHVlT3Io
MCkgfTsgCi0gICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ1RvcCA9IGRpc3BsYXlCb3guYm9y
ZGVyVG9wKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOworICAgICAgICBh
dXRvIGJvcmRlckFuZFBhZGRpbmdUb3AgPSBib3hHZW9tZXRyeS5ib3JkZXJUb3AoKSArIGJveEdl
b21ldHJ5LnBhZGRpbmdUb3AoKS52YWx1ZU9yKDApOwogICAgICAgICBhdXRvIGhlaWdodCA9IHVz
ZWRWYWx1ZXMuaGVpZ2h0ID8gdXNlZFZhbHVlcy5oZWlnaHQudmFsdWUoKSA6IGNvbXB1dGVkSGVp
Z2h0VmFsdWUobGF5b3V0Qm94LCBIZWlnaHRUeXBlOjpOb3JtYWwpOwogCiAgICAgICAgIGlmICho
ZWlnaHQpIHsKLSAgICAgICAgICAgIGF1dG8gYm9yZGVyQW5kUGFkZGluZ0JvdHRvbSA9IGRpc3Bs
YXlCb3guYm9yZGVyQm90dG9tKCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdCb3R0b20oKS52YWx1ZU9y
KDApOworICAgICAgICAgICAgYXV0byBib3JkZXJBbmRQYWRkaW5nQm90dG9tID0gYm94R2VvbWV0
cnkuYm9yZGVyQm90dG9tKCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nQm90dG9tKCkudmFsdWVPcigw
KTsKICAgICAgICAgICAgIGF1dG8gY29udGVudEhlaWdodCA9IGxheW91dEJveC5zdHlsZSgpLmJv
eFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCA/ICpoZWlnaHQgOiAqaGVpZ2h0IC0g
KGJvcmRlckFuZFBhZGRpbmdUb3AgKyBib3JkZXJBbmRQYWRkaW5nQm90dG9tKTsgIAogICAgICAg
ICAgICAgcmV0dXJuIHsgY29udGVudEhlaWdodCwgbm9uQ29sbGFwc2VkTWFyZ2luIH07CiAgICAg
ICAgIH0KQEAgLTg4LDggKzg4LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKICAgICAgICAg
QVNTRVJUKGxhc3RJbkZsb3dDaGlsZCk7CiAgICAgICAgIGF1dG8gbWFyZ2luQ29sbGFwc2UgPSBN
YXJnaW5Db2xsYXBzZShmb3JtYXR0aW5nQ29udGV4dCk7CiAgICAgICAgIGlmICghbWFyZ2luQ29s
bGFwc2UubWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQWZ0ZXIoKmxhc3RJbkZs
b3dDaGlsZCkpIHsKLSAgICAgICAgICAgIGF1dG8mIGxhc3RJbkZsb3dEaXNwbGF5Qm94ID0gZm9y
bWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveCgqbGFzdEluRmxvd0NoaWxkKTsK
LSAgICAgICAgICAgIGF1dG8gYm90dG9tRWRnZU9mQm90dG9tTWFyZ2luID0gbGFzdEluRmxvd0Rp
c3BsYXlCb3guYm90dG9tKCkgKyAobGFzdEluRmxvd0Rpc3BsYXlCb3guaGFzQ29sbGFwc2VkVGhy
b3VnaE1hcmdpbigpID8gTGF5b3V0VW5pdCgpIDogbGFzdEluRmxvd0Rpc3BsYXlCb3gubWFyZ2lu
QWZ0ZXIoKSk7IAorICAgICAgICAgICAgYXV0byYgbGFzdEluRmxvd0JveEdlb21ldHJ5ID0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goKmxhc3RJbkZsb3dDaGlsZCk7CisgICAgICAg
ICAgICBhdXRvIGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiA9IGxhc3RJbkZsb3dCb3hHZW9tZXRy
eS5ib3R0b20oKSArIChsYXN0SW5GbG93Qm94R2VvbWV0cnkuaGFzQ29sbGFwc2VkVGhyb3VnaE1h
cmdpbigpID8gTGF5b3V0VW5pdCgpIDogbGFzdEluRmxvd0JveEdlb21ldHJ5Lm1hcmdpbkFmdGVy
KCkpOyAKICAgICAgICAgICAgIHJldHVybiB7IGJvdHRvbUVkZ2VPZkJvdHRvbU1hcmdpbiAtIGJv
cmRlckFuZFBhZGRpbmdUb3AsIG5vbkNvbGxhcHNlZE1hcmdpbiB9OwogICAgICAgICB9CiAKQEAg
LTk4LDggKzk4LDggQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdl
b21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZEhlaWdodEFuZE1hcmcKICAgICAgICAgd2hpbGUgKGlu
Rmxvd0NoaWxkICYmIG1hcmdpbkNvbGxhcHNlLm1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJl
bnRNYXJnaW5BZnRlcigqaW5GbG93Q2hpbGQpKQogICAgICAgICAgICAgaW5GbG93Q2hpbGQgPSBp
bkZsb3dDaGlsZC0+cHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7CiAgICAgICAgIGlmIChpbkZsb3dD
aGlsZCkgewotICAgICAgICAgICAgYXV0byYgaW5GbG93RGlzcGxheUJveCA9IGZvcm1hdHRpbmdD
b250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmluRmxvd0NoaWxkKTsKLSAgICAgICAgICAg
IHJldHVybiB7IGluRmxvd0Rpc3BsYXlCb3gudG9wKCkgKyBpbkZsb3dEaXNwbGF5Qm94LmJvcmRl
ckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29sbGFwc2VkTWFyZ2lu
IH07CisgICAgICAgICAgICBhdXRvJiBpbkZsb3dEaXNwbGF5Qm94R2VvbWV0cnkgPSBmb3JtYXR0
aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveCgqaW5GbG93Q2hpbGQpOworICAgICAgICAgICAgcmV0
dXJuIHsgaW5GbG93RGlzcGxheUJveEdlb21ldHJ5LnRvcCgpICsgaW5GbG93RGlzcGxheUJveEdl
b21ldHJ5LmJvcmRlckJveCgpLmhlaWdodCgpIC0gYm9yZGVyQW5kUGFkZGluZ1RvcCwgbm9uQ29s
bGFwc2VkTWFyZ2luIH07CiAgICAgICAgIH0KIAogICAgICAgICAvLyA0LiB6ZXJvLCBvdGhlcndp
c2UKQEAgLTE0MSwxNSArMTQxLDE1IEBAIFdpZHRoQW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0Nv
bnRleHQ6Okdlb21ldHJ5OjppbkZsb3dOb25SZXBsYWNlZFdpZHRoQW5kTWFyZ2luCiAgICAgICAg
IGF1dG8mIHN0eWxlID0gbGF5b3V0Qm94LnN0eWxlKCk7CiAgICAgICAgIGF1dG8qIGNvbnRhaW5p
bmdCbG9jayA9IGxheW91dEJveC5jb250YWluaW5nQmxvY2soKTsKICAgICAgICAgYXV0byBjb250
YWluaW5nQmxvY2tXaWR0aCA9IHVzZWRWYWx1ZXMuY29udGFpbmluZ0Jsb2NrV2lkdGgudmFsdWVP
cigwKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlz
cGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgICAgICBhdXRvJiBib3hHZW9tZXRy
eSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KTsKIAogICAg
ICAgICBhdXRvIHdpZHRoID0gY29tcHV0ZWRWYWx1ZUlmTm90QXV0byh1c2VkVmFsdWVzLndpZHRo
ID8gTGVuZ3RoIHsgdXNlZFZhbHVlcy53aWR0aC52YWx1ZSgpLCBGaXhlZCB9IDogc3R5bGUubG9n
aWNhbFdpZHRoKCksIGNvbnRhaW5pbmdCbG9ja1dpZHRoKTsKICAgICAgICAgYXV0byBjb21wdXRl
ZEhvcml6b250YWxNYXJnaW4gPSBHZW9tZXRyeTo6Y29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luKGxh
eW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgICAgIFVzZWRIb3Jpem9udGFsTWFyZ2luIHVzZWRI
b3Jpem9udGFsTWFyZ2luOwotICAgICAgICBhdXRvIGJvcmRlckxlZnQgPSBkaXNwbGF5Qm94LmJv
cmRlckxlZnQoKTsKLSAgICAgICAgYXV0byBib3JkZXJSaWdodCA9IGRpc3BsYXlCb3guYm9yZGVy
UmlnaHQoKTsKLSAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGRpc3BsYXlCb3gucGFkZGluZ0xl
ZnQoKS52YWx1ZU9yKDApOwotICAgICAgICBhdXRvIHBhZGRpbmdSaWdodCA9IGRpc3BsYXlCb3gu
cGFkZGluZ1JpZ2h0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBib3JkZXJMZWZ0ID0gYm94
R2VvbWV0cnkuYm9yZGVyTGVmdCgpOworICAgICAgICBhdXRvIGJvcmRlclJpZ2h0ID0gYm94R2Vv
bWV0cnkuYm9yZGVyUmlnaHQoKTsKKyAgICAgICAgYXV0byBwYWRkaW5nTGVmdCA9IGJveEdlb21l
dHJ5LnBhZGRpbmdMZWZ0KCkudmFsdWVPcigwKTsKKyAgICAgICAgYXV0byBwYWRkaW5nUmlnaHQg
PSBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwogICAgICAgICBhdXRvIGNv
bnRlbnRXaWR0aCA9IFsmXSB7CiAgICAgICAgICAgICBBU1NFUlQod2lkdGgpOwogICAgICAgICAg
ICAgcmV0dXJuIHN0eWxlLmJveFNpemluZygpID09IEJveFNpemluZzo6Q29udGVudEJveCA/ICp3
aWR0aCA6ICp3aWR0aCAtIChib3JkZXJMZWZ0ICsgcGFkZGluZ0xlZnQgKyBwYWRkaW5nUmlnaHQg
KyBib3JkZXJSaWdodCk7CkBAIC0yMzIsMTcgKzIzMiwxNyBAQCBMYXlvdXRVbml0IEJsb2NrRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNWZXJ0aWNhbFBvc2l0aW9uKGNvbnN0IEJv
eCYgbAogICAgIC8vIFRoZSB2ZXJ0aWNhbCBkaXN0YW5jZSBiZXR3ZWVuIHR3byBzaWJsaW5nIGJv
eGVzIGlzIGRldGVybWluZWQgYnkgdGhlICdtYXJnaW4nIHByb3BlcnRpZXMuCiAgICAgLy8gVmVy
dGljYWwgbWFyZ2lucyBiZXR3ZWVuIGFkamFjZW50IGJsb2NrLWxldmVsIGJveGVzIGluIGEgYmxv
Y2sgZm9ybWF0dGluZyBjb250ZXh0IGNvbGxhcHNlLgogICAgIGlmIChhdXRvKiBwcmV2aW91c0lu
Rmxvd1NpYmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCkpIHsKLSAgICAg
ICAgYXV0byYgcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpOwotICAgICAgICBy
ZXR1cm4gcHJldmlvdXNJbkZsb3dEaXNwbGF5Qm94LmJvdHRvbSgpICsgcHJldmlvdXNJbkZsb3dE
aXNwbGF5Qm94Lm1hcmdpbkFmdGVyKCk7CisgICAgICAgIGF1dG8mIHByZXZpb3VzSW5GbG93Qm94
R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpwcmV2aW91c0lu
Rmxvd1NpYmxpbmcpOworICAgICAgICByZXR1cm4gcHJldmlvdXNJbkZsb3dCb3hHZW9tZXRyeS5i
b3R0b20oKSArIHByZXZpb3VzSW5GbG93Qm94R2VvbWV0cnkubWFyZ2luQWZ0ZXIoKTsKICAgICB9
Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgq
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94VG9wKCk7CisgICAgcmV0dXJu
IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5n
QmxvY2soKSkuY29udGVudEJveFRvcCgpOwogfQogCiBMYXlvdXRVbml0IEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6Okdlb21ldHJ5OjpzdGF0aWNIb3Jpem9udGFsUG9zaXRpb24oY29uc3QgQm94JiBs
YXlvdXRCb3gpIGNvbnN0CiB7CiAgICAgLy8gaHR0cHM6Ly93d3cudzMub3JnL1RSL0NTUzIyL3Zp
c3VyZW4uaHRtbCNibG9jay1mb3JtYXR0aW5nCiAgICAgLy8gSW4gYSBibG9jayBmb3JtYXR0aW5n
IGNvbnRleHQsIGVhY2ggYm94J3MgbGVmdCBvdXRlciBlZGdlIHRvdWNoZXMgdGhlIGxlZnQgZWRn
ZSBvZiB0aGUgY29udGFpbmluZyBibG9jayAoZm9yIHJpZ2h0LXRvLWxlZnQgZm9ybWF0dGluZywg
cmlnaHQgZWRnZXMgdG91Y2gpLgotICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJv
eExlZnQoKSArIGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlv
dXRCb3gpLm1hcmdpblN0YXJ0KCk7CisgICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2Vv
bWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveExlZnQo
KSArIGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94KS5tYXJnaW5T
dGFydCgpOwogfQogCiBQb2ludCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6c3Rh
dGljUG9zaXRpb24oY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0CkBAIC0yNjIsNyArMjYyLDcg
QEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbkZs
b3dIZWlnaHRBbmRNYXJnaW4oY29uc3QgQm8KICAgICBIZWlnaHRBbmRNYXJnaW4gaGVpZ2h0QW5k
TWFyZ2luOwogICAgIC8vIEZJWE1FOiBMZXQncyBzcGVjaWFsIGNhc2UgdGhlIHRhYmxlIGhlaWdo
dCBjb21wdXRhdGlvbiBmb3Igbm93IC0+IGZpZ3VyZSBvdXQgd2hldGhlciB0YWJsZXMgZmFsbCBp
bnRvIHRoZSAiaW5GbG93Tm9uUmVwbGFjZWRIZWlnaHRBbmRNYXJnaW4iIGNhdGVnb3J5LgogICAg
IGlmIChsYXlvdXRCb3guZXN0YWJsaXNoZXNUYWJsZUZvcm1hdHRpbmdDb250ZXh0KCkpIHsKLSAg
ICAgICAgYXV0byB1c2VkSG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsg
Zm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlvdXRCb3guY29u
dGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgICAgIGF1dG8gdXNlZEhv
cml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0
KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJv
eFdpZHRoKCkgfTsKICAgICAgICAgaGVpZ2h0QW5kTWFyZ2luID0gY29tcGxpY2F0ZWRDYXNlcyhs
YXlvdXRCb3gsIHVzZWRWYWx1ZXMsIHVzZWRIb3Jpem9udGFsVmFsdWVzKTsKICAgICB9IGVsc2Ug
aWYgKGxheW91dEJveC5pc092ZXJmbG93VmlzaWJsZSgpICYmICFsYXlvdXRCb3guaXNEb2N1bWVu
dEJveCgpKSB7CiAgICAgICAgIC8vIFRPRE86IEZpZ3VyZSBvdXQgdGhlIGNhc2UgZm9yIHRoZSBk
b2N1bWVudCBlbGVtZW50LiBMZXQncyBqdXN0IGNvbXBsaWNhdGVkLWNhc2UgaXQgZm9yIG5vdy4K
QEAgLTI3MCw3ICsyNzAsNyBAQCBIZWlnaHRBbmRNYXJnaW4gQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6R2VvbWV0cnk6OmluRmxvd0hlaWdodEFuZE1hcmdpbihjb25zdCBCbwogICAgIH0gZWxzZSB7
CiAgICAgICAgIC8vIDEwLjYuNiBDb21wbGljYXRlZCBjYXNlcwogICAgICAgICAvLyBCbG9jay1s
ZXZlbCwgbm9uLXJlcGxhY2VkIGVsZW1lbnRzIGluIG5vcm1hbCBmbG93IHdoZW4gJ292ZXJmbG93
JyBkb2VzIG5vdCBjb21wdXRlIHRvICd2aXNpYmxlJyAoZXhjZXB0IGlmIHRoZSAnb3ZlcmZsb3cn
IHByb3BlcnR5J3MgdmFsdWUgaGFzIGJlZW4gcHJvcGFnYXRlZCB0byB0aGUgdmlld3BvcnQpLgot
ICAgICAgICBhdXRvIHVzZWRIb3Jpem9udGFsVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMg
eyBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxheW91dEJveC5j
b250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKKyAgICAgICAgYXV0byB1c2Vk
SG9yaXpvbnRhbFZhbHVlcyA9IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeUZvckJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50
Qm94V2lkdGgoKSB9OwogICAgICAgICBoZWlnaHRBbmRNYXJnaW4gPSBjb21wbGljYXRlZENhc2Vz
KGxheW91dEJveCwgdXNlZFZhbHVlcywgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja0Zv
cm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9ibG9ja2Zv
cm1hdHRpbmcvQmxvY2tGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5jcHAKaW5kZXggM2VkM2ZmODcx
ZmZmZTY5Nzg3OGZlZTFhMTc2ZGU4MTU0NWJhNTZhMC4uMWNmNTk4MGM0ZTAyMjk5NThkNDM2NWE1
NWVlNjY1MGQ0ZWI0YmJkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2Nr
Zm9ybWF0dGluZy9CbG9ja0Zvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrRm9ybWF0dGluZ0NvbnRleHRRdWly
a3MuY3BwCkBAIC02NywxMSArNjcsMTEgQEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGlu
Z0NvbnRleHQ6OlF1aXJrczo6c3RyZXRjaGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYKIAogICAg
IGF1dG8mIGZvcm1hdHRpbmdDb250ZXh0ID0gdGhpcy0+Zm9ybWF0dGluZ0NvbnRleHQoKTsKICAg
ICBhdXRvJiBkb2N1bWVudEJveCA9IGxheW91dEJveC5pc0RvY3VtZW50Qm94KCkgPyBsYXlvdXRC
b3ggOiAqbGF5b3V0Qm94LnBhcmVudCgpOwotICAgIGF1dG8mIGRvY3VtZW50Qm94RGlzcGxheUJv
eCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZG9jdW1lbnRCb3gp
OworICAgIGF1dG8mIGRvY3VtZW50Qm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChkb2N1bWVudEJveCk7CiAKLSAgICBhdXRvJiBpbml0aWFsQ29udGFpbmluZ0Js
b2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
aW5pdGlhbENvbnRhaW5pbmdCbG9jayhsYXlvdXRCb3gpKTsKLSAgICBhdXRvIHN0cmVjaGVkSGVp
Z2h0ID0gaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveEhlaWdodCgp
OwotICAgIHN0cmVjaGVkSGVpZ2h0IC09IGRvY3VtZW50Qm94RGlzcGxheUJveC52ZXJ0aWNhbEJv
cmRlcigpICsgZG9jdW1lbnRCb3hEaXNwbGF5Qm94LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3Io
MCk7CisgICAgYXV0byYgaW5pdGlhbENvbnRhaW5pbmdCbG9jR2VvbWV0cnkgPSBmb3JtYXR0aW5n
Q29udGV4dC5nZW9tZXRyeUZvckJveChpbml0aWFsQ29udGFpbmluZ0Jsb2NrKGxheW91dEJveCkp
OworICAgIGF1dG8gc3RyZWNoZWRIZWlnaHQgPSBpbml0aWFsQ29udGFpbmluZ0Jsb2NHZW9tZXRy
eS5jb250ZW50Qm94SGVpZ2h0KCk7CisgICAgc3RyZWNoZWRIZWlnaHQgLT0gZG9jdW1lbnRCb3hH
ZW9tZXRyeS52ZXJ0aWNhbEJvcmRlcigpICsgZG9jdW1lbnRCb3hHZW9tZXRyeS52ZXJ0aWNhbFBh
ZGRpbmcoKS52YWx1ZU9yKDApOwogCiAgICAgTGF5b3V0VW5pdCB0b3RhbFZlcnRpY2FsTWFyZ2lu
OwogICAgIGlmIChsYXlvdXRCb3guaXNEb2N1bWVudEJveCgpKSB7CkBAIC04MiwxMSArODIsMTEg
QEAgSGVpZ2h0QW5kTWFyZ2luIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6OlF1aXJrczo6c3RyZXRj
aGVkSW5GbG93SGVpZ2h0KGNvbnN0IEJveCYKICAgICAgICAgLy8gSGVyZSBpcyB0aGUgcXVpcmt5
IHBhcnQgZm9yIGJvZHkgYm94OgogICAgICAgICAvLyBTdHJldGNoIHRoZSBib2R5IHVzaW5nIHRo
ZSBpbml0aWFsIGNvbnRhaW5pbmcgYmxvY2sncyBoZWlnaHQgYW5kIHNocmluayBpdCB3aXRoIGRv
Y3VtZW50IGJveCdzIG1hcmdpbi9ib3JkZXIvcGFkZGluZy4KICAgICAgICAgLy8gVGhpcyBsb29r
cyBleHRyZW1lbHkgb2RkIHdoZW4gaHRtbCBoYXMgbm9uLWF1dG8gaGVpZ2h0LgotICAgICAgICBh
dXRvIGRvY3VtZW50Qm94VmVydGljYWxNYXJnaW4gPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9tZXRy
eSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4oZG9jdW1lbnRCb3gsIFVzZWRIb3Jpem9udGFsVmFs
dWVzIHsgaW5pdGlhbENvbnRhaW5pbmdCbG9ja0Rpc3BsYXlCb3guY29udGVudEJveFdpZHRoKCkg
fSk7CisgICAgICAgIGF1dG8gZG9jdW1lbnRCb3hWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdD
b250ZXh0Lmdlb21ldHJ5KCkuY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbihkb2N1bWVudEJveCwgVXNl
ZEhvcml6b250YWxWYWx1ZXMgeyBpbml0aWFsQ29udGFpbmluZ0Jsb2NHZW9tZXRyeS5jb250ZW50
Qm94V2lkdGgoKSB9KTsKICAgICAgICAgc3RyZWNoZWRIZWlnaHQgLT0gKGRvY3VtZW50Qm94VmVy
dGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCkgKyBkb2N1bWVudEJveFZlcnRpY2FsTWFyZ2lu
LmFmdGVyLnZhbHVlT3IoMCkpOwogCi0gICAgICAgIGF1dG8mIGJvZHlCb3hEaXNwbGF5Qm94ID0g
Zm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwotICAg
ICAgICBzdHJlY2hlZEhlaWdodCAtPSBib2R5Qm94RGlzcGxheUJveC52ZXJ0aWNhbEJvcmRlcigp
ICsgYm9keUJveERpc3BsYXlCb3gudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKKyAgICAg
ICAgYXV0byYgYm9keUJveEdlb21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JC
b3gobGF5b3V0Qm94KTsKKyAgICAgICAgc3RyZWNoZWRIZWlnaHQgLT0gYm9keUJveEdlb21ldHJ5
LnZlcnRpY2FsQm9yZGVyKCkgKyBib2R5Qm94R2VvbWV0cnkudmVydGljYWxQYWRkaW5nKCkudmFs
dWVPcigwKTsKIAogICAgICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IGhlaWdodEFuZE1h
cmdpbi5ub25Db2xsYXBzZWRNYXJnaW47CiAgICAgICAgIGF1dG8gY29sbGFwc2VkTWFyZ2luID0g
TWFyZ2luQ29sbGFwc2UoZm9ybWF0dGluZ0NvbnRleHQpLmNvbGxhcHNlZFZlcnRpY2FsVmFsdWVz
KGxheW91dEJveCwgbm9uQ29sbGFwc2VkTWFyZ2luKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvYmxvY2tmb3JtYXR0aW5nL0Jsb2NrTWFyZ2luQ29sbGFwc2UuY3Bw
CmluZGV4IGMwNDY3MTAxNzM1MTc4ZTBhMjkwMWJjMWUyMDJiN2QwOTdlMmYzMjkuLmY2NmEzMDI3
NjE0OWVjMGM5ODNhY2U3NGM2OTI0M2Q0NWNiNmQxYzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2xheW91dC9ibG9ja2Zvcm1hdHRpbmcvQmxvY2tNYXJnaW5Db2xsYXBzZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2Jsb2NrZm9ybWF0dGluZy9CbG9ja01hcmdpbkNvbGxhcHNl
LmNwcApAQCAtNzAsMTMgKzcwLDYgQEAgc3RhdGljIGJvb2wgaGFzUGFkZGluZ0FmdGVyKGNvbnN0
IEJveCYgbGF5b3V0Qm94KQogICAgIHJldHVybiBoYXNQYWRkaW5nKGxheW91dEJveC5zdHlsZSgp
LnBhZGRpbmdBZnRlcigpKTsKIH0KIAotc3RhdGljIGJvb2wgaGFzQ2xlYXJhbmNlKGNvbnN0IEZv
cm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCwgY29uc3QgQm94JiBsYXlvdXRCb3gp
Ci17Ci0gICAgaWYgKCFsYXlvdXRCb3guaGFzRmxvYXRDbGVhcigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRC
b3gobGF5b3V0Qm94KS5oYXNDbGVhcmFuY2UoKTsKLX0KLQogc3RhdGljIGJvb2wgZXN0YWJsaXNo
ZXNCbG9ja0Zvcm1hdHRpbmdDb250ZXh0KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIC8v
IFdlYktpdCB0cmVhdHMgdGhlIGRvY3VtZW50IGVsZW1lbnQgcmVuZGVyZXIgYXMgYSBibG9jayBm
b3JtYXR0aW5nIGNvbnRleHQgcm9vdC4gSXQgcHJvYmFibHkgb25seSBpbXBhY3RzIG1hcmdpbiBj
b2xsYXBzaW5nLCBzbyBsZXQncyBub3QgZG8KQEAgLTg2LDYgKzc5LDE3IEBAIHN0YXRpYyBib29s
IGVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dChjb25zdCBCb3gmIGxheW91dEJveCkK
ICAgICByZXR1cm4gbGF5b3V0Qm94LmVzdGFibGlzaGVzQmxvY2tGb3JtYXR0aW5nQ29udGV4dCgp
OwogfQogCitib29sIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjpoYXND
bGVhcmFuY2UoY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7CisgICAgaWYgKCFsYXlvdXRC
b3guaGFzRmxvYXRDbGVhcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgLy8gRklYTUU6
IGNvbXB1dGVFc3RpbWF0ZWRWZXJ0aWNhbFBvc2l0aW9uRm9yRm9ybWF0dGluZ1Jvb3QgbG9naWMg
ZW5kcyB1cCBjYWxsaW5nIGludG8gdGhpcyBmdW5jdGlvbiB3aGVuIHRoZSBsYXlvdXRCb3ggKGZp
cnN0IGluZmxvdyBjaGlsZCkgaGFzCisgICAgLy8gbm90IGJlZW4gbGFpZCBvdXQuCisgICAgaWYg
KCFsYXlvdXRTdGF0ZSgpLmhhc0Rpc3BsYXlCb3gobGF5b3V0Qm94KSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIHJldHVybiBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGxh
eW91dEJveCkuaGFzQ2xlYXJhbmNlKCk7Cit9CisKIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4
dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQYXJlbnRNYXJnaW5B
ZnRlcihjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKIHsKICAgICAvLyAxLiBUaGlzIGlzIHRo
ZSBsYXN0IGluLWZsb3cgY2hpbGQgYW5kIGl0cyBtYXJnaW5zIGNvbGxhcHNlIHRocm91Z2ggYW5k
IHRoZSBtYXJnaW4gYWZ0ZXIgY29sbGFwc2VzIHdpdGggcGFyZW50J3MgbWFyZ2luIGFmdGVyIG9y
CkBAIC0xNDEsNyArMTQ1LDcgQEAgYm9vbCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5D
b2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29sbGFwc2VzV2l0aFBhcmVudE1hcmcKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgLy8gLi4uYW5kIHRoZSBjaGlsZCBoYXMgbm8gY2xlYXJhbmNlLgot
ICAgIGlmIChoYXNDbGVhcmFuY2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgbGF5b3V0Qm94KSkKKyAg
ICBpZiAoaGFzQ2xlYXJhbmNlKGxheW91dEJveCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAog
ICAgIHJldHVybiB0cnVlOwpAQCAtMTc2LDcgKzE4MCw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUNvbGxhcHNlc1dpdGhQcmV2aW91
c1NpCiAKICAgICAvLyBUaGUgYm90dG9tIG1hcmdpbiBvZiBhbiBpbi1mbG93IGJsb2NrLWxldmVs
IGVsZW1lbnQgYWx3YXlzIGNvbGxhcHNlcyB3aXRoIHRoZSB0b3AgbWFyZ2luIG9mCiAgICAgLy8g
aXRzIG5leHQgaW4tZmxvdyBibG9jay1sZXZlbCBzaWJsaW5nLCB1bmxlc3MgdGhhdCBzaWJsaW5n
IGhhcyBjbGVhcmFuY2UuCi0gICAgaWYgKGhhc0NsZWFyYW5jZShmb3JtYXR0aW5nQ29udGV4dCgp
LCBsYXlvdXRCb3gpKQorICAgIGlmIChoYXNDbGVhcmFuY2UobGF5b3V0Qm94KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgcmV0dXJuIHRydWU7CkBAIC0yMDksNyArMjEzLDcgQEAgYm9v
bCBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xsYXBzZTo6bWFyZ2luQmVmb3JlQ29s
bGFwc2VzV2l0aEZpcnN0SW5GbG8KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gLi4u
YW5kIHRoZSBjaGlsZCBoYXMgbm8gY2xlYXJhbmNlLgotICAgIGlmIChoYXNDbGVhcmFuY2UoZm9y
bWF0dGluZ0NvbnRleHQoKSwgZmlyc3RJbkZsb3dDaGlsZCkpCisgICAgaWYgKGhhc0NsZWFyYW5j
ZShmaXJzdEluRmxvd0NoaWxkKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gTWFy
Z2lucyBvZiBpbmxpbmUtYmxvY2sgYm94ZXMgZG8gbm90IGNvbGxhcHNlLgpAQCAtMjI5LDcgKzIz
Myw3IEBAIGJvb2wgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdp
bkFmdGVyQ29sbGFwc2VzV2l0aFNpYmxpbmdNYXJnCiAgICAgZm9yIChhdXRvKiBwcmV2aW91c1Np
YmxpbmcgPSBsYXlvdXRCb3gucHJldmlvdXNJbkZsb3dTaWJsaW5nKCk7IHByZXZpb3VzU2libGlu
ZzsgcHJldmlvdXNTaWJsaW5nID0gcHJldmlvdXNTaWJsaW5nLT5wcmV2aW91c0luRmxvd1NpYmxp
bmcoKSkgewogICAgICAgICBpZiAoIW1hcmdpbnNDb2xsYXBzZVRocm91Z2goKnByZXZpb3VzU2li
bGluZykpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChoYXNDbGVhcmFu
Y2UoZm9ybWF0dGluZ0NvbnRleHQoKSwgKnByZXZpb3VzU2libGluZykpCisgICAgICAgIGlmICho
YXNDbGVhcmFuY2UoKnByZXZpb3VzU2libGluZykpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMzM5LDcgKzM0Myw3IEBAIGJvb2wgQmxvY2tG
b3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkFmdGVyQ29sbGFwc2VzV2l0
aExhc3RJbkZsb3dDCiAgICAgLy8gbm9yIChpZiB0aGUgYm94J3MgbWluLWhlaWdodCBpcyBub24t
emVybykgd2l0aCB0aGUgYm94J3MgdG9wIG1hcmdpbi4KICAgICBhdXRvIGNvbXB1dGVkTWluSGVp
Z2h0ID0gbGF5b3V0Qm94LnN0eWxlKCkubG9naWNhbE1pbkhlaWdodCgpOwogICAgIGlmICghY29t
cHV0ZWRNaW5IZWlnaHQuaXNBdXRvKCkgJiYgY29tcHV0ZWRNaW5IZWlnaHQudmFsdWUoKQotICAg
ICAgICAmJiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFyZ2luQmVmb3JlKGxhc3RJ
bkZsb3dDaGlsZCkgfHwgaGFzQ2xlYXJhbmNlKGZvcm1hdHRpbmdDb250ZXh0KCksIGxhc3RJbkZs
b3dDaGlsZCkpKQorICAgICAgICAmJiAobWFyZ2luQWZ0ZXJDb2xsYXBzZXNXaXRoUGFyZW50TWFy
Z2luQmVmb3JlKGxhc3RJbkZsb3dDaGlsZCkgfHwgaGFzQ2xlYXJhbmNlKGxhc3RJbkZsb3dDaGls
ZCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBNYXJnaW5zIG9mIGlubGluZS1i
bG9jayBib3hlcyBkbyBub3QgY29sbGFwc2UuCkBAIC00NzIsMTEgKzQ3NiwxMSBAQCB2b2lkIEJs
b2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVNYXJnaW5BZnRlckZv
clByZXZpb3VzU2libGluZwogICAgIGF1dG8qIGN1cnJlbnRCb3ggPSAmbGF5b3V0Qm94OwogICAg
IHdoaWxlIChtYXJnaW5CZWZvcmVDb2xsYXBzZXNXaXRoUHJldmlvdXNTaWJsaW5nTWFyZ2luQWZ0
ZXIoKmN1cnJlbnRCb3gpKSB7CiAgICAgICAgIGF1dG8mIHByZXZpb3VzU2libGluZyA9ICpjdXJy
ZW50Qm94LT5wcmV2aW91c0luRmxvd1NpYmxpbmcoKTsKLSAgICAgICAgYXV0byYgcHJldmlvdXNT
aWJsaW5nRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91
dEJveChwcmV2aW91c1NpYmxpbmcpOworICAgICAgICBhdXRvJiBwcmV2aW91c1NpYmxpbmdEaXNw
bGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5mb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94
KHByZXZpb3VzU2libGluZyk7CiAgICAgICAgIGF1dG8gcHJldmlvdXNTaWJsaW5nVmVydGljYWxN
YXJnaW4gPSBwcmV2aW91c1NpYmxpbmdEaXNwbGF5Qm94LnZlcnRpY2FsTWFyZ2luKCk7CiAKICAg
ICAgICAgYXV0byBjb2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkJlZm9yZSA9IHByZXZpb3VzU2libGlu
Z1ZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmJlZm9yZTsKLSAgICAgICAgYXV0byBj
b2xsYXBzZWRWZXJ0aWNhbE1hcmdpbkFmdGVyID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KCpjdXJyZW50Qm94KS52ZXJ0aWNhbE1hcmdpbigpLmJlZm9yZSgpOwor
ICAgICAgICBhdXRvIGNvbGxhcHNlZFZlcnRpY2FsTWFyZ2luQWZ0ZXIgPSBmb3JtYXR0aW5nQ29u
dGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpjdXJyZW50Qm94KS52ZXJ0aWNhbE1hcmdpbigpLmJlZm9y
ZSgpOwogCiAgICAgICAgIGF1dG8gbWFyZ2luc0NvbGxhcHNlVGhyb3VnaCA9IHRoaXMtPm1hcmdp
bnNDb2xsYXBzZVRocm91Z2gocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICAgaWYgKG1hcmdpbnND
b2xsYXBzZVRocm91Z2gpCkBAIC01MTQsNyArNTE4LDcgQEAgUG9zaXRpdmVBbmROZWdhdGl2ZVZl
cnRpY2FsTWFyZ2luOjpWYWx1ZXMgQmxvY2tGb3JtYXR0aW5nQ29udGV4dDo6TWFyZ2luQ29sbGFw
c2UKICAgICAgICAgcmV0dXJuIG1hcmdpblR5cGUgPT0gTWFyZ2luVHlwZTo6QmVmb3JlID8gcG9z
aXRpdmVBbmROZWdhdGl2ZVZlcnRpY2FsTWFyZ2luLmJlZm9yZSA6IHBvc2l0aXZlQW5kTmVnYXRp
dmVWZXJ0aWNhbE1hcmdpbi5hZnRlcjsgCiAgICAgfQogICAgIC8vIFRoaXMgaXMgdGhlIGVzdGlt
YXRlIHBhdGguIFdlIGRvbid0IHlldCBoYXZlIHBvc2l0aXZlL25lZ2F0aXZlIG1hcmdpbiBjb21w
dXRlZC4KLSAgICBhdXRvIHVzZWRWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1h
dHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5p
bmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OworICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVz
ZWRIb3Jpem9udGFsVmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgq
bGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgoKSB9OwogICAgIGF1
dG8gY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbiA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnko
KS5jb21wdXRlZFZlcnRpY2FsTWFyZ2luKGxheW91dEJveCwgdXNlZFZhbHVlcyk7CiAgICAgYXV0
byBub25Db2xsYXBzZWRNYXJnaW4gPSBVc2VkVmVydGljYWxNYXJnaW46Ok5vbkNvbGxhcHNlZFZh
bHVlcyB7IGNvbXB1dGVkVmVydGljYWxNYXJnaW4uYmVmb3JlLnZhbHVlT3IoMCksIGNvbXB1dGVk
VmVydGljYWxNYXJnaW4uYWZ0ZXIudmFsdWVPcigwKSB9OyAKIApAQCAtNTgyLDcgKzU4Niw3IEBA
IEVzdGltYXRlZE1hcmdpbkJlZm9yZSBCbG9ja0Zvcm1hdHRpbmdDb250ZXh0OjpNYXJnaW5Db2xs
YXBzZTo6ZXN0aW1hdGVkTWFyZ2luQmVmCiAgICAgQVNTRVJUKGxheW91dEJveC5pc0luRmxvdygp
IHx8IGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKTsKICAgICBBU1NFUlQoIWxheW91
dEJveC5yZXBsYWNlZCgpKTsKIAotICAgIGF1dG8gdXNlZFZhbHVlcyA9IFVzZWRIb3Jpem9udGFs
VmFsdWVzIHsgZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpsYXlv
dXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0aCgpIH07CisgICAgYXV0byB1
c2VkVmFsdWVzID0gVXNlZEhvcml6b250YWxWYWx1ZXMgeyBmb3JtYXR0aW5nQ29udGV4dCgpLmdl
b21ldHJ5Rm9yQm94KCpsYXlvdXRCb3guY29udGFpbmluZ0Jsb2NrKCkpLmNvbnRlbnRCb3hXaWR0
aCgpIH07CiAgICAgYXV0byBjb21wdXRlZFZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0NvbnRl
eHQoKS5nZW9tZXRyeSgpLmNvbXB1dGVkVmVydGljYWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFs
dWVzKTsKICAgICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IFVzZWRWZXJ0aWNhbE1hcmdpbjo6
Tm9uQ29sbGFwc2VkVmFsdWVzIHsgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5iZWZvcmUudmFsdWVP
cigwKSwgY29tcHV0ZWRWZXJ0aWNhbE1hcmdpbi5hZnRlci52YWx1ZU9yKDApIH07CiAgICAgYXV0
byBtYXJnaW5zQ29sbGFwc2VUaHJvdWdoID0gdGhpcy0+bWFyZ2luc0NvbGxhcHNlVGhyb3VnaChs
YXlvdXRCb3gpOwpAQCAtNjA0LDcgKzYwOCw3IEBAIExheW91dFVuaXQgQmxvY2tGb3JtYXR0aW5n
Q29udGV4dDo6TWFyZ2luQ29sbGFwc2U6Om1hcmdpbkJlZm9yZUlnbm9yaW5nQ29sbGFwc2luCiB2
b2lkIEJsb2NrRm9ybWF0dGluZ0NvbnRleHQ6Ok1hcmdpbkNvbGxhcHNlOjp1cGRhdGVQb3NpdGl2
ZU5lZ2F0aXZlTWFyZ2luVmFsdWVzKGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFTU0VS
VChsYXlvdXRCb3guaXNCbG9ja0xldmVsQm94KCkpOwotICAgIGF1dG8gbm9uQ29sbGFwc2VkVmFs
dWVzID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCkudmVydGljYWxNYXJnaW4oKS5ub25Db2xsYXBzZWRWYWx1ZXMoKTsKKyAgICBhdXRvIG5vbkNv
bGxhcHNlZFZhbHVlcyA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KS52ZXJ0aWNhbE1hcmdpbigpLm5vbkNvbGxhcHNlZFZhbHVlcygpOwogCiAgICAgYXV0byBw
b3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQmVmb3JlID0gdGhpcy0+cG9zaXRpdmVOZWdhdGl2ZU1hcmdp
bkJlZm9yZShsYXlvdXRCb3gsIG5vbkNvbGxhcHNlZFZhbHVlcyk7CiAgICAgYXV0byBwb3NpdGl2
ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIgPSB0aGlzLT5wb3NpdGl2ZU5lZ2F0aXZlTWFyZ2luQWZ0ZXIo
bGF5b3V0Qm94LCBub25Db2xsYXBzZWRWYWx1ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvbGF5b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2Zsb2F0cy9GbG9hdGluZ0NvbnRleHQuY3BwCmluZGV4IDg3ZWI5NDE4ZjlhM2YxZTM0Yzhm
Y2M4MTljNDJiODAxNDgwMmE2YzAuLmExNjI5MGU0ZjA2YzVmZjUxMzhiMWFiOGEyZmVhOTgxYWQ1
MzQ3ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9mbG9hdHMvRmxvYXRpbmdD
b250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvZmxvYXRzL0Zsb2F0aW5nQ29u
dGV4dC5jcHAKQEAgLTE2OCwyMCArMTY4LDIwIEBAIFBvaW50IEZsb2F0aW5nQ29udGV4dDo6cG9z
aXRpb25Gb3JGbG9hdChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QKICAgICBBU1NFUlQoYXJl
RmxvYXRzSG9yaXpvbnRhbGx5U29ydGVkKG1fZmxvYXRpbmdTdGF0ZSkpOwogCiAgICAgaWYgKGlz
RW1wdHkoKSkgewotICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQo
KS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CisgICAgICAgIGF1dG8mIGJveEdl
b21ldHJ5ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpOwog
CiAgICAgICAgIGF1dG8gYWxpZ25XaXRoQ29udGFpbmluZ0Jsb2NrID0gWyZdKCkgLT4gUG9zaXRp
b24gewogICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgbm8gZmxvYXRpbmcgdG8gYWxpZ24gd2l0
aCwgcHVzaCB0aGUgYm94IHRvIHRoZSBsZWZ0L3JpZ2h0IGVkZ2Ugb2YgaXRzIGNvbnRhaW5pbmcg
YmxvY2sncyBjb250ZW50IGJveC4KLSAgICAgICAgICAgIGF1dG8mIGNvbnRhaW5pbmdCbG9ja0Rp
c3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmxh
eW91dEJveC5jb250YWluaW5nQmxvY2soKSk7CisgICAgICAgICAgICBhdXRvJiBjb250YWluaW5n
QmxvY2tHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91
dEJveC5jb250YWluaW5nQmxvY2soKSk7CiAKICAgICAgICAgICAgIGlmIChsYXlvdXRCb3guaXNM
ZWZ0RmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9u
IHsgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94TGVmdCgpICsgZGlzcGxheUJv
eC5tYXJnaW5TdGFydCgpIH07CisgICAgICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uIHsgY29u
dGFpbmluZ0Jsb2NrR2VvbWV0cnkuY29udGVudEJveExlZnQoKSArIGJveEdlb21ldHJ5Lm1hcmdp
blN0YXJ0KCkgfTsKIAotICAgICAgICAgICAgcmV0dXJuIFBvc2l0aW9uIHsgY29udGFpbmluZ0Js
b2NrRGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSAtIGRpc3BsYXlCb3gubWFyZ2luRW5kKCkg
LSBkaXNwbGF5Qm94LndpZHRoKCkgfTsKKyAgICAgICAgICAgIHJldHVybiBQb3NpdGlvbiB7IGNv
bnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hSaWdodCgpIC0gYm94R2VvbWV0cnkubWFy
Z2luRW5kKCkgLSBib3hHZW9tZXRyeS53aWR0aCgpIH07CiAgICAgICAgIH07CiAKICAgICAgICAg
Ly8gTm8gZmxvYXQgYm94IG9uIHRoZSBjb250ZXh0IHlldCAtPiBhbGlnbiBpdCB3aXRoIHRoZSBj
b250YWluaW5nIGJsb2NrJ3MgbGVmdC9yaWdodCBlZGdlLgotICAgICAgICByZXR1cm4geyBhbGln
bldpdGhDb250YWluaW5nQmxvY2soKSwgZGlzcGxheUJveC50b3AoKSB9OworICAgICAgICByZXR1
cm4geyBhbGlnbldpdGhDb250YWluaW5nQmxvY2soKSwgYm94R2VvbWV0cnkudG9wKCkgfTsKICAg
ICB9CiAKICAgICAvLyBGaW5kIHRoZSB0b3AgbW9zdCBwb3NpdGlvbiB3aGVyZSB0aGUgZmxvYXQg
Ym94IGZpdHMuCkBAIC0yMzgsOSArMjM4LDkgQEAgRmxvYXRpbmdDb250ZXh0OjpDbGVhcmFuY2VQ
b3NpdGlvbiBGbG9hdGluZ0NvbnRleHQ6OnZlcnRpY2FsUG9zaXRpb25XaXRoQ2xlYXJhbmMKICAg
ICAgICAgLy8gQ2xlYXJhbmNlIGluaGliaXRzIG1hcmdpbiBjb2xsYXBzaW5nLgogICAgICAgICBp
ZiAoYXV0byogcHJldmlvdXNJbkZsb3dTaWJsaW5nID0gbGF5b3V0Qm94LnByZXZpb3VzSW5GbG93
U2libGluZygpKSB7CiAgICAgICAgICAgICAvLyBEb2VzIHRoaXMgYm94IHdpdGggY2xlYXJhbmNl
IGFjdHVhbGx5IGNvbGxhcHNlIGl0cyBtYXJnaW4gYmVmb3JlIHdpdGggdGhlIHByZXZpb3VzIGlu
ZmxvdyBib3gncyBtYXJnaW4gYWZ0ZXI/IAotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbE1hcmdp
biA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gp
LnZlcnRpY2FsTWFyZ2luKCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsTWFyZ2luID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChsYXlvdXRCb3gpLnZlcnRpY2FsTWFyZ2lu
KCk7CiAgICAgICAgICAgICBpZiAodmVydGljYWxNYXJnaW4uaGFzQ29sbGFwc2VkVmFsdWVzKCkg
JiYgdmVydGljYWxNYXJnaW4uY29sbGFwc2VkVmFsdWVzKCkuYmVmb3JlKSB7Ci0gICAgICAgICAg
ICAgICAgYXV0byBwcmV2aW91c1ZlcnRpY2FsTWFyZ2luID0gZm9ybWF0dGluZ0NvbnRleHQoKS5k
aXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpwcmV2aW91c0luRmxvd1NpYmxpbmcpLnZlcnRpY2FsTWFy
Z2luKCk7CisgICAgICAgICAgICAgICAgYXV0byBwcmV2aW91c1ZlcnRpY2FsTWFyZ2luID0gZm9y
bWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqcHJldmlvdXNJbkZsb3dTaWJsaW5nKS52
ZXJ0aWNhbE1hcmdpbigpOwogICAgICAgICAgICAgICAgIGF1dG8gY29sbGFwc2VkTWFyZ2luID0g
KnZlcnRpY2FsTWFyZ2luLmNvbGxhcHNlZFZhbHVlcygpLmJlZm9yZTsKICAgICAgICAgICAgICAg
ICBhdXRvIG5vbkNvbGxhcHNlZE1hcmdpbiA9IHByZXZpb3VzVmVydGljYWxNYXJnaW4uYWZ0ZXIo
KSArIHZlcnRpY2FsTWFyZ2luLmJlZm9yZSgpOwogICAgICAgICAgICAgICAgIGF1dG8gbWFyZ2lu
RGlmZmVyZW5jZSA9IG5vbkNvbGxhcHNlZE1hcmdpbiAtIGNvbGxhcHNlZE1hcmdpbjsKQEAgLTQy
NSw4ICs0MjUsOCBAQCBGbG9hdGluZ0NvbnRleHQ6OkFic29sdXRlQ29vcmRpbmF0ZVZhbHVlc0Zv
ckZsb2F0QXZvaWRlciBGbG9hdGluZ0NvbnRleHQ6OmFic29sdQogICAgIGF1dG8gZGlzcGxheUJv
eCA9IG1hcFRvRmxvYXRpbmdTdGF0ZVJvb3QoZmxvYXRBdm9pZGVyKTsKIAogICAgIGlmICgmY29u
dGFpbmluZ0Jsb2NrID09ICZmbG9hdGluZ1N0YXRlKCkucm9vdCgpKSB7Ci0gICAgICAgIGF1dG8g
Y29udGFpbmluZ0Jsb2NrRGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJv
eEZvckxheW91dEJveChjb250YWluaW5nQmxvY2ssIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVU
eXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgICAgIHJldHVybiB7IGRp
c3BsYXlCb3gsIHsgfSwgeyAgY29udGFpbmluZ0Jsb2NrRGlzcGxheUJveC5jb250ZW50Qm94TGVm
dCgpLCBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hSaWdodCgpIH0gfTsKKyAg
ICAgICAgYXV0byBjb250YWluaW5nQmxvY2tHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCku
Z2VvbWV0cnlGb3JCb3goY29udGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBl
VHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpOworICAgICAgICByZXR1cm4geyBk
aXNwbGF5Qm94LCB7IH0sIHsgIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hMZWZ0
KCksIGNvbnRhaW5pbmdCbG9ja0dlb21ldHJ5LmNvbnRlbnRCb3hSaWdodCgpIH0gfTsKICAgICB9
CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tBYnNvbHV0ZURpc3BsYXlCb3ggPSBtYXBUb0Zsb2F0
aW5nU3RhdGVSb290KGNvbnRhaW5pbmdCbG9jayk7CiAgICAgYXV0byBjb250YWluaW5nQmxvY2tM
ZWZ0ID0gY29udGFpbmluZ0Jsb2NrQWJzb2x1dGVEaXNwbGF5Qm94LmxlZnQoKTsKQEAgLTQzNiwx
MiArNDM2LDEyIEBAIEZsb2F0aW5nQ29udGV4dDo6QWJzb2x1dGVDb29yZGluYXRlVmFsdWVzRm9y
RmxvYXRBdm9pZGVyIEZsb2F0aW5nQ29udGV4dDo6YWJzb2x1CiBEaXNwbGF5OjpCb3ggRmxvYXRp
bmdDb250ZXh0OjptYXBUb0Zsb2F0aW5nU3RhdGVSb290KGNvbnN0IEJveCYgZmxvYXRCb3gpIGNv
bnN0CiB7CiAgICAgYXV0byYgZmxvYXRpbmdTdGF0ZVJvb3QgPSBmbG9hdGluZ1N0YXRlKCkucm9v
dCgpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlC
b3hGb3JMYXlvdXRCb3goZmxvYXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpB
Y2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCk7Ci0gICAgYXV0byB0b3BMZWZ0ID0gZGlzcGxh
eUJveC50b3BMZWZ0KCk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0Qm94LCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBlVHlw
ZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpOworICAgIGF1dG8gdG9wTGVmdCA9IGJv
eEdlb21ldHJ5LnRvcExlZnQoKTsKICAgICBmb3IgKGF1dG8qIGNvbnRhaW5pbmdCbG9jayA9IGZs
b2F0Qm94LmNvbnRhaW5pbmdCbG9jaygpOyBjb250YWluaW5nQmxvY2sgJiYgY29udGFpbmluZ0Js
b2NrICE9ICZmbG9hdGluZ1N0YXRlUm9vdDsgY29udGFpbmluZ0Jsb2NrID0gY29udGFpbmluZ0Js
b2NrLT5jb250YWluaW5nQmxvY2soKSkKLSAgICAgICAgdG9wTGVmdC5tb3ZlQnkoZm9ybWF0dGlu
Z0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluaW5nQmxvY2ssIEZvcm1h
dHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCku
dG9wTGVmdCgpKTsKKyAgICAgICAgdG9wTGVmdC5tb3ZlQnkoZm9ybWF0dGluZ0NvbnRleHQoKS5n
ZW9tZXRyeUZvckJveCgqY29udGFpbmluZ0Jsb2NrLCBGb3JtYXR0aW5nQ29udGV4dDo6RXNjYXBl
VHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpLnRvcExlZnQoKSk7CiAKLSAgICBh
dXRvIG1hcHBlZERpc3BsYXlCb3ggPSBEaXNwbGF5OjpCb3goZGlzcGxheUJveCk7CisgICAgYXV0
byBtYXBwZWREaXNwbGF5Qm94ID0gRGlzcGxheTo6Qm94KGJveEdlb21ldHJ5KTsKICAgICBtYXBw
ZWREaXNwbGF5Qm94LnNldFRvcExlZnQodG9wTGVmdCk7CiAgICAgcmV0dXJuIG1hcHBlZERpc3Bs
YXlCb3g7CiB9CkBAIC00NDksOSArNDQ5LDkgQEAgRGlzcGxheTo6Qm94IEZsb2F0aW5nQ29udGV4
dDo6bWFwVG9GbG9hdGluZ1N0YXRlUm9vdChjb25zdCBCb3gmIGZsb2F0Qm94KSBjb25zdAogTGF5
b3V0VW5pdCBGbG9hdGluZ0NvbnRleHQ6Om1hcFRvcFRvRmxvYXRpbmdTdGF0ZVJvb3QoY29uc3Qg
Qm94JiBmbG9hdEJveCkgY29uc3QKIHsKICAgICBhdXRvJiBmbG9hdGluZ1N0YXRlUm9vdCA9IGZs
b2F0aW5nU3RhdGUoKS5yb290KCk7Ci0gICAgYXV0byB0b3AgPSBmb3JtYXR0aW5nQ29udGV4dCgp
LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goZmxvYXRCb3gsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2Nh
cGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCkudG9wKCk7CisgICAgYXV0byB0
b3AgPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KGZsb2F0Qm94LCBGb3JtYXR0
aW5nQ29udGV4dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpLnRv
cCgpOwogICAgIGZvciAoYXV0byogY29udGFpbmVyID0gZmxvYXRCb3guY29udGFpbmluZ0Jsb2Nr
KCk7IGNvbnRhaW5lciAmJiBjb250YWluZXIgIT0gJmZsb2F0aW5nU3RhdGVSb290OyBjb250YWlu
ZXIgPSBjb250YWluZXItPmNvbnRhaW5pbmdCbG9jaygpKQotICAgICAgICB0b3AgKz0gZm9ybWF0
dGluZ0NvbnRleHQoKS5kaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KCpjb250YWluZXIsIEZvcm1hdHRp
bmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3JtYXR0aW5nQ29udGV4dCkudG9w
KCk7CisgICAgICAgIHRvcCArPSBmb3JtYXR0aW5nQ29udGV4dCgpLmdlb21ldHJ5Rm9yQm94KCpj
b250YWluZXIsIEZvcm1hdHRpbmdDb250ZXh0OjpFc2NhcGVUeXBlOjpBY2Nlc3NQYXJlbnRGb3Jt
YXR0aW5nQ29udGV4dCkudG9wKCk7CiAgICAgcmV0dXJuIHRvcDsKIH0KIApAQCAtNDYzLDcgKzQ2
Myw3IEBAIFBvaW50IEZsb2F0aW5nQ29udGV4dDo6bWFwUG9pbnRGcm9tRm9ybWF0dGluZ0NvbnRl
eHRSb290VG9GbG9hdGluZ1N0YXRlUm9vdChQb2luCiAgICAgICAgIHJldHVybiBwb3NpdGlvbjsK
ICAgICBhdXRvIG1hcHBlZFBvc2l0aW9uID0gcG9zaXRpb247CiAgICAgZm9yIChhdXRvKiBjb250
YWluZXIgPSAmZnJvbTsgY29udGFpbmVyICYmIGNvbnRhaW5lciAhPSAmdG87IGNvbnRhaW5lciA9
IGNvbnRhaW5lci0+Y29udGFpbmluZ0Jsb2NrKCkpCi0gICAgICAgIG1hcHBlZFBvc2l0aW9uLm1v
dmVCeShmb3JtYXR0aW5nQ29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3goKmNvbnRhaW5l
ciwgRm9ybWF0dGluZ0NvbnRleHQ6OkVzY2FwZVR5cGU6OkFjY2Vzc1BhcmVudEZvcm1hdHRpbmdD
b250ZXh0KS50b3BMZWZ0KCkpOworICAgICAgICBtYXBwZWRQb3NpdGlvbi5tb3ZlQnkoZm9ybWF0
dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveCgqY29udGFpbmVyLCBGb3JtYXR0aW5nQ29udGV4
dDo6RXNjYXBlVHlwZTo6QWNjZXNzUGFyZW50Rm9ybWF0dGluZ0NvbnRleHQpLnRvcExlZnQoKSk7
CiAgICAgcmV0dXJuIG1hcHBlZFBvc2l0aW9uOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5n
Q29udGV4dC5jcHAKaW5kZXggZGU5NzYyZjRlZWE1NGEzZTBjY2Y0NDJiOTVjNmQwNWFmYTU5NjA0
Ny4uOTgwNTY4OWFiYjM1MDU4NGY0OTQwMTkyMzg1ZTg1ZmQ4NGI4MGEwNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcApAQCAtNzIsNyArNzIsNyBAQCB2b2lkIElubGluZUZv
cm1hdHRpbmdDb250ZXh0OjpsYXlvdXQoKQogICAgICAgICByZXR1cm47CiAKICAgICBMT0dfV0lU
SF9TVFJFQU0oRm9ybWF0dGluZ0NvbnRleHRMYXlvdXQsIHN0cmVhbSA8PCAiW1N0YXJ0XSAtPiBp
bmxpbmUgZm9ybWF0dGluZyBjb250ZXh0IC0+IGZvcm1hdHRpbmcgcm9vdCgiIDw8ICZyb290IDw8
ICIpIik7Ci0gICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
cm9vdCkuY29udGVudEJveFdpZHRoKCk7CisgICAgYXV0byBhdmFpbGFibGVXaWR0aCA9IGdlb21l
dHJ5Rm9yQm94KHJvb3QpLmNvbnRlbnRCb3hXaWR0aCgpOwogICAgIGF1dG8gdXNlZFZhbHVlcyA9
IFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgYXZhaWxhYmxlV2lkdGggfTsKICAgICBhdXRvKiBsYXlv
dXRCb3ggPSByb290LmZpcnN0SW5GbG93T3JGbG9hdGluZ0NoaWxkKCk7CiAgICAgLy8gQ29tcHV0
ZSB3aWR0aC9oZWlnaHQgZm9yIG5vbi10ZXh0IGNvbnRlbnQgYW5kIG1hcmdpbi9ib3JkZXIvcGFk
ZGluZyBmb3IgaW5saW5lIGNvbnRhaW5lcnMuCkBAIC0xMzgsNyArMTM4LDcgQEAgRm9ybWF0dGlu
Z0NvbnRleHQ6OkludHJpbnNpY1dpZHRoQ29uc3RyYWludHMgSW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6OmNvbXB1dGVkSW4KICAgICAgICAgLy8gU3dpdGNoIHRvIHRoZSBtaW4vbWF4IGZvcm1hdHRp
bmcgcm9vdCB3aWR0aCB2YWx1ZXMgYmVmb3JlIGZvcm1hdHRpbmcgdGhlIGxpbmVzLgogICAgICAg
ICBmb3IgKGF1dG8qIGZvcm1hdHRpbmdSb290IDogZm9ybWF0dGluZ0NvbnRleHRSb290TGlzdCkg
ewogICAgICAgICAgICAgYXV0byBpbnRyaW5zaWNXaWR0aHMgPSBsYXlvdXRTdGF0ZS5mb3JtYXR0
aW5nU3RhdGVGb3JCb3goKmZvcm1hdHRpbmdSb290KS5pbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRz
Rm9yQm94KCpmb3JtYXR0aW5nUm9vdCk7Ci0gICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0g
ZGlzcGxheUJveEZvckxheW91dEJveCgqZm9ybWF0dGluZ1Jvb3QpOworICAgICAgICAgICAgYXV0
byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlCb3goKmZvcm1hdHRpbmdS
b290KTsKICAgICAgICAgICAgIGF1dG8gY29udGVudFdpZHRoID0gKGF2YWlsYWJsZVdpZHRoID8g
aW50cmluc2ljV2lkdGhzLT5tYXhpbXVtIDogaW50cmluc2ljV2lkdGhzLT5taW5pbXVtKSAtIGRp
c3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKTsKICAgICAgICAgICAg
IGRpc3BsYXlCb3guc2V0Q29udGVudEJveFdpZHRoKGNvbnRlbnRXaWR0aCk7CiAgICAgICAgIH0K
QEAgLTE1Myw3ICsxNTMsNyBAQCBGb3JtYXR0aW5nQ29udGV4dDo6SW50cmluc2ljV2lkdGhDb25z
dHJhaW50cyBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZWRJbgogdm9pZCBJbmxpbmVG
b3JtYXR0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZU1hcmdpbkJvcmRlckFuZFBhZGRpbmdGb3JHZW5l
cmljSW5saW5lQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEFTU0VSVChsYXlvdXRC
b3guaXNBbm9ueW1vdXMoKSB8fCBsYXlvdXRCb3guaXNMaW5lQnJlYWtCb3goKSk7Ci0gICAgYXV0
byYgZGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChsYXlvdXRCb3gp
OwogCiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOwogICAg
IGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbE1hcmdpbih7IH0pOwpAQCAtMTY2LDcgKzE2Niw3IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVNYXJnaW5Cb3JkZXJBbmRQYWRk
aW5nRm9ySW5saW5lQ29udGFpbmVyKGNvCiAgICAgY29tcHV0ZUhvcml6b250YWxNYXJnaW4oY29u
dGFpbmVyLCB1c2VkVmFsdWVzKTsKICAgICBjb21wdXRlQm9yZGVyQW5kUGFkZGluZyhjb250YWlu
ZXIsIHVzZWRWYWx1ZXMpOwogICAgIC8vIElubGluZSBjb250YWluZXJzICg8c3Bhbj4pIGhhdmUg
MCB2ZXJ0aWNhbCBtYXJnaW5zLgotICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY29udGFpbmVy
KS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOworICAgIGZvcm1hdHRpbmdTdGF0ZSgp
LmRpc3BsYXlCb3goY29udGFpbmVyKS5zZXRWZXJ0aWNhbE1hcmdpbih7IHsgfSwgeyB9IH0pOwog
fQogCiB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSW50cmluc2ljV2lkdGhG
b3JGb3JtYXR0aW5nUm9vdChjb25zdCBCb3gmIGZvcm1hdHRpbmdSb290KQpAQCAtMTgzLDE0ICsx
ODMsMTQgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6Y29tcHV0ZUludHJpbnNpY1dp
ZHRoRm9yRm9ybWF0dGluZ1Jvb3QoY29uc3QgQm94JgogICAgIGVsc2UKICAgICAgICAgY29uc3Ry
YWludHMgPSBsYXlvdXRTdGF0ZSgpLmNyZWF0ZUZvcm1hdHRpbmdDb250ZXh0KGZvcm1hdHRpbmdS
b290KS0+Y29tcHV0ZWRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzKCk7CiAgICAgY29uc3RyYWlu
dHMgPSBnZW9tZXRyeSgpLmNvbnN0cmFpbkJ5TWluTWF4V2lkdGgoZm9ybWF0dGluZ1Jvb3QsIGNv
bnN0cmFpbnRzKTsKLSAgICBjb25zdHJhaW50cy5leHBhbmQoZGlzcGxheUJveEZvckxheW91dEJv
eChmb3JtYXR0aW5nUm9vdCkuaG9yaXpvbnRhbE1hcmdpbkJvcmRlckFuZFBhZGRpbmcoKSk7Cisg
ICAgY29uc3RyYWludHMuZXhwYW5kKGdlb21ldHJ5Rm9yQm94KGZvcm1hdHRpbmdSb290KS5ob3Jp
em9udGFsTWFyZ2luQm9yZGVyQW5kUGFkZGluZygpKTsKICAgICBmb3JtYXR0aW5nU3RhdGUoKS5z
ZXRJbnRyaW5zaWNXaWR0aENvbnN0cmFpbnRzRm9yQm94KGZvcm1hdHRpbmdSb290LCBjb25zdHJh
aW50cyk7CiB9CiAKIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIb3Jpem9u
dGFsTWFyZ2luKGNvbnN0IEJveCYgbGF5b3V0Qm94LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB1c2Vk
VmFsdWVzKQogewogICAgIGF1dG8gY29tcHV0ZWRIb3Jpem9udGFsTWFyZ2luID0gZ2VvbWV0cnko
KS5jb21wdXRlZEhvcml6b250YWxNYXJnaW4obGF5b3V0Qm94LCB1c2VkVmFsdWVzKTsKLSAgICBh
dXRvJiBkaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAg
IGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGxheW91dEJv
eCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsQ29tcHV0ZWRNYXJnaW4oY29tcHV0ZWRI
b3Jpem9udGFsTWFyZ2luKTsKICAgICBkaXNwbGF5Qm94LnNldEhvcml6b250YWxNYXJnaW4oeyBj
b21wdXRlZEhvcml6b250YWxNYXJnaW4uc3RhcnQudmFsdWVPcigwKSwgY29tcHV0ZWRIb3Jpem9u
dGFsTWFyZ2luLmVuZC52YWx1ZU9yKDApIH0pOwogfQpAQCAtMjA3LDcgKzIwNyw3IEBAIHZvaWQg
SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVXaWR0aEFuZE1hcmdpbihjb25zdCBCb3gm
IGxheW91dEJveCwgVXNlZEhvCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlC
b3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hXaWR0aCh3aWR0aEFu
ZE1hcmdpbi53aWR0aCk7CiAgICAgZGlzcGxheUJveC5zZXRIb3Jpem9udGFsTWFyZ2luKHdpZHRo
QW5kTWFyZ2luLnVzZWRNYXJnaW4pOwogICAgIGRpc3BsYXlCb3guc2V0SG9yaXpvbnRhbENvbXB1
dGVkTWFyZ2luKHdpZHRoQW5kTWFyZ2luLmNvbXB1dGVkTWFyZ2luKTsKQEAgLTIxNyw3ICsyMTcs
NyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlSGVpZ2h0QW5kTWFyZ2lu
KGNvbnN0IEJveCYgbGF5b3V0Qm94KQogewogICAgIEhlaWdodEFuZE1hcmdpbiBoZWlnaHRBbmRN
YXJnaW47CiAgICAgaWYgKGxheW91dEJveC5pc0Zsb2F0aW5nUG9zaXRpb25lZCgpKQotICAgICAg
ICBoZWlnaHRBbmRNYXJnaW4gPSBnZW9tZXRyeSgpLmZsb2F0aW5nSGVpZ2h0QW5kTWFyZ2luKGxh
eW91dEJveCwgeyB9LCBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGRpc3BsYXlCb3hGb3JMYXlvdXRC
b3goKmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7Cisg
ICAgICAgIGhlaWdodEFuZE1hcmdpbiA9IGdlb21ldHJ5KCkuZmxvYXRpbmdIZWlnaHRBbmRNYXJn
aW4obGF5b3V0Qm94LCB7IH0sIFVzZWRIb3Jpem9udGFsVmFsdWVzIHsgZ2VvbWV0cnlGb3JCb3go
KmxheW91dEJveC5jb250YWluaW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfSk7CiAgICAg
ZWxzZSBpZiAobGF5b3V0Qm94LmlzSW5saW5lQmxvY2tCb3goKSkKICAgICAgICAgaGVpZ2h0QW5k
TWFyZ2luID0gZ2VvbWV0cnkoKS5pbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihsYXlvdXRCb3gp
OwogICAgIGVsc2UgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQpAQCAtMjI1LDcgKzIyNSw3IEBA
IHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVIZWlnaHRBbmRNYXJnaW4oY29u
c3QgQm94JiBsYXlvdXRCb3gpCiAgICAgZWxzZQogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKIAotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGxheW91
dEJveCk7CisgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZSgpLmRpc3BsYXlC
b3gobGF5b3V0Qm94KTsKICAgICBkaXNwbGF5Qm94LnNldENvbnRlbnRCb3hIZWlnaHQoaGVpZ2h0
QW5kTWFyZ2luLmhlaWdodCk7CiAgICAgZGlzcGxheUJveC5zZXRWZXJ0aWNhbE1hcmdpbih7IGhl
aWdodEFuZE1hcmdpbi5ub25Db2xsYXBzZWRNYXJnaW4sIHsgfSB9KTsKIH0KQEAgLTIzOCw3ICsy
MzgsNyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpsYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dFJvb3QoY29uc3QgQm94JiByb290LCBVc2VkSAogICAgIGNvbXB1dGVCb3JkZXJBbmRQYWRk
aW5nKHJvb3QsIHVzZWRWYWx1ZXMpOwogICAgIGNvbXB1dGVXaWR0aEFuZE1hcmdpbihyb290LCB1
c2VkVmFsdWVzKTsKICAgICAvLyBUaGlzIGlzIHNpbWlsYXIgdG8gc3RhdGljIHBvc2l0aW9uaW5n
IGluIGJsb2NrIGZvcm1hdHRpbmcgY29udGV4dC4gV2UganVzdCBuZWVkIHRvIGluaXRpYWxpemUg
dGhlIHRvcCBsZWZ0IHBvc2l0aW9uLgotICAgIGRpc3BsYXlCb3hGb3JMYXlvdXRCb3gocm9vdCku
c2V0VG9wTGVmdCh7IDAsIDAgfSk7CisgICAgZm9ybWF0dGluZ1N0YXRlKCkuZGlzcGxheUJveChy
b290KS5zZXRUb3BMZWZ0KHsgMCwgMCB9KTsKICAgICAvLyBTd2ljaCBvdmVyIHRvIHRoZSBuZXcg
Zm9ybWF0dGluZyBjb250ZXh0ICh0aGUgb25lIHRoYXQgdGhlIHJvb3QgY3JlYXRlcykuCiAgICAg
YXV0byBmb3JtYXR0aW5nQ29udGV4dCA9IGxheW91dFN0YXRlKCkuY3JlYXRlRm9ybWF0dGluZ0Nv
bnRleHQocm9vdCk7CiAgICAgZm9ybWF0dGluZ0NvbnRleHQtPmxheW91dCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAppbmRleCBlYzUyOGU1NWRk
Mjg2YzE5NDBjOTY2NjdhNDFkZDU5ZTQ2ZGFlMDA3Li4yMWZlZTIzYzUxYTVjMGEwMGNkNDk4NGVh
ODVjZTdlYzUxYThjZTFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4
dEdlb21ldHJ5LmNwcApAQCAtNzMsNyArNzMsNyBAQCBIZWlnaHRBbmRNYXJnaW4gSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjppbmxpbmVCbG9ja0hlaWdodEFuZE1hcmdpbihjbwog
CiAgICAgLy8gMTAuNi42IENvbXBsaWNhdGVkIGNhc2VzCiAgICAgLy8gLSAnSW5saW5lLWJsb2Nr
Jywgbm9uLXJlcGxhY2VkIGVsZW1lbnRzLgotICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMg
PSBVc2VkSG9yaXpvbnRhbFZhbHVlcyB7IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZv
ckxheW91dEJveCgqbGF5b3V0Qm94LmNvbnRhaW5pbmdCbG9jaygpKS5jb250ZW50Qm94V2lkdGgo
KSB9OworICAgIGF1dG8gdXNlZEhvcml6b250YWxWYWx1ZXMgPSBVc2VkSG9yaXpvbnRhbFZhbHVl
cyB7IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goKmxheW91dEJveC5jb250YWlu
aW5nQmxvY2soKSkuY29udGVudEJveFdpZHRoKCkgfTsKICAgICByZXR1cm4gY29tcGxpY2F0ZWRD
YXNlcyhsYXlvdXRCb3gsIHsgfSwgdXNlZEhvcml6b250YWxWYWx1ZXMpOwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0
aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRMaW5lTGF5b3V0LmNwcAppbmRleCBjOTNk
Zjk3ODVmY2RjZGJjMmU0MTRlNTg1NmY5ZGJmMGZjZWI0YWQ3Li5hYTgxYWM5YWU1MTlmMzQ5MzI4
NmJlNDJhZTU0NzA4ODA5NmMyNDhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dExpbmVMYXlvdXQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRp
bmdDb250ZXh0TGluZUxheW91dC5jcHAKQEAgLTUzLDIzICs1MywyMiBAQCBzdGF0aWMgTGF5b3V0
VW5pdCBpbmxpbmVJdGVtV2lkdGgoY29uc3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdD
b250ZXh0LCBjbwogICAgIH0KIAogICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUl0ZW0ubGF5
b3V0Qm94KCk7Ci0gICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0Lmhhc0Rpc3BsYXlCb3gobGF5
b3V0Qm94KSk7Ci0gICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3Bs
YXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZv
cm1hdHRpbmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CiAKICAgICBpZiAobGF5
b3V0Qm94LmlzRmxvYXRpbmdQb3NpdGlvbmVkKCkpCi0gICAgICAgIHJldHVybiBkaXNwbGF5Qm94
Lm1hcmdpbkJveFdpZHRoKCk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5Cb3hX
aWR0aCgpOwogCiAgICAgaWYgKGxheW91dEJveC5yZXBsYWNlZCgpKQotICAgICAgICByZXR1cm4g
ZGlzcGxheUJveC53aWR0aCgpOworICAgICAgICByZXR1cm4gYm94R2VvbWV0cnkud2lkdGgoKTsK
IAogICAgIGlmIChpbmxpbmVJdGVtLmlzQ29udGFpbmVyU3RhcnQoKSkKLSAgICAgICAgcmV0dXJu
IGRpc3BsYXlCb3gubWFyZ2luU3RhcnQoKSArIGRpc3BsYXlCb3guYm9yZGVyTGVmdCgpICsgZGlz
cGxheUJveC5wYWRkaW5nTGVmdCgpLnZhbHVlT3IoMCk7CisgICAgICAgIHJldHVybiBib3hHZW9t
ZXRyeS5tYXJnaW5TdGFydCgpICsgYm94R2VvbWV0cnkuYm9yZGVyTGVmdCgpICsgYm94R2VvbWV0
cnkucGFkZGluZ0xlZnQoKS52YWx1ZU9yKDApOwogCiAgICAgaWYgKGlubGluZUl0ZW0uaXNDb250
YWluZXJFbmQoKSkKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3gubWFyZ2luRW5kKCkgKyBkaXNw
bGF5Qm94LmJvcmRlclJpZ2h0KCkgKyBkaXNwbGF5Qm94LnBhZGRpbmdSaWdodCgpLnZhbHVlT3Io
MCk7CisgICAgICAgIHJldHVybiBib3hHZW9tZXRyeS5tYXJnaW5FbmQoKSArIGJveEdlb21ldHJ5
LmJvcmRlclJpZ2h0KCkgKyBib3hHZW9tZXRyeS5wYWRkaW5nUmlnaHQoKS52YWx1ZU9yKDApOwog
CiAgICAgLy8gTm9uLXJlcGxhY2VkIGlubGluZSBib3ggKGUuZy4gaW5saW5lLWJsb2NrKQotICAg
IHJldHVybiBkaXNwbGF5Qm94LndpZHRoKCk7CisgICAgcmV0dXJuIGJveEdlb21ldHJ5LndpZHRo
KCk7CiB9CiAKIHN0cnVjdCBJbmRleEFuZFJhbmdlIHsKQEAgLTIxOCw5ICsyMTcsOCBAQCBMaW5l
TGF5b3V0OjpJc0VuZE9mTGluZSBMaW5lTGF5b3V0OjpwbGFjZUlubGluZUl0ZW0oY29uc3QgSW5s
aW5lSXRlbSYgaW5saW5lSXRlbQogICAgIEFTU0VSVChicmVha2luZ0NvbnRleHQuYnJlYWtpbmdC
ZWhhdmlvciA9PSBMaW5lQnJlYWtlcjo6QnJlYWtpbmdCZWhhdmlvcjo6S2VlcCk7CiAgICAgaWYg
KGlubGluZUl0ZW0uaXNGbG9hdCgpKSB7CiAgICAgICAgIGF1dG8mIGZsb2F0Qm94ID0gaW5saW5l
SXRlbS5sYXlvdXRCb3goKTsKLSAgICAgICAgQVNTRVJUKGZvcm1hdHRpbmdDb250ZXh0KCkuaGFz
RGlzcGxheUJveChmbG9hdEJveCkpOwogICAgICAgICAvLyBTaHJpbmsgYXZhaWxhYmxlIHNwYWNl
IGZvciBjdXJyZW50IGxpbmUgYW5kIG1vdmUgZXhpc3RpbmcgaW5saW5lIHJ1bnMuCi0gICAgICAg
IGF1dG8gZmxvYXRCb3hXaWR0aCA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZGlzcGxheUJveEZvckxh
eW91dEJveChmbG9hdEJveCkubWFyZ2luQm94V2lkdGgoKTsKKyAgICAgICAgYXV0byBmbG9hdEJv
eFdpZHRoID0gZm9ybWF0dGluZ0NvbnRleHQoKS5nZW9tZXRyeUZvckJveChmbG9hdEJveCkubWFy
Z2luQm94V2lkdGgoKTsKICAgICAgICAgZmxvYXRCb3guaXNMZWZ0RmxvYXRpbmdQb3NpdGlvbmVk
KCkgPyBtX2xpbmUubW92ZUxvZ2ljYWxMZWZ0KGZsb2F0Qm94V2lkdGgpIDogbV9saW5lLm1vdmVM
b2dpY2FsUmlnaHQoZmxvYXRCb3hXaWR0aCk7CiAgICAgICAgIG1fZmxvYXRzLmFwcGVuZChtYWtl
V2Vha1B0cihpbmxpbmVJdGVtKSk7CiAgICAgICAgICsrbV9jb21taXR0ZWRJbmxpbmVJdGVtQ291
bnQ7CkBAIC0yODEsMTEgKzI3OSwxMSBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJ
bmxpbmVMYXlvdXQ6OmxheW91dChjb25zdCBJbmxpbmVJdGVtcyYgaW5saW5lSXRlbQogICAgIGF1
dG8mIGxheW91dFN0YXRlID0gdGhpcy0+bGF5b3V0U3RhdGUoKTsKICAgICBhdXRvJiBmb3JtYXR0
aW5nQ29udGV4dCA9IHRoaXMtPmZvcm1hdHRpbmdDb250ZXh0KCk7CiAgICAgYXV0byYgZm9ybWF0
dGluZ1Jvb3QgPSB0aGlzLT5mb3JtYXR0aW5nUm9vdCgpOwotICAgIGF1dG8mIGZvcm1hdHRpbmdS
b290RGlzcGxheUJveCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3go
Zm9ybWF0dGluZ1Jvb3QpOworICAgIGF1dG8mIGZvcm1hdHRpbmdSb290R2VvbWV0cnkgPSBmb3Jt
YXR0aW5nQ29udGV4dC5nZW9tZXRyeUZvckJveChmb3JtYXR0aW5nUm9vdCk7CiAgICAgYXV0byBm
bG9hdGluZ0NvbnRleHQgPSBGbG9hdGluZ0NvbnRleHQgeyBmb3JtYXR0aW5nQ29udGV4dCwgbGF5
b3V0U3RhdGUuZXN0YWJsaXNoZWRGb3JtYXR0aW5nU3RhdGUoZm9ybWF0dGluZ1Jvb3QpLmZsb2F0
aW5nU3RhdGUoKSB9OwogCi0gICAgYXV0byBsaW5lTG9naWNhbFRvcCA9IGZvcm1hdHRpbmdSb290
RGlzcGxheUJveC5jb250ZW50Qm94VG9wKCk7Ci0gICAgYXV0byBsaW5lTG9naWNhbExlZnQgPSBm
b3JtYXR0aW5nUm9vdERpc3BsYXlCb3guY29udGVudEJveExlZnQoKTsKKyAgICBhdXRvIGxpbmVM
b2dpY2FsVG9wID0gZm9ybWF0dGluZ1Jvb3RHZW9tZXRyeS5jb250ZW50Qm94VG9wKCk7CisgICAg
YXV0byBsaW5lTG9naWNhbExlZnQgPSBmb3JtYXR0aW5nUm9vdEdlb21ldHJ5LmNvbnRlbnRCb3hM
ZWZ0KCk7CiAKICAgICBhdXRvIGFwcGx5RmxvYXRDb25zdHJhaW50ID0gWyZdKGF1dG8mIGxpbmVJ
bnB1dCkgewogICAgICAgICAvLyBDaGVjayBmb3IgaW50cnVkaW5nIGZsb2F0cyBhbmQgYWRqdXN0
IGxvZ2ljYWwgbGVmdC9hdmFpbGFibGUgd2lkdGggZm9yIHRoaXMgbGluZSBhY2NvcmRpbmdseS4K
QEAgLTI5NSwxMCArMjkzLDEwIEBAIHZvaWQgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6OklubGlu
ZUxheW91dDo6bGF5b3V0KGNvbnN0IElubGluZUl0ZW1zJiBpbmxpbmVJdGVtCiAgICAgICAgIGF1
dG8gbGluZUxvZ2ljYWxMZWZ0ID0gbGluZUlucHV0LmluaXRpYWxDb25zdHJhaW50cy5sb2dpY2Fs
VG9wTGVmdC54KCk7CiAgICAgICAgIGF1dG8gZmxvYXRDb25zdHJhaW50cyA9IGZsb2F0aW5nQ29u
dGV4dC5jb25zdHJhaW50cyh7IGxpbmVMb2dpY2FsVG9wIH0pOwogICAgICAgICAvLyBDaGVjayBp
ZiB0aGVzZSBjb25zdHJhaW50cyBhY3R1YWxseSBwdXQgbGltaXRhdGlvbiBvbiB0aGUgbGluZS4K
LSAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWludHMubGVmdCAmJiBmbG9hdENvbnN0cmFpbnRzLmxl
ZnQtPnggPD0gZm9ybWF0dGluZ1Jvb3REaXNwbGF5Qm94LmNvbnRlbnRCb3hMZWZ0KCkpCisgICAg
ICAgIGlmIChmbG9hdENvbnN0cmFpbnRzLmxlZnQgJiYgZmxvYXRDb25zdHJhaW50cy5sZWZ0LT54
IDw9IGZvcm1hdHRpbmdSb290R2VvbWV0cnkuY29udGVudEJveExlZnQoKSkKICAgICAgICAgICAg
IGZsb2F0Q29uc3RyYWludHMubGVmdCA9IHsgfTsKIAotICAgICAgICBpZiAoZmxvYXRDb25zdHJh
aW50cy5yaWdodCAmJiBmbG9hdENvbnN0cmFpbnRzLnJpZ2h0LT54ID49IGZvcm1hdHRpbmdSb290
RGlzcGxheUJveC5jb250ZW50Qm94UmlnaHQoKSkKKyAgICAgICAgaWYgKGZsb2F0Q29uc3RyYWlu
dHMucmlnaHQgJiYgZmxvYXRDb25zdHJhaW50cy5yaWdodC0+eCA+PSBmb3JtYXR0aW5nUm9vdEdl
b21ldHJ5LmNvbnRlbnRCb3hSaWdodCgpKQogICAgICAgICAgICAgZmxvYXRDb25zdHJhaW50cy5y
aWdodCA9IHsgfTsKIAogICAgICAgICAvLyBTZXQgdGhlIG1pbmltdW0gZmxvYXQgYm90dG9tIHZh
bHVlIGFzIGEgaGludCBmb3IgdGhlIG5leHQgbGluZSBpZiBuZWVkZWQuCkBAIC0zNTMsNyArMzUx
LDcgQEAgTGF5b3V0VW5pdCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5saW5lTGF5b3V0Ojpj
b21wdXRlZEludHJpbnNpY1dpZHRoKGNvbnN0IEkKICAgICAgICAgY3VycmVudElubGluZUl0ZW0g
PSB7IGxpbmVDb250ZW50Lmxhc3RDb21taXR0ZWQtPmluZGV4ICsgMSwgV1RGOjpudWxsb3B0IH07
CiAgICAgICAgIExheW91dFVuaXQgZmxvYXRzV2lkdGg7CiAgICAgICAgIGZvciAoYXV0byYgZmxv
YXRJdGVtIDogbGluZUNvbnRlbnQuZmxvYXRzKQotICAgICAgICAgICAgZmxvYXRzV2lkdGggKz0g
Zm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChmbG9hdEl0ZW0tPmxheW91
dEJveCgpKS5tYXJnaW5Cb3hXaWR0aCgpOworICAgICAgICAgICAgZmxvYXRzV2lkdGggKz0gZm9y
bWF0dGluZ0NvbnRleHQuZ2VvbWV0cnlGb3JCb3goZmxvYXRJdGVtLT5sYXlvdXRCb3goKSkubWFy
Z2luQm94V2lkdGgoKTsKICAgICAgICAgbWF4aW11bUxpbmVXaWR0aCA9IHN0ZDo6bWF4KG1heGlt
dW1MaW5lV2lkdGgsIGZsb2F0c1dpZHRoICsgbGluZUNvbnRlbnQucnVucy0+bG9naWNhbFdpZHRo
KCkpOwogICAgIH0KICAgICByZXR1cm4gbWF4aW11bUxpbmVXaWR0aDsKQEAgLTM2OSw4ICszNjcs
NyBAQCB2b2lkIElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpJbmxpbmVMYXlvdXQ6OmNyZWF0ZURp
c3BsYXlSdW5zKGNvbnN0IExpbmU6OkNvbnRlbgogICAgIC8vIE1vdmUgZmxvYXRzIHRvIHRoZWly
IGZpbmFsIHBvc2l0aW9uLgogICAgIGZvciAoYXV0byBmbG9hdEl0ZW0gOiBmbG9hdHMpIHsKICAg
ICAgICAgYXV0byYgZmxvYXRCb3ggPSBmbG9hdEl0ZW0tPmxheW91dEJveCgpOwotICAgICAgICBB
U1NFUlQoZm9ybWF0dGluZ0NvbnRleHQuaGFzRGlzcGxheUJveChmbG9hdEJveCkpOwotICAgICAg
ICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91
dEJveChmbG9hdEJveCk7CisgICAgICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUuZGlzcGxheUJveChmbG9hdEJveCk7CiAgICAgICAgIC8vIFNldCBzdGF0aWMgcG9zaXRpb24g
Zmlyc3QuCiAgICAgICAgIGRpc3BsYXlCb3guc2V0VG9wTGVmdCh7IGxpbmVDb250ZW50LmxvZ2lj
YWxMZWZ0KCksIGxpbmVDb250ZW50LmxvZ2ljYWxUb3AoKSB9KTsKICAgICAgICAgLy8gRmxvYXQg
aXQuCkBAIC0zOTcsNyArMzk0LDcgQEAgdm9pZCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6SW5s
aW5lTGF5b3V0OjpjcmVhdGVEaXNwbGF5UnVucyhjb25zdCBMaW5lOjpDb250ZW4KICAgICAgICAg
YXV0byYgbGluZVJ1biA9IGxpbmVSdW5zLmF0KGluZGV4KTsKICAgICAgICAgYXV0byYgbG9naWNh
bFJlY3QgPSBsaW5lUnVuLT5sb2dpY2FsUmVjdCgpOwogICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBsaW5lUnVuLT5sYXlvdXRCb3goKTsKLSAgICAgICAgYXV0byYgZGlzcGxheUJveCA9IGZvcm1h
dHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICAgICAg
YXV0byYgZGlzcGxheUJveCA9IGZvcm1hdHRpbmdTdGF0ZS5kaXNwbGF5Qm94KGxheW91dEJveCk7
CiAKICAgICAgICAgaWYgKGxpbmVSdW4tPmlzTGluZUJyZWFrKCkpIHsKICAgICAgICAgICAgIGRp
c3BsYXlCb3guc2V0VG9wTGVmdChsb2dpY2FsUmVjdC50b3BMZWZ0KCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0Nv
bnRleHRRdWlya3MuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lRm9ybWF0dGluZ0NvbnRleHRRdWlya3MuY3BwCmluZGV4IDZmNWZiMjliNTU1YTZlYjYx
MmM2OGRjOWM4ZjM5MmRhY2U3MGM0NWYuLjA4ZGUzZDRjYjNkYzY4M2RjZWVhYzEyZWYxMzE1YzFk
MDA3NmRiOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0
aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0UXVpcmtzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dFF1aXJrcy5j
cHAKQEAgLTU3LDggKzU3LDggQEAgYm9vbCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6UXVpcmtz
OjpsaW5lRGVzY2VudE5lZWRzQ29sbGFwc2luZyhjb25zdCBMaW5lOjpDb24KICAgICAgICAgY2Fz
ZSBJbmxpbmVJdGVtOjpUeXBlOjpIYXJkTGluZUJyZWFrOgogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICBjYXNlIElubGluZUl0ZW06OlR5cGU6OkNvbnRhaW5lclN0YXJ0OiB7Ci0g
ICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7Ci0gICAgICAgICAgICBpZiAoZGlzcGxheUJveC5o
b3Jpem9udGFsQm9yZGVyKCkgfHwgKGRpc3BsYXlCb3guaG9yaXpvbnRhbFBhZGRpbmcoKSAmJiBk
aXNwbGF5Qm94Lmhvcml6b250YWxQYWRkaW5nKCkudmFsdWUoKSkpCisgICAgICAgICAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0
Qm94KTsKKyAgICAgICAgICAgIGlmIChib3hHZW9tZXRyeS5ob3Jpem9udGFsQm9yZGVyKCkgfHwg
KGJveEdlb21ldHJ5Lmhvcml6b250YWxQYWRkaW5nKCkgJiYgYm94R2VvbWV0cnkuaG9yaXpvbnRh
bFBhZGRpbmcoKS52YWx1ZSgpKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlv
dXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lLmNwcAppbmRleCBlZTk1NTE5ZjI5YjNjYmUz
MTY5NjBjNmMxMjhlYmMzNmM2YTEzNGMyLi4wNGE5OTIxMjEwNmM1ZWFiMzUyYTQ4OTQ2NTdkMjVh
MWJhMTFiOWIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0
dGluZy9JbmxpbmVMaW5lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lLmNwcApAQCAtNjcsOCArNjcsOCBAQCBMaW5lOjpMaW5lKGNvbnN0
IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBpbmxpbmVGb3JtYXR0aW5nQ29udGV4dCwgY29uc3Qg
SW5pdGlhbAogc3RhdGljIGJvb2wgaXNJbmxpbmVDb250YWluZXJDb25zaWRlcmVkRW1wdHkoY29u
c3QgRm9ybWF0dGluZ0NvbnRleHQmIGZvcm1hdHRpbmdDb250ZXh0LCBjb25zdCBCb3gmIGxheW91
dEJveCkKIHsKICAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBjaGVjayB3aGV0aGVyIHRo
ZSBpbmxpbmUgY29udGFpbmVyIGhhcyBjb250ZW50LiBJdCBzaW1wbHkgY2hlY2tzIGlmIHRoZSBj
b250YWluZXIgaXRzZWxmIGlzIGNvbnNpZGVyZWQgZW1wdHkuCi0gICAgYXV0byYgZGlzcGxheUJv
eCA9IGZvcm1hdHRpbmdDb250ZXh0LmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsK
LSAgICByZXR1cm4gIShkaXNwbGF5Qm94Lmhvcml6b250YWxCb3JkZXIoKSB8fCAoZGlzcGxheUJv
eC5ob3Jpem9udGFsUGFkZGluZygpICYmIGRpc3BsYXlCb3guaG9yaXpvbnRhbFBhZGRpbmcoKS52
YWx1ZSgpKSk7CisgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4dC5nZW9t
ZXRyeUZvckJveChsYXlvdXRCb3gpOworICAgIHJldHVybiAhKGJveEdlb21ldHJ5Lmhvcml6b250
YWxCb3JkZXIoKSB8fCAoYm94R2VvbWV0cnkuaG9yaXpvbnRhbFBhZGRpbmcoKSAmJiBib3hHZW9t
ZXRyeS5ob3Jpem9udGFsUGFkZGluZygpLnZhbHVlKCkpKTsKIH0KIAogYm9vbCBMaW5lOjppc1Zp
c3VhbGx5RW1wdHkoKSBjb25zdApAQCAtODYsMTAgKzg2LDEwIEBAIGJvb2wgTGluZTo6aXNWaXN1
YWxseUVtcHR5KCkgY29uc3QKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBpZiAocnVu
LT5sYXlvdXRCb3goKS5lc3RhYmxpc2hlc0Zvcm1hdHRpbmdDb250ZXh0KCkpIHsKICAgICAgICAg
ICAgIEFTU0VSVChydW4tPmxheW91dEJveCgpLmlzSW5saW5lQmxvY2tCb3goKSk7Ci0gICAgICAg
ICAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxh
eW91dEJveChydW4tPmxheW91dEJveCgpKTsKLSAgICAgICAgICAgIGlmICghZGlzcGxheUJveC53
aWR0aCgpKQorICAgICAgICAgICAgYXV0byYgYm94R2VvbWV0cnkgPSBmb3JtYXR0aW5nQ29udGV4
dC5nZW9tZXRyeUZvckJveChydW4tPmxheW91dEJveCgpKTsKKyAgICAgICAgICAgIGlmICghYm94
R2VvbWV0cnkud2lkdGgoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IGlmIChtX3NraXBWZXJ0aWNhbEFsaWdtZW50IHx8IGRpc3BsYXlCb3guaGVpZ2h0KCkpCisgICAg
ICAgICAgICBpZiAobV9za2lwVmVydGljYWxBbGlnbWVudCB8fCBib3hHZW9tZXRyeS5oZWlnaHQo
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBjb250aW51ZTsK
ICAgICAgICAgfQpAQCAtMTI4LDggKzEyOCw4IEBAIHN0ZDo6dW5pcXVlX3B0cjxMaW5lOjpDb250
ZW50PiBMaW5lOjpjbG9zZSgpCiAgICAgICAgICAgICAgICAgaWYgKHJ1bi0+aXNMaW5lQnJlYWso
KSB8fCBydW4tPmlzVGV4dCgpKQogICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFz
ZWxpbmVPZmZzZXQoKSAtIGFzY2VudDsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChydW4tPmlz
Q29udGFpbmVyU3RhcnQoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRvJiBkaXNwbGF5Qm94
ID0gZm9ybWF0dGluZ0NvbnRleHQuZGlzcGxheUJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwot
ICAgICAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gYmFzZWxpbmVPZmZzZXQoKSAtIGFzY2Vu
dCAtIGRpc3BsYXlCb3guYm9yZGVyVG9wKCkgLSBkaXNwbGF5Qm94LnBhZGRpbmdUb3AoKS52YWx1
ZU9yKDApOworICAgICAgICAgICAgICAgICAgICBhdXRvJiBib3hHZW9tZXRyeSA9IGZvcm1hdHRp
bmdDb250ZXh0Lmdlb21ldHJ5Rm9yQm94KGxheW91dEJveCk7CisgICAgICAgICAgICAgICAgICAg
IGxvZ2ljYWxUb3AgPSBiYXNlbGluZU9mZnNldCgpIC0gYXNjZW50IC0gYm94R2VvbWV0cnkuYm9y
ZGVyVG9wKCkgLSBib3hHZW9tZXRyeS5wYWRkaW5nVG9wKCkudmFsdWVPcigwKTsKICAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGxheW91dEJveC5pc0lubGluZUJsb2NrQm94KCkgJiYgbGF5b3V0
Qm94LmVzdGFibGlzaGVzSW5saW5lRm9ybWF0dGluZ0NvbnRleHQoKSkgewogICAgICAgICAgICAg
ICAgICAgICBhdXRvJiBmb3JtYXR0aW5nU3RhdGUgPSBkb3duY2FzdDxJbmxpbmVGb3JtYXR0aW5n
U3RhdGU+KGxheW91dFN0YXRlLmVzdGFibGlzaGVkRm9ybWF0dGluZ1N0YXRlKGxheW91dEJveCkp
OwogICAgICAgICAgICAgICAgICAgICAvLyBTcGVjIG1ha2VzIHVzIGdlbmVyYXRlIGF0IGxlYXN0
IG9uZSBsaW5lIC1ldmVuIGlmIGl0IGlzIGVtcHR5LgpAQCAtMjk1LDE0ICsyOTUsMTQgQEAgdm9p
ZCBMaW5lOjphcHBlbmRUZXh0Q29udGVudChjb25zdCBJbmxpbmVUZXh0SXRlbSYgaW5saW5lSXRl
bSwgTGF5b3V0VW5pdCBsb2dpY2EKIAogdm9pZCBMaW5lOjphcHBlbmROb25SZXBsYWNlZElubGlu
ZUJveChjb25zdCBJbmxpbmVJdGVtJiBpbmxpbmVJdGVtLCBMYXlvdXRVbml0IGxvZ2ljYWxXaWR0
aCkKIHsKLSAgICBhdXRvJiBkaXNwbGF5Qm94ID0gZm9ybWF0dGluZ0NvbnRleHQoKS5kaXNwbGF5
Qm94Rm9yTGF5b3V0Qm94KGlubGluZUl0ZW0ubGF5b3V0Qm94KCkpOwotICAgIGF1dG8gaG9yaXpv
bnRhbE1hcmdpbiA9IGRpc3BsYXlCb3guaG9yaXpvbnRhbE1hcmdpbigpOyAgICAKKyAgICBhdXRv
JiBib3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3goaW5saW5l
SXRlbS5sYXlvdXRCb3goKSk7CisgICAgYXV0byBob3Jpem9udGFsTWFyZ2luID0gYm94R2VvbWV0
cnkuaG9yaXpvbnRhbE1hcmdpbigpOyAgICAKICAgICBhdXRvIGxvZ2ljYWxSZWN0ID0gRGlzcGxh
eTo6UmVjdCB7IH07CiAKICAgICBsb2dpY2FsUmVjdC5zZXRMZWZ0KGNvbnRlbnRMb2dpY2FsV2lk
dGgoKSArIGhvcml6b250YWxNYXJnaW4uc3RhcnQpOwogICAgIGxvZ2ljYWxSZWN0LnNldFdpZHRo
KGxvZ2ljYWxXaWR0aCk7CiAgICAgaWYgKCFtX3NraXBWZXJ0aWNhbEFsaWdtZW50KSB7Ci0gICAg
ICAgIGFkanVzdEJhc2VsaW5lQW5kTGluZUhlaWdodChpbmxpbmVJdGVtLCBkaXNwbGF5Qm94Lm1h
cmdpbkJveEhlaWdodCgpKTsKKyAgICAgICAgYWRqdXN0QmFzZWxpbmVBbmRMaW5lSGVpZ2h0KGlu
bGluZUl0ZW0sIGJveEdlb21ldHJ5Lm1hcmdpbkJveEhlaWdodCgpKTsKICAgICAgICAgbG9naWNh
bFJlY3Quc2V0SGVpZ2h0KGlubGluZUl0ZW1Db250ZW50SGVpZ2h0KGlubGluZUl0ZW0pKTsKICAg
ICB9CiAKQEAgLTQxNCwyMCArNDE0LDE5IEBAIExheW91dFVuaXQgTGluZTo6aW5saW5lSXRlbUNv
bnRlbnRIZWlnaHQoY29uc3QgSW5saW5lSXRlbSYgaW5saW5lSXRlbSkgY29uc3QKICAgICAgICAg
cmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpOwogCiAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5s
aW5lSXRlbS5sYXlvdXRCb3goKTsKLSAgICBBU1NFUlQoZm9ybWF0dGluZ0NvbnRleHQoKS5oYXNE
aXNwbGF5Qm94KGxheW91dEJveCkpOwotICAgIGF1dG8mIGRpc3BsYXlCb3ggPSBmb3JtYXR0aW5n
Q29udGV4dCgpLmRpc3BsYXlCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94KTsKKyAgICBhdXRvJiBi
b3hHZW9tZXRyeSA9IGZvcm1hdHRpbmdDb250ZXh0KCkuZ2VvbWV0cnlGb3JCb3gobGF5b3V0Qm94
KTsKIAogICAgIGlmIChsYXlvdXRCb3guaXNGbG9hdGluZ1Bvc2l0aW9uZWQoKSkKLSAgICAgICAg
cmV0dXJuIGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0KCk7CisgICAgICAgIHJldHVybiBib3hH
ZW9tZXRyeS5ib3JkZXJCb3hIZWlnaHQoKTsKIAogICAgIGlmIChsYXlvdXRCb3gucmVwbGFjZWQo
KSkKLSAgICAgICAgcmV0dXJuIGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0KCk7CisgICAgICAg
IHJldHVybiBib3hHZW9tZXRyeS5ib3JkZXJCb3hIZWlnaHQoKTsKIAogICAgIGlmIChpbmxpbmVJ
dGVtLmlzQ29udGFpbmVyU3RhcnQoKSB8fCBpbmxpbmVJdGVtLmlzQ29udGFpbmVyRW5kKCkpCi0g
ICAgICAgIHJldHVybiBmb250TWV0cmljcy5oZWlnaHQoKSArIGRpc3BsYXlCb3gudmVydGljYWxC
b3JkZXIoKSArIGRpc3BsYXlCb3gudmVydGljYWxQYWRkaW5nKCkudmFsdWVPcigwKTsKKyAgICAg
ICAgcmV0dXJuIGZvbnRNZXRyaWNzLmhlaWdodCgpICsgYm94R2VvbWV0cnkudmVydGljYWxCb3Jk
ZXIoKSArIGJveEdlb21ldHJ5LnZlcnRpY2FsUGFkZGluZygpLnZhbHVlT3IoMCk7CiAKICAgICAv
LyBOb24tcmVwbGFjZWQgaW5saW5lIGJveCAoZS5nLiBpbmxpbmUtYmxvY2spCi0gICAgcmV0dXJu
IGRpc3BsYXlCb3guYm9yZGVyQm94SGVpZ2h0KCk7CisgICAgcmV0dXJuIGJveEdlb21ldHJ5LmJv
cmRlckJveEhlaWdodCgpOwogfQogCiBMaW5lQm94OjpCYXNlbGluZSBMaW5lOjpoYWxmTGVhZGlu
Z01ldHJpY3MoY29uc3QgRm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzLCBMYXlvdXRVbml0IGxpbmVM
b2dpY2FsSGVpZ2h0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3RhYmxlZm9y
bWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC90YWJsZWZvcm1hdHRpbmcvVGFibGVGb3JtYXR0aW5nQ29udGV4dC5jcHAKaW5kZXggYzdhNzBh
OTMwODlhZDAwYzNjODkxZWFiYThlNjZmNTgyYWQyZDNiYS4uODk5Nzc1ZTBlNTUzMDU1NjJjZTEz
ZTkxNGY4OTgwYjRlMjVlZTQ1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L3Rh
YmxlZm9ybWF0dGluZy9UYWJsZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9sYXlvdXQvdGFibGVmb3JtYXR0aW5nL1RhYmxlRm9ybWF0dGluZ0NvbnRleHQuY3BwCkBA
IC02OSw3ICs2OSw3IEBAIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0KCkKICAg
ICAgICAgbGF5b3V0VGFibGVDZWxsQm94KGNlbGxMYXlvdXRCb3gsIGNvbHVtbkxpc3QuYXQoY2Vs
bC0+cG9zaXRpb24ueCgpKSk7CiAgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgY29s
dW1uIGFuZCByb3cgc3Bhbm5pbmcgYW5kIHRoaXMgcmVxdWlyZXMgYSAyIHBhc3MgbGF5b3V0Lgog
ICAgICAgICBhdXRvJiByb3cgPSBncmlkLnJvd3MoKS5hdChjZWxsLT5wb3NpdGlvbi55KCkpOwot
ICAgICAgICByb3cuc2V0TG9naWNhbEhlaWdodChzdGQ6Om1heChyb3cubG9naWNhbEhlaWdodCgp
LCBkaXNwbGF5Qm94Rm9yTGF5b3V0Qm94KGNlbGxMYXlvdXRCb3gpLm1hcmdpbkJveEhlaWdodCgp
KSk7CisgICAgICAgIHJvdy5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6bWF4KHJvdy5sb2dpY2FsSGVp
Z2h0KCksIGdlb21ldHJ5Rm9yQm94KGNlbGxMYXlvdXRCb3gpLm1hcmdpbkJveEhlaWdodCgpKSk7
CiAgICAgfQogICAgIC8vIFRoaXMgaXMgYWZ0ZXIgdGhlIHNlY29uZCBwYXNzIHdoZW4gY2VsbCBo
ZWlnaHRzIGFyZSBmdWxseSBjb21wdXRlZC4KICAgICBhdXRvIHJvd0xvZ2ljYWxUb3AgPSBncmlk
LnZlcnRpY2FsU3BhY2luZygpOwpAQCAtODYsNyArODYsNyBAQCB2b2lkIFRhYmxlRm9ybWF0dGlu
Z0NvbnRleHQ6OmxheW91dCgpCiAKIHZvaWQgVGFibGVGb3JtYXR0aW5nQ29udGV4dDo6bGF5b3V0
VGFibGVDZWxsQm94KGNvbnN0IEJveCYgY2VsbExheW91dEJveCwgY29uc3QgVGFibGVHcmlkOjpD
b2x1bW4mIGNvbHVtbikKIHsKLSAgICBhdXRvJiBjZWxsRGlzcGxheUJveCA9IGRpc3BsYXlCb3hG
b3JMYXlvdXRCb3goY2VsbExheW91dEJveCk7CisgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBm
b3JtYXR0aW5nU3RhdGUoKS5kaXNwbGF5Qm94KGNlbGxMYXlvdXRCb3gpOwogICAgIGNvbXB1dGVC
b3JkZXJBbmRQYWRkaW5nKGNlbGxMYXlvdXRCb3gpOwogICAgIC8vIE1hcmdpbnMgZG8gbm90IGFw
cGx5IHRvIGludGVybmFsIHRhYmxlIGVsZW1lbnRzLgogICAgIGNlbGxEaXNwbGF5Qm94LnNldEhv
cml6b250YWxNYXJnaW4oeyB9KTsKQEAgLTEwNyw3ICsxMDcsNyBAQCB2b2lkIFRhYmxlRm9ybWF0
dGluZ0NvbnRleHQ6OnBvc2l0aW9uVGFibGVDZWxscygpCiAgICAgYXV0byYgcm93TGlzdCA9IGdy
aWQucm93cygpOwogICAgIGF1dG8mIGNvbHVtbkxpc3QgPSBncmlkLmNvbHVtbnNDb250ZXh0KCku
Y29sdW1ucygpOwogICAgIGZvciAoYXV0byYgY2VsbCA6IGdyaWQuY2VsbHMoKSkgewotICAgICAg
ICBhdXRvJiBjZWxsRGlzcGxheUJveCA9IGRpc3BsYXlCb3hGb3JMYXlvdXRCb3goY2VsbC0+dGFi
bGVDZWxsQm94KTsKKyAgICAgICAgYXV0byYgY2VsbERpc3BsYXlCb3ggPSBmb3JtYXR0aW5nU3Rh
dGUoKS5kaXNwbGF5Qm94KGNlbGwtPnRhYmxlQ2VsbEJveCk7CiAgICAgICAgIGNlbGxEaXNwbGF5
Qm94LnNldFRvcChyb3dMaXN0LmF0KGNlbGwtPnBvc2l0aW9uLnkoKSkubG9naWNhbFRvcCgpKTsK
ICAgICAgICAgY2VsbERpc3BsYXlCb3guc2V0TGVmdChjb2x1bW5MaXN0LmF0KGNlbGwtPnBvc2l0
aW9uLngoKSkubG9naWNhbExlZnQoKSk7CiAgICAgfQpAQCAtMTIwLDcgKzEyMCw3IEBAIHZvaWQg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0Q29tcHV0ZWRHZW9tZXRyeUZvclJvd3MoKQogCiAg
ICAgYXV0byYgcm93TGlzdCA9IGdyaWQucm93cygpOwogICAgIGZvciAoYXV0byYgcm93IDogcm93
TGlzdCkgewotICAgICAgICBhdXRvJiByb3dEaXNwbGF5Qm94ID0gZGlzcGxheUJveEZvckxheW91
dEJveChyb3cuYm94KCkpOworICAgICAgICBhdXRvJiByb3dEaXNwbGF5Qm94ID0gZm9ybWF0dGlu
Z1N0YXRlKCkuZGlzcGxheUJveChyb3cuYm94KCkpOwogICAgICAgICBpbml0aWFsaXplRGlzcGxh
eUJveFRvQmxhbmsocm93RGlzcGxheUJveCk7CiAgICAgICAgIHJvd0Rpc3BsYXlCb3guc2V0Q29u
dGVudEJveEhlaWdodChyb3cubG9naWNhbEhlaWdodCgpKTsKICAgICAgICAgcm93RGlzcGxheUJv
eC5zZXRDb250ZW50Qm94V2lkdGgocm93V2lkdGgpOwpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQg
VGFibGVGb3JtYXR0aW5nQ29udGV4dDo6c2V0Q29tcHV0ZWRHZW9tZXRyeUZvclNlY3Rpb25zKCkK
ICAgICBhdXRvIHNlY3Rpb25XaWR0aCA9IGdyaWQuY29sdW1uc0NvbnRleHQoKS5sb2dpY2FsV2lk
dGgoKSArIDIgKiBncmlkLmhvcml6b250YWxTcGFjaW5nKCk7CiAKICAgICBmb3IgKGF1dG8mIHNl
Y3Rpb24gOiBjaGlsZHJlbk9mVHlwZTxCb3g+KGRvd25jYXN0PENvbnRhaW5lcj4ocm9vdCgpKSkp
IHsKLSAgICAgICAgYXV0byYgc2VjdGlvbkRpc3BsYXlCb3ggPSBkaXNwbGF5Qm94Rm9yTGF5b3V0
Qm94KHNlY3Rpb24pOworICAgICAgICBhdXRvJiBzZWN0aW9uRGlzcGxheUJveCA9IGZvcm1hdHRp
bmdTdGF0ZSgpLmRpc3BsYXlCb3goc2VjdGlvbik7CiAgICAgICAgIGluaXRpYWxpemVEaXNwbGF5
Qm94VG9CbGFuayhzZWN0aW9uRGlzcGxheUJveCk7CiAgICAgICAgIC8vIEZJWE1FOiBTaXplIHRh
YmxlIHNlY3Rpb25zIHByb3Blcmx5LgogICAgICAgICBzZWN0aW9uRGlzcGxheUJveC5zZXRDb250
ZW50Qm94V2lkdGgoc2VjdGlvbldpZHRoKTsKQEAgLTIzOSw4ICsyMzksNyBAQCBMYXlvdXRVbml0
IFRhYmxlRm9ybWF0dGluZ0NvbnRleHQ6OmNvbXB1dGVkVGFibGVXaWR0aCgpCiAgICAgYXV0byYg
dGFibGVXcmFwcGVyQm94ID0gcm9vdCgpOwogICAgIGF1dG8mIHN0eWxlID0gdGFibGVXcmFwcGVy
Qm94LnN0eWxlKCk7CiAgICAgYXV0byYgY29udGFpbmluZ0Jsb2NrID0gKnRhYmxlV3JhcHBlckJv
eC5jb250YWluaW5nQmxvY2soKTsKLSAgICBhdXRvJiBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94
ID0gZGlzcGxheUJveEZvckxheW91dEJveChjb250YWluaW5nQmxvY2spOwotICAgIGF1dG8gY29u
dGFpbmluZ0Jsb2NrV2lkdGggPSBjb250YWluaW5nQmxvY2tEaXNwbGF5Qm94LmNvbnRlbnRCb3hX
aWR0aCgpOworICAgIGF1dG8gY29udGFpbmluZ0Jsb2NrV2lkdGggPSBnZW9tZXRyeUZvckJveChj
b250YWluaW5nQmxvY2spLmNvbnRlbnRCb3hXaWR0aCgpOwogCiAgICAgYXV0byYgZ3JpZCA9IGZv
cm1hdHRpbmdTdGF0ZSgpLnRhYmxlR3JpZCgpOwogICAgIGF1dG8mIGNvbHVtbnNDb250ZXh0ID0g
Z3JpZC5jb2x1bW5zQ29udGV4dCgpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>