<?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>217832</bug_id>
          
          <creation_ts>2020-10-16 09:11:25 -0700</creation_ts>
          <short_desc>[LFC][IFC] Introduce layout bounds based vertical alignment</short_desc>
          <delta_ts>2020-10-17 09:08:15 -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>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>1698631</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-10-16 09:11:25 -0700</bug_when>
    <thetext>https://www.w3.org/TR/css-inline-3/#line-layout
and
https://www.w3.org/TR/css-inline-3/#layout-bounds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698632</commentid>
    <comment_count>1</comment_count>
      <attachid>411584</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-10-16 09:15:27 -0700</bug_when>
    <thetext>Created attachment 411584
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698739</commentid>
    <comment_count>2</comment_count>
      <attachid>411611</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-10-16 14:00:15 -0700</bug_when>
    <thetext>Created attachment 411611
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698941</commentid>
    <comment_count>3</comment_count>
      <attachid>411664</attachid>
    <who name="alan">zalan</who>
    <bug_when>2020-10-17 05:38:16 -0700</bug_when>
    <thetext>Created attachment 411664
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698942</commentid>
    <comment_count>4</comment_count>
      <attachid>411664</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2020-10-17 05:43:19 -0700</bug_when>
    <thetext>Comment on attachment 411664
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=411664&amp;action=review

&gt; Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:411
&gt;      auto lineBoxLogicalHeight = lineBox.logicalHeight();
&gt; -    auto lineLogicalHeight = InlineLayoutUnit { };
&gt; -    if (rootStyle.lineHeight().isNegative()) {
&gt; -        // Negative line height value means the line height is driven by the content.
&gt; -        auto usedLineSpacing = [&amp;] {
&gt; -            auto logicalTopWithLineSpacing = InlineLayoutUnit { };
&gt; -            auto logicalBottomWithLineSpacing = lineBoxLogicalHeight;
&gt; -            for (auto&amp; inlineLevelBox : lineBox.inlineLevelBoxList()) {
&gt; -                if (auto lineSpacing = inlineLevelBox-&gt;lineSpacing()) {
&gt; -                    // FIXME: check if line spacing is distributed evenly.
&gt; -                    logicalTopWithLineSpacing = std::min(logicalTopWithLineSpacing, inlineLevelBox-&gt;logicalTop() - *lineSpacing / 2);
&gt; -                    logicalBottomWithLineSpacing = std::max(logicalBottomWithLineSpacing, inlineLevelBox-&gt;logicalBottom() + *lineSpacing / 2);
&gt; -                }
&gt; -            }
&gt; -            return -logicalTopWithLineSpacing + (logicalBottomWithLineSpacing - lineBoxLogicalHeight);
&gt; -        };
&gt; -        lineLogicalHeight = lineBox.logicalHeight() + usedLineSpacing();
&gt; -    } else
&gt; -        lineLogicalHeight = rootStyle.computedLineHeight();
&gt; -
&gt; +    auto lineLogicalHeight = lineBox.logicalHeight();
&gt;      auto logicalRect = InlineRect { lineContent.logicalTopLeft, lineContent.lineLogicalWidth, lineLogicalHeight};
&gt;      // Inline tree height is all integer based.
&gt;      auto lineBoxOffset = floorf((lineLogicalHeight - lineBoxLogicalHeight) / 2);

lineBoxOffset == 0?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698943</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2020-10-17 05:46:43 -0700</bug_when>
    <thetext>(In reply to Antti Koivisto from comment #4)
&gt; Comment on attachment 411664 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=411664&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp:411
&gt; &gt;      auto lineBoxLogicalHeight = lineBox.logicalHeight();
&gt; &gt; -    auto lineLogicalHeight = InlineLayoutUnit { };
&gt; &gt; -    if (rootStyle.lineHeight().isNegative()) {
&gt; &gt; -        // Negative line height value means the line height is driven by the content.
&gt; &gt; -        auto usedLineSpacing = [&amp;] {
&gt; &gt; -            auto logicalTopWithLineSpacing = InlineLayoutUnit { };
&gt; &gt; -            auto logicalBottomWithLineSpacing = lineBoxLogicalHeight;
&gt; &gt; -            for (auto&amp; inlineLevelBox : lineBox.inlineLevelBoxList()) {
&gt; &gt; -                if (auto lineSpacing = inlineLevelBox-&gt;lineSpacing()) {
&gt; &gt; -                    // FIXME: check if line spacing is distributed evenly.
&gt; &gt; -                    logicalTopWithLineSpacing = std::min(logicalTopWithLineSpacing, inlineLevelBox-&gt;logicalTop() - *lineSpacing / 2);
&gt; &gt; -                    logicalBottomWithLineSpacing = std::max(logicalBottomWithLineSpacing, inlineLevelBox-&gt;logicalBottom() + *lineSpacing / 2);
&gt; &gt; -                }
&gt; &gt; -            }
&gt; &gt; -            return -logicalTopWithLineSpacing + (logicalBottomWithLineSpacing - lineBoxLogicalHeight);
&gt; &gt; -        };
&gt; &gt; -        lineLogicalHeight = lineBox.logicalHeight() + usedLineSpacing();
&gt; &gt; -    } else
&gt; &gt; -        lineLogicalHeight = rootStyle.computedLineHeight();
&gt; &gt; -
&gt; &gt; +    auto lineLogicalHeight = lineBox.logicalHeight();
&gt; &gt;      auto logicalRect = InlineRect { lineContent.logicalTopLeft, lineContent.lineLogicalWidth, lineLogicalHeight};
&gt; &gt;      // Inline tree height is all integer based.
&gt; &gt;      auto lineBoxOffset = floorf((lineLogicalHeight - lineBoxLogicalHeight) / 2);
&gt; 
&gt; lineBoxOffset == 0?
was testing the review process :)
Will get rid of that offset concept in a follow-up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698948</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-10-17 06:30:19 -0700</bug_when>
    <thetext>Committed r268642: &lt;https://trac.webkit.org/changeset/268642&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 411664.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1698949</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-10-17 06:31:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/70407284&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411584</attachid>
            <date>2020-10-16 09:15:27 -0700</date>
            <delta_ts>2020-10-16 09:34:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217832-20201016091526.patch</filename>
            <type>text/plain</type>
            <size>29708</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDFkOWE1NmUxNTMxZGUx
OWZlOWM2M2E4MzgwYmRlZjM0ODQ0MjlhYi4uMGYzNzM3MmZiMWUyOGQ3MWI3NzdiNTcwZGIxMGVl
OWU0OGIzODg5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTEwLTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBJbnRyb2R1
Y2UgbGF5b3V0IGJvdW5kcyBiYXNlZCB2ZXJ0aWNhbCBhbGlnbm1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzgzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUC4gRVdTIHRlc3RpbmcuCisKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbnN0
cnVjdElubGluZUxldmVsQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
QnVpbGRlcjo6YWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb21wdXRlZExpbmVMb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hlc0xvZ2ljYWxI
ZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2Fs
UmVjdEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
Ojpsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHM6OmhlaWdodCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUxldmVsQm94OjpzZXRM
YXlvdXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6bGF5b3V0Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmxpbmVTcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OnNldExpbmVT
cGFjaW5nKTogRGVsZXRlZC4KKwogMjAyMC0xMC0xMyAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9y
aS5GdWppaUBzb255LmNvbT4KIAogICAgICAgICBbV2luQ2Fpcm9dW01lZGlhRm91bmRhdGlvbl0g
TWFueSB0ZXN0IGNhc2VzIGFyZSB0aW1pbmcgb3V0IGJ5IHdhaXRpbmcgZm9yIGV2ZW50cwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDI4YjU0NjNiYmE0OTU5MTUzNzAw
ODBkZjdlMTQ0YmU5OWQ2OGZhODkuLjg1YjcxYzdjNTM0NGExMzFmZGZlOWY1YjJhOTM2NTY5NTRl
ZGYxMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTQ0MSw3ICs0
NDEsNyBAQCBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0
cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbAogICAgICAgICAgICAgaWYgKGxpbmVSdW4u
aXNUZXh0KCkgfHwgbGluZVJ1bi5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAgICAgIGZvcm1h
dHRpbmdTdGF0ZS5hZGRMaW5lUnVuKHsgbGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBs
aW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSwgbGluZVJ1bi5leHBhbnNpb24o
KSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwogICAgICAgICAgICAgZWxzZSBpZiAobGluZVJ1
bi5pc0JveCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRMaW5lUnVuKHsg
bGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBsaW5lQm94LmlubGluZUxldmVsQm94Rm9y
TGF5b3V0Qm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLmxvZ2ljYWxSZWN0KCksIGxpbmVSdW4uZXhw
YW5zaW9uKCksIHsgfSB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGlu
ZVJ1bih7IGxpbmVJbmRleCwgbGluZVJ1bi5sYXlvdXRCb3goKSwgbGluZUJveC5sb2dpY2FsUmVj
dEZvcklubGluZUxldmVsQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLCBsaW5lUnVuLmV4cGFuc2lv
bigpLCB7IH0gfSk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGNvbnN0cnVjdExpbmVSdW5zKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4
IDZhN2MxMTMyZTVhZGQ5YjMxOTQ4ZWE5Njc3NWZjMDdiNWFhYjAyZjUuLjJkOWFmMmZhNTg1OTll
MjMwYjY2ZTU0M2QzMjU0NjJkYThiNzQyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC00Niw3ICs0Niw2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6Oklu
bGluZUxldmVsQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb25zdHJ1Y3RJbmxpbmVMZXZlbEJveGVz
KExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7Ci0gICAgdm9pZCBhZGp1c3RJbmxpbmVC
b3hlc0xvZ2ljYWxIZWlnaHQoTGluZUJveCYpOwogICAgIHZvaWQgYWxpZ25JbmxpbmVMZXZlbEJv
eGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KExpbmVCb3gmKTsKIAogICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTE1OSw3ICsxNTgsNiBAQCBM
aW5lQm94IExpbmVCb3hCdWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50KQogICAgIGlmIChhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQg
PSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxl
KCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxp
bmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkpCiAgICAgICAgIGxpbmVCb3gu
c2V0SG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgqaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCk7
CiAgICAgY29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKLSAgICBhZGp1
c3RJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQobGluZUJveCk7CiAgICAgYWxpZ25JbmxpbmVMZXZl
bEJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KGxpbmVCb3gpOwogICAgIHJl
dHVybiBsaW5lQm94OwogfQpAQCAtMTY5LDE0ICsxNjcsMzIgQEAgdm9pZCBMaW5lQm94QnVpbGRl
cjo6c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJv
eCYgaW4KICAgICBBU1NFUlQoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVM
ZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKTsKICAgICBhdXRvJiBmb250TWV0cmljcyA9IGlubGlu
ZUxldmVsQm94LmZvbnRNZXRyaWNzKCk7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGlu
ZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotCisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQg
PSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgPSBm
b250TWV0cmljcy5kZXNjZW50KCk7CisKKyAgICAvLyBGSVhNRTogQWRqdXN0IGxheW91dCBib3Vu
ZHMgd2l0aCBmYWxsYmFjayBmb250IHdoZW4gYXBwbGljYWJsZS4KKyAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCk7CisgICAgYXV0byBsaW5lSGVpZ2h0
ID0gc3R5bGUubGluZUhlaWdodCgpOworICAgIGlmIChsaW5lSGVpZ2h0LmlzTmVnYXRpdmUoKSkg
eworICAgICAgICAvLyBJZiBsaW5lLWhlaWdodCBjb21wdXRlcyB0byBub3JtYWwgYW5kIGVpdGhl
ciB0ZXh0LWVkZ2UgaXMgbGVhZGluZyBvciB0aGlzIGlzIHRoZSByb290IGlubGluZSBib3gsCisg
ICAgICAgIC8vIHRoZSBmb2504oCZcyBsaW5lIGdhcCBtZXRyaWMgbWF5IGFsc28gYmUgaW5jb3Jw
b3JhdGVkIGludG8gQSBhbmQgRCBieSBhZGRpbmcgaGFsZiB0byBlYWNoIHNpZGUgYXMgaGFsZi1s
ZWFkaW5nLgorICAgICAgICBhdXRvIGxpbmVTcGFjaW5nID0gJmlubGluZUxldmVsQm94LmxheW91
dEJveCgpID09ICZyb290Qm94KCkgPyBmb250TWV0cmljcy5saW5lU3BhY2luZygpIC0gbG9naWNh
bEhlaWdodCA6IElubGluZUxheW91dFVuaXQoKTsKKyAgICAgICAgYXNjZW50ICs9IGxpbmVTcGFj
aW5nIC8gMjsKKyAgICAgICAgZGVzY2VudCArPSBsaW5lU3BhY2luZyAvIDI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lSGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCk7CisgICAgICAgIElubGluZUxheW91dFVuaXQgaGFsZkxlYWRpbmcgPSAobGlu
ZUhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOworICAgICAgICBhc2NlbnQgKz0gaGFs
ZkxlYWRpbmc7CisgICAgICAgIGRlc2NlbnQgKz0gaGFsZkxlYWRpbmc7CisgICAgICAgIC8vIFRo
aXMgaXMgdG8gbWF0Y2ggbGVnYWN5IGxheW91dCBpbnRlZ3JhbCBwb3NpdGlvbmluZy4KKyAgICAg
ICAgYXNjZW50ID0gZmxvb3JmKGFzY2VudCk7CisgICAgICAgIGRlc2NlbnQgPSBjZWlsKGRlc2Nl
bnQpOworICAgIH0KKyAgICBpbmxpbmVMZXZlbEJveC5zZXRMYXlvdXRCb3VuZHMoTGluZUJveDo6
SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGFzY2VudCwgZGVzY2VudCB9KTsKKyAgICBp
bmxpbmVMZXZlbEJveC5zZXRCYXNlbGluZShhc2NlbnQpOworICAgIC8vIEZJWE1FOiBGaWd1cmUg
b3V0IGlmIG5lZWVkIGRlc2NlbnQgYXQgYWxsIGhlcmUuCisgICAgaW5saW5lTGV2ZWxCb3guc2V0
RGVzY2VudChkZXNjZW50KTsKICAgICBpbmxpbmVMZXZlbEJveC5zZXRMb2dpY2FsSGVpZ2h0KGxv
Z2ljYWxIZWlnaHQpOwotICAgIGlubGluZUxldmVsQm94LnNldEJhc2VsaW5lKGJhc2VsaW5lKTsK
LSAgICBpbmxpbmVMZXZlbEJveC5zZXREZXNjZW50KGxvZ2ljYWxIZWlnaHQgLSBiYXNlbGluZSk7
Ci0gICAgaWYgKGF1dG8gbGluZVNwYWNpbmcgPSBmb250TWV0cmljcy5saW5lU3BhY2luZygpIC0g
bG9naWNhbEhlaWdodCkKLSAgICAgICAgaW5saW5lTGV2ZWxCb3guc2V0TGluZVNwYWNpbmcobGlu
ZVNwYWNpbmcpOwotICAgIGlubGluZUxldmVsQm94LnNldElzTm9uRW1wdHkoKTsKIH0KIAogdm9p
ZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5l
Qm94LCBjb25zdCBMaW5lOjpSdW5MaXN0JiBydW5zKQpAQCAtMTg1LDExICsyMDEsMTIgQEAgdm9p
ZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhMaW5lQm94JiBsaW5l
Qm94LCBjb25zdCBMaW5lOjpSdW4KIAogICAgIGF1dG8gY3JlYXRlUm9vdElubGluZUJveCA9IFsm
XSB7CiAgICAgICAgIGF1dG8gcm9vdElubGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94
OjpjcmVhdGVSb290SW5saW5lQm94KHJvb3RCb3goKSwgaG9yaXpvbnRhbEFsaWdtZW50T2Zmc2V0
LCBsaW5lQm94LmxvZ2ljYWxXaWR0aCgpKTsKKyAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveCgqcm9vdElubGluZUJveCk7CiAKICAgICAgICAgYXV0byBsaW5lSGFzSW1hZ2lu
YXJ5U3RydXQgPSAhbGF5b3V0U3RhdGUoKS5pblF1aXJrc01vZGUoKTsKICAgICAgICAgYXV0byBp
c0luaXRpYWxseUNvbnNpZGVyZWROb25FbXB0eSA9ICFsaW5lQm94LmlzTGluZVZpc3VhbGx5RW1w
dHkoKSAmJiBsaW5lSGFzSW1hZ2luYXJ5U3RydXQ7CiAgICAgICAgIGlmIChpc0luaXRpYWxseUNv
bnNpZGVyZWROb25FbXB0eSkKLSAgICAgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxp
bmVCb3goKnJvb3RJbmxpbmVCb3gpOworICAgICAgICAgICAgcm9vdElubGluZUJveC0+c2V0SXNO
b25FbXB0eSgpOwogICAgICAgICBsaW5lQm94LmFkZFJvb3RJbmxpbmVCb3goV1RGTW92ZShyb290
SW5saW5lQm94KSk7CiAgICAgfTsKICAgICBjcmVhdGVSb290SW5saW5lQm94KCk7CkBAIC0yNDIs
MjQgKzI1OSwyMyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RJbmxpbmVMZXZlbEJv
eGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bgogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgYXV0byBhdG9taWNJbmxpbmVMZXZlbEJveCA9IExpbmVCb3g6OklubGluZUxldmVs
Qm94OjpjcmVhdGVBdG9taWNJbmxpbmVMZXZlbEJveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCB7
IHJ1bi5sb2dpY2FsV2lkdGgoKSwgbG9naWNhbEhlaWdodCB9KTsKICAgICAgICAgICAgIGF0b21p
Y0lubGluZUxldmVsQm94LT5zZXRCYXNlbGluZShiYXNlbGluZSk7CisgICAgICAgICAgICBhdG9t
aWNJbmxpbmVMZXZlbEJveC0+c2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94
OjpMYXlvdXRCb3VuZHMgeyBiYXNlbGluZSwgeyB9IH0pOwogICAgICAgICAgICAgaWYgKGxvZ2lj
YWxIZWlnaHQpCiAgICAgICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3gtPnNldElzTm9u
RW1wdHkoKTsKICAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2ZWxCb3goV1RGTW92ZShh
dG9taWNJbmxpbmVMZXZlbEJveCkpOwogICAgICAgICB9IGVsc2UgaWYgKHJ1bi5pc0NvbnRhaW5l
clN0YXJ0KCkpIHsKICAgICAgICAgICAgIGF1dG8gaW5pdGlhbExvZ2ljYWxXaWR0aCA9IGxpbmVC
b3gubG9naWNhbFdpZHRoKCkgLSBydW4ubG9naWNhbExlZnQoKTsKICAgICAgICAgICAgIEFTU0VS
VChpbml0aWFsTG9naWNhbFdpZHRoID49IDApOwotICAgICAgICAgICAgbGluZUJveC5hZGRJbmxp
bmVMZXZlbEJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91
dEJveCwgbG9naWNhbExlZnQsIGluaXRpYWxMb2dpY2FsV2lkdGgpKTsKKyAgICAgICAgICAgIGF1
dG8gaW5saW5lQm94ID0gTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveChs
YXlvdXRCb3gsIGxvZ2ljYWxMZWZ0LCBpbml0aWFsTG9naWNhbFdpZHRoKTsKKyAgICAgICAgICAg
IHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goKmlubGluZUJveCk7CisgICAgICAgICAg
ICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoaW5saW5lQm94KSk7CiAgICAgICAg
IH0gZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyRW5kKCkpIHsKICAgICAgICAgICAgIC8vIEFkanVz
dCB0aGUgbG9naWNhbCB3aWR0aCB3aGVuIHRoZSBpbmxpbmUgbGV2ZWwgY29udGFpbmVyIGNsb3Nl
cyBvbiB0aGlzIGxpbmUuCiAgICAgICAgICAgICBhdXRvJiBpbmxpbmVCb3ggPSBsaW5lQm94Lmlu
bGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveCk7CiAgICAgICAgICAgICBBU1NFUlQo
aW5saW5lQm94LmlzSW5saW5lQm94KCkpOwogICAgICAgICAgICAgaW5saW5lQm94LnNldExvZ2lj
YWxXaWR0aChydW4ubG9naWNhbFJpZ2h0KCkgLSBpbmxpbmVCb3gubG9naWNhbExlZnQoKSk7CiAg
ICAgICAgIH0gZWxzZSBpZiAocnVuLmlzVGV4dCgpIHx8IHJ1bi5pc1NvZnRMaW5lQnJlYWsoKSkg
ewotICAgICAgICAgICAgYXV0byYgcGFyZW50Qm94ID0gbGF5b3V0Qm94LnBhcmVudCgpOwotICAg
ICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gJnBhcmVudEJveCA9PSAmcm9vdEJveCgp
ID8gbGluZUJveC5yb290SW5saW5lQm94KCkgOiBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5
b3V0Qm94KHBhcmVudEJveCk7CiAgICAgICAgICAgICAvLyBGSVhNRTogQWRqdXN0IG5vbi1lbXB0
eSBpbmxpbmUgYm94IGhlaWdodCB3aGVuIGdseXBocyBmcm9tIHRoZSBub24tcHJpbWFyeSBmb250
IHN0cmV0Y2ggdGhlIGJveC4KLSAgICAgICAgICAgIGlmIChwYXJlbnRJbmxpbmVCb3guaXNFbXB0
eSgpKQotICAgICAgICAgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3gocGFy
ZW50SW5saW5lQm94KTsKICAgICAgICAgfSBlbHNlIGlmIChydW4uaXNIYXJkTGluZUJyZWFrKCkp
IHsKICAgICAgICAgICAgIGF1dG8gbGluZUJyZWFrQm94ID0gTGluZUJveDo6SW5saW5lTGV2ZWxC
b3g6OmNyZWF0ZUxpbmVCcmVha0JveChsYXlvdXRCb3gsIGxvZ2ljYWxMZWZ0KTsKICAgICAgICAg
ICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxpbmVCb3goKmxpbmVCcmVha0JveCk7CkBAIC0y
NzEsMTI0ICsyODcsMTA3IEBAIHZvaWQgTGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUxl
dmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwgY29uc3QgTGluZTo6UnVuCiAgICAgfQogfQogCi12
b2lkIExpbmVCb3hCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQoTGluZUJv
eCYgbGluZUJveCkKK3ZvaWQgTGluZUJveEJ1aWxkZXI6OmFsaWduSW5saW5lTGV2ZWxCb3hlc1Zl
cnRpY2FsbHlBbmRDb21wdXRlTGluZUJveEhlaWdodChMaW5lQm94JiBsaW5lQm94KQogewotICAg
IC8vIEJ5IHRyYXZlcnNpbmcgdGhlIGlubGluZSBib3ggbGlzdCBiYWNrd2FyZHMsIGl0J3MgZ3Vh
cmFudGVlZCB0aGF0IGRlc2NlbmRhbnQgaW5saW5lIGJveGVzIGFyZSBzaXplZCBmaXJzdC4KLSAg
ICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogV1RGOjptYWtlUmV2ZXJzZWRSYW5nZShsaW5l
Qm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpKSB7Ci0gICAgICAgIGlmIChpbmxpbmVMZXZl
bEJveC0+aXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7CisgICAgYXV0byBpc0xpbmVC
b3hSZWxhdGl2ZUFsaWdubWVudCA9IFtdIChjb25zdCBhdXRvJiB2ZXJ0aWNhbEFsaWdubWVudCkg
eworICAgICAgICByZXR1cm4gdmVydGljYWxBbGlnbm1lbnQgPT0gVmVydGljYWxBbGlnbjo6VG9w
IHx8IHZlcnRpY2FsQWxpZ25tZW50ID09IFZlcnRpY2FsQWxpZ246OkJvdHRvbTsKKyAgICB9Owor
ICAgIFZlY3RvcjxMaW5lQm94OjpJbmxpbmVMZXZlbEJveCo+IGxpbmVCb3hSZWxhdGl2ZUlubGlu
ZUxldmVsQm94ZXM7CisgICAgc3RydWN0IEFic29sdXRlVG9wQW5kQm90dG9tIHsKKyAgICAgICAg
SW5saW5lTGF5b3V0VW5pdCB0b3AgeyAwIH07CisgICAgICAgIElubGluZUxheW91dFVuaXQgYm90
dG9tIHsgMCB9OworICAgIH07CisgICAgSGFzaE1hcDxMaW5lQm94OjpJbmxpbmVMZXZlbEJveCos
IEFic29sdXRlVG9wQW5kQm90dG9tPiBhYnNvbHV0ZUxvZ2ljYWxUb3BBbmRCb3R0b21NYXA7Cisg
ICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJveCgpOworICAgIGFi
c29sdXRlTG9naWNhbFRvcEFuZEJvdHRvbU1hcC5hZGQoJnJvb3RJbmxpbmVCb3gsIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgeyB9LCByb290SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgp
IH0pOwogCi0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LT5sYXlvdXRC
b3goKTsKLSAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVMZXZl
bEJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICBBU1NFUlQocGFy
ZW50SW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICBzd2l0Y2ggKGxheW91dEJveC5z
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRv
cDoKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICAvLyB0
b3AgYW5kIGJvdHRvbSBhbGlnbm1lbnRzIG9ubHkgc3RyZXRjaCB0aGUgbGluZSBib3guIFRoZXkg
ZG9uJ3Qgc3RyZXRjaCBhbnkgb2YgdGhlIGlubGluZSBib3hlcywgbm90IGV2ZW4gdGhlIHJvb3Qg
aW5saW5lIGJveC4KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246OlRleHRUb3A6IHsKLSAgICAgICAgICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIHBhcmVudElubGluZUJveC5mb250TWV0cmljcygp
LmFzY2VudCgpOwotICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQo
c3RkOjptYXgocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgcGFyZW50VGV4dExvZ2lj
YWxUb3AgKyBpbmxpbmVMZXZlbEJveC0+bG9naWNhbEhlaWdodCgpKSk7Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJhc2VsaW5lOiB7
Ci0gICAgICAgICAgICBhdXRvIGJhc2VsaW5lT3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxp
bmVMZXZlbEJveC0+YmFzZWxpbmUoKSAtIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpKTsKLSAg
ICAgICAgICAgIGlmIChiYXNlbGluZU92ZXJmbG93KSB7Ci0gICAgICAgICAgICAgICAgcGFyZW50
SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsgYmFzZWxp
bmVPdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxI
ZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIGJhc2VsaW5lT3ZlcmZsb3cp
OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYXV0byBwYXJlbnRJbmxpbmVCb3hCZWxvd0Jh
c2VsaW5lID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAtIHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpOwotICAgICAgICAgICAgYXV0byBpbmxpbmVCb3hCZWxvd0Jhc2VsaW5lID0g
aW5saW5lTGV2ZWxCb3gtPmxvZ2ljYWxIZWlnaHQoKSAtIGlubGluZUxldmVsQm94LT5iYXNlbGlu
ZSgpOwotICAgICAgICAgICAgYXV0byBiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cgPSBzdGQ6Om1heCgw
LjBmLCBpbmxpbmVCb3hCZWxvd0Jhc2VsaW5lIC0gcGFyZW50SW5saW5lQm94QmVsb3dCYXNlbGlu
ZSk7Ci0gICAgICAgICAgICBpZiAoYmVsb3dCYXNlbGluZU92ZXJmbG93KQotICAgICAgICAgICAg
ICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHBhcmVudElubGluZUJveC5sb2dp
Y2FsSGVpZ2h0KCkgKyBiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7Ci0g
ICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5lQm94
LmJhc2VsaW5lKCkgKyBwYXJlbnRJbmxpbmVCb3guZGVzY2VudCgpLnZhbHVlT3IoSW5saW5lTGF5
b3V0VW5pdCB7IH0pOwotICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYs
IGlubGluZUxldmVsQm94LT5sb2dpY2FsSGVpZ2h0KCkgLSBwYXJlbnRUZXh0TG9naWNhbEJvdHRv
bSk7Ci0gICAgICAgICAgICBpZiAob3ZlcmZsb3cpIHsKLSAgICAgICAgICAgICAgICAvLyBUZXh0
Qm90dG9tIHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93bndhcmQgdGhlIHNhbWUgd2F5ICdib3R0b20n
IGRvZXMuCi0gICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQo
cGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSArIG92ZXJmbG93KTsKLSAgICAgICAgICAg
ICAgICBwYXJlbnRJbmxpbmVCb3guc2V0QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2VsaW5l
KCkgKyBvdmVyZmxvdyk7CisgICAgYXV0byBhbGlnbklubGluZUJveFJlbGF0aXZlSW5saW5lTGV2
ZWxCb3hlcyA9IFsmXSB7CisgICAgICAgIGZvciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5l
Qm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKKyAgICAgICAgICAgIGF1dG8mIGxheW91
dEJveCA9IGlubGluZUxldmVsQm94LT5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGF1dG8gdmVy
dGljYWxBbGlnbm1lbnQgPSBsYXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAg
ICAgICAgICBpZiAoaXNMaW5lQm94UmVsYXRpdmVBbGlnbm1lbnQodmVydGljYWxBbGlnbm1lbnQp
KSB7CisgICAgICAgICAgICAgICAgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcy5hcHBl
bmQoaW5saW5lTGV2ZWxCb3guZ2V0KCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBW
ZXJ0aWNhbEFsaWduOjpNaWRkbGU6IHsKLSAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IHBh
cmVudElubGluZUJveC5iYXNlbGluZSgpIC0gKGlubGluZUxldmVsQm94LT5sb2dpY2FsSGVpZ2h0
KCkgLyAyICsgcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7Ci0g
ICAgICAgICAgICBpZiAobG9naWNhbFRvcCA8IDApIHsKLSAgICAgICAgICAgICAgICBhdXRvIG92
ZXJmbG93ID0gLWxvZ2ljYWxUb3A7Ci0gICAgICAgICAgICAgICAgLy8gQ2hpbGQgaW5saW5lIGJv
eCB3aXRoIG1pZGRsZSBhbGlnbm1lbnQgcHVzaGVzIHRoZSBiYXNlbGluZSBkb3duIHdoZW4gb3Zl
cmZsb3dzLgotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRCYXNlbGluZShwYXJl
bnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIG92ZXJmbG93KTsKLSAgICAgICAgICAgICAgICBwYXJl
bnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdo
dCgpICsgb3ZlcmZsb3cpOworICAgICAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGlu
ZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOworICAg
ICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAg
ICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxpZ25tZW50KSB7CisgICAgICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OkJhc2VsaW5lOgorICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJ
bmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxldmVsQm94LT5iYXNlbGluZSgpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9w
OgogICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSB7IH07CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206CisgICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5oZWln
aHQoKSAtIGlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxlOgor
ICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAt
IChpbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLyAyICsgcGFyZW50SW5s
aW5lQm94LmZvbnRNZXRyaWNzKCkueEhlaWdodCgpIC8gMik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1Q
TEVNRU5URURfWUVUKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBhdXRvIGxvZ2ljYWxCb3R0b20gPSBsb2dpY2FsVG9wICsgaW5saW5lTGV2ZWxC
b3gtPmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dp
Y2FsSGVpZ2h0KHN0ZDo6bWF4KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCksIGxvZ2lj
YWxCb3R0b20pKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaW5saW5lTGV2ZWxC
b3gtPnNldExvZ2ljYWxUb3AobG9naWNhbFRvcCk7CisgICAgICAgICAgICBhdXRvIHBhcmVudEFi
c29sdXRlTG9naWNhbFRvcCA9IGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRvbU1hcC5nZXQoJnBh
cmVudElubGluZUJveCkudG9wOworICAgICAgICAgICAgYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3Ag
PSBwYXJlbnRBYnNvbHV0ZUxvZ2ljYWxUb3AgKyBsb2dpY2FsVG9wOworICAgICAgICAgICAgYWJz
b2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tTWFwLmFkZChpbmxpbmVMZXZlbEJveC5nZXQoKSwgQWJz
b2x1dGVUb3BBbmRCb3R0b20geyBhYnNvbHV0ZUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbFRv
cCArIGlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSB9KTsKICAgICAgICAg
fQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgIH07CisgICAgYWxpZ25JbmxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94ZXMoKTsKKworICAgIGF1dG8gbGluZUJveExvZ2ljYWxIZWlnaHQg
PSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIG1pbmltdW1JbmxpbmVCb3hSZWxhdGl2
ZUxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIGlubGluZUJveFJl
bGF0aXZlTG9naWNhbEhlaWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1dG8gY29t
cHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gWyZdIHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBsYXlvdXQgYm91bmRzIGJhc2VkIGxpbmUgYm94IGhlaWdodC4KKyAgICAgICAg
YXV0byBtaW5pbXVtTG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBh
dXRvIG1heGltdW1sb2dpY2FsQm90dG9tID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAg
IGZvciAoYXV0byBhYnNvbHV0ZUxvZ2ljYWxUb3BBbmRCb3R0b20gOiBhYnNvbHV0ZUxvZ2ljYWxU
b3BBbmRCb3R0b21NYXAudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIG1pbmltdW1Mb2dpY2FsVG9w
ID0gc3RkOjptaW4obWluaW11bUxvZ2ljYWxUb3AsIGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRv
bS50b3ApOworICAgICAgICAgICAgbWF4aW11bWxvZ2ljYWxCb3R0b20gPSBzdGQ6Om1heChtYXhp
bXVtbG9naWNhbEJvdHRvbSwgYWJzb2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tLmJvdHRvbSk7CiAg
ICAgICAgIH0KLSAgICB9Ci19CisgICAgICAgIG1pbmltdW1JbmxpbmVCb3hSZWxhdGl2ZUxvZ2lj
YWxUb3AgPSBtaW5pbXVtTG9naWNhbFRvcDsKKyAgICAgICAgaW5saW5lQm94UmVsYXRpdmVMb2dp
Y2FsSGVpZ2h0ID0gbWF4aW11bWxvZ2ljYWxCb3R0b20gLSBtaW5pbXVtTG9naWNhbFRvcDsKKyAg
ICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBpbmxpbmVCb3hSZWxhdGl2ZUxvZ2ljYWxIZWln
aHQ7CisgICAgICAgIC8vIE5vdyBzdHJldGNoIHRoZSBsaW5lIGJveCB3aXRoIHRoZSBsaW5lIGJv
eCByZWxhdGl2ZSBpbmxpbmUgbGV2ZWwgYm94ZXMuCisgICAgICAgIGZvciAoYXV0byogbGluZUJv
eFJlbGF0aXZlSW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
KQorICAgICAgICAgICAgbGluZUJveExvZ2ljYWxIZWlnaHQgPSBzdGQ6Om1heChsaW5lQm94TG9n
aWNhbEhlaWdodCwgbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygp
LmhlaWdodCgpKTsKKyAgICB9OworICAgIGNvbXB1dGVMaW5lQm94TG9naWNhbEhlaWdodCgpOwog
Ci12b2lkIExpbmVCb3hCdWlsZGVyOjphbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5QW5k
Q29tcHV0ZUxpbmVCb3hIZWlnaHQoTGluZUJveCYgbGluZUJveCkKLXsKLSAgICAvLyBJbmxpbmUg
Ym94ZXMgYXJlIGluIHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGUgbGluZSBib3ggKGFuZCBu
b3QgaW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZWlyIHBhcmVudHMpLgotICAgIC8vIFN0
YXJ0aW5nIHdpdGggdGhlIHJvb3QgaW5saW5lIGJveCwgcG9zaXRpb24gdGhlIGFuY2VzdG9ycyBm
aXJzdCBzbyB0aGF0IHRoZSBkZXNjZW5kYW50IGxpbmUgYm94ZXMgc2VlIGFic29sdXRlIHZlcnRp
Y2FsIHBvc2l0aW9ucy4KLSAgICBhdXRvJiByb290SW5saW5lQm94ID0gbGluZUJveC5yb290SW5s
aW5lQm94KCk7Ci0gICAgYXV0byBjb250ZW50TG9naWNhbEhlaWdodCA9IElubGluZUxheW91dFVu
aXQgeyB9OwotICAgIGF1dG8gYWxpZ25Sb290SW5saW5lQm94ID0gWyZdIHsKLSAgICAgICAgY29u
dGVudExvZ2ljYWxIZWlnaHQgPSByb290SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVs
Qm94ZXMoKSkgewotICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWduID0gaW5saW5lTGV2ZWxC
b3gtPmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxBbGlnbigpOwotICAgICAgICAgICAgaWYg
KHZlcnRpY2FsQWxpZ24gPT0gVmVydGljYWxBbGlnbjo6Qm90dG9tKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gYm90dG9tIGFsaWduIGFsd2F5cyBwdXNoZXMgdGhlIHJvb3QgaW5saW5lIGJveCBkb3du
d2FyZHMuCi0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlu
bGluZUxldmVsQm94LT5sb2dpY2FsQm90dG9tKCkgLSByb290SW5saW5lQm94LmxvZ2ljYWxCb3R0
b20oKSk7Ci0gICAgICAgICAgICAgICAgcm9vdElubGluZUJveC5zZXRMb2dpY2FsVG9wKHJvb3RJ
bmxpbmVCb3gubG9naWNhbFRvcCgpICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIGNvbnRl
bnRMb2dpY2FsSGVpZ2h0ICs9IG92ZXJmbG93OwotICAgICAgICAgICAgfSBlbHNlIGlmICh2ZXJ0
aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246OlRvcCkKLSAgICAgICAgICAgICAgICBjb250ZW50
TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGNvbnRlbnRMb2dpY2FsSGVpZ2h0LCBpbmxpbmVMZXZl
bEJveC0+bG9naWNhbEhlaWdodCgpKTsKLSAgICAgICAgfQorICAgIGF1dG8gYWRqdXN0Um9vdElu
bGluZUJveFZlcnRpY2FsUG9zaXRpb24gPSBbJl0geworICAgICAgICBpZiAobWluaW11bUlubGlu
ZUJveFJlbGF0aXZlTG9naWNhbFRvcCA+PSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3AoLW1pbmltdW1JbmxpbmVCb3hSZWxhdGl2ZUxv
Z2ljYWxUb3ApOwogICAgIH07Ci0gICAgYWxpZ25Sb290SW5saW5lQm94KCk7Ci0KLSAgICBmb3Ig
KGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygp
KSB7Ci0gICAgICAgIGF1dG8gaW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0
VW5pdCB7IH07Ci0gICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVsQm94LT5sYXlv
dXRCb3goKTsKLSAgICAgICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVM
ZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gucGFyZW50KCkpOwotICAgICAgICBBU1NFUlQo
cGFyZW50SW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgICAgICBzd2l0Y2ggKGxheW91dEJv
eC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKSkgewotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246
OkJhc2VsaW5lOgotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gaW5s
aW5lTGV2ZWxCb3gtPmJhc2VsaW5lKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpUZXh0VG9wOgotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hMb2dp
Y2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5i
YXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOiB7
Ci0gICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsQm90dG9tID0gcGFyZW50SW5saW5l
Qm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsgcGFyZW50SW5s
aW5lQm94LmZvbnRNZXRyaWNzKCkuZGVzY2VudCgpOwotICAgICAgICAgICAgaW5saW5lTGV2ZWxC
b3hMb2dpY2FsVG9wID0gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gLSBpbmxpbmVMZXZlbEJveC0+
bG9naWNhbEhlaWdodCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
Y2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2lj
YWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94
TG9naWNhbFRvcCA9IGNvbnRlbnRMb2dpY2FsSGVpZ2h0IC0gaW5saW5lTGV2ZWxCb3gtPmxvZ2lj
YWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246Ok1pZGRsZToKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9naWNhbFRvcCA9IHBhcmVu
dElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIChp
bmxpbmVMZXZlbEJveC0+bG9naWNhbEhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJveC5mb250
TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRl
ZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAgICAg
ICAgICAgYnJlYWs7CisgICAgYWRqdXN0Um9vdElubGluZUJveFZlcnRpY2FsUG9zaXRpb24oKTsK
KworICAgIGF1dG8gYWxpZ25MaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzID0gWyZdIHsK
KyAgICAgICAgZm9yIChhdXRvKiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2ZUlubGlu
ZUxldmVsQm94ZXMpIHsKKyAgICAgICAgICAgIGF1dG8mIGxheW91dEJveCA9IGlubGluZUxldmVs
Qm94LT5sYXlvdXRCb3goKTsKKyAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbm1lbnQgPSBs
YXlvdXRCb3guc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgICAgICAgICBhdXRvIGxvZ2lj
YWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIGF1dG8gcm9vdElubGlu
ZUJveE9mZnNldCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgc3dpdGNoICh2
ZXJ0aWNhbEFsaWdubWVudCkgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6
CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHsgfTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgorICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBsaW5lQm94TG9naWNhbEhlaWdodCAtIGlubGluZUxldmVsQm94LT5s
YXlvdXRCb3VuZHMoKS5oZWlnaHQoKTsKKyAgICAgICAgICAgICAgICByb290SW5saW5lQm94T2Zm
c2V0ID0gaW5saW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgpIC0gaW5saW5lQm94
UmVsYXRpdmVMb2dpY2FsSGVpZ2h0OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5s
aW5lTGV2ZWxCb3gtPnNldExvZ2ljYWxUb3AobG9naWNhbFRvcCk7CisgICAgICAgICAgICBpZiAo
cm9vdElubGluZUJveE9mZnNldCA+IDApCisgICAgICAgICAgICAgICAgcm9vdElubGluZUJveC5z
ZXRMb2dpY2FsVG9wKHJvb3RJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgcm9vdElubGluZUJveE9m
ZnNldCk7CiAgICAgICAgIH0KLSAgICAgICAgaW5saW5lTGV2ZWxCb3gtPnNldExvZ2ljYWxUb3Ao
aW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9wKTsKLSAgICB9Ci0gICAgaWYgKCFsaW5lQm94LmlzTGlu
ZVZpc3VhbGx5RW1wdHkoKSkKLSAgICAgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGNvbnRl
bnRMb2dpY2FsSGVpZ2h0KTsKKyAgICB9OworICAgIGFsaWduTGluZUJveFJlbGF0aXZlSW5saW5l
TGV2ZWxCb3hlcygpOworICAgIGxpbmVCb3guc2V0TG9naWNhbEhlaWdodChsaW5lQm94TG9naWNh
bEhlaWdodCk7CiB9CiAKIExpbmVCb3ggSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5
OjpsaW5lQm94Rm9yTGluZUNvbnRlbnQoY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBs
aW5lQ29udGVudCkKQEAgLTM5Niw3ICszOTUsNyBAQCBMaW5lQm94IElubGluZUZvcm1hdHRpbmdD
b250ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZAog
ICAgIHJldHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChsaW5l
Q29udGVudCk7CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TGluZVJl
Y3RBbmRMaW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29t
cHV0ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgUmVuZGVy
U3R5bGUmIHJvb3RTdHlsZSwgY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29u
dGVudCkgY29uc3QKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TGluZVJlY3RB
bmRMaW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0
ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgUmVuZGVyU3R5
bGUmLCBjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KSBjb25zdAog
ewogICAgIC8vIENvbXB1dGUgdGhlIGxpbmUgaGVpZ2h0IGFuZCB0aGUgbGluZSBib3ggdmVydGlj
YWwgb2Zmc2V0LgogICAgIC8vIFRoZSBsaW5lIGhlaWdodCBpcyBlaXRoZXIgdGhlIGxpbmUtaGVp
Z2h0IHZhbHVlIChuZWdhdGl2ZSB2YWx1ZSBtZWFucyBsaW5lIGhlaWdodCBpcyBub3Qgc2V0KSBv
ciB0aGUgZm9udCBtZXRyaWNzJ3MgbGluZSBzcGFjaW5nL2xpbmUgYm94IGhlaWdodC4KQEAgLTQx
OCwyNSArNDE3LDcgQEAgSW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5OjpMaW5lUmVj
dEFuZExpbmVCb3hPZmZzZXQgSW5saW5lRm9ybWF0dGluZ0NvbnQKICAgICAgICAgcmV0dXJuIHsg
eyB9LCB7IGxpbmVDb250ZW50LmxvZ2ljYWxUb3BMZWZ0LCBsaW5lQ29udGVudC5saW5lTG9naWNh
bFdpZHRoLCB7IH0gfSB9OwogCiAgICAgYXV0byBsaW5lQm94TG9naWNhbEhlaWdodCA9IGxpbmVC
b3gubG9naWNhbEhlaWdodCgpOwotICAgIGF1dG8gbGluZUxvZ2ljYWxIZWlnaHQgPSBJbmxpbmVM
YXlvdXRVbml0IHsgfTsKLSAgICBpZiAocm9vdFN0eWxlLmxpbmVIZWlnaHQoKS5pc05lZ2F0aXZl
KCkpIHsKLSAgICAgICAgLy8gTmVnYXRpdmUgbGluZSBoZWlnaHQgdmFsdWUgbWVhbnMgdGhlIGxp
bmUgaGVpZ2h0IGlzIGRyaXZlbiBieSB0aGUgY29udGVudC4KLSAgICAgICAgYXV0byB1c2VkTGlu
ZVNwYWNpbmcgPSBbJl0gewotICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wV2l0aExpbmVTcGFj
aW5nID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxCb3R0
b21XaXRoTGluZVNwYWNpbmcgPSBsaW5lQm94TG9naWNhbEhlaWdodDsKLSAgICAgICAgICAgIGZv
ciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94LmlubGluZUxldmVsQm94TGlzdCgpKSB7
Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8gbGluZVNwYWNpbmcgPSBpbmxpbmVMZXZlbEJveC0+
bGluZVNwYWNpbmcoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogY2hlY2sgaWYg
bGluZSBzcGFjaW5nIGlzIGRpc3RyaWJ1dGVkIGV2ZW5seS4KLSAgICAgICAgICAgICAgICAgICAg
bG9naWNhbFRvcFdpdGhMaW5lU3BhY2luZyA9IHN0ZDo6bWluKGxvZ2ljYWxUb3BXaXRoTGluZVNw
YWNpbmcsIGlubGluZUxldmVsQm94LT5sb2dpY2FsVG9wKCkgLSAqbGluZVNwYWNpbmcgLyAyKTsK
LSAgICAgICAgICAgICAgICAgICAgbG9naWNhbEJvdHRvbVdpdGhMaW5lU3BhY2luZyA9IHN0ZDo6
bWF4KGxvZ2ljYWxCb3R0b21XaXRoTGluZVNwYWNpbmcsIGlubGluZUxldmVsQm94LT5sb2dpY2Fs
Qm90dG9tKCkgKyAqbGluZVNwYWNpbmcgLyAyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gLWxvZ2ljYWxUb3BXaXRoTGluZVNwYWNpbmcgKyAo
bG9naWNhbEJvdHRvbVdpdGhMaW5lU3BhY2luZyAtIGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsKLSAg
ICAgICAgfTsKLSAgICAgICAgbGluZUxvZ2ljYWxIZWlnaHQgPSBsaW5lQm94LmxvZ2ljYWxIZWln
aHQoKSArIHVzZWRMaW5lU3BhY2luZygpOwotICAgIH0gZWxzZQotICAgICAgICBsaW5lTG9naWNh
bEhlaWdodCA9IHJvb3RTdHlsZS5jb21wdXRlZExpbmVIZWlnaHQoKTsKLQorICAgIGF1dG8gbGlu
ZUxvZ2ljYWxIZWlnaHQgPSBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKICAgICBhdXRvIGxvZ2lj
YWxSZWN0ID0gSW5saW5lUmVjdCB7IGxpbmVDb250ZW50LmxvZ2ljYWxUb3BMZWZ0LCBsaW5lQ29u
dGVudC5saW5lTG9naWNhbFdpZHRoLCBsaW5lTG9naWNhbEhlaWdodH07CiAgICAgLy8gSW5saW5l
IHRyZWUgaGVpZ2h0IGlzIGFsbCBpbnRlZ2VyIGJhc2VkLgogICAgIGF1dG8gbGluZUJveE9mZnNl
dCA9IGZsb29yZigobGluZUxvZ2ljYWxIZWlnaHQgLSBsaW5lQm94TG9naWNhbEhlaWdodCkgLyAy
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lu
bGluZUxpbmVCb3guY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcv
SW5saW5lTGluZUJveC5jcHAKaW5kZXggZGE2N2NhZDI4MWFkNTZkODdhM2QzZjA5NDdlMDlhZTE4
MDk4N2Y4ZS4uNTg3MWI4YmU2YWNiMTlkMmQ2Y2RkNDlkYThhN2ViMTliMjQzMTk1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJv
eC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5l
TGluZUJveC5jcHAKQEAgLTYwLDE0ICs2MCw0MCBAQCB2b2lkIExpbmVCb3g6OmFkZElubGluZUxl
dmVsQm94KHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVMZXZlbEJveD4mJiBpbmxpbmVMZXZlbEJveAog
SW5saW5lUmVjdCBMaW5lQm94Ojpsb2dpY2FsUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6UnVu
JiBydW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNMaW5lQnJl
YWsoKSk7Ci0gICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5lTGV2ZWxCb3hGb3JMYXlv
dXRCb3gocnVuLmxheW91dEJveCgpLnBhcmVudCgpKTsKLSAgICBBU1NFUlQocGFyZW50SW5saW5l
Qm94LmlzSW5saW5lQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNzID0gcGFyZW50SW5saW5l
Qm94LmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBydW5sb2dpY2FsVG9wID0gcGFyZW50SW5saW5l
Qm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gZm9udE1ldHJp
Y3MuYXNjZW50KCk7CisgICAgYXV0byogcGFyZW50SW5saW5lQm94ID0gJmlubGluZUxldmVsQm94
Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSk7CisgICAgQVNTRVJUKHBhcmVu
dElubGluZUJveC0+aXNJbmxpbmVCb3goKSk7CisgICAgYXV0byYgZm9udE1ldHJpY3MgPSBwYXJl
bnRJbmxpbmVCb3gtPmZvbnRNZXRyaWNzKCk7CisgICAgYXV0byBydW5sb2dpY2FsVG9wID0gcGFy
ZW50SW5saW5lQm94LT5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3gtPmJhc2VsaW5lKCkg
LSBmb250TWV0cmljcy5hc2NlbnQoKTsKKworICAgIGF1dG8gaXNMaW5lQm94UmVsYXRpdmVBbGln
bm1lbnQgPSBbXSAoY29uc3QgYXV0byYgdmVydGljYWxBbGlnbm1lbnQpIHsKKyAgICAgICAgcmV0
dXJuIHZlcnRpY2FsQWxpZ25tZW50ID09IFZlcnRpY2FsQWxpZ246OlRvcCB8fCB2ZXJ0aWNhbEFs
aWdubWVudCA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b207CisgICAgfTsKKyAgICB3aGlsZSAocGFy
ZW50SW5saW5lQm94ICE9IG1fcm9vdElubGluZUJveC5nZXQoKSAmJiAhaXNMaW5lQm94UmVsYXRp
dmVBbGlnbm1lbnQocGFyZW50SW5saW5lQm94LT5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2Fs
QWxpZ24oKSkpIHsKKyAgICAgICAgcGFyZW50SW5saW5lQm94ID0gJmlubGluZUxldmVsQm94Rm9y
TGF5b3V0Qm94KHBhcmVudElubGluZUJveC0+bGF5b3V0Qm94KCkucGFyZW50KCkpOworICAgICAg
ICBBU1NFUlQocGFyZW50SW5saW5lQm94LT5pc0lubGluZUJveCgpKTsKKyAgICAgICAgcnVubG9n
aWNhbFRvcCArPSBwYXJlbnRJbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKTsKKyAgICB9CiAgICAgSW5s
aW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7CiAgICAg
cmV0dXJuIHsgcnVubG9naWNhbFRvcCwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVl
T3IoSW5saW5lTGF5b3V0VW5pdCB7IH0pICsgcnVuLmxvZ2ljYWxMZWZ0KCksIHJ1bi5sb2dpY2Fs
V2lkdGgoKSwgbG9naWNhbEhlaWdodCB9OwogfQogCitJbmxpbmVSZWN0IExpbmVCb3g6OmxvZ2lj
YWxSZWN0Rm9ySW5saW5lTGV2ZWxCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0Cit7Cisg
ICAgYXV0byogaW5saW5lQm94ID0gJmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJv
eCk7CisgICAgYXV0byBpbmxpbmVCb3hMb2dpY2FsUmVjdCA9IGlubGluZUJveC0+bG9naWNhbFJl
Y3QoKTsKKyAgICBhdXRvIGlubGluZUJveEFic29sdXRlbG9naWNhbFRvcCA9IGlubGluZUJveC0+
bG9naWNhbFRvcCgpOworCisgICAgYXV0byBpc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCA9IFtd
IChjb25zdCBhdXRvJiB2ZXJ0aWNhbEFsaWdubWVudCkgeworICAgICAgICByZXR1cm4gdmVydGlj
YWxBbGlnbm1lbnQgPT0gVmVydGljYWxBbGlnbjo6VG9wIHx8IHZlcnRpY2FsQWxpZ25tZW50ID09
IFZlcnRpY2FsQWxpZ246OkJvdHRvbTsKKyAgICB9OworICAgIHdoaWxlIChpbmxpbmVCb3ggIT0g
bV9yb290SW5saW5lQm94LmdldCgpICYmICFpc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudChpbmxp
bmVCb3gtPmxheW91dEJveCgpLnN0eWxlKCkudmVydGljYWxBbGlnbigpKSkgeworICAgICAgICBp
bmxpbmVCb3ggPSAmaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3goaW5saW5lQm94LT5sYXlvdXRC
b3goKS5wYXJlbnQoKSk7CisgICAgICAgIEFTU0VSVChpbmxpbmVCb3gtPmlzSW5saW5lQm94KCkp
OworICAgICAgICBpbmxpbmVCb3hBYnNvbHV0ZWxvZ2ljYWxUb3AgKz0gaW5saW5lQm94LT5sb2dp
Y2FsVG9wKCk7CisgICAgfQorICAgIHJldHVybiB7IGlubGluZUJveEFic29sdXRlbG9naWNhbFRv
cCwgbV9ob3Jpem9udGFsQWxpZ25tZW50T2Zmc2V0LnZhbHVlT3IoSW5saW5lTGF5b3V0VW5pdCB7
IH0pICsgaW5saW5lQm94TG9naWNhbFJlY3QubGVmdCgpLCBpbmxpbmVCb3hMb2dpY2FsUmVjdC53
aWR0aCgpLCBpbmxpbmVCb3hMb2dpY2FsUmVjdC5oZWlnaHQoKSB9OworfQorCiB9CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCb3guaCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxp
bmVCb3guaAppbmRleCAxM2M5NDYxYTFmNTNkZWM2NjYxNWE1MDRlMzViYTIxMWJkYTAzNDk2Li43
ZjBjOGRkODM2MTE5YWU4NWY3MjMwNGY2YmI0MDRhNDZkODUyMjJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCkBA
IC03OSw3ICs3OSw2IEBAIHB1YmxpYzoKICAgICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0VtcHR5OyB9CiAgICAgICAgIHZvaWQgc2V0SXNOb25FbXB0eSgpIHsgbV9pc0Vt
cHR5ID0gZmFsc2U7IH0KIAotICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBsaW5l
U3BhY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZVNwYWNpbmc7IH0KICAgICAgICAgY29uc3Qg
Rm9udE1ldHJpY3MmIGZvbnRNZXRyaWNzKCkgY29uc3QgeyByZXR1cm4gbGF5b3V0Qm94KCkuc3R5
bGUoKS5mb250TWV0cmljcygpOyB9CiAgICAgICAgIGNvbnN0IEJveCYgbGF5b3V0Qm94KCkgY29u
c3QgeyByZXR1cm4gKm1fbGF5b3V0Qm94OyB9CiAKQEAgLTEwNCwxNCArMTAzLDIyIEBAIHB1Ymxp
YzoKICAgICAgICAgdm9pZCBzZXRMb2dpY2FsSGVpZ2h0KElubGluZUxheW91dFVuaXQgbG9naWNh
bEhlaWdodCkgeyBtX2xvZ2ljYWxSZWN0LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQogICAg
ICAgICB2b2lkIHNldEJhc2VsaW5lKElubGluZUxheW91dFVuaXQgYmFzZWxpbmUpIHsgbV9iYXNl
bGluZSA9IGJhc2VsaW5lOyB9CiAgICAgICAgIHZvaWQgc2V0RGVzY2VudChJbmxpbmVMYXlvdXRV
bml0IGRlc2NlbnQpIHsgbV9kZXNjZW50ID0gZGVzY2VudDsgfQotICAgICAgICB2b2lkIHNldExp
bmVTcGFjaW5nKElubGluZUxheW91dFVuaXQgbGluZVNwYWNpbmcpIHsgbV9saW5lU3BhY2luZyA9
IGxpbmVTcGFjaW5nOyB9CisKKyAgICAgICAgc3RydWN0IExheW91dEJvdW5kcyB7CisgICAgICAg
ICAgICBJbmxpbmVMYXlvdXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRl
c2NlbnQ7IH0KKworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgeyAwIH07Cisg
ICAgICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgeyAwIH07CisgICAgICAgIH07Cisg
ICAgICAgIHZvaWQgc2V0TGF5b3V0Qm91bmRzKGNvbnN0IExheW91dEJvdW5kcyYgbGF5b3V0Qm91
bmRzKSB7IG1fbGF5b3V0Qm91bmRzID0gbGF5b3V0Qm91bmRzOyB9CisgICAgICAgIExheW91dEJv
dW5kcyBsYXlvdXRCb3VuZHMoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJvdW5kczsgfQogCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgV2Vha1B0cjxjb25zdCBCb3g+IG1fbGF5b3V0Qm94OwogICAg
ICAgICBJbmxpbmVSZWN0IG1fbG9naWNhbFJlY3Q7CisgICAgICAgIExheW91dEJvdW5kcyBtX2xh
eW91dEJvdW5kczsKICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2Jhc2VsaW5lIHsgMCB9Owog
ICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBtX2Rlc2NlbnQ7Ci0gICAgICAgIE9w
dGlvbmFsPElubGluZUxheW91dFVuaXQ+IG1fbGluZVNwYWNpbmc7CiAgICAgICAgIGJvb2wgbV9p
c0VtcHR5IHsgdHJ1ZSB9OwogICAgICAgICBUeXBlIG1fdHlwZSB7IFR5cGU6OklubGluZUJveCB9
OwogICAgIH07CkBAIC0xMjcsNyArMTM0LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGluZVZp
c3VhbGx5RW1wdHkoKSBjb25zdCB7IHJldHVybiBtX2lzTGluZVZpc3VhbGx5RW1wdHk7IH0KIAog
ICAgIGNvbnN0IElubGluZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveEZvckxheW91dEJveChjb25z
dCBCb3gmIGxheW91dEJveCkgY29uc3QgeyByZXR1cm4gKm1faW5saW5lTGV2ZWxCb3hSZWN0TWFw
LmdldCgmbGF5b3V0Qm94KTsgfQorCiAgICAgSW5saW5lUmVjdCBsb2dpY2FsUmVjdEZvclRleHRS
dW4oY29uc3QgTGluZTo6UnVuJikgY29uc3Q7CisgICAgSW5saW5lUmVjdCBsb2dpY2FsUmVjdEZv
cklubGluZUxldmVsQm94KGNvbnN0IEJveCYpIGNvbnN0OworCiAgICAgYXV0byBpbmxpbmVMZXZl
bEJveExpc3QoKSBjb25zdCB7IHJldHVybiBtX2lubGluZUxldmVsQm94UmVjdE1hcC52YWx1ZXMo
KTsgfQogICAgIGJvb2wgY29udGFpbnNJbmxpbmVMZXZlbEJveChjb25zdCBCb3gmIGxheW91dEJv
eCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVMZXZlbEJveFJlY3RNYXAuY29udGFpbnMoJmxheW91
dEJveCk7IH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411611</attachid>
            <date>2020-10-16 14:00:15 -0700</date>
            <delta_ts>2020-10-17 05:38:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217832-20201016140014.patch</filename>
            <type>text/plain</type>
            <size>30525</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NTk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzMxN2YyMDc5ZjgzNzkw
ZDY2NmJkMTE0MmM5NDIyMzk2OTFiMDUwNi4uMjBjYTAwZjQzMGVkZjNlYTgxYmQ2YTgwNjFmMTZj
OWJlZjdlMjU0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDIwLTEwLTE2ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBJbnRyb2R1
Y2UgbGF5b3V0IGJvdW5kcyBiYXNlZCB2ZXJ0aWNhbCBhbGlnbm1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzgzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdJUC4gRVdTIHRlc3RpbmcuCisKKyAg
ICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpj
b21wdXRlR2VvbWV0cnlGb3JMaW5lQ29udGVudCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZv
cm1hdHRpbmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3Jl
OjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjpzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbnN0
cnVjdElubGluZUxldmVsQm94ZXMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
QnVpbGRlcjo6YWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRl
eHQ6Okdlb21ldHJ5Ojpjb21wdXRlZExpbmVMb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVyOjphZGp1c3RJbmxpbmVCb3hlc0xvZ2ljYWxI
ZWlnaHQpOiBEZWxldGVkLgorICAgICAgICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUxpbmVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2Fs
UmVjdEZvclRleHRSdW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94
Ojpsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRCb3VuZHM6OmhlaWdodCBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUxldmVsQm94OjpzZXRM
YXlvdXRCb3VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVM
ZXZlbEJveDo6bGF5b3V0Qm91bmRzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmxpbmVTcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OnNldExpbmVT
cGFjaW5nKTogRGVsZXRlZC4KKwogMjAyMC0xMC0xNiAgWW91ZW5uIEZhYmxldCAgPHlvdWVubkBh
cHBsZS5jb20+CiAKICAgICAgICAgc2RwRm10TGluZSBzaG91bGQgYmUgbWlzc2luZyBmcm9tIFJU
Q1J0cENvZGVjQ2FwYWJpbGl0eSBpbnN0ZWFkIG9mIGJlaW5nIGFuIGVtcHR5IHN0cmluZwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9y
bWF0dGluZ0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRp
bmcvSW5saW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDI4YjU0NjNiYmE0OTU5MTUzNzAw
ODBkZjdlMTQ0YmU5OWQ2OGZhODkuLjg1YjcxYzdjNTM0NGExMzFmZGZlOWY1YjJhOTM2NTY5NTRl
ZGYxMmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTQ0MSw3ICs0
NDEsNyBAQCBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0
cnlGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbAogICAgICAgICAgICAgaWYgKGxpbmVSdW4u
aXNUZXh0KCkgfHwgbGluZVJ1bi5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAgICAgIGZvcm1h
dHRpbmdTdGF0ZS5hZGRMaW5lUnVuKHsgbGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBs
aW5lQm94LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSwgbGluZVJ1bi5leHBhbnNpb24o
KSwgbGluZVJ1bi50ZXh0Q29udGVudCgpIH0pOwogICAgICAgICAgICAgZWxzZSBpZiAobGluZVJ1
bi5pc0JveCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRMaW5lUnVuKHsg
bGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBsaW5lQm94LmlubGluZUxldmVsQm94Rm9y
TGF5b3V0Qm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLmxvZ2ljYWxSZWN0KCksIGxpbmVSdW4uZXhw
YW5zaW9uKCksIHsgfSB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGlu
ZVJ1bih7IGxpbmVJbmRleCwgbGluZVJ1bi5sYXlvdXRCb3goKSwgbGluZUJveC5sb2dpY2FsUmVj
dEZvcklubGluZUxldmVsQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLCBsaW5lUnVuLmV4cGFuc2lv
bigpLCB7IH0gfSk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGNvbnN0cnVjdExpbmVSdW5zKCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9Jbmxp
bmVGb3JtYXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4
IGQ0NjdlMTJlMTZhYTM5NTVmZjg4NWNjNDlhYTMxY2ExNGQyOGZlYzEuLjdlNDliNDUzNDBkYmNh
NWQ3MGIwMmU4MGYxYWEyNDA4MjQyZGUxOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xh
eW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1h
dHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCkBAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgdm9pZCBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6Oklu
bGluZUxldmVsQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb25zdHJ1Y3RJbmxpbmVMZXZlbEJveGVz
KExpbmVCb3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7Ci0gICAgdm9pZCBhZGp1c3RJbmxpbmVC
b3hlc0xvZ2ljYWxIZWlnaHQoTGluZUJveCYpOwogICAgIHZvaWQgYWxpZ25JbmxpbmVMZXZlbEJv
eGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KExpbmVCb3gmKTsKIAogICAgIGNv
bnN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTE2MCw3ICsxNTksNiBAQCBM
aW5lQm94IExpbmVCb3hCdWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRl
bnQmIGxpbmVDb250ZW50KQogICAgIGlmIChhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQg
PSBMYXlvdXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxl
KCkudGV4dEFsaWduKCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxp
bmVDb250ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkpCiAgICAgICAgIGxpbmVCb3gu
c2V0SG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCgqaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCk7
CiAgICAgY29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKLSAgICBhZGp1
c3RJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQobGluZUJveCk7CiAgICAgYWxpZ25JbmxpbmVMZXZl
bEJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KGxpbmVCb3gpOwogICAgIHJl
dHVybiBsaW5lQm94OwogfQpAQCAtMTcwLDE0ICsxNjgsMzMgQEAgdm9pZCBMaW5lQm94QnVpbGRl
cjo6c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJv
eCYgaW4KICAgICBBU1NFUlQoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVM
ZXZlbEJveC5pc0xpbmVCcmVha0JveCgpKTsKICAgICBhdXRvJiBmb250TWV0cmljcyA9IGlubGlu
ZUxldmVsQm94LmZvbnRNZXRyaWNzKCk7CiAgICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVp
Z2h0ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGlu
ZSA9IGZvbnRNZXRyaWNzLmFzY2VudCgpOwotCisgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQg
PSBmb250TWV0cmljcy5hc2NlbnQoKTsKKyAgICBJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQgPSBm
b250TWV0cmljcy5kZXNjZW50KCk7CisKKyAgICAvLyBGSVhNRTogQWRqdXN0IGxheW91dCBib3Vu
ZHMgd2l0aCBmYWxsYmFjayBmb250IHdoZW4gYXBwbGljYWJsZS4KKyAgICBhdXRvJiBzdHlsZSA9
IGlubGluZUxldmVsQm94LmxheW91dEJveCgpLnN0eWxlKCk7CisgICAgYXV0byBsaW5lSGVpZ2h0
ID0gc3R5bGUubGluZUhlaWdodCgpOworICAgIGlmIChsaW5lSGVpZ2h0LmlzTmVnYXRpdmUoKSkg
eworICAgICAgICAvLyBJZiBsaW5lLWhlaWdodCBjb21wdXRlcyB0byBub3JtYWwgYW5kIGVpdGhl
ciB0ZXh0LWVkZ2UgaXMgbGVhZGluZyBvciB0aGlzIGlzIHRoZSByb290IGlubGluZSBib3gsCisg
ICAgICAgIC8vIHRoZSBmb2504oCZcyBsaW5lIGdhcCBtZXRyaWMgbWF5IGFsc28gYmUgaW5jb3Jw
b3JhdGVkIGludG8gQSBhbmQgRCBieSBhZGRpbmcgaGFsZiB0byBlYWNoIHNpZGUgYXMgaGFsZi1s
ZWFkaW5nLgorICAgICAgICBhdXRvIGxpbmVTcGFjaW5nID0gJmlubGluZUxldmVsQm94LmxheW91
dEJveCgpID09ICZyb290Qm94KCkgPyBmb250TWV0cmljcy5saW5lU3BhY2luZygpIC0gbG9naWNh
bEhlaWdodCA6IElubGluZUxheW91dFVuaXQoKTsKKyAgICAgICAgYXNjZW50ICs9IGxpbmVTcGFj
aW5nIC8gMjsKKyAgICAgICAgZGVzY2VudCArPSBsaW5lU3BhY2luZyAvIDI7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBsaW5lSGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRM
aW5lSGVpZ2h0KCk7CisgICAgICAgIElubGluZUxheW91dFVuaXQgaGFsZkxlYWRpbmcgPSAobGlu
ZUhlaWdodCAtIChhc2NlbnQgKyBkZXNjZW50KSkgLyAyOworICAgICAgICBhc2NlbnQgKz0gaGFs
ZkxlYWRpbmc7CisgICAgICAgIGRlc2NlbnQgKz0gaGFsZkxlYWRpbmc7CisgICAgfQorICAgIC8v
IFdlIG5lZWQgdGhpcyB0byBtYXRjaCBsZWdhY3kgbGF5b3V0IGludGVncmFsIHBvc2l0aW9uaW5n
LgorICAgIGFzY2VudCA9IGZsb29yZihhc2NlbnQpOworICAgIGRlc2NlbnQgPSBjZWlsKGRlc2Nl
bnQpOworCisgICAgaW5saW5lTGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGlu
ZUxldmVsQm94OjpMYXlvdXRCb3VuZHMgeyBhc2NlbnQsIGRlc2NlbnQgfSk7CisgICAgaW5saW5l
TGV2ZWxCb3guc2V0QmFzZWxpbmUoYXNjZW50KTsKKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCBp
ZiBuZWVlZCBkZXNjZW50IGF0IGFsbCBoZXJlLgorICAgIGlubGluZUxldmVsQm94LnNldERlc2Nl
bnQoZGVzY2VudCk7CiAgICAgaW5saW5lTGV2ZWxCb3guc2V0TG9naWNhbEhlaWdodChsb2dpY2Fs
SGVpZ2h0KTsKLSAgICBpbmxpbmVMZXZlbEJveC5zZXRCYXNlbGluZShiYXNlbGluZSk7Ci0gICAg
aW5saW5lTGV2ZWxCb3guc2V0RGVzY2VudChsb2dpY2FsSGVpZ2h0IC0gYmFzZWxpbmUpOwotICAg
IGlmIChhdXRvIGxpbmVTcGFjaW5nID0gZm9udE1ldHJpY3MubGluZVNwYWNpbmcoKSAtIGxvZ2lj
YWxIZWlnaHQpCi0gICAgICAgIGlubGluZUxldmVsQm94LnNldExpbmVTcGFjaW5nKGxpbmVTcGFj
aW5nKTsKLSAgICBpbmxpbmVMZXZlbEJveC5zZXRJc05vbkVtcHR5KCk7CiB9CiAKIHZvaWQgTGlu
ZUJveEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwg
Y29uc3QgTGluZTo6UnVuTGlzdCYgcnVucykKQEAgLTE4NiwxMSArMjAzLDEyIEBAIHZvaWQgTGlu
ZUJveEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwg
Y29uc3QgTGluZTo6UnVuCiAKICAgICBhdXRvIGNyZWF0ZVJvb3RJbmxpbmVCb3ggPSBbJl0gewog
ICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6Y3Jl
YXRlUm9vdElubGluZUJveChyb290Qm94KCksIGhvcml6b250YWxBbGlnbWVudE9mZnNldCwgbGlu
ZUJveC5sb2dpY2FsV2lkdGgoKSk7CisgICAgICAgIHNldFZlcnRpY2FsR2VvbWV0cnlGb3JJbmxp
bmVCb3goKnJvb3RJbmxpbmVCb3gpOwogCiAgICAgICAgIGF1dG8gbGluZUhhc0ltYWdpbmFyeVN0
cnV0ID0gIWxheW91dFN0YXRlKCkuaW5RdWlya3NNb2RlKCk7CiAgICAgICAgIGF1dG8gaXNJbml0
aWFsbHlDb25zaWRlcmVkTm9uRW1wdHkgPSAhbGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkg
JiYgbGluZUhhc0ltYWdpbmFyeVN0cnV0OwogICAgICAgICBpZiAoaXNJbml0aWFsbHlDb25zaWRl
cmVkTm9uRW1wdHkpCi0gICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94
KCpyb290SW5saW5lQm94KTsKKyAgICAgICAgICAgIHJvb3RJbmxpbmVCb3gtPnNldElzTm9uRW1w
dHkoKTsKICAgICAgICAgbGluZUJveC5hZGRSb290SW5saW5lQm94KFdURk1vdmUocm9vdElubGlu
ZUJveCkpOwogICAgIH07CiAgICAgY3JlYXRlUm9vdElubGluZUJveCgpOwpAQCAtMjQzLDI0ICsy
NjEsMjMgQEAgdm9pZCBMaW5lQm94QnVpbGRlcjo6Y29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhM
aW5lQm94JiBsaW5lQm94LCBjb25zdCBMaW5lOjpSdW4KICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgIGF1dG8gYXRvbWljSW5saW5lTGV2ZWxCb3ggPSBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6
Y3JlYXRlQXRvbWljSW5saW5lTGV2ZWxCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCwgeyBydW4u
bG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQgfSk7CiAgICAgICAgICAgICBhdG9taWNJbmxp
bmVMZXZlbEJveC0+c2V0QmFzZWxpbmUoYmFzZWxpbmUpOworICAgICAgICAgICAgYXRvbWljSW5s
aW5lTGV2ZWxCb3gtPnNldExheW91dEJvdW5kcyhMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6TGF5
b3V0Qm91bmRzIHsgYmFzZWxpbmUsIHsgfSB9KTsKICAgICAgICAgICAgIGlmIChsb2dpY2FsSGVp
Z2h0KQogICAgICAgICAgICAgICAgIGF0b21pY0lubGluZUxldmVsQm94LT5zZXRJc05vbkVtcHR5
KCk7CiAgICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KFdURk1vdmUoYXRvbWlj
SW5saW5lTGV2ZWxCb3gpKTsKICAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250YWluZXJTdGFy
dCgpKSB7CiAgICAgICAgICAgICBhdXRvIGluaXRpYWxMb2dpY2FsV2lkdGggPSBsaW5lQm94Lmxv
Z2ljYWxXaWR0aCgpIC0gcnVuLmxvZ2ljYWxMZWZ0KCk7CiAgICAgICAgICAgICBBU1NFUlQoaW5p
dGlhbExvZ2ljYWxXaWR0aCA+PSAwKTsKLSAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2
ZWxCb3goTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUlubGluZUJveChsYXlvdXRCb3gs
IGxvZ2ljYWxMZWZ0LCBpbml0aWFsTG9naWNhbFdpZHRoKSk7CisgICAgICAgICAgICBhdXRvIGlu
bGluZUJveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5b3V0
Qm94LCBsb2dpY2FsTGVmdCwgaW5pdGlhbExvZ2ljYWxXaWR0aCk7CisgICAgICAgICAgICBzZXRW
ZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KCppbmxpbmVCb3gpOworICAgICAgICAgICAgbGlu
ZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGlubGluZUJveCkpOwogICAgICAgICB9IGVs
c2UgaWYgKHJ1bi5pc0NvbnRhaW5lckVuZCgpKSB7CiAgICAgICAgICAgICAvLyBBZGp1c3QgdGhl
IGxvZ2ljYWwgd2lkdGggd2hlbiB0aGUgaW5saW5lIGxldmVsIGNvbnRhaW5lciBjbG9zZXMgb24g
dGhpcyBsaW5lLgogICAgICAgICAgICAgYXV0byYgaW5saW5lQm94ID0gbGluZUJveC5pbmxpbmVM
ZXZlbEJveEZvckxheW91dEJveChsYXlvdXRCb3gpOwogICAgICAgICAgICAgQVNTRVJUKGlubGlu
ZUJveC5pc0lubGluZUJveCgpKTsKICAgICAgICAgICAgIGlubGluZUJveC5zZXRMb2dpY2FsV2lk
dGgocnVuLmxvZ2ljYWxSaWdodCgpIC0gaW5saW5lQm94LmxvZ2ljYWxMZWZ0KCkpOwogICAgICAg
ICB9IGVsc2UgaWYgKHJ1bi5pc1RleHQoKSB8fCBydW4uaXNTb2Z0TGluZUJyZWFrKCkpIHsKLSAg
ICAgICAgICAgIGF1dG8mIHBhcmVudEJveCA9IGxheW91dEJveC5wYXJlbnQoKTsKLSAgICAgICAg
ICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9ICZwYXJlbnRCb3ggPT0gJnJvb3RCb3goKSA/IGxp
bmVCb3gucm9vdElubGluZUJveCgpIDogbGluZUJveC5pbmxpbmVMZXZlbEJveEZvckxheW91dEJv
eChwYXJlbnRCb3gpOwogICAgICAgICAgICAgLy8gRklYTUU6IEFkanVzdCBub24tZW1wdHkgaW5s
aW5lIGJveCBoZWlnaHQgd2hlbiBnbHlwaHMgZnJvbSB0aGUgbm9uLXByaW1hcnkgZm9udCBzdHJl
dGNoIHRoZSBib3guCi0gICAgICAgICAgICBpZiAocGFyZW50SW5saW5lQm94LmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KHBhcmVudElu
bGluZUJveCk7CiAgICAgICAgIH0gZWxzZSBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CiAg
ICAgICAgICAgICBhdXRvIGxpbmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94Ojpj
cmVhdGVMaW5lQnJlYWtCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICBz
ZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KCpsaW5lQnJlYWtCb3gpOwpAQCAtMjcyLDEy
NCArMjg5LDEwNyBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RJbmxpbmVMZXZlbEJv
eGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bgogICAgIH0KIH0KIAotdm9pZCBM
aW5lQm94QnVpbGRlcjo6YWRqdXN0SW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KExpbmVCb3gmIGxp
bmVCb3gpCit2b2lkIExpbmVCb3hCdWlsZGVyOjphbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNh
bGx5QW5kQ29tcHV0ZUxpbmVCb3hIZWlnaHQoTGluZUJveCYgbGluZUJveCkKIHsKLSAgICAvLyBC
eSB0cmF2ZXJzaW5nIHRoZSBpbmxpbmUgYm94IGxpc3QgYmFja3dhcmRzLCBpdCdzIGd1YXJhbnRl
ZWQgdGhhdCBkZXNjZW5kYW50IGlubGluZSBib3hlcyBhcmUgc2l6ZWQgZmlyc3QuCi0gICAgZm9y
IChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobGluZUJveC5u
b25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSkgewotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gt
PmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOworICAgIGF1dG8gaXNMaW5lQm94UmVs
YXRpdmVBbGlnbm1lbnQgPSBbXSAoY29uc3QgYXV0byYgdmVydGljYWxBbGlnbm1lbnQpIHsKKyAg
ICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ25tZW50ID09IFZlcnRpY2FsQWxpZ246OlRvcCB8fCB2
ZXJ0aWNhbEFsaWdubWVudCA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b207CisgICAgfTsKKyAgICBW
ZWN0b3I8TGluZUJveDo6SW5saW5lTGV2ZWxCb3gqPiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZl
bEJveGVzOworICAgIHN0cnVjdCBBYnNvbHV0ZVRvcEFuZEJvdHRvbSB7CisgICAgICAgIElubGlu
ZUxheW91dFVuaXQgdG9wIHsgMCB9OworICAgICAgICBJbmxpbmVMYXlvdXRVbml0IGJvdHRvbSB7
IDAgfTsKKyAgICB9OworICAgIEhhc2hNYXA8TGluZUJveDo6SW5saW5lTGV2ZWxCb3gqLCBBYnNv
bHV0ZVRvcEFuZEJvdHRvbT4gYWJzb2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tTWFwOworICAgIGF1
dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsKKyAgICBhYnNvbHV0
ZUxvZ2ljYWxUb3BBbmRCb3R0b21NYXAuYWRkKCZyb290SW5saW5lQm94LCBBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSB7IHsgfSwgcm9vdElubGluZUJveC5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSB9KTsK
IAotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm94KCk7
Ci0gICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hG
b3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICAgICAgQVNTRVJUKHBhcmVudElu
bGluZUJveC5pc0lubGluZUJveCgpKTsKLSAgICAgICAgc3dpdGNoIChsYXlvdXRCb3guc3R5bGUo
KS52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUb3A6Ci0g
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6Qm90dG9tOgotICAgICAgICAgICAgLy8gdG9wIGFu
ZCBib3R0b20gYWxpZ25tZW50cyBvbmx5IHN0cmV0Y2ggdGhlIGxpbmUgYm94LiBUaGV5IGRvbid0
IHN0cmV0Y2ggYW55IG9mIHRoZSBpbmxpbmUgYm94ZXMsIG5vdCBldmVuIHRoZSByb290IGlubGlu
ZSBib3guCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpU
ZXh0VG9wOiB7Ci0gICAgICAgICAgICBhdXRvIHBhcmVudFRleHRMb2dpY2FsVG9wID0gcGFyZW50
SW5saW5lQm94LmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxpbmVCb3guZm9udE1ldHJpY3MoKS5hc2Nl
bnQoKTsKLSAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHN0ZDo6
bWF4KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCksIHBhcmVudFRleHRMb2dpY2FsVG9w
ICsgaW5saW5lTGV2ZWxCb3gtPmxvZ2ljYWxIZWlnaHQoKSkpOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNlbGluZTogewotICAg
ICAgICAgICAgYXV0byBiYXNlbGluZU92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lTGV2
ZWxCb3gtPmJhc2VsaW5lKCkgLSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSk7Ci0gICAgICAg
ICAgICBpZiAoYmFzZWxpbmVPdmVyZmxvdykgewotICAgICAgICAgICAgICAgIHBhcmVudElubGlu
ZUJveC5zZXRCYXNlbGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIGJhc2VsaW5lT3Zl
cmZsb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0
KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBiYXNlbGluZU92ZXJmbG93KTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGF1dG8gcGFyZW50SW5saW5lQm94QmVsb3dCYXNlbGlu
ZSA9IHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgLSBwYXJlbnRJbmxpbmVCb3guYmFz
ZWxpbmUoKTsKLSAgICAgICAgICAgIGF1dG8gaW5saW5lQm94QmVsb3dCYXNlbGluZSA9IGlubGlu
ZUxldmVsQm94LT5sb2dpY2FsSGVpZ2h0KCkgLSBpbmxpbmVMZXZlbEJveC0+YmFzZWxpbmUoKTsK
LSAgICAgICAgICAgIGF1dG8gYmVsb3dCYXNlbGluZU92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwg
aW5saW5lQm94QmVsb3dCYXNlbGluZSAtIHBhcmVudElubGluZUJveEJlbG93QmFzZWxpbmUpOwot
ICAgICAgICAgICAgaWYgKGJlbG93QmFzZWxpbmVPdmVyZmxvdykKLSAgICAgICAgICAgICAgICBw
YXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhl
aWdodCgpICsgYmVsb3dCYXNlbGluZU92ZXJmbG93KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbTogewotICAgICAg
ICAgICAgYXV0byBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSA9IHBhcmVudElubGluZUJveC5iYXNl
bGluZSgpICsgcGFyZW50SW5saW5lQm94LmRlc2NlbnQoKS52YWx1ZU9yKElubGluZUxheW91dFVu
aXQgeyB9KTsKLSAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxp
bmVMZXZlbEJveC0+bG9naWNhbEhlaWdodCgpIC0gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20pOwot
ICAgICAgICAgICAgaWYgKG92ZXJmbG93KSB7Ci0gICAgICAgICAgICAgICAgLy8gVGV4dEJvdHRv
bSBwdXNoZXMgdGhlIGJhc2VsaW5lIGRvd253YXJkIHRoZSBzYW1lIHdheSAnYm90dG9tJyBkb2Vz
LgotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KHBhcmVu
dElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBvdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAg
cGFyZW50SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJveC5iYXNlbGluZSgpICsg
b3ZlcmZsb3cpOworICAgIGF1dG8gYWxpZ25JbmxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94
ZXMgPSBbJl0geworICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5u
b25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3gg
PSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2Fs
QWxpZ25tZW50ID0gbGF5b3V0Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOworICAgICAgICAg
ICAgaWYgKGlzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KHZlcnRpY2FsQWxpZ25tZW50KSkgewor
ICAgICAgICAgICAgICAgIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXMuYXBwZW5kKGlu
bGluZUxldmVsQm94LmdldCgpKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgVmVydGlj
YWxBbGlnbjo6TWlkZGxlOiB7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxUb3AgPSBwYXJlbnRJ
bmxpbmVCb3guYmFzZWxpbmUoKSAtIChpbmxpbmVMZXZlbEJveC0+bG9naWNhbEhlaWdodCgpIC8g
MiArIHBhcmVudElubGluZUJveC5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOwotICAgICAg
ICAgICAgaWYgKGxvZ2ljYWxUb3AgPCAwKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBvdmVyZmxv
dyA9IC1sb2dpY2FsVG9wOwotICAgICAgICAgICAgICAgIC8vIENoaWxkIGlubGluZSBib3ggd2l0
aCBtaWRkbGUgYWxpZ25tZW50IHB1c2hlcyB0aGUgYmFzZWxpbmUgZG93biB3aGVuIG92ZXJmbG93
cy4KLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0QmFzZWxpbmUocGFyZW50SW5s
aW5lQm94LmJhc2VsaW5lKCkgKyBvdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgcGFyZW50SW5s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAr
IG92ZXJmbG93KTsKKyAgICAgICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3gu
aW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKKyAgICAgICAg
ICAgIGF1dG8gbG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAg
c3dpdGNoICh2ZXJ0aWNhbEFsaWdubWVudCkgeworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFs
aWduOjpCYXNlbGluZToKKyAgICAgICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5l
Qm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJveC0+YmFzZWxpbmUoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDoKICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wID0geyB9OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpUZXh0Qm90dG9tOgorICAgICAgICAgICAg
ICAgIGxvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkg
LSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246Ok1pZGRsZToKKyAgICAg
ICAgICAgICAgICBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSAoaW5s
aW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgpIC8gMiArIHBhcmVudElubGluZUJv
eC5mb250TWV0cmljcygpLnhIZWlnaHQoKSAvIDIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVO
VEVEX1lFVCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYXV0byBsb2dpY2FsQm90dG9tID0gbG9naWNhbFRvcCArIGlubGluZUxldmVsQm94LT5s
b2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhl
aWdodChzdGQ6Om1heChwYXJlbnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBsb2dpY2FsQm90
dG9tKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlubGluZUxldmVsQm94LT5z
ZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAgICAgYXV0byBwYXJlbnRBYnNvbHV0
ZUxvZ2ljYWxUb3AgPSBhYnNvbHV0ZUxvZ2ljYWxUb3BBbmRCb3R0b21NYXAuZ2V0KCZwYXJlbnRJ
bmxpbmVCb3gpLnRvcDsKKyAgICAgICAgICAgIGF1dG8gYWJzb2x1dGVMb2dpY2FsVG9wID0gcGFy
ZW50QWJzb2x1dGVMb2dpY2FsVG9wICsgbG9naWNhbFRvcDsKKyAgICAgICAgICAgIGFic29sdXRl
TG9naWNhbFRvcEFuZEJvdHRvbU1hcC5hZGQoaW5saW5lTGV2ZWxCb3guZ2V0KCksIEFic29sdXRl
VG9wQW5kQm90dG9tIHsgYWJzb2x1dGVMb2dpY2FsVG9wLCBhYnNvbHV0ZUxvZ2ljYWxUb3AgKyBp
bmxpbmVMZXZlbEJveC0+bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgfSk7CiAgICAgICAgIH0KLSAg
ICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7
Ci0gICAgICAgICAgICBicmVhazsKKyAgICB9OworICAgIGFsaWduSW5saW5lQm94UmVsYXRpdmVJ
bmxpbmVMZXZlbEJveGVzKCk7CisKKyAgICBhdXRvIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gSW5s
aW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBtaW5pbXVtSW5saW5lQm94UmVsYXRpdmVMb2dp
Y2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBpbmxpbmVCb3hSZWxhdGl2
ZUxvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICBhdXRvIGNvbXB1dGVM
aW5lQm94TG9naWNhbEhlaWdodCA9IFsmXSB7CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBmb3IgbGF5b3V0IGJvdW5kcyBiYXNlZCBsaW5lIGJveCBoZWlnaHQuCisgICAgICAgIGF1dG8g
bWluaW11bUxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgYXV0byBt
YXhpbXVtbG9naWNhbEJvdHRvbSA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgICAgICBmb3Ig
KGF1dG8gYWJzb2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tIDogYWJzb2x1dGVMb2dpY2FsVG9wQW5k
Qm90dG9tTWFwLnZhbHVlcygpKSB7CisgICAgICAgICAgICBtaW5pbXVtTG9naWNhbFRvcCA9IHN0
ZDo6bWluKG1pbmltdW1Mb2dpY2FsVG9wLCBhYnNvbHV0ZUxvZ2ljYWxUb3BBbmRCb3R0b20udG9w
KTsKKyAgICAgICAgICAgIG1heGltdW1sb2dpY2FsQm90dG9tID0gc3RkOjptYXgobWF4aW11bWxv
Z2ljYWxCb3R0b20sIGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRvbS5ib3R0b20pOwogICAgICAg
ICB9Ci0gICAgfQotfQorICAgICAgICBtaW5pbXVtSW5saW5lQm94UmVsYXRpdmVMb2dpY2FsVG9w
ID0gbWluaW11bUxvZ2ljYWxUb3A7CisgICAgICAgIGlubGluZUJveFJlbGF0aXZlTG9naWNhbEhl
aWdodCA9IG1heGltdW1sb2dpY2FsQm90dG9tIC0gbWluaW11bUxvZ2ljYWxUb3A7CisgICAgICAg
IGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gaW5saW5lQm94UmVsYXRpdmVMb2dpY2FsSGVpZ2h0Owor
ICAgICAgICAvLyBOb3cgc3RyZXRjaCB0aGUgbGluZSBib3ggd2l0aCB0aGUgbGluZSBib3ggcmVs
YXRpdmUgaW5saW5lIGxldmVsIGJveGVzLgorICAgICAgICBmb3IgKGF1dG8qIGxpbmVCb3hSZWxh
dGl2ZUlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcykKKyAg
ICAgICAgICAgIGxpbmVCb3hMb2dpY2FsSGVpZ2h0ID0gc3RkOjptYXgobGluZUJveExvZ2ljYWxI
ZWlnaHQsIGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWln
aHQoKSk7CisgICAgfTsKKyAgICBjb21wdXRlTGluZUJveExvZ2ljYWxIZWlnaHQoKTsKIAotdm9p
ZCBMaW5lQm94QnVpbGRlcjo6YWxpZ25JbmxpbmVMZXZlbEJveGVzVmVydGljYWxseUFuZENvbXB1
dGVMaW5lQm94SGVpZ2h0KExpbmVCb3gmIGxpbmVCb3gpCi17Ci0gICAgLy8gSW5saW5lIGJveGVz
IGFyZSBpbiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlIGxpbmUgYm94IChhbmQgbm90IGlu
IHRoZSBjb29yZGluYXRlIHN5c3RlbSBvZiB0aGVpciBwYXJlbnRzKS4KLSAgICAvLyBTdGFydGlu
ZyB3aXRoIHRoZSByb290IGlubGluZSBib3gsIHBvc2l0aW9uIHRoZSBhbmNlc3RvcnMgZmlyc3Qg
c28gdGhhdCB0aGUgZGVzY2VuZGFudCBsaW5lIGJveGVzIHNlZSBhYnNvbHV0ZSB2ZXJ0aWNhbCBw
b3NpdGlvbnMuCi0gICAgYXV0byYgcm9vdElubGluZUJveCA9IGxpbmVCb3gucm9vdElubGluZUJv
eCgpOwotICAgIGF1dG8gY29udGVudExvZ2ljYWxIZWlnaHQgPSBJbmxpbmVMYXlvdXRVbml0IHsg
fTsKLSAgICBhdXRvIGFsaWduUm9vdElubGluZUJveCA9IFsmXSB7Ci0gICAgICAgIGNvbnRlbnRM
b2dpY2FsSGVpZ2h0ID0gcm9vdElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgICAgIGZv
ciAoYXV0byYgaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVz
KCkpIHsKLSAgICAgICAgICAgIGF1dG8gdmVydGljYWxBbGlnbiA9IGlubGluZUxldmVsQm94LT5s
YXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKLSAgICAgICAgICAgIGlmICh2ZXJ0
aWNhbEFsaWduID09IFZlcnRpY2FsQWxpZ246OkJvdHRvbSkgewotICAgICAgICAgICAgICAgIC8v
IGJvdHRvbSBhbGlnbiBhbHdheXMgcHVzaGVzIHRoZSByb290IGlubGluZSBib3ggZG93bndhcmRz
LgotICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSBzdGQ6Om1heCgwLjBmLCBpbmxpbmVM
ZXZlbEJveC0+bG9naWNhbEJvdHRvbSgpIC0gcm9vdElubGluZUJveC5sb2dpY2FsQm90dG9tKCkp
OwotICAgICAgICAgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9naWNhbFRvcChyb290SW5saW5l
Qm94LmxvZ2ljYWxUb3AoKSArIG92ZXJmbG93KTsKLSAgICAgICAgICAgICAgICBjb250ZW50TG9n
aWNhbEhlaWdodCArPSBvdmVyZmxvdzsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWxB
bGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpUb3ApCi0gICAgICAgICAgICAgICAgY29udGVudExvZ2lj
YWxIZWlnaHQgPSBzdGQ6Om1heChjb250ZW50TG9naWNhbEhlaWdodCwgaW5saW5lTGV2ZWxCb3gt
PmxvZ2ljYWxIZWlnaHQoKSk7Ci0gICAgICAgIH0KKyAgICBhdXRvIGFkanVzdFJvb3RJbmxpbmVC
b3hWZXJ0aWNhbFBvc2l0aW9uID0gWyZdIHsKKyAgICAgICAgaWYgKG1pbmltdW1JbmxpbmVCb3hS
ZWxhdGl2ZUxvZ2ljYWxUb3AgPj0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcm9v
dElubGluZUJveC5zZXRMb2dpY2FsVG9wKC1taW5pbXVtSW5saW5lQm94UmVsYXRpdmVMb2dpY2Fs
VG9wKTsKICAgICB9OwotICAgIGFsaWduUm9vdElubGluZUJveCgpOwotCi0gICAgZm9yIChhdXRv
JiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9vdElubGluZUxldmVsQm94ZXMoKSkgewot
ICAgICAgICBhdXRvIGlubGluZUxldmVsQm94TG9naWNhbFRvcCA9IElubGluZUxheW91dFVuaXQg
eyB9OwotICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm94
KCk7Ci0gICAgICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxC
b3hGb3JMYXlvdXRCb3gobGF5b3V0Qm94LnBhcmVudCgpKTsKLSAgICAgICAgQVNTRVJUKHBhcmVu
dElubGluZUJveC5pc0lubGluZUJveCgpKTsKLSAgICAgICAgc3dpdGNoIChsYXlvdXRCb3guc3R5
bGUoKS52ZXJ0aWNhbEFsaWduKCkpIHsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCYXNl
bGluZToKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9naWNhbFRvcCA9IHBhcmVudElubGlu
ZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAtIGlubGluZUxl
dmVsQm94LT5iYXNlbGluZSgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6VGV4dFRvcDoKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9naWNhbFRv
cCA9IHBhcmVudElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxp
bmUoKSAtIHBhcmVudElubGluZUJveC5mb250TWV0cmljcygpLmFzY2VudCgpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbTogewotICAg
ICAgICAgICAgYXV0byBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSA9IHBhcmVudElubGluZUJveC5s
b2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIHBhcmVudElubGluZUJv
eC5mb250TWV0cmljcygpLmRlc2NlbnQoKTsKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9n
aWNhbFRvcCA9IHBhcmVudFRleHRMb2dpY2FsQm90dG9tIC0gaW5saW5lTGV2ZWxCb3gtPmxvZ2lj
YWxIZWlnaHQoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2Ug
VmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9w
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2Fz
ZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2lj
YWxUb3AgPSBjb250ZW50TG9naWNhbEhlaWdodCAtIGlubGluZUxldmVsQm94LT5sb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpN
aWRkbGU6Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxp
bmVCb3gubG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSAoaW5saW5l
TGV2ZWxCb3gtPmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guZm9udE1ldHJp
Y3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKLSAgICAgICAgICAg
IGJyZWFrOworICAgIGFkanVzdFJvb3RJbmxpbmVCb3hWZXJ0aWNhbFBvc2l0aW9uKCk7CisKKyAg
ICBhdXRvIGFsaWduTGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlcyA9IFsmXSB7CisgICAg
ICAgIGZvciAoYXV0byogaW5saW5lTGV2ZWxCb3ggOiBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZl
bEJveGVzKSB7CisgICAgICAgICAgICBhdXRvJiBsYXlvdXRCb3ggPSBpbmxpbmVMZXZlbEJveC0+
bGF5b3V0Qm94KCk7CisgICAgICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ25tZW50ID0gbGF5b3V0
Qm94LnN0eWxlKCkudmVydGljYWxBbGlnbigpOworICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9w
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBhdXRvIHJvb3RJbmxpbmVCb3hP
ZmZzZXQgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIHN3aXRjaCAodmVydGlj
YWxBbGlnbm1lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgorICAg
ICAgICAgICAgICAgIGxvZ2ljYWxUb3AgPSB7IH07CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gbGluZUJveExvZ2ljYWxIZWlnaHQgLSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0
Qm91bmRzKCkuaGVpZ2h0KCk7CisgICAgICAgICAgICAgICAgcm9vdElubGluZUJveE9mZnNldCA9
IGlubGluZUxldmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAtIGlubGluZUJveFJlbGF0
aXZlTG9naWNhbEhlaWdodDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9ZRVQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlubGluZUxl
dmVsQm94LT5zZXRMb2dpY2FsVG9wKGxvZ2ljYWxUb3ApOworICAgICAgICAgICAgaWYgKHJvb3RJ
bmxpbmVCb3hPZmZzZXQgPiAwKQorICAgICAgICAgICAgICAgIHJvb3RJbmxpbmVCb3guc2V0TG9n
aWNhbFRvcChyb290SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHJvb3RJbmxpbmVCb3hPZmZzZXQp
OwogICAgICAgICB9Ci0gICAgICAgIGlubGluZUxldmVsQm94LT5zZXRMb2dpY2FsVG9wKGlubGlu
ZUxldmVsQm94TG9naWNhbFRvcCk7Ci0gICAgfQotICAgIGlmICghbGluZUJveC5pc0xpbmVWaXN1
YWxseUVtcHR5KCkpCi0gICAgICAgIGxpbmVCb3guc2V0TG9naWNhbEhlaWdodChjb250ZW50TG9n
aWNhbEhlaWdodCk7CisgICAgfTsKKyAgICBhbGlnbkxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVs
Qm94ZXMoKTsKKyAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQobGluZUJveExvZ2ljYWxIZWln
aHQpOwogfQogCiBMaW5lQm94IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6bGlu
ZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNv
bnRlbnQpCkBAIC0zOTcsNDcgKzM5NywxMyBAQCBMaW5lQm94IElubGluZUZvcm1hdHRpbmdDb250
ZXh0OjpHZW9tZXRyeTo6bGluZUJveEZvckxpbmVDb250ZW50KGNvbnN0IExpbmVCdWlsZAogICAg
IHJldHVybiBMaW5lQm94QnVpbGRlcihmb3JtYXR0aW5nQ29udGV4dCgpKS5idWlsZChsaW5lQ29u
dGVudCk7CiB9CiAKLUlubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TGluZVJlY3RB
bmRMaW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0
ZWRMaW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgUmVuZGVyU3R5
bGUmIHJvb3RTdHlsZSwgY29uc3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVu
dCkgY29uc3QKK0lubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6TGluZVJlY3RBbmRM
aW5lQm94T2Zmc2V0IElubGluZUZvcm1hdHRpbmdDb250ZXh0OjpHZW9tZXRyeTo6Y29tcHV0ZWRM
aW5lTG9naWNhbFJlY3QoY29uc3QgTGluZUJveCYgbGluZUJveCwgY29uc3QgUmVuZGVyU3R5bGUm
LCBjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50KSBjb25zdAogewot
ICAgIC8vIENvbXB1dGUgdGhlIGxpbmUgaGVpZ2h0IGFuZCB0aGUgbGluZSBib3ggdmVydGljYWwg
b2Zmc2V0LgotICAgIC8vIFRoZSBsaW5lIGhlaWdodCBpcyBlaXRoZXIgdGhlIGxpbmUtaGVpZ2h0
IHZhbHVlIChuZWdhdGl2ZSB2YWx1ZSBtZWFucyBsaW5lIGhlaWdodCBpcyBub3Qgc2V0KSBvciB0
aGUgZm9udCBtZXRyaWNzJ3MgbGluZSBzcGFjaW5nL2xpbmUgYm94IGhlaWdodC4KLSAgICAvLyBU
aGUgbGluZSBib3ggaXMgdGhlbiBwb3NpdGlvbmVkIHVzaW5nIHRoZSBoYWxmIGxlYWRpbmcgY2Vu
dGVyaW5nLgotICAgIC8vICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXyAgbGluZQotICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAgICAg
ICAgICAgIHwKLSAgICAvLyB8ICAgICAgICAgICAgICAgICAgICB8IGxpbmUgc3BhY2luZyAgICAg
ICAgICB8Ci0gICAgLy8gfCAgICAgICAgICAgICAgICAgICAgdiAgICAgICAgICAgICAgICAgICAg
ICAgfAotICAgIC8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LXwtLS0tLS0tLS0gIExpbmVCb3gKLSAgICAvLyB8fCAgICBeICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgICAgICAgfAotICAgIC8vIHx8ICAgIHwgbGluZSBib3ggaGVp
Z2h0ICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8Ci0gICAgLy8gfHwtLS0tdi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tfC0tLS0tLS0tIHwgYWxpZ25tZW50IGJh
c2VsaW5lCi0gICAgLy8gfCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tfC0tLS0tLS0tLQotICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIF4gICAgICAgICAgICAg
ICAgICAgICAgIHwgICBeCi0gICAgLy8gfCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNp
bmcgICAgICAgICAgfCAgIHwKLSAgICAvLyB8X19fX19fX19fX19fX19fX19fX192X19fX19fX19f
X19fX19fX19fX19fX198ICBzY3JvbGxhYmxlIG92ZXJmbG93Ci0gICAgLy8KICAgICBpZiAobGlu
ZUNvbnRlbnQucnVucy5pc0VtcHR5KCkgfHwgbGluZUJveC5pc0xpbmVWaXN1YWxseUVtcHR5KCkp
CiAgICAgICAgIHJldHVybiB7IHsgfSwgeyBsaW5lQ29udGVudC5sb2dpY2FsVG9wTGVmdCwgbGlu
ZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgeyB9IH0gfTsKIAogICAgIGF1dG8gbGluZUJveExv
Z2ljYWxIZWlnaHQgPSBsaW5lQm94LmxvZ2ljYWxIZWlnaHQoKTsKLSAgICBhdXRvIGxpbmVMb2dp
Y2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0gICAgaWYgKHJvb3RTdHlsZS5saW5l
SGVpZ2h0KCkuaXNOZWdhdGl2ZSgpKSB7Ci0gICAgICAgIC8vIE5lZ2F0aXZlIGxpbmUgaGVpZ2h0
IHZhbHVlIG1lYW5zIHRoZSBsaW5lIGhlaWdodCBpcyBkcml2ZW4gYnkgdGhlIGNvbnRlbnQuCi0g
ICAgICAgIGF1dG8gdXNlZExpbmVTcGFjaW5nID0gWyZdIHsKLSAgICAgICAgICAgIGF1dG8gbG9n
aWNhbFRvcFdpdGhMaW5lU3BhY2luZyA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICAg
ICAgYXV0byBsb2dpY2FsQm90dG9tV2l0aExpbmVTcGFjaW5nID0gbGluZUJveExvZ2ljYWxIZWln
aHQ7Ci0gICAgICAgICAgICBmb3IgKGF1dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5pbmxp
bmVMZXZlbEJveExpc3QoKSkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvIGxpbmVTcGFjaW5n
ID0gaW5saW5lTGV2ZWxCb3gtPmxpbmVTcGFjaW5nKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IGNoZWNrIGlmIGxpbmUgc3BhY2luZyBpcyBkaXN0cmlidXRlZCBldmVubHkuCi0g
ICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxUb3BXaXRoTGluZVNwYWNpbmcgPSBzdGQ6Om1pbihs
b2dpY2FsVG9wV2l0aExpbmVTcGFjaW5nLCBpbmxpbmVMZXZlbEJveC0+bG9naWNhbFRvcCgpIC0g
KmxpbmVTcGFjaW5nIC8gMik7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2ljYWxCb3R0b21XaXRo
TGluZVNwYWNpbmcgPSBzdGQ6Om1heChsb2dpY2FsQm90dG9tV2l0aExpbmVTcGFjaW5nLCBpbmxp
bmVMZXZlbEJveC0+bG9naWNhbEJvdHRvbSgpICsgKmxpbmVTcGFjaW5nIC8gMik7Ci0gICAgICAg
ICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIC1sb2dpY2FsVG9w
V2l0aExpbmVTcGFjaW5nICsgKGxvZ2ljYWxCb3R0b21XaXRoTGluZVNwYWNpbmcgLSBsaW5lQm94
TG9naWNhbEhlaWdodCk7Ci0gICAgICAgIH07Ci0gICAgICAgIGxpbmVMb2dpY2FsSGVpZ2h0ID0g
bGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyB1c2VkTGluZVNwYWNpbmcoKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbGluZUxvZ2ljYWxIZWlnaHQgPSByb290U3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0
KCk7Ci0KKyAgICBhdXRvIGxpbmVMb2dpY2FsSGVpZ2h0ID0gbGluZUJveC5sb2dpY2FsSGVpZ2h0
KCk7CiAgICAgYXV0byBsb2dpY2FsUmVjdCA9IElubGluZVJlY3QgeyBsaW5lQ29udGVudC5sb2dp
Y2FsVG9wTGVmdCwgbGluZUNvbnRlbnQubGluZUxvZ2ljYWxXaWR0aCwgbGluZUxvZ2ljYWxIZWln
aHR9OwogICAgIC8vIElubGluZSB0cmVlIGhlaWdodCBpcyBhbGwgaW50ZWdlciBiYXNlZC4KICAg
ICBhdXRvIGxpbmVCb3hPZmZzZXQgPSBmbG9vcmYoKGxpbmVMb2dpY2FsSGVpZ2h0IC0gbGluZUJv
eExvZ2ljYWxIZWlnaHQpIC8gMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQv
aW5saW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91
dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCmluZGV4IGRhNjdjYWQyODFhZDU2
ZDg3YTNkM2YwOTQ3ZTA5YWUxODA5ODdmOGUuLjU4NzFiOGJlNmFjYjE5ZDJkNmNkZDQ5ZGE4YTdl
YjE5YjI0MzE5NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxp
bmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwCkBAIC02MCwxNCArNjAsNDAgQEAgdm9pZCBM
aW5lQm94OjphZGRJbmxpbmVMZXZlbEJveChzdGQ6OnVuaXF1ZV9wdHI8SW5saW5lTGV2ZWxCb3g+
JiYgaW5saW5lTGV2ZWxCb3gKIElubGluZVJlY3QgTGluZUJveDo6bG9naWNhbFJlY3RGb3JUZXh0
UnVuKGNvbnN0IExpbmU6OlJ1biYgcnVuKSBjb25zdAogewogICAgIEFTU0VSVChydW4uaXNUZXh0
KCkgfHwgcnVuLmlzTGluZUJyZWFrKCkpOwotICAgIGF1dG8mIHBhcmVudElubGluZUJveCA9IGlu
bGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSk7Ci0gICAg
QVNTRVJUKHBhcmVudElubGluZUJveC5pc0lubGluZUJveCgpKTsKLSAgICBhdXRvJiBmb250TWV0
cmljcyA9IHBhcmVudElubGluZUJveC5mb250TWV0cmljcygpOwotICAgIGF1dG8gcnVubG9naWNh
bFRvcCA9IHBhcmVudElubGluZUJveC5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVCb3guYmFz
ZWxpbmUoKSAtIGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgIGF1dG8qIHBhcmVudElubGluZUJv
eCA9ICZpbmxpbmVMZXZlbEJveEZvckxheW91dEJveChydW4ubGF5b3V0Qm94KCkucGFyZW50KCkp
OworICAgIEFTU0VSVChwYXJlbnRJbmxpbmVCb3gtPmlzSW5saW5lQm94KCkpOworICAgIGF1dG8m
IGZvbnRNZXRyaWNzID0gcGFyZW50SW5saW5lQm94LT5mb250TWV0cmljcygpOworICAgIGF1dG8g
cnVubG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC0+bG9naWNhbFRvcCgpICsgcGFyZW50SW5s
aW5lQm94LT5iYXNlbGluZSgpIC0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisKKyAgICBhdXRvIGlz
TGluZUJveFJlbGF0aXZlQWxpZ25tZW50ID0gW10gKGNvbnN0IGF1dG8mIHZlcnRpY2FsQWxpZ25t
ZW50KSB7CisgICAgICAgIHJldHVybiB2ZXJ0aWNhbEFsaWdubWVudCA9PSBWZXJ0aWNhbEFsaWdu
OjpUb3AgfHwgdmVydGljYWxBbGlnbm1lbnQgPT0gVmVydGljYWxBbGlnbjo6Qm90dG9tOworICAg
IH07CisgICAgd2hpbGUgKHBhcmVudElubGluZUJveCAhPSBtX3Jvb3RJbmxpbmVCb3guZ2V0KCkg
JiYgIWlzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KHBhcmVudElubGluZUJveC0+bGF5b3V0Qm94
KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCkpKSB7CisgICAgICAgIHBhcmVudElubGluZUJveCA9
ICZpbmxpbmVMZXZlbEJveEZvckxheW91dEJveChwYXJlbnRJbmxpbmVCb3gtPmxheW91dEJveCgp
LnBhcmVudCgpKTsKKyAgICAgICAgQVNTRVJUKHBhcmVudElubGluZUJveC0+aXNJbmxpbmVCb3go
KSk7CisgICAgICAgIHJ1bmxvZ2ljYWxUb3AgKz0gcGFyZW50SW5saW5lQm94LT5sb2dpY2FsVG9w
KCk7CisgICAgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZvbnRNZXRy
aWNzLmhlaWdodCgpOwogICAgIHJldHVybiB7IHJ1bmxvZ2ljYWxUb3AsIG1faG9yaXpvbnRhbEFs
aWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSArIHJ1bi5sb2dpY2Fs
TGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQgfTsKIH0KIAorSW5saW5l
UmVjdCBMaW5lQm94Ojpsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94KGNvbnN0IEJveCYgbGF5
b3V0Qm94KSBjb25zdAoreworICAgIGF1dG8qIGlubGluZUJveCA9ICZpbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gaW5saW5lQm94TG9naWNhbFJlY3QgPSBp
bmxpbmVCb3gtPmxvZ2ljYWxSZWN0KCk7CisgICAgYXV0byBpbmxpbmVCb3hBYnNvbHV0ZWxvZ2lj
YWxUb3AgPSBpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKTsKKworICAgIGF1dG8gaXNMaW5lQm94UmVs
YXRpdmVBbGlnbm1lbnQgPSBbXSAoY29uc3QgYXV0byYgdmVydGljYWxBbGlnbm1lbnQpIHsKKyAg
ICAgICAgcmV0dXJuIHZlcnRpY2FsQWxpZ25tZW50ID09IFZlcnRpY2FsQWxpZ246OlRvcCB8fCB2
ZXJ0aWNhbEFsaWdubWVudCA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b207CisgICAgfTsKKyAgICB3
aGlsZSAoaW5saW5lQm94ICE9IG1fcm9vdElubGluZUJveC5nZXQoKSAmJiAhaXNMaW5lQm94UmVs
YXRpdmVBbGlnbm1lbnQoaW5saW5lQm94LT5sYXlvdXRCb3goKS5zdHlsZSgpLnZlcnRpY2FsQWxp
Z24oKSkpIHsKKyAgICAgICAgaW5saW5lQm94ID0gJmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94
KGlubGluZUJveC0+bGF5b3V0Qm94KCkucGFyZW50KCkpOworICAgICAgICBBU1NFUlQoaW5saW5l
Qm94LT5pc0lubGluZUJveCgpKTsKKyAgICAgICAgaW5saW5lQm94QWJzb2x1dGVsb2dpY2FsVG9w
ICs9IGlubGluZUJveC0+bG9naWNhbFRvcCgpOworICAgIH0KKyAgICByZXR1cm4geyBpbmxpbmVC
b3hBYnNvbHV0ZWxvZ2ljYWxUb3AsIG1faG9yaXpvbnRhbEFsaWdubWVudE9mZnNldC52YWx1ZU9y
KElubGluZUxheW91dFVuaXQgeyB9KSArIGlubGluZUJveExvZ2ljYWxSZWN0LmxlZnQoKSwgaW5s
aW5lQm94TG9naWNhbFJlY3Qud2lkdGgoKSwgaW5saW5lQm94TG9naWNhbFJlY3QuaGVpZ2h0KCkg
fTsKK30KKwogfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmggYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKaW5kZXggMTNjOTQ2MWExZjUzZGVjNjY2MTVhNTA0
ZTM1YmEyMTFiZGEwMzQ5Ni4uN2YwYzhkZDgzNjExOWFlODVmNzIzMDRmNmJiNDA0YTQ2ZDg1MjIy
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lTGluZUJveC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5n
L0lubGluZUxpbmVCb3guaApAQCAtNzksNyArNzksNiBAQCBwdWJsaWM6CiAgICAgICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQogICAgICAgICB2b2lkIHNldElz
Tm9uRW1wdHkoKSB7IG1faXNFbXB0eSA9IGZhbHNlOyB9CiAKLSAgICAgICAgT3B0aW9uYWw8SW5s
aW5lTGF5b3V0VW5pdD4gbGluZVNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBtX2xpbmVTcGFjaW5n
OyB9CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygpIGNvbnN0IHsgcmV0
dXJuIGxheW91dEJveCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsgfQogICAgICAgICBjb25zdCBC
b3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsgfQogCkBAIC0xMDQs
MTQgKzEwMywyMiBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgc2V0TG9naWNhbEhlaWdodChJbmxp
bmVMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQpIHsgbV9sb2dpY2FsUmVjdC5zZXRIZWlnaHQobG9n
aWNhbEhlaWdodCk7IH0KICAgICAgICAgdm9pZCBzZXRCYXNlbGluZShJbmxpbmVMYXlvdXRVbml0
IGJhc2VsaW5lKSB7IG1fYmFzZWxpbmUgPSBiYXNlbGluZTsgfQogICAgICAgICB2b2lkIHNldERl
c2NlbnQoSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50KSB7IG1fZGVzY2VudCA9IGRlc2NlbnQ7IH0K
LSAgICAgICAgdm9pZCBzZXRMaW5lU3BhY2luZyhJbmxpbmVMYXlvdXRVbml0IGxpbmVTcGFjaW5n
KSB7IG1fbGluZVNwYWNpbmcgPSBsaW5lU3BhY2luZzsgfQorCisgICAgICAgIHN0cnVjdCBMYXlv
dXRCb3VuZHMgeworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBoZWlnaHQoKSBjb25zdCB7
IHJldHVybiBhc2NlbnQgKyBkZXNjZW50OyB9CisKKyAgICAgICAgICAgIElubGluZUxheW91dFVu
aXQgYXNjZW50IHsgMCB9OworICAgICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50IHsg
MCB9OworICAgICAgICB9OworICAgICAgICB2b2lkIHNldExheW91dEJvdW5kcyhjb25zdCBMYXlv
dXRCb3VuZHMmIGxheW91dEJvdW5kcykgeyBtX2xheW91dEJvdW5kcyA9IGxheW91dEJvdW5kczsg
fQorICAgICAgICBMYXlvdXRCb3VuZHMgbGF5b3V0Qm91bmRzKCkgY29uc3QgeyByZXR1cm4gbV9s
YXlvdXRCb3VuZHM7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFdlYWtQdHI8Y29uc3QgQm94
PiBtX2xheW91dEJveDsKICAgICAgICAgSW5saW5lUmVjdCBtX2xvZ2ljYWxSZWN0OworICAgICAg
ICBMYXlvdXRCb3VuZHMgbV9sYXlvdXRCb3VuZHM7CiAgICAgICAgIElubGluZUxheW91dFVuaXQg
bV9iYXNlbGluZSB7IDAgfTsKICAgICAgICAgT3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbV9k
ZXNjZW50OwotICAgICAgICBPcHRpb25hbDxJbmxpbmVMYXlvdXRVbml0PiBtX2xpbmVTcGFjaW5n
OwogICAgICAgICBib29sIG1faXNFbXB0eSB7IHRydWUgfTsKICAgICAgICAgVHlwZSBtX3R5cGUg
eyBUeXBlOjpJbmxpbmVCb3ggfTsKICAgICB9OwpAQCAtMTI3LDcgKzEzNCwxMCBAQCBwdWJsaWM6
CiAgICAgYm9vbCBpc0xpbmVWaXN1YWxseUVtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9pc0xpbmVW
aXN1YWxseUVtcHR5OyB9CiAKICAgICBjb25zdCBJbmxpbmVMZXZlbEJveCYgaW5saW5lTGV2ZWxC
b3hGb3JMYXlvdXRCb3goY29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJuICptX2lu
bGluZUxldmVsQm94UmVjdE1hcC5nZXQoJmxheW91dEJveCk7IH0KKwogICAgIElubGluZVJlY3Qg
bG9naWNhbFJlY3RGb3JUZXh0UnVuKGNvbnN0IExpbmU6OlJ1biYpIGNvbnN0OworICAgIElubGlu
ZVJlY3QgbG9naWNhbFJlY3RGb3JJbmxpbmVMZXZlbEJveChjb25zdCBCb3gmKSBjb25zdDsKKwog
ICAgIGF1dG8gaW5saW5lTGV2ZWxCb3hMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbmxpbmVMZXZl
bEJveFJlY3RNYXAudmFsdWVzKCk7IH0KICAgICBib29sIGNvbnRhaW5zSW5saW5lTGV2ZWxCb3go
Y29uc3QgQm94JiBsYXlvdXRCb3gpIGNvbnN0IHsgcmV0dXJuIG1faW5saW5lTGV2ZWxCb3hSZWN0
TWFwLmNvbnRhaW5zKCZsYXlvdXRCb3gpOyB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>411664</attachid>
            <date>2020-10-17 05:38:16 -0700</date>
            <delta_ts>2020-10-17 09:08:15 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-217832-20201017053816.patch</filename>
            <type>text/plain</type>
            <size>31859</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY4NjA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDIyNmM1NjAzMTY4MTk3
NzI3ZDJhMzA1MTQyNTE1NjdkOTI4Nzk2ZC4uNmM1NTZjM2NkZGY3YmFlYjQ4MDRkY2ZiN2NiMjI1
Y2QxODFjNTk5MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDIwLTEwLTE3ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgW0xGQ11bSUZDXSBJbnRyb2R1
Y2UgbGF5b3V0IGJvdW5kcyBiYXNlZCB2ZXJ0aWNhbCBhbGlnbm1lbnQKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNzgzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyB0
aGUgbGF5b3V0IGJvdW5kcyBjb25jZXB0IG9uIHRoZSBpbmxpbmUgYm94ZXMuCisgICAgICAgIEl0
IGhlbHAgd2l0aCBpbXBsZW1lbnRpbmcgaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1pbmxpbmUt
My8jbGluZS1sYXlvdXQgKDIuMi4gTGF5b3V0IFdpdGhpbiBMaW5lIEJveGVzKQorICAgICAgICB3
aGVyZSBsYXlvdXQgYm91bmRzIGFyZSB1c2VkIGV4dGVuc2l2ZWx5IChlc3NlbnRpYWxseSB0aGUg
bGF5b3V0IGJvdW5kIGRyaXZlcyB0aGUgaW5saW5lIGJveCdzIGFsaWduZWQgdmVydGljYWwKKyAg
ICAgICAgcG9zaXRpb24gd2l0aGluIHRoZSBsaW5lIGJveCAtYXMgb3Bwb3NlZCB0byBpdHMgbG9n
aWNhbCBoZWlnaHQuIFRob3VnaCB0aGV5IG1heSBtYXRjaCBpbiBtYW55IGNhc2VzLikKKworICAg
ICAgICBXaXRoIHRoaXMgcGF0Y2ggbmVzdGVkIGlubGluZSBib3hlcyBhcmUgcG9zaXRpb25lZCBy
ZWxhdGl2ZSB0byB0aGVpciBwYXJlbnQgaW5saW5lIGJveGVzIGFuZAorICAgICAgICBMaW5lQm94
Ojpsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94L2xvZ2ljYWxSZWN0Rm9yVGV4dFJ1biByZXNv
bHZlcyB0aGVtIHRvIGJlIHJlbGF0aXZlIHRvIHRoZSBsaW5lIGJveCAod2hpY2ggdGhlbiB1c2Vk
IGZvcgorICAgICAgICBnZW5lcmF0aW5nIGRpc3BsYXkgaW5saW5lIHJ1bnMgd2l0aCByZWxhdGl2
ZSB0byB0aGUgbGluZSBjb29yZGluYXRlcykuCisKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpM
YXlvdXQ6OklubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JMaW5lQ29u
dGVudCk6CisgICAgICAgICogbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHRHZW9tZXRyeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hC
dWlsZGVyOjpidWlsZCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hCdWlsZGVy
OjpzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94IGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6TGluZUJveEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUxldmVsQm94ZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94QnVpbGRlcjo6YWxpZ25JbmxpbmVMZXZl
bEJveGVzVmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KToKKyAgICAgICAgKFdlYkNv
cmU6OkxheW91dDo6SW5saW5lRm9ybWF0dGluZ0NvbnRleHQ6Okdlb21ldHJ5Ojpjb21wdXRlZExp
bmVMb2dpY2FsUmVjdCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3hC
dWlsZGVyOjphZGp1c3RJbmxpbmVCb3hlc0xvZ2ljYWxIZWlnaHQpOiBEZWxldGVkLgorICAgICAg
ICAqIGxheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUxpbmVCb3guY3BwOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsUmVjdEZvclRleHRSdW4gY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94Ojpsb2dpY2FsUmVjdEZvcklubGluZUxl
dmVsQm94IGNvbnN0KToKKyAgICAgICAgKiBsYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVM
aW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXQ6OkxpbmVCb3g6OklubGluZUxldmVs
Qm94OjpMYXlvdXRCb3VuZHM6OmhlaWdodCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpMYXlv
dXQ6OkxpbmVCb3g6OklubGluZUxldmVsQm94OjpzZXRMYXlvdXRCb3VuZHMpOgorICAgICAgICAo
V2ViQ29yZTo6TGF5b3V0OjpMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6bGF5b3V0Qm91bmRzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6
OmxpbmVTcGFjaW5nIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkxheW91dDo6
TGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OnNldExpbmVTcGFjaW5nKTogRGVsZXRlZC4KKwogMjAy
MC0xMC0xNiAgRXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbR1BVIFByb2Nlc3NdIEltcGxlbWVudCBWaWRlb1BsYXliYWNrTWV0cmljcwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lRm9ybWF0dGlu
Z0NvbnRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGluZWZvcm1hdHRpbmcvSW5s
aW5lRm9ybWF0dGluZ0NvbnRleHQuY3BwCmluZGV4IDI4YjU0NjNiYmE0OTU5MTUzNzAwODBkZjdl
MTQ0YmU5OWQ2OGZhODkuLjg1YjcxYzdjNTM0NGExMzFmZGZlOWY1YjJhOTM2NTY5NTRlZGYxMmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGlu
ZUZvcm1hdHRpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVGb3JtYXR0aW5nQ29udGV4dC5jcHAKQEAgLTQ0MSw3ICs0NDEsNyBA
QCBJbmxpbmVSZWN0IElubGluZUZvcm1hdHRpbmdDb250ZXh0Ojpjb21wdXRlR2VvbWV0cnlGb3JM
aW5lQ29udGVudChjb25zdCBMaW5lQnVpbAogICAgICAgICAgICAgaWYgKGxpbmVSdW4uaXNUZXh0
KCkgfHwgbGluZVJ1bi5pc0xpbmVCcmVhaygpKQogICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdT
dGF0ZS5hZGRMaW5lUnVuKHsgbGluZUluZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBsaW5lQm94
LmxvZ2ljYWxSZWN0Rm9yVGV4dFJ1bihsaW5lUnVuKSwgbGluZVJ1bi5leHBhbnNpb24oKSwgbGlu
ZVJ1bi50ZXh0Q29udGVudCgpIH0pOwogICAgICAgICAgICAgZWxzZSBpZiAobGluZVJ1bi5pc0Jv
eCgpKQotICAgICAgICAgICAgICAgIGZvcm1hdHRpbmdTdGF0ZS5hZGRMaW5lUnVuKHsgbGluZUlu
ZGV4LCBsaW5lUnVuLmxheW91dEJveCgpLCBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0
Qm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLmxvZ2ljYWxSZWN0KCksIGxpbmVSdW4uZXhwYW5zaW9u
KCksIHsgfSB9KTsKKyAgICAgICAgICAgICAgICBmb3JtYXR0aW5nU3RhdGUuYWRkTGluZVJ1bih7
IGxpbmVJbmRleCwgbGluZVJ1bi5sYXlvdXRCb3goKSwgbGluZUJveC5sb2dpY2FsUmVjdEZvcklu
bGluZUxldmVsQm94KGxpbmVSdW4ubGF5b3V0Qm94KCkpLCBsaW5lUnVuLmV4cGFuc2lvbigpLCB7
IH0gfSk7CiAgICAgICAgIH0KICAgICB9OwogICAgIGNvbnN0cnVjdExpbmVSdW5zKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGluZy9JbmxpbmVGb3Jt
YXR0aW5nQ29udGV4dEdlb21ldHJ5LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVm
b3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCmluZGV4IGQ0Njdl
MTJlMTZhYTM5NTVmZjg4NWNjNDlhYTMxY2ExNGQyOGZlYzEuLjI5MmE5NmQzZDZhMzUzNjM5ZWU1
ZTI2Y2NhZTMyNGUyZTJmNmJhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9p
bmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdDb250ZXh0R2VvbWV0cnkuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3JtYXR0aW5nL0lubGluZUZvcm1hdHRpbmdD
b250ZXh0R2VvbWV0cnkuY3BwCkBAIC00Nyw3ICs0Nyw2IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KExpbmVCb3g6OklubGluZUxl
dmVsQm94JikgY29uc3Q7CiAgICAgdm9pZCBjb25zdHJ1Y3RJbmxpbmVMZXZlbEJveGVzKExpbmVC
b3gmLCBjb25zdCBMaW5lOjpSdW5MaXN0Jik7Ci0gICAgdm9pZCBhZGp1c3RJbmxpbmVCb3hlc0xv
Z2ljYWxIZWlnaHQoTGluZUJveCYpOwogICAgIHZvaWQgYWxpZ25JbmxpbmVMZXZlbEJveGVzVmVy
dGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KExpbmVCb3gmKTsKIAogICAgIGNvbnN0IElu
bGluZUZvcm1hdHRpbmdDb250ZXh0JiBmb3JtYXR0aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5saW5lRm9ybWF0dGluZ0NvbnRleHQ7IH0KQEAgLTE2MCw3ICsxNTksNiBAQCBMaW5lQm94
IExpbmVCb3hCdWlsZGVyOjpidWlsZChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxp
bmVDb250ZW50KQogICAgIGlmIChhdXRvIGhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQgPSBMYXlv
dXQ6Omhvcml6b250YWxBbGlnbm1lbnRPZmZzZXQocnVucywgcm9vdEJveCgpLnN0eWxlKCkudGV4
dEFsaWduKCksIGxpbmVMb2dpY2FsV2lkdGgsIGNvbnRlbnRMb2dpY2FsV2lkdGgsIGxpbmVDb250
ZW50LmlzTGFzdExpbmVXaXRoSW5saW5lQ29udGVudCkpCiAgICAgICAgIGxpbmVCb3guc2V0SG9y
aXpvbnRhbEFsaWdubWVudE9mZnNldCgqaG9yaXpvbnRhbEFsaWdubWVudE9mZnNldCk7CiAgICAg
Y29uc3RydWN0SW5saW5lTGV2ZWxCb3hlcyhsaW5lQm94LCBydW5zKTsKLSAgICBhZGp1c3RJbmxp
bmVCb3hlc0xvZ2ljYWxIZWlnaHQobGluZUJveCk7CiAgICAgYWxpZ25JbmxpbmVMZXZlbEJveGVz
VmVydGljYWxseUFuZENvbXB1dGVMaW5lQm94SGVpZ2h0KGxpbmVCb3gpOwogICAgIHJldHVybiBs
aW5lQm94OwogfQpAQCAtMTY5LDE1ICsxNjcsMzMgQEAgdm9pZCBMaW5lQm94QnVpbGRlcjo6c2V0
VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChMaW5lQm94OjpJbmxpbmVMZXZlbEJveCYgaW4K
IHsKICAgICBBU1NFUlQoaW5saW5lTGV2ZWxCb3guaXNJbmxpbmVCb3goKSB8fCBpbmxpbmVMZXZl
bEJveC5pc0xpbmVCcmVha0JveCgpKTsKICAgICBhdXRvJiBmb250TWV0cmljcyA9IGlubGluZUxl
dmVsQm94LmZvbnRNZXRyaWNzKCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBsb2dpY2FsSGVpZ2h0
ID0gZm9udE1ldHJpY3MuaGVpZ2h0KCk7Ci0gICAgSW5saW5lTGF5b3V0VW5pdCBiYXNlbGluZSA9
IGZvbnRNZXRyaWNzLmFzY2VudCgpOworICAgIElubGluZUxheW91dFVuaXQgYXNjZW50ID0gZm9u
dE1ldHJpY3MuYXNjZW50KCk7CisgICAgSW5saW5lTGF5b3V0VW5pdCBkZXNjZW50ID0gZm9udE1l
dHJpY3MuZGVzY2VudCgpOworICAgIGF1dG8gbG9naWNhbEhlaWdodCA9IGFzY2VudCArIGRlc2Nl
bnQ7CisKKyAgICAvLyBGSVhNRTogQWRqdXN0IGxheW91dCBib3VuZHMgd2l0aCBmYWxsYmFjayBm
b250IHdoZW4gYXBwbGljYWJsZS4KKyAgICBhdXRvJiBzdHlsZSA9IGlubGluZUxldmVsQm94Lmxh
eW91dEJveCgpLnN0eWxlKCk7CisgICAgYXV0byBsaW5lSGVpZ2h0ID0gc3R5bGUubGluZUhlaWdo
dCgpOworICAgIGlmIChsaW5lSGVpZ2h0LmlzTmVnYXRpdmUoKSkgeworICAgICAgICAvLyBJZiBs
aW5lLWhlaWdodCBjb21wdXRlcyB0byBub3JtYWwgYW5kIGVpdGhlciB0ZXh0LWVkZ2UgaXMgbGVh
ZGluZyBvciB0aGlzIGlzIHRoZSByb290IGlubGluZSBib3gsCisgICAgICAgIC8vIHRoZSBmb250
4oCZcyBsaW5lIGdhcCBtZXRyaWMgbWF5IGFsc28gYmUgaW5jb3Jwb3JhdGVkIGludG8gQSBhbmQg
RCBieSBhZGRpbmcgaGFsZiB0byBlYWNoIHNpZGUgYXMgaGFsZi1sZWFkaW5nLgorICAgICAgICBh
dXRvIGxpbmVTcGFjaW5nID0gJmlubGluZUxldmVsQm94LmxheW91dEJveCgpID09ICZyb290Qm94
KCkgPyBmb250TWV0cmljcy5saW5lU3BhY2luZygpIC0gbG9naWNhbEhlaWdodCA6IElubGluZUxh
eW91dFVuaXQoKTsKKyAgICAgICAgYXNjZW50ICs9IGxpbmVTcGFjaW5nIC8gMjsKKyAgICAgICAg
ZGVzY2VudCArPSBsaW5lU3BhY2luZyAvIDI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSW5saW5l
TGF5b3V0VW5pdCBsaW5lSGVpZ2h0ID0gc3R5bGUuY29tcHV0ZWRMaW5lSGVpZ2h0KCk7CisgICAg
ICAgIElubGluZUxheW91dFVuaXQgaGFsZkxlYWRpbmcgPSAobGluZUhlaWdodCAtIChhc2NlbnQg
KyBkZXNjZW50KSkgLyAyOworICAgICAgICBhc2NlbnQgKz0gaGFsZkxlYWRpbmc7CisgICAgICAg
IGRlc2NlbnQgKz0gaGFsZkxlYWRpbmc7CisgICAgfQorICAgIC8vIFdlIG5lZWQgdGhpcyB0byBt
YXRjaCBsZWdhY3kgbGF5b3V0IGludGVncmFsIHBvc2l0aW9uaW5nLgorICAgIGFzY2VudCA9IGZs
b29yZihhc2NlbnQpOworICAgIGRlc2NlbnQgPSBjZWlsKGRlc2NlbnQpOwogCisgICAgaW5saW5l
TGV2ZWxCb3guc2V0TGF5b3V0Qm91bmRzKExpbmVCb3g6OklubGluZUxldmVsQm94OjpMYXlvdXRC
b3VuZHMgeyBhc2NlbnQsIGRlc2NlbnQgfSk7CisgICAgaW5saW5lTGV2ZWxCb3guc2V0QmFzZWxp
bmUoYXNjZW50KTsKKyAgICBpbmxpbmVMZXZlbEJveC5zZXREZXNjZW50KGRlc2NlbnQpOwogICAg
IGlubGluZUxldmVsQm94LnNldExvZ2ljYWxIZWlnaHQobG9naWNhbEhlaWdodCk7Ci0gICAgaW5s
aW5lTGV2ZWxCb3guc2V0QmFzZWxpbmUoYmFzZWxpbmUpOwotICAgIGlubGluZUxldmVsQm94LnNl
dERlc2NlbnQobG9naWNhbEhlaWdodCAtIGJhc2VsaW5lKTsKLSAgICBpZiAoYXV0byBsaW5lU3Bh
Y2luZyA9IGZvbnRNZXRyaWNzLmxpbmVTcGFjaW5nKCkgLSBsb2dpY2FsSGVpZ2h0KQotICAgICAg
ICBpbmxpbmVMZXZlbEJveC5zZXRMaW5lU3BhY2luZyhsaW5lU3BhY2luZyk7Ci0gICAgaW5saW5l
TGV2ZWxCb3guc2V0SXNOb25FbXB0eSgpOwogfQogCiB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25z
dHJ1Y3RJbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bkxp
c3QmIHJ1bnMpCkBAIC0xODYsMTEgKzIwMiwxMiBAQCB2b2lkIExpbmVCb3hCdWlsZGVyOjpjb25z
dHJ1Y3RJbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IExpbmU6OlJ1bgog
CiAgICAgYXV0byBjcmVhdGVSb290SW5saW5lQm94ID0gWyZdIHsKICAgICAgICAgYXV0byByb290
SW5saW5lQm94ID0gTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZVJvb3RJbmxpbmVCb3go
cm9vdEJveCgpLCBob3Jpem9udGFsQWxpZ21lbnRPZmZzZXQsIGxpbmVCb3gubG9naWNhbFdpZHRo
KCkpOworICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5Rm9ySW5saW5lQm94KCpyb290SW5saW5l
Qm94KTsKIAogICAgICAgICBhdXRvIGxpbmVIYXNJbWFnaW5hcnlTdHJ1dCA9ICFsYXlvdXRTdGF0
ZSgpLmluUXVpcmtzTW9kZSgpOwogICAgICAgICBhdXRvIGlzSW5pdGlhbGx5Q29uc2lkZXJlZE5v
bkVtcHR5ID0gIWxpbmVCb3guaXNMaW5lVmlzdWFsbHlFbXB0eSgpICYmIGxpbmVIYXNJbWFnaW5h
cnlTdHJ1dDsKICAgICAgICAgaWYgKGlzSW5pdGlhbGx5Q29uc2lkZXJlZE5vbkVtcHR5KQotICAg
ICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveCgqcm9vdElubGluZUJveCk7
CisgICAgICAgICAgICByb290SW5saW5lQm94LT5zZXRJc05vbkVtcHR5KCk7CiAgICAgICAgIGxp
bmVCb3guYWRkUm9vdElubGluZUJveChXVEZNb3ZlKHJvb3RJbmxpbmVCb3gpKTsKICAgICB9Owog
ICAgIGNyZWF0ZVJvb3RJbmxpbmVCb3goKTsKQEAgLTI0MywyNCArMjYwLDI0IEBAIHZvaWQgTGlu
ZUJveEJ1aWxkZXI6OmNvbnN0cnVjdElubGluZUxldmVsQm94ZXMoTGluZUJveCYgbGluZUJveCwg
Y29uc3QgTGluZTo6UnVuCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhdXRvIGF0b21pY0lu
bGluZUxldmVsQm94ID0gTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OmNyZWF0ZUF0b21pY0lubGlu
ZUxldmVsQm94KGxheW91dEJveCwgbG9naWNhbExlZnQsIHsgcnVuLmxvZ2ljYWxXaWR0aCgpLCBs
b2dpY2FsSGVpZ2h0IH0pOwogICAgICAgICAgICAgYXRvbWljSW5saW5lTGV2ZWxCb3gtPnNldEJh
c2VsaW5lKGJhc2VsaW5lKTsKKyAgICAgICAgICAgIGF0b21pY0lubGluZUxldmVsQm94LT5zZXRM
YXlvdXRCb3VuZHMoTGluZUJveDo6SW5saW5lTGV2ZWxCb3g6OkxheW91dEJvdW5kcyB7IGJhc2Vs
aW5lLCB7IH0gfSk7CiAgICAgICAgICAgICBpZiAobG9naWNhbEhlaWdodCkKICAgICAgICAgICAg
ICAgICBhdG9taWNJbmxpbmVMZXZlbEJveC0+c2V0SXNOb25FbXB0eSgpOwogICAgICAgICAgICAg
bGluZUJveC5hZGRJbmxpbmVMZXZlbEJveChXVEZNb3ZlKGF0b21pY0lubGluZUxldmVsQm94KSk7
CiAgICAgICAgIH0gZWxzZSBpZiAocnVuLmlzQ29udGFpbmVyU3RhcnQoKSkgewogICAgICAgICAg
ICAgYXV0byBpbml0aWFsTG9naWNhbFdpZHRoID0gbGluZUJveC5sb2dpY2FsV2lkdGgoKSAtIHJ1
bi5sb2dpY2FsTGVmdCgpOwogICAgICAgICAgICAgQVNTRVJUKGluaXRpYWxMb2dpY2FsV2lkdGgg
Pj0gMCk7Ci0gICAgICAgICAgICBsaW5lQm94LmFkZElubGluZUxldmVsQm94KExpbmVCb3g6Oklu
bGluZUxldmVsQm94OjpjcmVhdGVJbmxpbmVCb3gobGF5b3V0Qm94LCBsb2dpY2FsTGVmdCwgaW5p
dGlhbExvZ2ljYWxXaWR0aCkpOworICAgICAgICAgICAgYXV0byBpbmxpbmVCb3ggPSBMaW5lQm94
OjpJbmxpbmVMZXZlbEJveDo6Y3JlYXRlSW5saW5lQm94KGxheW91dEJveCwgbG9naWNhbExlZnQs
IGluaXRpYWxMb2dpY2FsV2lkdGgpOworICAgICAgICAgICAgc2V0VmVydGljYWxHZW9tZXRyeUZv
cklubGluZUJveCgqaW5saW5lQm94KTsKKyAgICAgICAgICAgIGxpbmVCb3guYWRkSW5saW5lTGV2
ZWxCb3goV1RGTW92ZShpbmxpbmVCb3gpKTsKICAgICAgICAgfSBlbHNlIGlmIChydW4uaXNDb250
YWluZXJFbmQoKSkgewogICAgICAgICAgICAgLy8gQWRqdXN0IHRoZSBsb2dpY2FsIHdpZHRoIHdo
ZW4gdGhlIGlubGluZSBsZXZlbCBjb250YWluZXIgY2xvc2VzIG9uIHRoaXMgbGluZS4KICAgICAg
ICAgICAgIGF1dG8mIGlubGluZUJveCA9IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRC
b3gobGF5b3V0Qm94KTsKICAgICAgICAgICAgIEFTU0VSVChpbmxpbmVCb3guaXNJbmxpbmVCb3go
KSk7CiAgICAgICAgICAgICBpbmxpbmVCb3guc2V0TG9naWNhbFdpZHRoKHJ1bi5sb2dpY2FsUmln
aHQoKSAtIGlubGluZUJveC5sb2dpY2FsTGVmdCgpKTsKICAgICAgICAgfSBlbHNlIGlmIChydW4u
aXNUZXh0KCkgfHwgcnVuLmlzU29mdExpbmVCcmVhaygpKSB7Ci0gICAgICAgICAgICBhdXRvJiBw
YXJlbnRCb3ggPSBsYXlvdXRCb3gucGFyZW50KCk7Ci0gICAgICAgICAgICBhdXRvJiBwYXJlbnRJ
bmxpbmVCb3ggPSAmcGFyZW50Qm94ID09ICZyb290Qm94KCkgPyBsaW5lQm94LnJvb3RJbmxpbmVC
b3goKSA6IGxpbmVCb3guaW5saW5lTGV2ZWxCb3hGb3JMYXlvdXRCb3gocGFyZW50Qm94KTsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBBZGp1c3Qgbm9uLWVtcHR5IGlubGluZSBib3ggaGVpZ2h0IHdo
ZW4gZ2x5cGhzIGZyb20gdGhlIG5vbi1wcmltYXJ5IGZvbnQgc3RyZXRjaCB0aGUgYm94LgotICAg
ICAgICAgICAgaWYgKHBhcmVudElubGluZUJveC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAg
c2V0VmVydGljYWxHZW9tZXRyeUZvcklubGluZUJveChwYXJlbnRJbmxpbmVCb3gpOworICAgICAg
ICAgICAgLy8gRklYTUU6IEFkZCBxdWlyayBpbmxpbmUgYm94IHN0cmV0Y2hpbmcuCiAgICAgICAg
IH0gZWxzZSBpZiAocnVuLmlzSGFyZExpbmVCcmVhaygpKSB7CiAgICAgICAgICAgICBhdXRvIGxp
bmVCcmVha0JveCA9IExpbmVCb3g6OklubGluZUxldmVsQm94OjpjcmVhdGVMaW5lQnJlYWtCb3go
bGF5b3V0Qm94LCBsb2dpY2FsTGVmdCk7CiAgICAgICAgICAgICBzZXRWZXJ0aWNhbEdlb21ldHJ5
Rm9ySW5saW5lQm94KCpsaW5lQnJlYWtCb3gpOwpAQCAtMjcyLDEyNCArMjg5LDEwOSBAQCB2b2lk
IExpbmVCb3hCdWlsZGVyOjpjb25zdHJ1Y3RJbmxpbmVMZXZlbEJveGVzKExpbmVCb3gmIGxpbmVC
b3gsIGNvbnN0IExpbmU6OlJ1bgogICAgIH0KIH0KIAotdm9pZCBMaW5lQm94QnVpbGRlcjo6YWRq
dXN0SW5saW5lQm94ZXNMb2dpY2FsSGVpZ2h0KExpbmVCb3gmIGxpbmVCb3gpCit2b2lkIExpbmVC
b3hCdWlsZGVyOjphbGlnbklubGluZUxldmVsQm94ZXNWZXJ0aWNhbGx5QW5kQ29tcHV0ZUxpbmVC
b3hIZWlnaHQoTGluZUJveCYgbGluZUJveCkKIHsKLSAgICAvLyBCeSB0cmF2ZXJzaW5nIHRoZSBp
bmxpbmUgYm94IGxpc3QgYmFja3dhcmRzLCBpdCdzIGd1YXJhbnRlZWQgdGhhdCBkZXNjZW5kYW50
IGlubGluZSBib3hlcyBhcmUgc2l6ZWQgZmlyc3QuCi0gICAgZm9yIChhdXRvJiBpbmxpbmVMZXZl
bEJveCA6IFdURjo6bWFrZVJldmVyc2VkUmFuZ2UobGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxC
b3hlcygpKSkgewotICAgICAgICBpZiAoaW5saW5lTGV2ZWxCb3gtPmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgIC8vIFRoaXMgZnVuY3Rpb24gKHBhcnRpYWxseSkgaW1wbGVt
ZW50czoKKyAgICAvLyAyLjIuIExheW91dCBXaXRoaW4gTGluZSBCb3hlcworICAgIC8vIGh0dHBz
Oi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2xpbmUtbGF5b3V0CisgICAgVmVjdG9yPExp
bmVCb3g6OklubGluZUxldmVsQm94Kj4gbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hlczsK
KyAgICBzdHJ1Y3QgQWJzb2x1dGVUb3BBbmRCb3R0b20geworICAgICAgICBJbmxpbmVMYXlvdXRV
bml0IHRvcCB7IDAgfTsKKyAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBib3R0b20geyAwIH07Cisg
ICAgfTsKKyAgICBIYXNoTWFwPExpbmVCb3g6OklubGluZUxldmVsQm94KiwgQWJzb2x1dGVUb3BB
bmRCb3R0b20+IGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRvbU1hcDsKKyAgICBhdXRvJiByb290
SW5saW5lQm94ID0gbGluZUJveC5yb290SW5saW5lQm94KCk7CisgICAgYWJzb2x1dGVMb2dpY2Fs
VG9wQW5kQm90dG9tTWFwLmFkZCgmcm9vdElubGluZUJveCwgQWJzb2x1dGVUb3BBbmRCb3R0b20g
eyB7IH0sIHJvb3RJbmxpbmVCb3gubGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgfSk7CiAKLSAgICAg
ICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gtPmxheW91dEJveCgpOwotICAgICAg
ICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9yTGF5b3V0
Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAgIEFTU0VSVChwYXJlbnRJbmxpbmVCb3gu
aXNJbmxpbmVCb3goKSk7Ci0gICAgICAgIHN3aXRjaCAobGF5b3V0Qm94LnN0eWxlKCkudmVydGlj
YWxBbGlnbigpKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VG9wOgotICAgICAgICBj
YXNlIFZlcnRpY2FsQWxpZ246OkJvdHRvbToKLSAgICAgICAgICAgIC8vIHRvcCBhbmQgYm90dG9t
IGFsaWdubWVudHMgb25seSBzdHJldGNoIHRoZSBsaW5lIGJveC4gVGhleSBkb24ndCBzdHJldGNo
IGFueSBvZiB0aGUgaW5saW5lIGJveGVzLCBub3QgZXZlbiB0aGUgcm9vdCBpbmxpbmUgYm94Lgot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dFRvcDog
ewotICAgICAgICAgICAgYXV0byBwYXJlbnRUZXh0TG9naWNhbFRvcCA9IHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCkuYXNjZW50KCk7Ci0g
ICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChzdGQ6Om1heChwYXJl
bnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpLCBwYXJlbnRUZXh0TG9naWNhbFRvcCArIGlubGlu
ZUxldmVsQm94LT5sb2dpY2FsSGVpZ2h0KCkpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6IHsKLSAgICAgICAgICAg
IGF1dG8gYmFzZWxpbmVPdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlubGluZUxldmVsQm94LT5i
YXNlbGluZSgpIC0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkpOwotICAgICAgICAgICAgaWYg
KGJhc2VsaW5lT3ZlcmZsb3cpIHsKLSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0
QmFzZWxpbmUocGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgKyBiYXNlbGluZU92ZXJmbG93KTsK
LSAgICAgICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChwYXJlbnRJ
bmxpbmVCb3gubG9naWNhbEhlaWdodCgpICsgYmFzZWxpbmVPdmVyZmxvdyk7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICBhdXRvIHBhcmVudElubGluZUJveEJlbG93QmFzZWxpbmUgPSBwYXJl
bnRJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpIC0gcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCk7
Ci0gICAgICAgICAgICBhdXRvIGlubGluZUJveEJlbG93QmFzZWxpbmUgPSBpbmxpbmVMZXZlbEJv
eC0+bG9naWNhbEhlaWdodCgpIC0gaW5saW5lTGV2ZWxCb3gtPmJhc2VsaW5lKCk7Ci0gICAgICAg
ICAgICBhdXRvIGJlbG93QmFzZWxpbmVPdmVyZmxvdyA9IHN0ZDo6bWF4KDAuMGYsIGlubGluZUJv
eEJlbG93QmFzZWxpbmUgLSBwYXJlbnRJbmxpbmVCb3hCZWxvd0Jhc2VsaW5lKTsKLSAgICAgICAg
ICAgIGlmIChiZWxvd0Jhc2VsaW5lT3ZlcmZsb3cpCi0gICAgICAgICAgICAgICAgcGFyZW50SW5s
aW5lQm94LnNldExvZ2ljYWxIZWlnaHQocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSAr
IGJlbG93QmFzZWxpbmVPdmVyZmxvdyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAgICAgICAgIGF1
dG8gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSAr
IHBhcmVudElubGluZUJveC5kZXNjZW50KCkudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSk7
Ci0gICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lTGV2ZWxC
b3gtPmxvZ2ljYWxIZWlnaHQoKSAtIHBhcmVudFRleHRMb2dpY2FsQm90dG9tKTsKLSAgICAgICAg
ICAgIGlmIChvdmVyZmxvdykgewotICAgICAgICAgICAgICAgIC8vIFRleHRCb3R0b20gcHVzaGVz
IHRoZSBiYXNlbGluZSBkb3dud2FyZCB0aGUgc2FtZSB3YXkgJ2JvdHRvbScgZG9lcy4KLSAgICAg
ICAgICAgICAgICBwYXJlbnRJbmxpbmVCb3guc2V0TG9naWNhbEhlaWdodChwYXJlbnRJbmxpbmVC
b3gubG9naWNhbEhlaWdodCgpICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudElu
bGluZUJveC5zZXRCYXNlbGluZShwYXJlbnRJbmxpbmVCb3guYmFzZWxpbmUoKSArIG92ZXJmbG93
KTsKKyAgICBhdXRvIGFsaWduSW5saW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzID0gWyZd
IHsKKyAgICAgICAgLy8gRklYTUU6IEFkZCBwcm9wZXIgc3VwcG9ydCBmb3IgY2FzZXMgd2hlbiB0
aGUgaW5saW5lIGJveCB3aXRoIGxpbmUgYm94IHJlbGF0aXZlIGFsaWdubWVudCBoYXMgYSBjaGls
ZCBpbmxpbmUgYm94CisgICAgICAgIC8vIHdpdGggbm9uLWxpbmUgYm94IHJlbGF0aXZlIGFsaWdu
bWVudC4KKyAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3gubm9uUm9v
dElubGluZUxldmVsQm94ZXMoKSkgeworICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5s
aW5lTGV2ZWxCb3gtPmxheW91dEJveCgpOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWdu
bWVudCA9IGxheW91dEJveC5zdHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICAgICAgICAgIGlm
IChpbmxpbmVMZXZlbEJveC0+aGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVzLmFwcGVuZChpbmxpbmVM
ZXZlbEJveC5nZXQoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZlcnRpY2FsQWxp
Z246Ok1pZGRsZTogewotICAgICAgICAgICAgYXV0byBsb2dpY2FsVG9wID0gcGFyZW50SW5saW5l
Qm94LmJhc2VsaW5lKCkgLSAoaW5saW5lTGV2ZWxCb3gtPmxvZ2ljYWxIZWlnaHQoKSAvIDIgKyBw
YXJlbnRJbmxpbmVCb3guZm9udE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKLSAgICAgICAgICAg
IGlmIChsb2dpY2FsVG9wIDwgMCkgewotICAgICAgICAgICAgICAgIGF1dG8gb3ZlcmZsb3cgPSAt
bG9naWNhbFRvcDsKLSAgICAgICAgICAgICAgICAvLyBDaGlsZCBpbmxpbmUgYm94IHdpdGggbWlk
ZGxlIGFsaWdubWVudCBwdXNoZXMgdGhlIGJhc2VsaW5lIGRvd24gd2hlbiBvdmVyZmxvd3MuCi0g
ICAgICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldEJhc2VsaW5lKHBhcmVudElubGluZUJv
eC5iYXNlbGluZSgpICsgb3ZlcmZsb3cpOwotICAgICAgICAgICAgICAgIHBhcmVudElubGluZUJv
eC5zZXRMb2dpY2FsSGVpZ2h0KHBhcmVudElubGluZUJveC5sb2dpY2FsSGVpZ2h0KCkgKyBvdmVy
Zmxvdyk7CisgICAgICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGlu
ZUxldmVsQm94Rm9yTGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7CisgICAgICAgICAgICBh
dXRvIGxvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgICAgIHN3aXRj
aCAodmVydGljYWxBbGlnbm1lbnQpIHsKKyAgICAgICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6
QmFzZWxpbmU6CisgICAgICAgICAgICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5i
YXNlbGluZSgpIC0gaW5saW5lTGV2ZWxCb3gtPmJhc2VsaW5lKCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRUb3A6CiAgICAgICAg
ICAgICAgICAgbG9naWNhbFRvcCA9IHsgfTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6VGV4dEJvdHRvbToKKyAgICAgICAgICAgICAgICBs
b2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LmxheW91dEJvdW5kcygpLmhlaWdodCgpIC0gaW5s
aW5lTGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpNaWRkbGU6CisgICAgICAgICAg
ICAgICAgbG9naWNhbFRvcCA9IHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gKGlubGluZUxl
dmVsQm94LT5sYXlvdXRCb3VuZHMoKS5oZWlnaHQoKSAvIDIgKyBwYXJlbnRJbmxpbmVCb3guZm9u
dE1ldHJpY3MoKS54SGVpZ2h0KCkgLyAyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9JTVBMRU1FTlRFRF9Z
RVQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IGF1dG8gbG9naWNhbEJvdHRvbSA9IGxvZ2ljYWxUb3AgKyBpbmxpbmVMZXZlbEJveC0+bG9naWNh
bEhlaWdodCgpOwotICAgICAgICAgICAgcGFyZW50SW5saW5lQm94LnNldExvZ2ljYWxIZWlnaHQo
c3RkOjptYXgocGFyZW50SW5saW5lQm94LmxvZ2ljYWxIZWlnaHQoKSwgbG9naWNhbEJvdHRvbSkp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJveC0+c2V0TG9n
aWNhbFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIGF1dG8gcGFyZW50QWJzb2x1dGVMb2dp
Y2FsVG9wID0gYWJzb2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tTWFwLmdldCgmcGFyZW50SW5saW5l
Qm94KS50b3A7CisgICAgICAgICAgICBhdXRvIGFic29sdXRlTG9naWNhbFRvcCA9IHBhcmVudEFi
c29sdXRlTG9naWNhbFRvcCArIGxvZ2ljYWxUb3A7CisgICAgICAgICAgICBhYnNvbHV0ZUxvZ2lj
YWxUb3BBbmRCb3R0b21NYXAuYWRkKGlubGluZUxldmVsQm94LmdldCgpLCBBYnNvbHV0ZVRvcEFu
ZEJvdHRvbSB7IGFic29sdXRlTG9naWNhbFRvcCwgYWJzb2x1dGVMb2dpY2FsVG9wICsgaW5saW5l
TGV2ZWxCb3gtPmxheW91dEJvdW5kcygpLmhlaWdodCgpIH0pOwogICAgICAgICB9Ci0gICAgICAg
IGRlZmF1bHQ6Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX0lNUExFTUVOVEVEX1lFVCgpOwotICAg
ICAgICAgICAgYnJlYWs7CisgICAgfTsKKyAgICBhbGlnbklubGluZUJveFJlbGF0aXZlSW5saW5l
TGV2ZWxCb3hlcygpOworCisgICAgYXV0byBsaW5lQm94TG9naWNhbEhlaWdodCA9IElubGluZUxh
eW91dFVuaXQgeyB9OworICAgIGF1dG8gbWluaW11bUlubGluZUJveFJlbGF0aXZlTG9naWNhbFRv
cCA9IElubGluZUxheW91dFVuaXQgeyB9OworICAgIGF1dG8gaW5saW5lQm94UmVsYXRpdmVMb2dp
Y2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgYXV0byBjb21wdXRlTGluZUJv
eExvZ2ljYWxIZWlnaHQgPSBbJl0geworICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IGxheW91dCBib3VuZHMgYmFzZWQgbGluZSBib3ggaGVpZ2h0LgorICAgICAgICBhdXRvIG1pbmlt
dW1Mb2dpY2FsVG9wID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgIGF1dG8gbWF4aW11
bWxvZ2ljYWxCb3R0b20gPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKKyAgICAgICAgZm9yIChhdXRv
IGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRvbSA6IGFic29sdXRlTG9naWNhbFRvcEFuZEJvdHRv
bU1hcC52YWx1ZXMoKSkgeworICAgICAgICAgICAgbWluaW11bUxvZ2ljYWxUb3AgPSBzdGQ6Om1p
bihtaW5pbXVtTG9naWNhbFRvcCwgYWJzb2x1dGVMb2dpY2FsVG9wQW5kQm90dG9tLnRvcCk7Cisg
ICAgICAgICAgICBtYXhpbXVtbG9naWNhbEJvdHRvbSA9IHN0ZDo6bWF4KG1heGltdW1sb2dpY2Fs
Qm90dG9tLCBhYnNvbHV0ZUxvZ2ljYWxUb3BBbmRCb3R0b20uYm90dG9tKTsKICAgICAgICAgfQot
ICAgIH0KLX0KKyAgICAgICAgbWluaW11bUlubGluZUJveFJlbGF0aXZlTG9naWNhbFRvcCA9IG1p
bmltdW1Mb2dpY2FsVG9wOworICAgICAgICBpbmxpbmVCb3hSZWxhdGl2ZUxvZ2ljYWxIZWlnaHQg
PSBtYXhpbXVtbG9naWNhbEJvdHRvbSAtIG1pbmltdW1Mb2dpY2FsVG9wOworICAgICAgICBsaW5l
Qm94TG9naWNhbEhlaWdodCA9IGlubGluZUJveFJlbGF0aXZlTG9naWNhbEhlaWdodDsKKyAgICAg
ICAgLy8gTm93IHN0cmV0Y2ggdGhlIGxpbmUgYm94IHdpdGggdGhlIGxpbmUgYm94IHJlbGF0aXZl
IGlubGluZSBsZXZlbCBib3hlcy4KKyAgICAgICAgZm9yIChhdXRvKiBsaW5lQm94UmVsYXRpdmVJ
bmxpbmVMZXZlbEJveCA6IGxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXMpCisgICAgICAg
ICAgICBsaW5lQm94TG9naWNhbEhlaWdodCA9IHN0ZDo6bWF4KGxpbmVCb3hMb2dpY2FsSGVpZ2h0
LCBsaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveC0+bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkp
OworICAgIH07CisgICAgY29tcHV0ZUxpbmVCb3hMb2dpY2FsSGVpZ2h0KCk7CiAKLXZvaWQgTGlu
ZUJveEJ1aWxkZXI6OmFsaWduSW5saW5lTGV2ZWxCb3hlc1ZlcnRpY2FsbHlBbmRDb21wdXRlTGlu
ZUJveEhlaWdodChMaW5lQm94JiBsaW5lQm94KQotewotICAgIC8vIElubGluZSBib3hlcyBhcmUg
aW4gdGhlIGNvb3JkaW5hdGUgc3lzdGVtIG9mIHRoZSBsaW5lIGJveCAoYW5kIG5vdCBpbiB0aGUg
Y29vcmRpbmF0ZSBzeXN0ZW0gb2YgdGhlaXIgcGFyZW50cykuCi0gICAgLy8gU3RhcnRpbmcgd2l0
aCB0aGUgcm9vdCBpbmxpbmUgYm94LCBwb3NpdGlvbiB0aGUgYW5jZXN0b3JzIGZpcnN0IHNvIHRo
YXQgdGhlIGRlc2NlbmRhbnQgbGluZSBib3hlcyBzZWUgYWJzb2x1dGUgdmVydGljYWwgcG9zaXRp
b25zLgotICAgIGF1dG8mIHJvb3RJbmxpbmVCb3ggPSBsaW5lQm94LnJvb3RJbmxpbmVCb3goKTsK
LSAgICBhdXRvIGNvbnRlbnRMb2dpY2FsSGVpZ2h0ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07Ci0g
ICAgYXV0byBhbGlnblJvb3RJbmxpbmVCb3ggPSBbJl0gewotICAgICAgICBjb250ZW50TG9naWNh
bEhlaWdodCA9IHJvb3RJbmxpbmVCb3gubG9naWNhbEhlaWdodCgpOwotICAgICAgICBmb3IgKGF1
dG8mIGlubGluZUxldmVsQm94IDogbGluZUJveC5ub25Sb290SW5saW5lTGV2ZWxCb3hlcygpKSB7
Ci0gICAgICAgICAgICBhdXRvIHZlcnRpY2FsQWxpZ24gPSBpbmxpbmVMZXZlbEJveC0+bGF5b3V0
Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7Ci0gICAgICAgICAgICBpZiAodmVydGljYWxB
bGlnbiA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b20pIHsKLSAgICAgICAgICAgICAgICAvLyBib3R0
b20gYWxpZ24gYWx3YXlzIHB1c2hlcyB0aGUgcm9vdCBpbmxpbmUgYm94IGRvd253YXJkcy4KLSAg
ICAgICAgICAgICAgICBhdXRvIG92ZXJmbG93ID0gc3RkOjptYXgoMC4wZiwgaW5saW5lTGV2ZWxC
b3gtPmxvZ2ljYWxCb3R0b20oKSAtIHJvb3RJbmxpbmVCb3gubG9naWNhbEJvdHRvbSgpKTsKLSAg
ICAgICAgICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxUb3Aocm9vdElubGluZUJveC5s
b2dpY2FsVG9wKCkgKyBvdmVyZmxvdyk7Ci0gICAgICAgICAgICAgICAgY29udGVudExvZ2ljYWxI
ZWlnaHQgKz0gb3ZlcmZsb3c7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24g
PT0gVmVydGljYWxBbGlnbjo6VG9wKQotICAgICAgICAgICAgICAgIGNvbnRlbnRMb2dpY2FsSGVp
Z2h0ID0gc3RkOjptYXgoY29udGVudExvZ2ljYWxIZWlnaHQsIGlubGluZUxldmVsQm94LT5sb2dp
Y2FsSGVpZ2h0KCkpOwotICAgICAgICB9CisgICAgYXV0byBhZGp1c3RSb290SW5saW5lQm94VmVy
dGljYWxQb3NpdGlvbiA9IFsmXSB7CisgICAgICAgIGlmIChtaW5pbXVtSW5saW5lQm94UmVsYXRp
dmVMb2dpY2FsVG9wID49IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHJvb3RJbmxp
bmVCb3guc2V0TG9naWNhbFRvcCgtbWluaW11bUlubGluZUJveFJlbGF0aXZlTG9naWNhbFRvcCk7
CiAgICAgfTsKLSAgICBhbGlnblJvb3RJbmxpbmVCb3goKTsKLQotICAgIGZvciAoYXV0byYgaW5s
aW5lTGV2ZWxCb3ggOiBsaW5lQm94Lm5vblJvb3RJbmxpbmVMZXZlbEJveGVzKCkpIHsKLSAgICAg
ICAgYXV0byBpbmxpbmVMZXZlbEJveExvZ2ljYWxUb3AgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsK
LSAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gtPmxheW91dEJveCgpOwot
ICAgICAgICBhdXRvJiBwYXJlbnRJbmxpbmVCb3ggPSBsaW5lQm94LmlubGluZUxldmVsQm94Rm9y
TGF5b3V0Qm94KGxheW91dEJveC5wYXJlbnQoKSk7Ci0gICAgICAgIEFTU0VSVChwYXJlbnRJbmxp
bmVCb3guaXNJbmxpbmVCb3goKSk7Ci0gICAgICAgIHN3aXRjaCAobGF5b3V0Qm94LnN0eWxlKCku
dmVydGljYWxBbGlnbigpKSB7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6QmFzZWxpbmU6
Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2ljYWxUb3AgPSBwYXJlbnRJbmxpbmVCb3gu
bG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgLSBpbmxpbmVMZXZlbEJv
eC0+YmFzZWxpbmUoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2Fs
QWxpZ246OlRleHRUb3A6Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2ljYWxUb3AgPSBw
YXJlbnRJbmxpbmVCb3gubG9naWNhbFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkg
LSBwYXJlbnRJbmxpbmVCb3guZm9udE1ldHJpY3MoKS5hc2NlbnQoKTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRleHRCb3R0b206IHsKLSAgICAgICAg
ICAgIGF1dG8gcGFyZW50VGV4dExvZ2ljYWxCb3R0b20gPSBwYXJlbnRJbmxpbmVCb3gubG9naWNh
bFRvcCgpICsgcGFyZW50SW5saW5lQm94LmJhc2VsaW5lKCkgKyBwYXJlbnRJbmxpbmVCb3guZm9u
dE1ldHJpY3MoKS5kZXNjZW50KCk7Ci0gICAgICAgICAgICBpbmxpbmVMZXZlbEJveExvZ2ljYWxU
b3AgPSBwYXJlbnRUZXh0TG9naWNhbEJvdHRvbSAtIGlubGluZUxldmVsQm94LT5sb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBjYXNlIFZlcnRp
Y2FsQWxpZ246OlRvcDoKLSAgICAgICAgICAgIGlubGluZUxldmVsQm94TG9naWNhbFRvcCA9IElu
bGluZUxheW91dFVuaXQgeyB9OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVy
dGljYWxBbGlnbjo6Qm90dG9tOgotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9w
ID0gY29udGVudExvZ2ljYWxIZWlnaHQgLSBpbmxpbmVMZXZlbEJveC0+bG9naWNhbEhlaWdodCgp
OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVmVydGljYWxBbGlnbjo6TWlkZGxl
OgotICAgICAgICAgICAgaW5saW5lTGV2ZWxCb3hMb2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94
LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGluZSgpIC0gKGlubGluZUxldmVs
Qm94LT5sb2dpY2FsSGVpZ2h0KCkgLyAyICsgcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCku
eEhlaWdodCgpIC8gMik7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAg
ICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7Ci0gICAgICAgICAgICBicmVh
azsKKyAgICBhZGp1c3RSb290SW5saW5lQm94VmVydGljYWxQb3NpdGlvbigpOworCisgICAgYXV0
byBhbGlnbkxpbmVCb3hSZWxhdGl2ZUlubGluZUxldmVsQm94ZXMgPSBbJl0geworICAgICAgICBm
b3IgKGF1dG8qIGlubGluZUxldmVsQm94IDogbGluZUJveFJlbGF0aXZlSW5saW5lTGV2ZWxCb3hl
cykgeworICAgICAgICAgICAgYXV0byYgbGF5b3V0Qm94ID0gaW5saW5lTGV2ZWxCb3gtPmxheW91
dEJveCgpOworICAgICAgICAgICAgYXV0byB2ZXJ0aWNhbEFsaWdubWVudCA9IGxheW91dEJveC5z
dHlsZSgpLnZlcnRpY2FsQWxpZ24oKTsKKyAgICAgICAgICAgIGF1dG8gbG9naWNhbFRvcCA9IElu
bGluZUxheW91dFVuaXQgeyB9OworICAgICAgICAgICAgYXV0byByb290SW5saW5lQm94T2Zmc2V0
ID0gSW5saW5lTGF5b3V0VW5pdCB7IH07CisgICAgICAgICAgICBzd2l0Y2ggKHZlcnRpY2FsQWxp
Z25tZW50KSB7CisgICAgICAgICAgICBjYXNlIFZlcnRpY2FsQWxpZ246OlRvcDoKKyAgICAgICAg
ICAgICAgICBsb2dpY2FsVG9wID0geyB9OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBWZXJ0aWNhbEFsaWduOjpCb3R0b206CisgICAgICAgICAgICAgICAgbG9naWNh
bFRvcCA9IGxpbmVCb3hMb2dpY2FsSGVpZ2h0IC0gaW5saW5lTGV2ZWxCb3gtPmxheW91dEJvdW5k
cygpLmhlaWdodCgpOworICAgICAgICAgICAgICAgIHJvb3RJbmxpbmVCb3hPZmZzZXQgPSBpbmxp
bmVMZXZlbEJveC0+bGF5b3V0Qm91bmRzKCkuaGVpZ2h0KCkgLSBpbmxpbmVCb3hSZWxhdGl2ZUxv
Z2ljYWxIZWlnaHQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfSU1QTEVNRU5URURfWUVUKCk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpbmxpbmVMZXZlbEJv
eC0+c2V0TG9naWNhbFRvcChsb2dpY2FsVG9wKTsKKyAgICAgICAgICAgIGlmIChyb290SW5saW5l
Qm94T2Zmc2V0ID4gMCkKKyAgICAgICAgICAgICAgICByb290SW5saW5lQm94LnNldExvZ2ljYWxU
b3Aocm9vdElubGluZUJveC5sb2dpY2FsVG9wKCkgKyByb290SW5saW5lQm94T2Zmc2V0KTsKICAg
ICAgICAgfQotICAgICAgICBpbmxpbmVMZXZlbEJveC0+c2V0TG9naWNhbFRvcChpbmxpbmVMZXZl
bEJveExvZ2ljYWxUb3ApOwotICAgIH0KLSAgICBpZiAoIWxpbmVCb3guaXNMaW5lVmlzdWFsbHlF
bXB0eSgpKQotICAgICAgICBsaW5lQm94LnNldExvZ2ljYWxIZWlnaHQoY29udGVudExvZ2ljYWxI
ZWlnaHQpOworICAgIH07CisgICAgYWxpZ25MaW5lQm94UmVsYXRpdmVJbmxpbmVMZXZlbEJveGVz
KCk7CisgICAgbGluZUJveC5zZXRMb2dpY2FsSGVpZ2h0KGxpbmVCb3hMb2dpY2FsSGVpZ2h0KTsK
IH0KIAogTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmxpbmVCb3hG
b3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGRlcjo6TGluZUNvbnRlbnQmIGxpbmVDb250ZW50
KQpAQCAtMzk3LDQ3ICszOTksMTMgQEAgTGluZUJveCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6
R2VvbWV0cnk6OmxpbmVCb3hGb3JMaW5lQ29udGVudChjb25zdCBMaW5lQnVpbGQKICAgICByZXR1
cm4gTGluZUJveEJ1aWxkZXIoZm9ybWF0dGluZ0NvbnRleHQoKSkuYnVpbGQobGluZUNvbnRlbnQp
OwogfQogCi1JbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OkxpbmVSZWN0QW5kTGlu
ZUJveE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTGlu
ZUxvZ2ljYWxSZWN0KGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBy
b290U3R5bGUsIGNvbnN0IExpbmVCdWlsZGVyOjpMaW5lQ29udGVudCYgbGluZUNvbnRlbnQpIGNv
bnN0CitJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OkxpbmVSZWN0QW5kTGluZUJv
eE9mZnNldCBJbmxpbmVGb3JtYXR0aW5nQ29udGV4dDo6R2VvbWV0cnk6OmNvbXB1dGVkTGluZUxv
Z2ljYWxSZWN0KGNvbnN0IExpbmVCb3gmIGxpbmVCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiwgY29u
c3QgTGluZUJ1aWxkZXI6OkxpbmVDb250ZW50JiBsaW5lQ29udGVudCkgY29uc3QKIHsKLSAgICAv
LyBDb21wdXRlIHRoZSBsaW5lIGhlaWdodCBhbmQgdGhlIGxpbmUgYm94IHZlcnRpY2FsIG9mZnNl
dC4KLSAgICAvLyBUaGUgbGluZSBoZWlnaHQgaXMgZWl0aGVyIHRoZSBsaW5lLWhlaWdodCB2YWx1
ZSAobmVnYXRpdmUgdmFsdWUgbWVhbnMgbGluZSBoZWlnaHQgaXMgbm90IHNldCkgb3IgdGhlIGZv
bnQgbWV0cmljcydzIGxpbmUgc3BhY2luZy9saW5lIGJveCBoZWlnaHQuCi0gICAgLy8gVGhlIGxp
bmUgYm94IGlzIHRoZW4gcG9zaXRpb25lZCB1c2luZyB0aGUgaGFsZiBsZWFkaW5nIGNlbnRlcmlu
Zy4KLSAgICAvLyAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18g
IGxpbmUKLSAgICAvLyB8ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAgICAg
ICB8Ci0gICAgLy8gfCAgICAgICAgICAgICAgICAgICAgfCBsaW5lIHNwYWNpbmcgICAgICAgICAg
fAotICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIHYgICAgICAgICAgICAgICAgICAgICAgIHwK
LSAgICAvLyB8IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18LS0t
LS0tLS0tICBMaW5lQm94Ci0gICAgLy8gfHwgICAgXiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCAgICAgICAgIHwKLSAgICAvLyB8fCAgICB8IGxpbmUgYm94IGhlaWdodCAg
ICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgfAotICAgIC8vIHx8LS0tLXYtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLSB8IGFsaWdubWVudCBiYXNlbGlu
ZQotICAgIC8vIHwgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXwt
LS0tLS0tLS0KLSAgICAvLyB8ICAgICAgICAgICAgICAgICAgICBeICAgICAgICAgICAgICAgICAg
ICAgICB8ICAgXgotICAgIC8vIHwgICAgICAgICAgICAgICAgICAgIHwgbGluZSBzcGFjaW5nICAg
ICAgICAgIHwgICB8Ci0gICAgLy8gfF9fX19fX19fX19fX19fX19fX19fdl9fX19fX19fX19fX19f
X19fX19fX19ffCAgc2Nyb2xsYWJsZSBvdmVyZmxvdwotICAgIC8vCiAgICAgaWYgKGxpbmVDb250
ZW50LnJ1bnMuaXNFbXB0eSgpIHx8IGxpbmVCb3guaXNMaW5lVmlzdWFsbHlFbXB0eSgpKQogICAg
ICAgICByZXR1cm4geyB7IH0sIHsgbGluZUNvbnRlbnQubG9naWNhbFRvcExlZnQsIGxpbmVDb250
ZW50LmxpbmVMb2dpY2FsV2lkdGgsIHsgfSB9IH07CiAKICAgICBhdXRvIGxpbmVCb3hMb2dpY2Fs
SGVpZ2h0ID0gbGluZUJveC5sb2dpY2FsSGVpZ2h0KCk7Ci0gICAgYXV0byBsaW5lTG9naWNhbEhl
aWdodCA9IElubGluZUxheW91dFVuaXQgeyB9OwotICAgIGlmIChyb290U3R5bGUubGluZUhlaWdo
dCgpLmlzTmVnYXRpdmUoKSkgewotICAgICAgICAvLyBOZWdhdGl2ZSBsaW5lIGhlaWdodCB2YWx1
ZSBtZWFucyB0aGUgbGluZSBoZWlnaHQgaXMgZHJpdmVuIGJ5IHRoZSBjb250ZW50LgotICAgICAg
ICBhdXRvIHVzZWRMaW5lU3BhY2luZyA9IFsmXSB7Ci0gICAgICAgICAgICBhdXRvIGxvZ2ljYWxU
b3BXaXRoTGluZVNwYWNpbmcgPSBJbmxpbmVMYXlvdXRVbml0IHsgfTsKLSAgICAgICAgICAgIGF1
dG8gbG9naWNhbEJvdHRvbVdpdGhMaW5lU3BhY2luZyA9IGxpbmVCb3hMb2dpY2FsSGVpZ2h0Owot
ICAgICAgICAgICAgZm9yIChhdXRvJiBpbmxpbmVMZXZlbEJveCA6IGxpbmVCb3guaW5saW5lTGV2
ZWxCb3hMaXN0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBsaW5lU3BhY2luZyA9IGlu
bGluZUxldmVsQm94LT5saW5lU3BhY2luZygpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBjaGVjayBpZiBsaW5lIHNwYWNpbmcgaXMgZGlzdHJpYnV0ZWQgZXZlbmx5LgotICAgICAg
ICAgICAgICAgICAgICBsb2dpY2FsVG9wV2l0aExpbmVTcGFjaW5nID0gc3RkOjptaW4obG9naWNh
bFRvcFdpdGhMaW5lU3BhY2luZywgaW5saW5lTGV2ZWxCb3gtPmxvZ2ljYWxUb3AoKSAtICpsaW5l
U3BhY2luZyAvIDIpOwotICAgICAgICAgICAgICAgICAgICBsb2dpY2FsQm90dG9tV2l0aExpbmVT
cGFjaW5nID0gc3RkOjptYXgobG9naWNhbEJvdHRvbVdpdGhMaW5lU3BhY2luZywgaW5saW5lTGV2
ZWxCb3gtPmxvZ2ljYWxCb3R0b20oKSArICpsaW5lU3BhY2luZyAvIDIpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiAtbG9naWNhbFRvcFdpdGhM
aW5lU3BhY2luZyArIChsb2dpY2FsQm90dG9tV2l0aExpbmVTcGFjaW5nIC0gbGluZUJveExvZ2lj
YWxIZWlnaHQpOwotICAgICAgICB9OwotICAgICAgICBsaW5lTG9naWNhbEhlaWdodCA9IGxpbmVC
b3gubG9naWNhbEhlaWdodCgpICsgdXNlZExpbmVTcGFjaW5nKCk7Ci0gICAgfSBlbHNlCi0gICAg
ICAgIGxpbmVMb2dpY2FsSGVpZ2h0ID0gcm9vdFN0eWxlLmNvbXB1dGVkTGluZUhlaWdodCgpOwot
CisgICAgYXV0byBsaW5lTG9naWNhbEhlaWdodCA9IGxpbmVCb3gubG9naWNhbEhlaWdodCgpOwog
ICAgIGF1dG8gbG9naWNhbFJlY3QgPSBJbmxpbmVSZWN0IHsgbGluZUNvbnRlbnQubG9naWNhbFRv
cExlZnQsIGxpbmVDb250ZW50LmxpbmVMb2dpY2FsV2lkdGgsIGxpbmVMb2dpY2FsSGVpZ2h0fTsK
ICAgICAvLyBJbmxpbmUgdHJlZSBoZWlnaHQgaXMgYWxsIGludGVnZXIgYmFzZWQuCiAgICAgYXV0
byBsaW5lQm94T2Zmc2V0ID0gZmxvb3JmKChsaW5lTG9naWNhbEhlaWdodCAtIGxpbmVCb3hMb2dp
Y2FsSGVpZ2h0KSAvIDIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5b3V0L2lubGlu
ZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5s
aW5lZm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcAppbmRleCBkYTY3Y2FkMjgxYWQ1NmQ4N2Ez
ZDNmMDk0N2UwOWFlMTgwOTg3ZjhlLi4yMjc4MGY1MjE3YmM1ZmZlNGFlNzFhNWQ2MzNmMjBhMjhk
MTU2MGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9ybWF0dGlu
Zy9JbmxpbmVMaW5lQm94LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5lZm9y
bWF0dGluZy9JbmxpbmVMaW5lQm94LmNwcApAQCAtMzksNiArMzksMTIgQEAgTGluZUJveDo6SW5s
aW5lTGV2ZWxCb3g6OklubGluZUxldmVsQm94KGNvbnN0IEJveCYgbGF5b3V0Qm94LCBJbmxpbmVM
YXlvdXRVbml0IGwKIHsKIH0KIAorYm9vbCBMaW5lQm94OjpJbmxpbmVMZXZlbEJveDo6aGFzTGlu
ZUJveFJlbGF0aXZlQWxpZ25tZW50KCkgY29uc3QKK3sKKyAgICBhdXRvIHZlcnRpY2FsQWxpZ25t
ZW50ID0gbGF5b3V0Qm94KCkuc3R5bGUoKS52ZXJ0aWNhbEFsaWduKCk7CisgICAgcmV0dXJuIHZl
cnRpY2FsQWxpZ25tZW50ID09IFZlcnRpY2FsQWxpZ246OlRvcCB8fCB2ZXJ0aWNhbEFsaWdubWVu
dCA9PSBWZXJ0aWNhbEFsaWduOjpCb3R0b207Cit9CisKIExpbmVCb3g6OkxpbmVCb3goSW5saW5l
TGF5b3V0VW5pdCBjb250ZW50TG9naWNhbFdpZHRoLCBJc0xpbmVWaXN1YWxseUVtcHR5IGlzTGlu
ZVZpc3VhbGx5RW1wdHkpCiAgICAgOiBtX2xvZ2ljYWxTaXplKGNvbnRlbnRMb2dpY2FsV2lkdGgs
IHsgfSkKICAgICAsIG1faXNMaW5lVmlzdWFsbHlFbXB0eShpc0xpbmVWaXN1YWxseUVtcHR5ID09
IElzTGluZVZpc3VhbGx5RW1wdHk6OlllcykKQEAgLTYwLDE0ICs2NiwzNCBAQCB2b2lkIExpbmVC
b3g6OmFkZElubGluZUxldmVsQm94KHN0ZDo6dW5pcXVlX3B0cjxJbmxpbmVMZXZlbEJveD4mJiBp
bmxpbmVMZXZlbEJveAogSW5saW5lUmVjdCBMaW5lQm94Ojpsb2dpY2FsUmVjdEZvclRleHRSdW4o
Y29uc3QgTGluZTo6UnVuJiBydW4pIGNvbnN0CiB7CiAgICAgQVNTRVJUKHJ1bi5pc1RleHQoKSB8
fCBydW4uaXNMaW5lQnJlYWsoKSk7Ci0gICAgYXV0byYgcGFyZW50SW5saW5lQm94ID0gaW5saW5l
TGV2ZWxCb3hGb3JMYXlvdXRCb3gocnVuLmxheW91dEJveCgpLnBhcmVudCgpKTsKLSAgICBBU1NF
UlQocGFyZW50SW5saW5lQm94LmlzSW5saW5lQm94KCkpOwotICAgIGF1dG8mIGZvbnRNZXRyaWNz
ID0gcGFyZW50SW5saW5lQm94LmZvbnRNZXRyaWNzKCk7Ci0gICAgYXV0byBydW5sb2dpY2FsVG9w
ID0gcGFyZW50SW5saW5lQm94LmxvZ2ljYWxUb3AoKSArIHBhcmVudElubGluZUJveC5iYXNlbGlu
ZSgpIC0gZm9udE1ldHJpY3MuYXNjZW50KCk7CisgICAgYXV0byogcGFyZW50SW5saW5lQm94ID0g
JmlubGluZUxldmVsQm94Rm9yTGF5b3V0Qm94KHJ1bi5sYXlvdXRCb3goKS5wYXJlbnQoKSk7Cisg
ICAgQVNTRVJUKHBhcmVudElubGluZUJveC0+aXNJbmxpbmVCb3goKSk7CisgICAgYXV0byYgZm9u
dE1ldHJpY3MgPSBwYXJlbnRJbmxpbmVCb3gtPmZvbnRNZXRyaWNzKCk7CisgICAgYXV0byBydW5s
b2dpY2FsVG9wID0gcGFyZW50SW5saW5lQm94LT5sb2dpY2FsVG9wKCkgKyBwYXJlbnRJbmxpbmVC
b3gtPmJhc2VsaW5lKCkgLSBmb250TWV0cmljcy5hc2NlbnQoKTsKKworICAgIHdoaWxlIChwYXJl
bnRJbmxpbmVCb3ggIT0gbV9yb290SW5saW5lQm94LmdldCgpICYmICFwYXJlbnRJbmxpbmVCb3gt
Pmhhc0xpbmVCb3hSZWxhdGl2ZUFsaWdubWVudCgpKSB7CisgICAgICAgIHBhcmVudElubGluZUJv
eCA9ICZpbmxpbmVMZXZlbEJveEZvckxheW91dEJveChwYXJlbnRJbmxpbmVCb3gtPmxheW91dEJv
eCgpLnBhcmVudCgpKTsKKyAgICAgICAgQVNTRVJUKHBhcmVudElubGluZUJveC0+aXNJbmxpbmVC
b3goKSk7CisgICAgICAgIHJ1bmxvZ2ljYWxUb3AgKz0gcGFyZW50SW5saW5lQm94LT5sb2dpY2Fs
VG9wKCk7CisgICAgfQogICAgIElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCA9IGZvbnRN
ZXRyaWNzLmhlaWdodCgpOwogICAgIHJldHVybiB7IHJ1bmxvZ2ljYWxUb3AsIG1faG9yaXpvbnRh
bEFsaWdubWVudE9mZnNldC52YWx1ZU9yKElubGluZUxheW91dFVuaXQgeyB9KSArIHJ1bi5sb2dp
Y2FsTGVmdCgpLCBydW4ubG9naWNhbFdpZHRoKCksIGxvZ2ljYWxIZWlnaHQgfTsKIH0KIAorSW5s
aW5lUmVjdCBMaW5lQm94Ojpsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94KGNvbnN0IEJveCYg
bGF5b3V0Qm94KSBjb25zdAoreworICAgIGF1dG8qIGlubGluZUJveCA9ICZpbmxpbmVMZXZlbEJv
eEZvckxheW91dEJveChsYXlvdXRCb3gpOworICAgIGF1dG8gaW5saW5lQm94TG9naWNhbFJlY3Qg
PSBpbmxpbmVCb3gtPmxvZ2ljYWxSZWN0KCk7CisgICAgYXV0byBpbmxpbmVCb3hBYnNvbHV0ZWxv
Z2ljYWxUb3AgPSBpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKTsKKworICAgIHdoaWxlIChpbmxpbmVC
b3ggIT0gbV9yb290SW5saW5lQm94LmdldCgpICYmICFpbmxpbmVCb3gtPmhhc0xpbmVCb3hSZWxh
dGl2ZUFsaWdubWVudCgpKSB7CisgICAgICAgIGlubGluZUJveCA9ICZpbmxpbmVMZXZlbEJveEZv
ckxheW91dEJveChpbmxpbmVCb3gtPmxheW91dEJveCgpLnBhcmVudCgpKTsKKyAgICAgICAgQVNT
RVJUKGlubGluZUJveC0+aXNJbmxpbmVCb3goKSk7CisgICAgICAgIGlubGluZUJveEFic29sdXRl
bG9naWNhbFRvcCArPSBpbmxpbmVCb3gtPmxvZ2ljYWxUb3AoKTsKKyAgICB9CisgICAgcmV0dXJu
IHsgaW5saW5lQm94QWJzb2x1dGVsb2dpY2FsVG9wLCBtX2hvcml6b250YWxBbGlnbm1lbnRPZmZz
ZXQudmFsdWVPcihJbmxpbmVMYXlvdXRVbml0IHsgfSkgKyBpbmxpbmVCb3hMb2dpY2FsUmVjdC5s
ZWZ0KCksIGlubGluZUJveExvZ2ljYWxSZWN0LndpZHRoKCksIGlubGluZUJveExvZ2ljYWxSZWN0
LmhlaWdodCgpIH07Cit9CisKIH0KIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oIGIvU291cmNlL1dlYkNvcmUvbGF5
b3V0L2lubGluZWZvcm1hdHRpbmcvSW5saW5lTGluZUJveC5oCmluZGV4IDEzYzk0NjFhMWY1M2Rl
YzY2NjE1YTUwNGUzNWJhMjExYmRhMDM0OTYuLmViNTgzMTc5YzQ3NmI4Y2U0MTBiY2MwYTVkOGE1
NzhiOGMxZjY3YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2xheW91dC9pbmxpbmVmb3Jt
YXR0aW5nL0lubGluZUxpbmVCb3guaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9sYXlvdXQvaW5saW5l
Zm9ybWF0dGluZy9JbmxpbmVMaW5lQm94LmgKQEAgLTc5LDEyICs3OSwxMiBAQCBwdWJsaWM6CiAg
ICAgICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1faXNFbXB0eTsgfQogICAgICAg
ICB2b2lkIHNldElzTm9uRW1wdHkoKSB7IG1faXNFbXB0eSA9IGZhbHNlOyB9CiAKLSAgICAgICAg
T3B0aW9uYWw8SW5saW5lTGF5b3V0VW5pdD4gbGluZVNwYWNpbmcoKSBjb25zdCB7IHJldHVybiBt
X2xpbmVTcGFjaW5nOyB9CiAgICAgICAgIGNvbnN0IEZvbnRNZXRyaWNzJiBmb250TWV0cmljcygp
IGNvbnN0IHsgcmV0dXJuIGxheW91dEJveCgpLnN0eWxlKCkuZm9udE1ldHJpY3MoKTsgfQogICAg
ICAgICBjb25zdCBCb3gmIGxheW91dEJveCgpIGNvbnN0IHsgcmV0dXJuICptX2xheW91dEJveDsg
fQogCiAgICAgICAgIGJvb2wgaXNJbmxpbmVCb3goKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0g
VHlwZTo6SW5saW5lQm94IHx8IG1fdHlwZSA9PSBUeXBlOjpSb290SW5saW5lQm94OyB9CiAgICAg
ICAgIGJvb2wgaXNMaW5lQnJlYWtCb3goKSBjb25zdCB7IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6
TGluZUJyZWFrQm94OyB9CisgICAgICAgIGJvb2wgaGFzTGluZUJveFJlbGF0aXZlQWxpZ25tZW50
KCkgY29uc3Q7CiAKICAgICAgICAgZW51bSBjbGFzcyBUeXBlIHsKICAgICAgICAgICAgIElubGlu
ZUJveCwKQEAgLTEwNCwxNCArMTA0LDIzIEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBzZXRMb2dp
Y2FsSGVpZ2h0KElubGluZUxheW91dFVuaXQgbG9naWNhbEhlaWdodCkgeyBtX2xvZ2ljYWxSZWN0
LnNldEhlaWdodChsb2dpY2FsSGVpZ2h0KTsgfQogICAgICAgICB2b2lkIHNldEJhc2VsaW5lKElu
bGluZUxheW91dFVuaXQgYmFzZWxpbmUpIHsgbV9iYXNlbGluZSA9IGJhc2VsaW5lOyB9CiAgICAg
ICAgIHZvaWQgc2V0RGVzY2VudChJbmxpbmVMYXlvdXRVbml0IGRlc2NlbnQpIHsgbV9kZXNjZW50
ID0gZGVzY2VudDsgfQotICAgICAgICB2b2lkIHNldExpbmVTcGFjaW5nKElubGluZUxheW91dFVu
aXQgbGluZVNwYWNpbmcpIHsgbV9saW5lU3BhY2luZyA9IGxpbmVTcGFjaW5nOyB9CisKKyAgICAg
ICAgLy8gU2VlIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3MtaW5saW5lLTMvI2xheW91dC1ib3Vu
ZHMKKyAgICAgICAgc3RydWN0IExheW91dEJvdW5kcyB7CisgICAgICAgICAgICBJbmxpbmVMYXlv
dXRVbml0IGhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGFzY2VudCArIGRlc2NlbnQ7IH0KKworICAg
ICAgICAgICAgSW5saW5lTGF5b3V0VW5pdCBhc2NlbnQgeyAwIH07CisgICAgICAgICAgICBJbmxp
bmVMYXlvdXRVbml0IGRlc2NlbnQgeyAwIH07CisgICAgICAgIH07CisgICAgICAgIHZvaWQgc2V0
TGF5b3V0Qm91bmRzKGNvbnN0IExheW91dEJvdW5kcyYgbGF5b3V0Qm91bmRzKSB7IG1fbGF5b3V0
Qm91bmRzID0gbGF5b3V0Qm91bmRzOyB9CisgICAgICAgIExheW91dEJvdW5kcyBsYXlvdXRCb3Vu
ZHMoKSBjb25zdCB7IHJldHVybiBtX2xheW91dEJvdW5kczsgfQogCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgV2Vha1B0cjxjb25zdCBCb3g+IG1fbGF5b3V0Qm94OwogICAgICAgICBJbmxpbmVSZWN0
IG1fbG9naWNhbFJlY3Q7CisgICAgICAgIExheW91dEJvdW5kcyBtX2xheW91dEJvdW5kczsKICAg
ICAgICAgSW5saW5lTGF5b3V0VW5pdCBtX2Jhc2VsaW5lIHsgMCB9OwogICAgICAgICBPcHRpb25h
bDxJbmxpbmVMYXlvdXRVbml0PiBtX2Rlc2NlbnQ7Ci0gICAgICAgIE9wdGlvbmFsPElubGluZUxh
eW91dFVuaXQ+IG1fbGluZVNwYWNpbmc7CiAgICAgICAgIGJvb2wgbV9pc0VtcHR5IHsgdHJ1ZSB9
OwogICAgICAgICBUeXBlIG1fdHlwZSB7IFR5cGU6OklubGluZUJveCB9OwogICAgIH07CkBAIC0x
MjcsNyArMTM2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIGlzTGluZVZpc3VhbGx5RW1wdHkoKSBj
b25zdCB7IHJldHVybiBtX2lzTGluZVZpc3VhbGx5RW1wdHk7IH0KIAogICAgIGNvbnN0IElubGlu
ZUxldmVsQm94JiBpbmxpbmVMZXZlbEJveEZvckxheW91dEJveChjb25zdCBCb3gmIGxheW91dEJv
eCkgY29uc3QgeyByZXR1cm4gKm1faW5saW5lTGV2ZWxCb3hSZWN0TWFwLmdldCgmbGF5b3V0Qm94
KTsgfQorCiAgICAgSW5saW5lUmVjdCBsb2dpY2FsUmVjdEZvclRleHRSdW4oY29uc3QgTGluZTo6
UnVuJikgY29uc3Q7CisgICAgSW5saW5lUmVjdCBsb2dpY2FsUmVjdEZvcklubGluZUxldmVsQm94
KGNvbnN0IEJveCYpIGNvbnN0OworCiAgICAgYXV0byBpbmxpbmVMZXZlbEJveExpc3QoKSBjb25z
dCB7IHJldHVybiBtX2lubGluZUxldmVsQm94UmVjdE1hcC52YWx1ZXMoKTsgfQogICAgIGJvb2wg
Y29udGFpbnNJbmxpbmVMZXZlbEJveChjb25zdCBCb3gmIGxheW91dEJveCkgY29uc3QgeyByZXR1
cm4gbV9pbmxpbmVMZXZlbEJveFJlY3RNYXAuY29udGFpbnMoJmxheW91dEJveCk7IH0KIAo=
</data>
<flag name="commit-queue"
          id="427966"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>