<?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>151806</bug_id>
          
          <creation_ts>2015-12-03 09:44:24 -0800</creation_ts>
          <short_desc>Simple line layout: Print out simple line layout statistics for the current page from command line.</short_desc>
          <delta_ts>2015-12-06 19:57:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></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>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1145936</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2015-12-03 09:44:24 -0800</bug_when>
    <thetext>nytimes.com:

com.apple.WebKit.showSimpleLineLayoutCoverage-&gt;
---------------------------------------------------
Number of text blocks: total(440) non-simple(328)
Text length: total(19089) non-simple(13777)
overflow: visible: 1.54
nested renderers: 68.99
missing glyph: 0.11
unsupported TextFragment: 0.01
missing primary font: 1.84
simple line layout coverage: 27.83
---------------------------------------------------

com.apple.WebKit.showSimpleLineLayoutReasons -&gt;
---------------------------------------------------
&quot;A recall offoods containing ce&quot;(177): nested renderers
&quot;NYT Now                       &quot;(7): overflow: visible
&quot;SEARCH                        &quot;(6): overflow: visible
&quot;Mobile Applications           &quot;(24): nested renderers
&quot;Times Insider                 &quot;(27): nested renderers
&quot;Well: Ask Well: A Cure for Ros&quot;(61): nested renderers
&quot;By IAN LOVETT, RICHARD PÉREZ-P&quot;(68): nested renderers
&quot;MAGAZINE                      &quot;(8): nested renderers
&quot;In the Air: The Enduring Appea&quot;(86): nested renderers
&quot;Living In: Clinton Hill, Brook&quot;(89): nested renderers
&quot;Search for Homes for Sale or R&quot;(33): nested renderers
&quot;OPINION                       &quot;(7): nested renderers
&quot;One day after firing his polic&quot;(158): nested renderers
&quot;NJ.com                        &quot;(6): nested renderers
&quot;With Coal Industry Under Press&quot;(52): nested renderers
&quot;                              &quot;(1): unsupported TextFragment
&quot;Mass Shootings Stoke Ideologic&quot;(68): nested renderers
&quot;The Boston Globe              &quot;(16): nested renderers
&quot;Brazil’s lower house agreed to&quot;(166): nested renderers
&quot;ABC News                      &quot;(8): nested renderers
&quot;                              &quot;(9): overflow: visible, nested renderers
...
...
...
---------------------------------------------------</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145942</commentid>
    <comment_count>1</comment_count>
      <attachid>266535</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-03 10:02:18 -0800</bug_when>
    <thetext>Created attachment 266535
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1145954</commentid>
    <comment_count>2</comment_count>
      <attachid>266535</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-12-03 10:42:07 -0800</bug_when>
    <thetext>Comment on attachment 266535
Patch

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

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:63
&gt; +enum DismissingReason: uint64_t {

I don&apos;t really like &quot;DismissingReason&quot;. NonSimpleReasons?

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:64
&gt; +    NoReason                            = 1LLU  &lt;&lt; 1,

Shouldn&apos;t this be 1 &lt;&lt; 0?

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:780
&gt; +static void printReason(DismissingReasonFlags reason, TextStream&amp; stream)

Should pass a DismissingReason here.

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:930
&gt; +    for (DismissingReasonFlags reasonItem = EndOfReasons &gt;&gt; 1; reasonItem != NoReason; reasonItem &gt;&gt;= 1) {

DismissingReason or auto

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:1036
&gt; +    HashMap&lt;DismissingReasonFlags, unsigned&gt; flowStatistics;

DismissingReason

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:1065
&gt; +    fprintf(stderr, &quot;%s&quot;, stream.release().utf8().data());

Use WTFLogAlways so this works on iOS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146015</commentid>
    <comment_count>3</comment_count>
      <attachid>266546</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-03 12:37:23 -0800</bug_when>
    <thetext>Created attachment 266546
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146028</commentid>
    <comment_count>4</comment_count>
      <attachid>266548</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-03 13:01:09 -0800</bug_when>
    <thetext>Created attachment 266548
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146032</commentid>
    <comment_count>5</comment_count>
      <attachid>266535</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-12-03 13:07:51 -0800</bug_when>
    <thetext>Comment on attachment 266535
Patch

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

&gt;&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:63
&gt;&gt; +enum DismissingReason: uint64_t {
&gt; 
&gt; I don&apos;t really like &quot;DismissingReason&quot;. NonSimpleReasons?

It is really SimpleLineLayout::DismissingReason which sort of makes sense. SimpleLineLayout::NotUsedReason perhaps?

&gt;&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:64
&gt;&gt; +    NoReason                            = 1LLU  &lt;&lt; 1,
&gt; 
&gt; Shouldn&apos;t this be 1 &lt;&lt; 0?

It can be 0 const and doesn&apos;t need to be in this enum. Something like CanUse would read better:

return canUseForWithReason(flow, FallThrough::No) == CanUse;

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:118
&gt; +enum class FallThrough { Yes, No };

Maybe something like

enum class IncludeReasons { First, All }

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:121
&gt; +#ifndef NDEBUG
&gt; +#define SET_REASON_AND_RETURN_IF_NEEDED(reasons, reason, fallthrough) { \

Why can&apos;t we get all reasons in release build?

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:149
&gt; +            SET_REASON_AND_RETURN_IF_NEEDED(reasons, FlowTextHasNoBreakSpace, fallthrough);

Marco could just hardcode reasons and fallthrough variable names. But maybe this is more understandable? It is bit strange that the meaningful parameter is the middle one.

&gt; Source/WebCore/rendering/SimpleLineLayout.cpp:207
&gt; +    DismissingReasonFlags reasons = NoReason;

I think it is weird to initialize flags to non-zero value. If NoReason case is zero then this can be just

DismissingReasonFlags reasons = { };</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146045</commentid>
    <comment_count>6</comment_count>
      <attachid>266548</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-03 13:59:33 -0800</bug_when>
    <thetext>Comment on attachment 266548
Patch

Clearing flags on attachment: 266548

Committed r193374: &lt;http://trac.webkit.org/changeset/193374&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146046</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-12-03 13:59:36 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1146690</commentid>
    <comment_count>8</comment_count>
      <attachid>266733</attachid>
    <who name="alan">zalan</who>
    <bug_when>2015-12-06 12:21:08 -0800</bug_when>
    <thetext>Created attachment 266733
Addressing post-review comments on r193374</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266535</attachid>
            <date>2015-12-03 10:02:18 -0800</date>
            <delta_ts>2015-12-06 12:21:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151806-20151203100153.patch</filename>
            <type>text/plain</type>
            <size>30509</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEyNDk2OTYyNDgwYTZk
ODg3OTQzMjlmNjMxY2Y4NDAwNDI3YjdmNi4uNjIyNDQzMTUwOTdhYzUyNWE5OTI5NWVjYzFlM2Vh
OTQ0MzQ2NjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEyLTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBQcmludCBvdXQgc2ltcGxlIGxpbmUgbGF5b3V0IHN0YXRpc3RpY3MgZm9yIHRoZSBjdXJyZW50
IHBhZ2UgZnJvbSBjb21tYW5kIGxpbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTE4MDYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0Q292
ZXJhZ2UgcHJpbnRzIG91dCBhIGNvdmVyYWdlIHN1bW1hcnkgb2YgdGhlIGN1cnJlbnQgcGFnZSwK
KyAgICAgICAgd2hpbGUgY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dFJlYXNv
bnMgbGlzdHMgdGhlIG5vbi1zaW1wbGUgbGluZSBsYXlvdXQgYmxvY2tzIGluY2x1ZGluZyB0aGUg
cmVhc29ucyB3aHkKKyAgICAgICAgdGhleSBhcmUgbm90IGNvdmVyZWQuCisKKyAgICAgICAgTm8g
Y2hhbmdlIGluIGZ1bmN0aW9uYWxpdHkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxlTGlu
ZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VG
b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvckZv
bnRBbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZv
clN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcldp
dGhSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50UmVhc29uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50UmVhc29ucyk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFRleHRGb3JTdWJ0cmVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnRleHRMZW5ndGhGb3JTdWJ0cmVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxlY3ROb25FbXB0eUxlYWZSZW5k
ZXJCbG9ja0Zsb3dzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNvbGxl
Y3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UpOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRTaW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50U2ltcGxlTGluZUxh
eW91dENvdmVyYWdlKToKKwogMjAxNS0xMi0wMSAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4IGFub21hbHkgd2hlcmUgaXNNb3VzZUV2ZW50IHJldHVybnMgZmFs
c2UgZm9yIHdoZWVsIGV2ZW50cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1NpbXBsZUxpbmVMYXlvdXQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxp
bmVMYXlvdXQuY3BwCmluZGV4IGEzN2JiYmRlNTc3ZmQ3NTIwM2IyYmMzMzMyNmQ1NTYwNDIwNzky
MzEuLmE4YjI0OGU4MmIyMjFhZjU4ODA2NzU0N2FlM2RkODZiNmRjMzk1NDcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5b3V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKQEAgLTM1LDYgKzM1LDcg
QEAKICNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW5saW5lVGV4dEJveC5o
IgogI2luY2x1ZGUgIkxpbmVXaWR0aC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKICNpbmNsdWRlICJSZW5kZXJCbG9ja0Zsb3cuaCIKICNpbmNsdWRlICJS
ZW5kZXJDaGlsZEl0ZXJhdG9yLmgiCkBAIC00OSwxNiArNTAsOTUgQEAKICNpbmNsdWRlICJTaW1w
bGVMaW5lTGF5b3V0VGV4dEZyYWdtZW50SXRlcmF0b3IuaCIKICNpbmNsdWRlICJUZXh0LmgiCiAj
aW5jbHVkZSAiVGV4dFBhaW50U3R5bGUuaCIKKyNpbmNsdWRlICJUZXh0U3RyZWFtLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTaW1wbGVMaW5lTGF5b3V0IHsKIAorI2lmbmRl
ZiBOREVCVUcKK3ZvaWQgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UoKTsKK3ZvaWQgcHJp
bnRTaW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0KCk7CisjZW5kaWYKKworZW51bSBEaXNtaXNzaW5n
UmVhc29uOiB1aW50NjRfdCB7CisgICAgTm9SZWFzb24gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAxLAorICAgIEZsb3dJc0luc2lkZVJlZ2lvbiAgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgMiwKKyAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAgICA9
IDFMTFUgIDw8IDMsCisgICAgRmxvd0hhc091dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0LAorICAgIEZsb3dJc1J1YnkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgNSwKKyAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDYsCisgICAgRmxvd0hhc1RleHRPdmVyZmxvdyAgICAgICAgICAgICAgICAgPSAxTExVICA8
PCA3LAorICAgIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94ICAgICAgICAgICAgID0gMUxMVSAgPDwg
OCwKKyAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICA9IDFMTFUgIDw8IDks
CisgICAgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmcgICAgPSAxTExVICA8PCAxMCwK
KyAgICBGbG93SGFzTm9uU3VwcG9ydGVkQ2hpbGQgICAgICAgICAgICA9IDFMTFUgIDw8IDExLAor
ICAgIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0ICAgICAgICAgICAgID0gMUxMVSAgPDwgMTIsCisg
ICAgRmxvd0hhc1RleHREZWNvcmF0aW9uICAgICAgICAgICAgICAgPSAxTExVICA8PCAxMywKKyAg
ICBGbG93SXNKdXN0aWZ5QWxpZ25lZCAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE0LAorICAg
IEZsb3dIYXNPdmVyZmxvd1Zpc2libGUgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTUsCisgICAg
Rmxvd0lzTm90TFRSICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNiwKKyAgICBG
bG93SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSAgICAgICA9IDFMTFUgIDw8IDE3LAorICAgIEZs
b3dJc05vdFRvcFRvQm90dG9tICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTgsCisgICAgRmxv
d0hhc0xpbmVCcmVhayAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOSwKKyAgICBGbG93
SGFzV29yZEJyZWFrICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIwLAorICAgIEZsb3dI
YXNOb25Ob3JtYWxVbmljb2RlQmlEaSAgICAgICAgID0gMUxMVSAgPDwgMjEsCisgICAgRmxvd0hh
c1JUTE9yZGVyaW5nICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMiwKKyAgICBGbG93SGFz
TGluZUFsaWduRWRnZXMgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIzLAorICAgIEZsb3dIYXNM
aW5lU25hcCAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjQsCisgICAgRmxvd0hhc0h5
cGVuc0F1dG8gICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNSwKKyAgICBGbG93SGFzVGV4
dEVtcGhhc2lzRmlsbE9yTWFyayAgICAgICA9IDFMTFUgIDw8IDI2LAorICAgIEZsb3dIYXNUZXh0
U2hhZG93ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjcsCisgICAgRmxvd0hhc1BzZXVk
b0ZpcnN0TGluZSAgICAgICAgICAgICAgPSAxTExVICA8PCAyOCwKKyAgICBGbG93SGFzUHNldWRv
Rmlyc3RMZXR0ZXIgICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAorICAgIEZsb3dIYXNUZXh0Q29t
YmluZSAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzAsCisgICAgRmxvd0hhc1RleHRGaWxs
Qm94ICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMSwKKyAgICBGbG93SGFzQm9yZGVyRml0
TGluZXMgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAorICAgIEZsb3dIYXNOb25BdXRvTGlu
ZUJyZWFrICAgICAgICAgICAgID0gMUxMVSAgPDwgMzMsCisgICAgRmxvd0hhc05vbkF1dG9UcmFp
bGluZ1dvcmQgICAgICAgICAgPSAxTExVICA8PCAzNCwKKyAgICBGbG93SGFzU1ZHRm9udCAgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM1LAorICAgIEZsb3dUZXh0SXNFbXB0eSAgICAg
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzYsCisgICAgRmxvd1RleHRIYXNOb0JyZWFrU3Bh
Y2UgICAgICAgICAgICAgPSAxTExVICA8PCAzNywKKyAgICBGbG93VGV4dEhhc1NvZnRIeXBoZW4g
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM4LAorICAgIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hh
cmFjdGVyICAgICAgID0gMUxMVSAgPDwgMzksCisgICAgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250
ICAgICAgICAgICAgPSAxTExVICA8PCA0MCwKKyAgICBGbG93Rm9udElzTWlzc2luZ0dseXBoICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDQxLAorICAgIEZsb3dUZXh0SXNDb21iaW5lVGV4dCAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgNDIsCisgICAgRmxvd1RleHRJc1JlbmRlckNvdW50ZXIgICAg
ICAgICAgICAgPSAxTExVICA8PCA0MywKKyAgICBGbG93VGV4dElzUmVuZGVyUXVvdGUgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDQ0LAorICAgIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgNDUsCisgICAgRmxvd1RleHRJc1NWR0lubGluZVRleHQgICAgICAg
ICAgICAgPSAxTExVICA8PCA0NiwKKyAgICBGbG93Rm9udElzTm90U2ltcGxlICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQ3LAorICAgIEZlYXR1cmVJc0Rpc2FibGVkICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDgsCisgICAgRmxvd0hhc05vUGFyZW50ICAgICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA0OSwKKyAgICBGbG93SGFzTm9DaGlsZCAgICAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDUwLAorICAgIEVuZE9mUmVhc29ucyAgICAgICAgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgNTEKK307Cit0eXBlZGVmIHVpbnQ2NF90IERpc21pc3NpbmdSZWFzb25GbGFn
czsKKworZW51bSBjbGFzcyBGYWxsVGhyb3VnaCB7IFllcywgTm8gfTsKKworI2lmbmRlZiBOREVC
VUcKKyNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCByZWFz
b24sIGZhbGx0aHJvdWdoKSB7IFwKKyAgICAgICAgcmVhc29ucyB8PSByZWFzb247IFwKKyAgICAg
ICAgaWYgKGZhbGx0aHJvdWdoID09IEZhbGxUaHJvdWdoOjpObykgXAorICAgICAgICAgICAgcmV0
dXJuIHJlYXNvbnM7IFwKKyAgICB9CisjZWxzZQorI2RlZmluZSBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIHJlYXNvbiwgZmFsbHRocm91Z2gpIHsgXAorICAgICAgICBB
U1NFUlRfVU5VU0VEKGZhbGx0aHJvdWdoLCBmYWxsdGhyb3VnaCA9PSBGYWxsVGhyb3VnaDo6Tm8p
OyBcCisgICAgICAgIHJlYXNvbnMgfD0gcmVhc29uOyBcCisgICAgICAgIHJldHVybiByZWFzb25z
OyBcCisgICAgfQorI2VuZGlmCisKIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0ZXJUeXBlPgot
c3RhdGljIGJvb2wgY2FuVXNlRm9yVGV4dChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNp
Z25lZCBsZW5ndGgsIGNvbnN0IEZvbnQmIGZvbnQpCitzdGF0aWMgRGlzbWlzc2luZ1JlYXNvbkZs
YWdzIGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGVu
Z3RoLCBjb25zdCBGb250JiBmb250LCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKIHsKKyAgICBE
aXNtaXNzaW5nUmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwogICAgIC8vIEZJWE1FOiA8
dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdlbmVyYXRlcyBlbXB0eSB0ZXh0IG5vZGUuCiAgICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4dElzRW1wdHksIGZhbGx0aHJvdWdoKTsK
KwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcgJykK
QEAgLTY2LDEzMCArMTQ2LDE1NiBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IENo
YXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udAogCiAgICAgICAg
IC8vIFRoZXNlIHdvdWxkIGJlIGVhc3kgdG8gc3VwcG9ydC4KICAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBub0JyZWFrU3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SGFzTm9C
cmVha1NwYWNlLCBmYWxsdGhyb3VnaCk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5
cGhlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRIYXNTb2Z0SHlwaGVuLCBmYWxs
dGhyb3VnaCk7CiAKICAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGly
ZWN0aW9uKGNoYXJhY3Rlcik7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDCiAgICAgICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0g
VV9SSUdIVF9UT19MRUZUX09WRVJSSURFCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9M
RUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09W
RVJSSURFCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9S
TUFUIHx8IGRpcmVjdGlvbiA9PSBVX0JPVU5EQVJZX05FVVRSQUwpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJl
YXNvbnMsIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyLCBmYWxsdGhyb3VnaCk7CiAKICAg
ICAgICAgaWYgKCFmb250LmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dGb250SXNNaXNzaW5nR2x5cGgsIGZhbGx0aHJvdWdoKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlYXNvbnM7CiB9CiAKLXN0YXRpYyBib29s
IGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250
JiBmb250KQorc3RhdGljIERpc21pc3NpbmdSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0
IFJlbmRlclRleHQmIHRleHRSZW5kZXJlciwgY29uc3QgRm9udCYgZm9udCwgRmFsbFRocm91Z2gg
ZmFsbHRocm91Z2gpCiB7CiAgICAgaWYgKHRleHRSZW5kZXJlci5pczhCaXQoKSkKLSAgICAgICAg
cmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRleHRSZW5k
ZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQpOwotICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRS
ZW5kZXJlci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCk7
CisgICAgICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzOCgp
LCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBmb250LCBmYWxsdGhyb3VnaCk7CisgICAgcmV0
dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVuZGVy
ZXIudGV4dExlbmd0aCgpLCBmb250LCBmYWxsdGhyb3VnaCk7CiB9CiAKLXN0YXRpYyBib29sIGNh
blVzZUZvckZvbnRBbmRUZXh0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3N0YXRpYyBE
aXNtaXNzaW5nUmVhc29uRmxhZ3MgY2FuVXNlRm9yRm9udEFuZFRleHQoY29uc3QgUmVuZGVyQmxv
Y2tGbG93JiBmbG93LCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKIHsKKyAgICBEaXNtaXNzaW5n
UmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFs
bCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCiAg
ICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAgYXV0byYgcHJpbWFyeUZv
bnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAgICAgaWYgKHByaW1hcnlG
b250LmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzTWlzc2luZ1ByaW1hcnlGb250
LCBmYWxsdGhyb3VnaCk7CisgICAgaWYgKHByaW1hcnlGb250LmlzU1ZHRm9udCgpKQorICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNTVkdGb250
LCBmYWxsdGhyb3VnaCk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRleHRSZW5kZXJlciA6IGNo
aWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNDb21iaW5lVGV4dCgpIHx8IHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSB8fCB0ZXh0UmVu
ZGVyZXIuaXNRdW90ZSgpIHx8IHRleHRSZW5kZXJlci5pc1RleHRGcmFnbWVudCgpCi0gICAgICAg
ICAgICB8fCB0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpKQorICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4
dElzQ29tYmluZVRleHQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5p
c0NvdW50ZXIoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAg
aWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SXNSZW5kZXJRdW90ZSwgZmFsbHRocm91
Z2gpOworICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdtZW50KCkpCisgICAgICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SXNU
ZXh0RnJhZ21lbnQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1NW
R0lubGluZVRleHQoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd1RleHRJc1NWR0lubGluZVRleHQsIGZhbGx0aHJvdWdoKTsKICAgICAg
ICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIu
dGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnQp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93Rm9udElzTm90U2ltcGxlLCBmYWxsdGhyb3Vn
aCk7CisKKyAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQodGV4dFJlbmRl
cmVyLCBwcmltYXJ5Rm9udCwgZmFsbHRocm91Z2gpOworICAgICAgICBpZiAodGV4dFJlYXNvbnMg
IT0gTm9SZWFzb24pCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KHJlYXNvbnMsIHRleHRSZWFzb25zLCBmYWxsdGhyb3VnaCk7CiAgICAgfQotICAgIHJldHVybiB0
cnVlOworICAgIHJldHVybiByZWFzb25zOwogfQogCi1zdGF0aWMgYm9vbCBjYW5Vc2VGb3JTdHls
ZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgRGlzbWlzc2luZ1JlYXNvbkZsYWdz
IGNhblVzZUZvclN0eWxlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgRmFsbFRocm91Z2ggZmFs
bHRocm91Z2gpCiB7CisgICAgRGlzbWlzc2luZ1JlYXNvbkZsYWdzIHJlYXNvbnMgPSBOb1JlYXNv
bjsKICAgICBpZiAoc3R5bGUudGV4dE92ZXJmbG93KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFz
VGV4dE92ZXJmbG93LCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHREZWNvcmF0aW9u
c0luRWZmZWN0KCkgIT0gVGV4dERlY29yYXRpb25Ob25lKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hh
c1RleHREZWNvcmF0aW9uLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHRBbGlnbigp
ID09IEpVU1RJRlkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SXNKdXN0aWZ5QWxpZ25lZCwgZmFsbHRo
cm91Z2gpOwogICAgIC8vIE5vbi12aXNpYmxlIG92ZXJmbG93IHNob3VsZCBiZSBwcmV0dHkgZWFz
eSB0byBzdXBwb3J0LgogICAgIGlmIChzdHlsZS5vdmVyZmxvd1goKSAhPSBPVklTSUJMRSB8fCBz
dHlsZS5vdmVyZmxvd1koKSAhPSBPVklTSUJMRSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNPdmVy
Zmxvd1Zpc2libGUsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoIXN0eWxlLmlzTGVmdFRvUmlnaHRE
aXJlY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc05vdExUUiwgZmFsbHRocm91Z2gpOwog
ICAgIGlmIChzdHlsZS5saW5lQm94Q29udGFpbigpICE9IFJlbmRlclN0eWxlOjppbml0aWFsTGlu
ZUJveENvbnRhaW4oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3Bl
cnR5LCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLndyaXRpbmdNb2RlKCkgIT0gVG9wVG9C
b3R0b21Xcml0aW5nTW9kZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc05vdFRvcFRvQm90dG9tLCBm
YWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLmxpbmVCcmVhaygpICE9IExpbmVCcmVha0F1dG8p
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb25zLCBGbG93SGFzTGluZUJyZWFrLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYg
KHN0eWxlLndvcmRCcmVhaygpICE9IE5vcm1hbFdvcmRCcmVhaykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGlmIChzdHlsZS51bmljb2RlQmlkaSgpICE9IFVCTm9ybWFsIHx8IHN0eWxlLnJ0
bE9yZGVyaW5nKCkgIT0gTG9naWNhbE9yZGVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
aWYgKHN0eWxlLmxpbmVBbGlnbigpICE9IExpbmVBbGlnbk5vbmUgfHwgc3R5bGUubGluZVNuYXAo
KSAhPSBMaW5lU25hcE5vbmUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzV29yZEJyZWFrLCBmYWxs
dGhyb3VnaCk7CisgICAgaWYgKHN0eWxlLnVuaWNvZGVCaWRpKCkgIT0gVUJOb3JtYWwpCisgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc05vbk5v
cm1hbFVuaWNvZGVCaURpLCBmYWxsdGhyb3VnaCk7CisgICAgaWYgKHN0eWxlLnJ0bE9yZGVyaW5n
KCkgIT0gTG9naWNhbE9yZGVyKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNSVExPcmRlcmluZywgZmFsbHRocm91Z2gpOworICAgIGlmIChz
dHlsZS5saW5lQWxpZ24oKSAhPSBMaW5lQWxpZ25Ob25lKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNMaW5lQWxpZ25FZGdlcywgZmFsbHRo
cm91Z2gpOworICAgIGlmIChzdHlsZS5saW5lU25hcCgpICE9IExpbmVTbmFwTm9uZSkKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTGluZVNu
YXAsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUuaHlwaGVucygpID09IEh5cGhlbnNBdXRv
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQocmVhc29ucywgRmxvd0hhc0h5cGVuc0F1dG8sIGZhbGx0aHJvdWdoKTsKICAgICBp
ZiAoc3R5bGUudGV4dEVtcGhhc2lzRmlsbCgpICE9IFRleHRFbXBoYXNpc0ZpbGxGaWxsZWQgfHwg
c3R5bGUudGV4dEVtcGhhc2lzTWFyaygpICE9IFRleHRFbXBoYXNpc01hcmtOb25lKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcmssIGZhbGx0aHJvdWdoKTsKICAg
ICBpZiAoc3R5bGUudGV4dFNoYWRvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYg
KHN0eWxlLmhhc1BzZXVkb1N0eWxlKEZJUlNUX0xJTkUpIHx8IHN0eWxlLmhhc1BzZXVkb1N0eWxl
KEZJUlNUX0xFVFRFUikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dFNoYWRvdywgZmFsbHRo
cm91Z2gpOworICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5FKSkKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzUHNldWRv
Rmlyc3RMaW5lLCBmYWxsdGhyb3VnaCk7CisgICAgaWYgKHN0eWxlLmhhc1BzZXVkb1N0eWxlKEZJ
UlNUX0xFVFRFUikpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVh
c29ucywgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0
eWxlLmhhc1RleHRDb21iaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dENvbWJpbmUs
IGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUuYmFja2dyb3VuZENsaXAoKSA9PSBUZXh0Rmls
bEJveCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0RmlsbEJveCwgZmFsbHRocm91Z2gpOwog
ICAgIGlmIChzdHlsZS5ib3JkZXJGaXQoKSA9PSBCb3JkZXJGaXRMaW5lcykKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNv
bnMsIEZsb3dIYXNCb3JkZXJGaXRMaW5lcywgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS5s
aW5lQnJlYWsoKSAhPSBMaW5lQnJlYWtBdXRvKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc05vbkF1
dG9MaW5lQnJlYWssIGZhbGx0aHJvdWdoKTsKICNpZiBFTkFCTEUoQ1NTX1RSQUlMSU5HX1dPUkQp
CiAgICAgaWYgKHN0eWxlLnRyYWlsaW5nV29yZCgpICE9IFRyYWlsaW5nV29yZDo6QXV0bykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNOb25BdXRvVHJhaWxpbmdXb3JkLCBmYWxsdGhyb3VnaCk7CiAj
ZW5kaWYKLSAgICBpZiAoc3R5bGUuZm9udENhc2NhZGUoKS5wcmltYXJ5Rm9udCgpLmlzU1ZHRm9u
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHJlYXNvbnM7CiB9CiAKLWJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dykKK3N0YXRpYyBEaXNtaXNzaW5nUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEZhbGxUaHJvdWdoIGZhbGx0aHJvdWdoKQogeworI2lm
bmRlZiBOREVCVUcKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgcmVnaXN0ZXJOb3RpZnlDYWxsYmFj
aygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdlIiwgcHJpbnRT
aW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UpOworICAgICAgICByZWdpc3Rlck5vdGlmeUNhbGxiYWNr
KCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0UmVhc29ucyIsIHByaW50U2lt
cGxlTGluZUxheW91dEJsb2NrTGlzdCk7CisgICAgfSk7CisjZW5kaWYKKyAgICBEaXNtaXNzaW5n
UmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwogICAgIGlmICghZmxvdy5mcmFtZSgpLnNl
dHRpbmdzKCkuc2ltcGxlTGluZUxheW91dEVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZlYXR1
cmVJc0Rpc2FibGVkLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKCFmbG93LnBhcmVudCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd0hhc05vUGFyZW50LCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKCFmbG93
LmZpcnN0Q2hpbGQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNOb0NoaWxkLCBmYWxsdGhyb3Vn
aCk7CiAgICAgaWYgKGZsb3cuZmxvd1RocmVhZFN0YXRlKCkgIT0gUmVuZGVyT2JqZWN0OjpOb3RJ
bnNpZGVGbG93VGhyZWFkKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzSW5zaWRlUmVnaW9uLCBmYWxs
dGhyb3VnaCk7CiAgICAgaWYgKCFmbG93LmlzSG9yaXpvbnRhbFdyaXRpbmdNb2RlKCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb25zLCBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUsIGZhbGx0aHJvdWdoKTsKICAg
ICBpZiAoZmxvdy5oYXNPdXRsaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzT3V0bGluZSwg
ZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93LmlzUnVieVRleHQoKSB8fCBmbG93LmlzUnVieUJh
c2UoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc1J1YnksIGZhbGx0aHJvdWdoKTsKICAgICAvLyBQ
cmludGluZyBkb2VzIHBhZ2luYXRpb24gd2l0aG91dCBhIGZsb3cgdGhyZWFkLgogICAgIGlmIChm
bG93LmRvY3VtZW50KCkucGFnaW5hdGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SXNQYWdpbmF0
ZWQsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoZmxvdy5pc0Fub255bW91cygpICYmIGZsb3cuZmly
c3RMaW5lQmxvY2soKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIGZh
bGx0aHJvdWdoKTsKICAgICBpZiAoZmxvdy5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmxvdy5wYXJl
bnQoKS0+c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0
T3ZlcmZsb3csIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNEZXByZWNh
dGVkRmxleGlibGVCb3goKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94
LCBmYWxsdGhyb3VnaCk7CiAgICAgLy8gRklYTUU6IFBsYWNlaG9sZGVycyBkbyBzb21ldGhpbmcg
c3RyYW5nZS4KICAgICBpZiAoaXM8UmVuZGVyVGV4dENvbnRyb2w+KCpmbG93LnBhcmVudCgpKSAm
JiBkb3duY2FzdDxSZW5kZXJUZXh0Q29udHJvbD4oKmZsb3cucGFyZW50KCkpLnRleHRGb3JtQ29u
dHJvbEVsZW1lbnQoKS5wbGFjZWhvbGRlckVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dQ
YXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudCwgZmFsbHRocm91Z2gpOwogICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnRhdGlvbiBvZiB3cmFwPWhhcmQgbG9va3MgaW50byBsaW5lYm94ZXMuCiAgICAgaWYg
KGZsb3cucGFyZW50KCktPmlzVGV4dEFyZWEoKSAmJiBmbG93LnBhcmVudCgpLT5lbGVtZW50KCkt
PmZhc3RIYXNBdHRyaWJ1dGUoSFRNTE5hbWVzOjp3cmFwQXR0cikpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBG
bG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZywgZmFsbHRocm91Z2gpOwogICAgIC8vIFRo
aXMgY3VycmVudGx5IGNvdmVycyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tm
bG93PiN0ZXh0PGJyPjwvYmxvY2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4
dCBjYXNlcy4KICAgICAvLyBUaGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9i
bG9ja2Zsb3c+IGNhc2UgaXMgYWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBl
YXN5IHRvIGNvdmVyLgogICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7KSB7CkBAIC0yMDEsMTAgKzMwNywxMiBAQCBib29sIGNhblVzZUZvcihjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiAgICAgICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNv
bnMsIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCwgZmFsbHRocm91Z2gpOworICAgICAgICBicmVh
azsKICAgICB9Ci0gICAgaWYgKCFjYW5Vc2VGb3JTdHlsZShmbG93LnN0eWxlKCkpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgYXV0byBzdHlsZVJlYXNvbnMgPSBjYW5Vc2VGb3JTdHlsZShm
bG93LnN0eWxlKCksIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGVSZWFzb25zICE9IE5vUmVh
c29uKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIHN0
eWxlUmVhc29ucywgZmFsbHRocm91Z2gpOwogICAgIC8vIFdlIGNhbid0IHVzZSB0aGUgY29kZSBw
YXRoIGlmIGFueSBsaW5lcyB3b3VsZCBuZWVkIHRvIGJlIHNoaWZ0ZWQgYmVsb3cgZmxvYXRzLiBU
aGlzIGlzIGJlY2F1c2Ugd2UgZG9uJ3Qga2VlcCBwZXItbGluZSB5IGNvb3JkaW5hdGVzLgogICAg
IGlmIChmbG93LmNvbnRhaW5zRmxvYXRzKCkpIHsKICAgICAgICAgZmxvYXQgbWluaW11bVdpZHRo
TmVlZGVkID0gc3RkOjpudW1lcmljX2xpbWl0czxmbG9hdD46Om1heCgpOwpAQCAtMjE3LDE3ICsz
MjUsMjMgQEAgYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQogICAg
ICAgICAgICAgICAgIC8vIGlmIGEgZmxvYXQgaGFzIGEgc2hhcGUsIHdlIGNhbm5vdCB0ZWxsIGlm
IGNvbnRlbnQgd2lsbCBuZWVkIHRvIGJlIHNoaWZ0ZWQgdW50aWwgYWZ0ZXIgd2UgbGF5IGl0IG91
dCwKICAgICAgICAgICAgICAgICAvLyBzaW5jZSB0aGUgYW1vdW50IG9mIHNwYWNlIGlzIG5vdCB1
bmlmb3JtIGZvciB0aGUgaGVpZ2h0IG9mIHRoZSBmbG9hdC4KICAgICAgICAgICAgICAgICBpZiAo
ZmxvYXRpbmdPYmplY3QtPnJlbmRlcmVyKCkuc2hhcGVPdXRzaWRlSW5mbygpKQotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQsIGZh
bGx0aHJvdWdoKTsKICNlbmRpZgogICAgICAgICAgICAgICAgIGZsb2F0IGF2YWlsYWJsZVdpZHRo
ID0gZmxvdy5hdmFpbGFibGVMb2dpY2FsV2lkdGhGb3JMaW5lKGZsb2F0aW5nT2JqZWN0LT55KCks
IGZhbHNlKTsKICAgICAgICAgICAgICAgICBpZiAoYXZhaWxhYmxlV2lkdGggPCBtaW5pbXVtV2lk
dGhOZWVkZWQpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFz
VW5zdXBwb3J0ZWRGbG9hdCwgZmFsbHRocm91Z2gpOwogICAgICAgICAgICAgfQogICAgICAgICB9
CiAgICAgfQotICAgIGlmICghY2FuVXNlRm9yRm9udEFuZFRleHQoZmxvdykpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gdHJ1ZTsKKyAgICBhdXRvIGZvbnRBbmRUZXh0UmVhc29u
cyA9IGNhblVzZUZvckZvbnRBbmRUZXh0KGZsb3csIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoZm9u
dEFuZFRleHRSZWFzb25zICE9IE5vUmVhc29uKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIGZvbnRBbmRUZXh0UmVhc29ucywgZmFsbHRocm91Z2gpOwor
ICAgIHJldHVybiByZWFzb25zOworfQorCitib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGZsb3cpCit7CisgICAgcmV0dXJuIGNhblVzZUZvcldpdGhSZWFzb24oZmxvdywgRmFs
bFRocm91Z2g6Ok5vKSA9PSBOb1JlYXNvbjsKIH0KIAogc3RhdGljIGZsb2F0IGNvbXB1dGVMaW5l
TGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZhaWxhYmxlV2lkdGgsIGZsb2F0IGNv
bW1pdHRlZFdpZHRoLCBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCkKQEAgLTY2Miw1ICs3NzYsMjk0
IEBAIExheW91dDo6TGF5b3V0KGNvbnN0IFJ1blZlY3RvciYgcnVuVmVjdG9yLCB1bnNpZ25lZCBs
aW5lQ291bnQpCiAgICAgbWVtY3B5KG1fcnVucywgcnVuVmVjdG9yLmRhdGEoKSwgbV9ydW5Db3Vu
dCAqIHNpemVvZihSdW4pKTsKIH0KIAorI2lmbmRlZiBOREVCVUcKK3N0YXRpYyB2b2lkIHByaW50
UmVhc29uKERpc21pc3NpbmdSZWFzb25GbGFncyByZWFzb24sIFRleHRTdHJlYW0mIHN0cmVhbSkK
K3sKKyAgICBzd2l0Y2ggKHJlYXNvbikgeworICAgIGNhc2UgRmxvd0lzSW5zaWRlUmVnaW9uOgor
ICAgICAgICBzdHJlYW0gPDwgImZsb3cgaXMgaW5zaWRlIHJlZ2lvbiI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlOgorICAgICAgICBzdHJlYW0g
PDwgImhvcml6b250YWwgd3JpdGluZyBtb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
bG93SGFzT3V0bGluZToKKyAgICAgICAgc3RyZWFtIDw8ICJvdXRsaW5lIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGbG93SXNSdWJ5OgorICAgICAgICBzdHJlYW0gPDwgInJ1YnkiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc1BhZ2luYXRlZDoKKyAgICAgICAgc3RyZWFtIDw8
ICJwYWdpbmF0ZWQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNUZXh0T3ZlcmZs
b3c6CisgICAgICAgIHN0cmVhbSA8PCAidGV4dC1vdmVyZmxvdyI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3g6CisgICAgICAgIHN0cmVhbSA8PCAiZGVw
cmljYXRlZEZsZXhCb3giOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dQYXJlbnRJc1Bs
YWNlaG9sZGVyRWxlbWVudDoKKyAgICAgICAgc3RyZWFtIDw8ICJwbGFjZWhvbGRlciBlbGVtZW50
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFw
cGluZzoKKyAgICAgICAgc3RyZWFtIDw8ICJ3cmFwcGluZyB0ZXh0YXJlYSI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmxvd0hhc05vblN1cHBvcnRlZENoaWxkOgorICAgICAgICBzdHJlYW0g
PDwgIm5lc3RlZCByZW5kZXJlcnMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNV
bnN1cHBvcnRlZEZsb2F0OgorICAgICAgICBzdHJlYW0gPDwgImNvbXBsaWNhdGVkIGZsb2F0IjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzVGV4dERlY29yYXRpb246CisgICAgICAg
IHN0cmVhbSA8PCAidGV4dC1kZWNvcmF0aW9uIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
bG93SXNKdXN0aWZ5QWxpZ25lZDoKKyAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LWFsaWduOiBqdXN0
aWZ5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzT3ZlcmZsb3dWaXNpYmxlOgor
ICAgICAgICBzdHJlYW0gPDwgIm92ZXJmbG93OiB2aXNpYmxlIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGbG93SXNOb3RMVFI6CisgICAgICAgIHN0cmVhbSA8PCAiZGlyIGlzIG5vdCBMVFIi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5
OgorICAgICAgICBzdHJlYW0gPDwgImxpbmUtYm94LWNvbnRhaW4gcHJvcGVydHkiOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEZsb3dJc05vdFRvcFRvQm90dG9tOgorICAgICAgICBzdHJlYW0g
PDwgIm5vbiB0b3AtdG8tYm90dG9tIGZsb3ciOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZs
b3dIYXNMaW5lQnJlYWs6CisgICAgICAgIHN0cmVhbSA8PCAibGluZS1icmVhayBwcm9wZXJ0eSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1dvcmRCcmVhazoKKyAgICAgICAgc3Ry
ZWFtIDw8ICJ3b3JkLWJyZWFrIHByb3BlcnR5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
bG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGk6CisgICAgICAgIHN0cmVhbSA8PCAibm9uLW5vcm1h
bCBVbmljb2RlIGJpZGkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNSVExPcmRl
cmluZzoKKyAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LXJ0bC1vcmRlcmluZyI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0xpbmVBbGlnbkVkZ2VzOgorICAgICAgICBzdHJlYW0g
PDwgIi13ZWJraXQtbGluZS1hbGlnbiBlZGdlcyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rmxvd0hhc0xpbmVTbmFwOgorICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtbGluZS1zbmFwIHBy
b3BlcnR5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzSHlwZW5zQXV0bzoKKyAg
ICAgICAgc3RyZWFtIDw8ICJoeXBoZW46IGF1dG8iOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZsb3dIYXNUZXh0RW1waGFzaXNGaWxsT3JNYXJrOgorICAgICAgICBzdHJlYW0gPDwgInRleHQt
ZW1waGFzaXMgKGZpbGwvbWFyaykiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNQ
c2V1ZG9GaXJzdExpbmU6CisgICAgICAgIHN0cmVhbSA8PCAiZmlyc3QtbGluZSI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1BzZXVkb0ZpcnN0TGV0dGVyOgorICAgICAgICBzdHJl
YW0gPDwgImZpcnN0LWxldHRlciI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1Rl
eHRDb21iaW5lOgorICAgICAgICBzdHJlYW0gPDwgInRleHQgY29tYmluZSI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmxvd0hhc1RleHRGaWxsQm94OgorICAgICAgICBzdHJlYW0gPDwgImJh
Y2tncm91bmQtY29sb3IgKHRleHQtZmlsbCkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZs
b3dIYXNCb3JkZXJGaXRMaW5lczoKKyAgICAgICAgc3RyZWFtIDw8ICItd2Via2l0LWJvcmRlci1m
aXQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrOgor
ICAgICAgICBzdHJlYW0gPDwgImxpbmUtYnJlYWsgaXMgbm90IGF1dG8iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dIYXNOb25BdXRvVHJhaWxpbmdXb3JkOgorICAgICAgICBzdHJlYW0g
PDwgIi1hcHBsZS10cmFpbGluZy13b3JkIGlzIG5vdCBhdXRvIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGbG93SGFzU1ZHRm9udDoKKyAgICAgICAgc3RyZWFtIDw8ICJTVkcgZm9udCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd1RleHRIYXNOb0JyZWFrU3BhY2U6CisgICAgICAg
IHN0cmVhbSA8PCAiTm8tYnJlYWstc3BhY2UgY2hhcmFjdGVyIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGbG93VGV4dEhhc1NvZnRIeXBoZW46CisgICAgICAgIHN0cmVhbSA8PCAic29mdCBo
eXBoZW4gY2hhcmFjdGVyIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dEhhc0Rp
cmVjdGlvbkNoYXJhY3RlcjoKKyAgICAgICAgc3RyZWFtIDw8ICJkaXJlY3Rpb24gY2hhcmFjdGVy
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SXNNaXNzaW5nUHJpbWFyeUZvbnQ6Cisg
ICAgICAgIHN0cmVhbSA8PCAibWlzc2luZyBwcmltYXJ5IGZvbnQiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZsb3dGb250SXNNaXNzaW5nR2x5cGg6CisgICAgICAgIHN0cmVhbSA8PCAibWlz
c2luZyBnbHlwaCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd1RleHRJc0NvbWJpbmVU
ZXh0OgorICAgICAgICBzdHJlYW0gPDwgInRleHQgaXMgY29tYmluZSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmxvd1RleHRJc1JlbmRlckNvdW50ZXI6CisgICAgICAgIHN0cmVhbSA8PCAi
dW5zdXBwb3J0ZWQgUmVuZGVyQ291bnRlciI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxv
d1RleHRJc1JlbmRlclF1b3RlOgorICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFJlbmRl
clF1b3RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzVGV4dEZyYWdtZW50
OgorICAgICAgICBzdHJlYW0gPDwgInVuc3VwcG9ydGVkIFRleHRGcmFnbWVudCI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmxvd1RleHRJc1NWR0lubGluZVRleHQ6CisgICAgICAgIHN0cmVh
bSA8PCAidW5zdXBwb3J0ZWQgU1ZHSW5saW5lVGV4dCI7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgRmxvd0ZvbnRJc05vdFNpbXBsZToKKyAgICAgICAgc3RyZWFtIDw8ICJjb21wbGV4dCBmb250
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzVGV4dFNoYWRvdzoKKyAgICAgICAg
c3RyZWFtIDw8ICJ0ZXh0LXNoYWRvdyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd1Rl
eHRJc0VtcHR5OgorICAgIGNhc2UgRmxvd0hhc05vQ2hpbGQ6CisgICAgY2FzZSBGbG93SGFzTm9Q
YXJlbnQ6CisgICAgY2FzZSBGZWF0dXJlSXNEaXNhYmxlZDoKKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50UmVhc29ucyhEaXNtaXNzaW5n
UmVhc29uRmxhZ3MgcmVhc29ucywgVGV4dFN0cmVhbSYgc3RyZWFtKQoreworICAgIGJvb2wgZmly
c3QgPSB0cnVlOworICAgIGZvciAoRGlzbWlzc2luZ1JlYXNvbkZsYWdzIHJlYXNvbkl0ZW0gPSBF
bmRPZlJlYXNvbnMgPj4gMTsgcmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0g
MSkgeworICAgICAgICBpZiAoIShyZWFzb25zICYgcmVhc29uSXRlbSkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgc3RyZWFtIDw8IChmaXJzdCA/ICIgIiA6ICIsICIpOworICAgICAg
ICBmaXJzdCA9IGZhbHNlOworICAgICAgICBwcmludFJlYXNvbihyZWFzb25JdGVtLCBzdHJlYW0p
OworICAgIH0KK30KKworc3RhdGljIHZvaWQgcHJpbnRUZXh0Rm9yU3VidHJlZShjb25zdCBSZW5k
ZXJPYmplY3QmIHJlbmRlcmVyLCB1bnNpZ25lZCYgY2hhcmFjdGVyc0xlZnQsIFRleHRTdHJlYW0m
IHN0cmVhbSkKK3sKKyAgICBpZiAoIWNoYXJhY3RlcnNMZWZ0KQorICAgICAgICByZXR1cm47Cisg
ICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9
IGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0KCk7CisgICAgICAgIHRleHQgPSB0
ZXh0LnN0cmlwV2hpdGVTcGFjZSgpOworICAgICAgICB1bnNpZ25lZCBsZW4gPSBzdGQ6Om1pbihj
aGFyYWN0ZXJzTGVmdCwgdGV4dC5sZW5ndGgoKSk7CisgICAgICAgIHN0cmVhbSA8PCB0ZXh0Lmxl
ZnQobGVuKTsKKyAgICAgICAgY2hhcmFjdGVyc0xlZnQgLT0gbGVuOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAgICAgICBy
ZXR1cm47CisgICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1l
bnQ+KHJlbmRlcmVyKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpKQorICAgICAgICBwcmludFRleHRGb3JTdWJ0cmVlKCpjaGlsZCwgY2hhcmFjdGVyc0xl
ZnQsIHN0cmVhbSk7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCB0ZXh0TGVuZ3RoRm9yU3VidHJlZShj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQoreworICAgIGlmIChpczxSZW5kZXJUZXh0Pihy
ZW5kZXJlcikpCisgICAgICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlciku
dGV4dExlbmd0aCgpOworICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAg
ICAgICByZXR1cm4gMDsKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKKyAgICBmb3IgKGNv
bnN0IGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHRl
eHRMZW5ndGggKz0gdGV4dExlbmd0aEZvclN1YnRyZWUoKmNoaWxkKTsKKyAgICByZXR1cm4gdGV4
dExlbmd0aDsKK30KKworc3RhdGljIHZvaWQgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2Nr
Rmxvd3MoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJlciwgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiYgbGVhZlJlbmRlcmVycykKK3sKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVu
ZGVyZXIpKSB7CisgICAgICAgIGlmICghZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRl
eHRMZW5ndGgoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRmluZCBSZW5kZXJC
bG9ja0Zsb3cgYW5jZXN0b3IuCisgICAgICAgIGZvciAoY29uc3QgYXV0byogY3VycmVudCA9IHJl
bmRlcmVyLnBhcmVudCgpOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCkpIHsK
KyAgICAgICAgICAgIGlmICghaXM8UmVuZGVyQmxvY2tGbG93PihjdXJyZW50KSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGxlYWZSZW5kZXJlcnMuYWRkKGRvd25jYXN0
PFJlbmRlckJsb2NrRmxvdz4oY3VycmVudCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoIWlzPFJlbmRlckVsZW1lbnQ+KHJl
bmRlcmVyKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBk
b3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hp
bGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJl
bmRlckJsb2NrRmxvd3MoKmNoaWxkLCBsZWFmUmVuZGVyZXJzKTsKK30KKworc3RhdGljIHZvaWQg
Y29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShIYXNoU2V0
PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+JiBsZWFmUmVuZGVyZXJzKQoreworICAgIGZvciAoY29u
c3QgYXV0byogZG9jdW1lbnQgOiBEb2N1bWVudDo6YWxsRG9jdW1lbnRzKCkpIHsKKyAgICAgICAg
aWYgKCFkb2N1bWVudC0+cmVuZGVyVmlldygpIHx8IGRvY3VtZW50LT5pblBhZ2VDYWNoZSgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICghZG9jdW1lbnQtPmlzSFRNTERvY3Vt
ZW50KCkgJiYgIWRvY3VtZW50LT5pc1hIVE1MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93cygqZG9jdW1l
bnQtPnJlbmRlclZpZXcoKSwgbGVhZlJlbmRlcmVycyk7CisgICAgfQorfQorCit2b2lkIHByaW50
U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCgpCit7CisgICAgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOworICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJC
bG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7CisgICAgaWYgKCFsZWFmUmVu
ZGVyZXJzLnNpemUoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHRleHQgZm91bmQg
aW4gdGhpcyBkb2N1bWVudFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVGV4dFN0
cmVhbSBzdHJlYW07CisgICAgc3RyZWFtIDw8ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgICAgZm9yIChjb25zdCBhdXRvKiBmbG93IDog
bGVhZlJlbmRlcmVycykgeworICAgICAgICBhdXRvIHJlYXNvbiA9IGNhblVzZUZvcldpdGhSZWFz
b24oKmZsb3csIEZhbGxUaHJvdWdoOjpZZXMpOworICAgICAgICBpZiAocmVhc29uID09IE5vUmVh
c29uKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIHVuc2lnbmVkIHByaW50ZWRMZW5n
dGggPSAzMDsKKyAgICAgICAgc3RyZWFtIDw8ICJcIiI7CisgICAgICAgIHByaW50VGV4dEZvclN1
YnRyZWUoKmZsb3csIHByaW50ZWRMZW5ndGgsIHN0cmVhbSk7CisgICAgICAgIGZvciAoO3ByaW50
ZWRMZW5ndGggPiAwOyAtLXByaW50ZWRMZW5ndGgpCisgICAgICAgICAgICBzdHJlYW0gPDwgIiAi
OworICAgICAgICBzdHJlYW0gPDwgIlwiKCIgPDwgdGV4dExlbmd0aEZvclN1YnRyZWUoKmZsb3cp
IDw8ICIpOiI7CisgICAgICAgIHByaW50UmVhc29ucyhyZWFzb24sIHN0cmVhbSk7CisgICAgICAg
IHN0cmVhbSA8PCAiXG4iOworICAgIH0KKyAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBmcHJpbnRmKHN0ZGVy
ciwgIiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9pZCBwcmlu
dFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpCit7CisgICAgSGFzaFNldDxjb25zdCBSZW5kZXJC
bG9ja0Zsb3cqPiBsZWFmUmVuZGVyZXJzOworICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJC
bG9ja0Zsb3dzRm9yQ3VycmVudFBhZ2UobGVhZlJlbmRlcmVycyk7CisgICAgaWYgKCFsZWFmUmVu
ZGVyZXJzLnNpemUoKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIHRleHQgZm91bmQg
aW4gdGhpcyBkb2N1bWVudFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgVGV4dFN0
cmVhbSBzdHJlYW07CisgICAgSGFzaE1hcDxEaXNtaXNzaW5nUmVhc29uRmxhZ3MsIHVuc2lnbmVk
PiBmbG93U3RhdGlzdGljczsKKyAgICB1bnNpZ25lZCB0ZXh0TGVuZ3RoID0gMDsKKyAgICB1bnNp
Z25lZCB1bnN1cHBvcnRlZFRleHRMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIG51bWJlck9mVW5z
dXBwb3J0ZWRMZWFmQmxvY2tzID0gMDsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGZsb3cgOiBsZWFm
UmVuZGVyZXJzKSB7CisgICAgICAgIGF1dG8gZmxvd0xlbmd0aCA9IHRleHRMZW5ndGhGb3JTdWJ0
cmVlKCpmbG93KTsKKyAgICAgICAgdGV4dExlbmd0aCArPSBmbG93TGVuZ3RoOworICAgICAgICBh
dXRvIHJlYXNvbnMgPSBjYW5Vc2VGb3JXaXRoUmVhc29uKCpmbG93LCBGYWxsVGhyb3VnaDo6WWVz
KTsKKyAgICAgICAgaWYgKHJlYXNvbnMgPT0gTm9SZWFzb24pCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgKytudW1iZXJPZlVuc3VwcG9ydGVkTGVhZkJsb2NrczsKKyAgICAgICAgdW5z
dXBwb3J0ZWRUZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7CisgICAgICAgIGZvciAoYXV0byByZWFz
b25JdGVtID0gRW5kT2ZSZWFzb25zID4+IDE7IHJlYXNvbkl0ZW0gIT0gTm9SZWFzb247IHJlYXNv
bkl0ZW0gPj49IDEpIHsKKyAgICAgICAgICAgIGlmICghKHJlYXNvbnMgJiByZWFzb25JdGVtKSkK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gZmxv
d1N0YXRpc3RpY3MuYWRkKHJlYXNvbkl0ZW0sIGZsb3dMZW5ndGgpOworICAgICAgICAgICAgaWYg
KCFyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZh
bHVlICs9IGZsb3dMZW5ndGg7CisgICAgICAgIH0KKyAgICB9CisgICAgc3RyZWFtIDw8ICItLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisgICAg
c3RyZWFtIDw8ICJOdW1iZXIgb2YgdGV4dCBibG9ja3M6IHRvdGFsKCIgPDwgIGxlYWZSZW5kZXJl
cnMuc2l6ZSgpIDw8ICIpIG5vbi1zaW1wbGUoIiA8PCBudW1iZXJPZlVuc3VwcG9ydGVkTGVhZkJs
b2NrcyA8PCAiKVxuVGV4dCBsZW5ndGg6IHRvdGFsKCIgPDwKKyAgICAgICAgdGV4dExlbmd0aCA8
PCAiKSBub24tc2ltcGxlKCIgPDwgdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoIDw8ICIpXG4iOworICAg
IGZvciAoY29uc3QgYXV0byByZWFzb25FbnRyeSA6IGZsb3dTdGF0aXN0aWNzKSB7CisgICAgICAg
IHByaW50UmVhc29uKHJlYXNvbkVudHJ5LmtleSwgc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtIDw8
ICI6ICIgPDwgKGZsb2F0KXJlYXNvbkVudHJ5LnZhbHVlIC8gKGZsb2F0KXRleHRMZW5ndGggKiAx
MDAgPDwgIiVcbiI7CisgICAgfQorICAgIHN0cmVhbSA8PCAic2ltcGxlIGxpbmUgbGF5b3V0IGNv
dmVyYWdlOiAiIDw8IChmbG9hdCkodGV4dExlbmd0aCAtIHVuc3VwcG9ydGVkVGV4dExlbmd0aCkg
LyAoZmxvYXQpdGV4dExlbmd0aCAqIDEwMCA8PCAiJVxuIjsKKyAgICBzdHJlYW0gPDwgIi0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBm
cHJpbnRmKHN0ZGVyciwgIiVzIiwgc3RyZWFtLnJlbGVhc2UoKS51dGY4KCkuZGF0YSgpKTsKK30K
KyNlbmRpZgogfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266546</attachid>
            <date>2015-12-03 12:37:23 -0800</date>
            <delta_ts>2015-12-03 13:01:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151806-20151203123659.patch</filename>
            <type>text/plain</type>
            <size>30577</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEyNDk2OTYyNDgwYTZk
ODg3OTQzMjlmNjMxY2Y4NDAwNDI3YjdmNi4uNDcxMDQ2NGI2MGMxMTM2M2FjYTViNGYwMWU0ZWNm
MDBiYWNlOWQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEyLTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBQcmludCBvdXQgc2ltcGxlIGxpbmUgbGF5b3V0IHN0YXRpc3RpY3MgZm9yIHRoZSBjdXJyZW50
IHBhZ2UgZnJvbSBjb21tYW5kIGxpbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTE4MDYKKworICAgICAgICBSZXZpZXdlZCBTaW1vbiBGcmFzZXIu
CisKKyAgICAgICAgY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdl
IHByaW50cyBvdXQgYSBjb3ZlcmFnZSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UsCisgICAg
ICAgIHdoaWxlIGNvbS5hcHBsZS5XZWJLaXQuc2hvd1NpbXBsZUxpbmVMYXlvdXRSZWFzb25zIGxp
c3RzIHRoZSBub24tc2ltcGxlIGxpbmUgbGF5b3V0IGJsb2NrcyBpbmNsdWRpbmcgdGhlIHJlYXNv
bnMgd2h5CisgICAgICAgIHRoZXkgYXJlIG5vdCBjb3ZlcmVkLgorCisgICAgICAgIE5vIGNoYW5n
ZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JGb250QW5k
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JXaXRoUmVh
c29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFJlYXNvbik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFJlYXNvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRUZXh0Rm9yU3VidHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojp0ZXh0TGVuZ3RoRm9yU3VidHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxv
Y2tGbG93cyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpjb2xsZWN0Tm9u
RW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93c0ZvckN1cnJlbnRQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZSk6CisKIDIwMTUtMTItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCBhbm9tYWx5IHdoZXJlIGlzTW91c2VFdmVudCByZXR1cm5zIGZhbHNlIGZv
ciB3aGVlbCBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0LmNwcAppbmRleCBhMzdiYmJkZTU3N2ZkNzUyMDNiMmJjMzMzMjZkNTU2MDQyMDc5MjMxLi43
NTYwNWQ0OTQwZThlOTE3YTZmM2M0N2Y0MDIwMzdiZjc2MzhhOTI2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNp
bmNsdWRlICJMaW5lV2lkdGguaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgpAQCAtNDksMTYgKzUwLDk2IEBACiAjaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRleHRQYWludFN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKKyNpZm5kZWYgTkRF
QlVHCit2b2lkIHByaW50U2ltcGxlTGluZUxheW91dENvdmVyYWdlKCk7Cit2b2lkIHByaW50U2lt
cGxlTGluZUxheW91dEJsb2NrTGlzdCgpOworI2VuZGlmCisKK2VudW0gTm9uU2ltcGxlTGF5b3V0
UmVhc29uXyA6IHVpbnQ2NF90IHsKKyAgICBOb1JlYXNvbiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDAsCisgICAgRmxvd0lzSW5zaWRlUmVnaW9uICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCAxLAorICAgIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZSAgICAgICAg
ID0gMUxMVSAgPDwgMiwKKyAgICBGbG93SGFzT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDMsCisgICAgRmxvd0lzUnVieSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0LAorICAgIEZsb3dJc1BhZ2luYXRlZCAgICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgNSwKKyAgICBGbG93SGFzVGV4dE92ZXJmbG93ICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDYsCisgICAgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3ggICAgICAgICAgICAgPSAxTExVICA8
PCA3LAorICAgIEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudCAgICAgID0gMUxMVSAgPDwg
OCwKKyAgICBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICA9IDFMTFUgIDw8IDks
CisgICAgRmxvd0hhc05vblN1cHBvcnRlZENoaWxkICAgICAgICAgICAgPSAxTExVICA8PCAxMCwK
KyAgICBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICA9IDFMTFUgIDw8IDExLAor
ICAgIEZsb3dIYXNUZXh0RGVjb3JhdGlvbiAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTIsCisg
ICAgRmxvd0lzSnVzdGlmeUFsaWduZWQgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxMywKKyAg
ICBGbG93SGFzT3ZlcmZsb3dWaXNpYmxlICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE0LAorICAg
IEZsb3dJc05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTUsCisgICAg
Rmxvd0hhc0xpbmVCb3hDb250YWluUHJvcGVydHkgICAgICAgPSAxTExVICA8PCAxNiwKKyAgICBG
bG93SXNOb3RUb3BUb0JvdHRvbSAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE3LAorICAgIEZs
b3dIYXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTgsCisgICAgRmxv
d0hhc1dvcmRCcmVhayAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOSwKKyAgICBGbG93
SGFzTm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICA9IDFMTFUgIDw8IDIwLAorICAgIEZsb3dI
YXNSVExPcmRlcmluZyAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjEsCisgICAgRmxvd0hh
c0xpbmVBbGlnbkVkZ2VzICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMiwKKyAgICBGbG93SGFz
TGluZVNuYXAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIzLAorICAgIEZsb3dIYXNI
eXBlbnNBdXRvICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjQsCisgICAgRmxvd0hhc1Rl
eHRFbXBoYXNpc0ZpbGxPck1hcmsgICAgICAgPSAxTExVICA8PCAyNSwKKyAgICBGbG93SGFzVGV4
dFNoYWRvdyAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI2LAorICAgIEZsb3dIYXNQc2V1
ZG9GaXJzdExpbmUgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjcsCisgICAgRmxvd0hhc1BzZXVk
b0ZpcnN0TGV0dGVyICAgICAgICAgICAgPSAxTExVICA8PCAyOCwKKyAgICBGbG93SGFzVGV4dENv
bWJpbmUgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAorICAgIEZsb3dIYXNUZXh0Rmls
bEJveCAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzAsCisgICAgRmxvd0hhc0JvcmRlckZp
dExpbmVzICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMSwKKyAgICBGbG93SGFzTm9uQXV0b0xp
bmVCcmVhayAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAorICAgIEZsb3dIYXNOb25BdXRvVHJh
aWxpbmdXb3JkICAgICAgICAgID0gMUxMVSAgPDwgMzMsCisgICAgRmxvd0hhc1NWR0ZvbnQgICAg
ICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzNCwKKyAgICBGbG93VGV4dElzRW1wdHkgICAg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM1LAorICAgIEZsb3dUZXh0SGFzTm9CcmVha1Nw
YWNlICAgICAgICAgICAgID0gMUxMVSAgPDwgMzYsCisgICAgRmxvd1RleHRIYXNTb2Z0SHlwaGVu
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzNywKKyAgICBGbG93VGV4dEhhc0RpcmVjdGlvbkNo
YXJhY3RlciAgICAgICA9IDFMTFUgIDw8IDM4LAorICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9u
dCAgICAgICAgICAgID0gMUxMVSAgPDwgMzksCisgICAgRmxvd0ZvbnRJc01pc3NpbmdHbHlwaCAg
ICAgICAgICAgICAgPSAxTExVICA8PCA0MCwKKyAgICBGbG93VGV4dElzQ29tYmluZVRleHQgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDQxLAorICAgIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyICAg
ICAgICAgICAgID0gMUxMVSAgPDwgNDIsCisgICAgRmxvd1RleHRJc1JlbmRlclF1b3RlICAgICAg
ICAgICAgICAgPSAxTExVICA8PCA0MywKKyAgICBGbG93VGV4dElzVGV4dEZyYWdtZW50ICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDQ0LAorICAgIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0ICAgICAg
ICAgICAgID0gMUxMVSAgPDwgNDUsCisgICAgRmxvd0ZvbnRJc05vdFNpbXBsZSAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA0NiwKKyAgICBGZWF0dXJlSXNEaXNhYmxlZCAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQ3LAorICAgIEZsb3dIYXNOb1BhcmVudCAgICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDgsCisgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA0OSwKKyAgICBFbmRPZlJlYXNvbnMgICAgICAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDUwCit9OwordHlwZWRlZiB1aW50NjRfdCBOb25TaW1wbGVMYXlvdXRSZWFz
b247Cit0eXBlZGVmIHVpbnQ2NF90IE5vblNpbXBsZUxheW91dFJlYXNvbkZsYWdzOworCitlbnVt
IGNsYXNzIEZhbGxUaHJvdWdoIHsgWWVzLCBObyB9OworCisjaWZuZGVmIE5ERUJVRworI2RlZmlu
ZSBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIHJlYXNvbiwgZmFsbHRo
cm91Z2gpIHsgXAorICAgICAgICByZWFzb25zIHw9IHJlYXNvbjsgXAorICAgICAgICBpZiAoZmFs
bHRocm91Z2ggPT0gRmFsbFRocm91Z2g6Ok5vKSBcCisgICAgICAgICAgICByZXR1cm4gcmVhc29u
czsgXAorICAgIH0KKyNlbHNlCisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgcmVhc29uLCBmYWxsdGhyb3VnaCkgeyBcCisgICAgICAgIEFTU0VSVF9VTlVT
RUQoZmFsbHRocm91Z2gsIGZhbGx0aHJvdWdoID09IEZhbGxUaHJvdWdoOjpObyk7IFwKKyAgICAg
ICAgcmVhc29ucyB8PSByZWFzb247IFwKKyAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9
CisjZW5kaWYKKwogdGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9v
bCBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0
aCwgY29uc3QgRm9udCYgZm9udCkKK3N0YXRpYyBOb25TaW1wbGVMYXlvdXRSZWFzb25GbGFncyBj
YW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwg
Y29uc3QgRm9udCYgZm9udCwgRmFsbFRocm91Z2ggZmFsbHRocm91Z2gpCiB7CisgICAgTm9uU2lt
cGxlTGF5b3V0UmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwogICAgIC8vIEZJWE1FOiA8
dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdlbmVyYXRlcyBlbXB0eSB0ZXh0IG5vZGUuCiAgICAgaWYg
KCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4dElzRW1wdHksIGZhbGx0aHJvdWdoKTsK
KwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewogICAgICAgICBV
Q2hhciBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwogICAgICAgICBpZiAoY2hhcmFjdGVyID09ICcgJykK
QEAgLTY2LDEzMCArMTQ3LDE1NiBAQCBzdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IENo
YXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udAogCiAgICAgICAg
IC8vIFRoZXNlIHdvdWxkIGJlIGVhc3kgdG8gc3VwcG9ydC4KICAgICAgICAgaWYgKGNoYXJhY3Rl
ciA9PSBub0JyZWFrU3BhY2UpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SGFzTm9C
cmVha1NwYWNlLCBmYWxsdGhyb3VnaCk7CiAgICAgICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5
cGhlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRIYXNTb2Z0SHlwaGVuLCBmYWxs
dGhyb3VnaCk7CiAKICAgICAgICAgVUNoYXJEaXJlY3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGly
ZWN0aW9uKGNoYXJhY3Rlcik7CiAgICAgICAgIGlmIChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19M
RUZUIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfQVJBQklDCiAgICAgICAgICAgICB8
fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0g
VV9SSUdIVF9UT19MRUZUX09WRVJSSURFCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9M
RUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09W
RVJSSURFCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9S
TUFUIHx8IGRpcmVjdGlvbiA9PSBVX0JPVU5EQVJZX05FVVRSQUwpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJl
YXNvbnMsIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyLCBmYWxsdGhyb3VnaCk7CiAKICAg
ICAgICAgaWYgKCFmb250LmdseXBoRm9yQ2hhcmFjdGVyKGNoYXJhY3RlcikpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dGb250SXNNaXNzaW5nR2x5cGgsIGZhbGx0aHJvdWdoKTsKICAgICB9
Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIHJlYXNvbnM7CiB9CiAKLXN0YXRpYyBib29s
IGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250
JiBmb250KQorc3RhdGljIE5vblNpbXBsZUxheW91dFJlYXNvbkZsYWdzIGNhblVzZUZvclRleHQo
Y29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250LCBGYWxsVGhy
b3VnaCBmYWxsdGhyb3VnaCkKIHsKICAgICBpZiAodGV4dFJlbmRlcmVyLmlzOEJpdCgpKQotICAg
ICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczgoKSwgdGV4
dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCk7Ci0gICAgcmV0dXJuIGNhblVzZUZvclRleHQo
dGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVuZGVyZXIudGV4dExlbmd0aCgpLCBm
b250KTsKKyAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3Rl
cnM4KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQsIGZhbGx0aHJvdWdoKTsKKyAg
ICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczE2KCksIHRleHRS
ZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQsIGZhbGx0aHJvdWdoKTsKIH0KIAotc3RhdGljIGJv
b2wgY2FuVXNlRm9yRm9udEFuZFRleHQoY29uc3QgUmVuZGVyQmxvY2tGbG93JiBmbG93KQorc3Rh
dGljIE5vblNpbXBsZUxheW91dFJlYXNvbkZsYWdzIGNhblVzZUZvckZvbnRBbmRUZXh0KGNvbnN0
IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgRmFsbFRocm91Z2ggZmFsbHRocm91Z2gpCiB7CisgICAg
Tm9uU2ltcGxlTGF5b3V0UmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwogICAgIC8vIFdl
IGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5IG9uIHRoZSBw
cmltYXJ5IGZvbnQuCiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxlKCk7CiAgICAg
YXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlGb250KCk7CiAg
ICAgaWYgKHByaW1hcnlGb250LmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzTWlz
c2luZ1ByaW1hcnlGb250LCBmYWxsdGhyb3VnaCk7CisgICAgaWYgKHByaW1hcnlGb250LmlzU1ZH
Rm9udCgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMs
IEZsb3dIYXNTVkdGb250LCBmYWxsdGhyb3VnaCk7CisKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRl
eHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7Ci0gICAgICAg
IGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpIHx8IHRleHRSZW5kZXJlci5pc0NvdW50
ZXIoKSB8fCB0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpIHx8IHRleHRSZW5kZXJlci5pc1RleHRGcmFn
bWVudCgpCi0gICAgICAgICAgICB8fCB0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21i
aW5lVGV4dCgpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChy
ZWFzb25zLCBGbG93VGV4dElzQ29tYmluZVRleHQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgaWYg
KHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc1JlbmRlckNvdW50ZXIsIGZhbGx0aHJv
dWdoKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkpCisgICAgICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SXNSZW5kZXJR
dW90ZSwgZmFsbHRocm91Z2gpOworICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlzVGV4dEZyYWdt
ZW50KCkpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNv
bnMsIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgaWYgKHRl
eHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc1NWR0lubGluZVRleHQsIGZhbGx0
aHJvdWdoKTsKICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBhdGgoVGV4dFJ1
bih0ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJl
ciwgcHJpbWFyeUZvbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93Rm9udElzTm90U2lt
cGxlLCBmYWxsdGhyb3VnaCk7CisKKyAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZv
clRleHQodGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udCwgZmFsbHRocm91Z2gpOworICAgICAgICBp
ZiAodGV4dFJlYXNvbnMgIT0gTm9SZWFzb24pCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIHRleHRSZWFzb25zLCBmYWxsdGhyb3VnaCk7CiAgICAg
fQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZWFzb25zOwogfQogCi1zdGF0aWMgYm9v
bCBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0aWMgTm9uU2lt
cGxlTGF5b3V0UmVhc29uRmxhZ3MgY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUmIHN0
eWxlLCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKIHsKKyAgICBOb25TaW1wbGVMYXlvdXRSZWFz
b25GbGFncyByZWFzb25zID0gTm9SZWFzb247CiAgICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygp
KQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQocmVhc29ucywgRmxvd0hhc1RleHRPdmVyZmxvdywgZmFsbHRocm91Z2gpOwogICAg
IGlmIChzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICE9IFRleHREZWNvcmF0aW9uTm9u
ZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0RGVjb3JhdGlvbiwgZmFsbHRocm91Z2gpOwog
ICAgIGlmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBKVVNUSUZZKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxv
d0lzSnVzdGlmeUFsaWduZWQsIGZhbGx0aHJvdWdoKTsKICAgICAvLyBOb24tdmlzaWJsZSBvdmVy
ZmxvdyBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KICAgICBpZiAoc3R5bGUub3Zl
cmZsb3dYKCkgIT0gT1ZJU0lCTEUgfHwgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChyZWFzb25zLCBGbG93SGFzT3ZlcmZsb3dWaXNpYmxlLCBmYWxsdGhyb3VnaCk7CiAgICAg
aWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
SXNOb3RMVFIsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUubGluZUJveENvbnRhaW4oKSAh
PSBSZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVCb3hDb250YWluKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBG
bG93SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHls
ZS53cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25z
LCBGbG93SXNOb3RUb3BUb0JvdHRvbSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS5saW5l
QnJlYWsoKSAhPSBMaW5lQnJlYWtBdXRvKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc0xpbmVCcmVh
aywgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSAhPSBOb3JtYWxXb3Jk
QnJlYWspCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUudW5pY29kZUJpZGko
KSAhPSBVQk5vcm1hbCB8fCBzdHlsZS5ydGxPcmRlcmluZygpICE9IExvZ2ljYWxPcmRlcikKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS5saW5lQWxpZ24oKSAhPSBMaW5lQWxp
Z25Ob25lIHx8IHN0eWxlLmxpbmVTbmFwKCkgIT0gTGluZVNuYXBOb25lKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29u
cywgRmxvd0hhc1dvcmRCcmVhaywgZmFsbHRocm91Z2gpOworICAgIGlmIChzdHlsZS51bmljb2Rl
QmlkaSgpICE9IFVCTm9ybWFsKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSwgZmFsbHRocm91Z2gpOwor
ICAgIGlmIChzdHlsZS5ydGxPcmRlcmluZygpICE9IExvZ2ljYWxPcmRlcikKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzUlRMT3JkZXJpbmcs
IGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0gTGluZUFsaWduTm9u
ZSkKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
SGFzTGluZUFsaWduRWRnZXMsIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUubGluZVNuYXAo
KSAhPSBMaW5lU25hcE5vbmUpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd0hhc0xpbmVTbmFwLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxl
Lmh5cGhlbnMoKSA9PSBIeXBoZW5zQXV0bykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNIeXBlbnNB
dXRvLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHRFbXBoYXNpc0ZpbGwoKSAhPSBU
ZXh0RW1waGFzaXNGaWxsRmlsbGVkIHx8IHN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0
RW1waGFzaXNNYXJrTm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxs
T3JNYXJrLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHRTaGFkb3coKSkKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5F
KSB8fCBzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd0hhc1RleHRTaGFkb3csIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUuaGFzUHNldWRv
U3R5bGUoRklSU1RfTElORSkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwgZmFsbHRocm91Z2gpOworICAgIGlm
IChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQorICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwg
ZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVh
c29ucywgRmxvd0hhc1RleHRDb21iaW5lLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLmJh
Y2tncm91bmRDbGlwKCkgPT0gVGV4dEZpbGxCb3gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4
dEZpbGxCb3gsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkgPT0gQm9y
ZGVyRml0TGluZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzQm9yZGVyRml0TGluZXMsIGZhbGx0
aHJvdWdoKTsKICAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrQXV0bykKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrLCBmYWxsdGhyb3VnaCk7CiAjaWYg
RU5BQkxFKENTU19UUkFJTElOR19XT1JEKQogICAgIGlmIChzdHlsZS50cmFpbGluZ1dvcmQoKSAh
PSBUcmFpbGluZ1dvcmQ6OkF1dG8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9uQXV0b1RyYWls
aW5nV29yZCwgZmFsbHRocm91Z2gpOwogI2VuZGlmCi0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRl
KCkucHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiB0cnVlOworICAgIHJldHVybiByZWFzb25zOwogfQogCi1ib29sIGNhblVzZUZvcihj
b25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCitzdGF0aWMgTm9uU2ltcGxlTGF5b3V0UmVhc29u
RmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEZh
bGxUaHJvdWdoIGZhbGx0aHJvdWdoKQogeworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsK
KyAgICAgICAgcmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2lt
cGxlTGluZUxheW91dENvdmVyYWdlIiwgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UpOwor
ICAgICAgICByZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1w
bGVMaW5lTGF5b3V0UmVhc29ucyIsIHByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCk7Cisg
ICAgfSk7CisjZW5kaWYKKyAgICBOb25TaW1wbGVMYXlvdXRSZWFzb25GbGFncyByZWFzb25zID0g
Tm9SZWFzb247CiAgICAgaWYgKCFmbG93LmZyYW1lKCkuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5
b3V0RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmVhdHVyZUlzRGlzYWJsZWQsIGZhbGx0aHJv
dWdoKTsKICAgICBpZiAoIWZsb3cucGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9Q
YXJlbnQsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc05vQ2hpbGQsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoZmxvdy5mbG93
VGhyZWFkU3RhdGUoKSAhPSBSZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZsb3dUaHJlYWQpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb25zLCBGbG93SXNJbnNpZGVSZWdpb24sIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoIWZs
b3cuaXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNIb3Jp
em9uYWxXcml0aW5nTW9kZSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93Lmhhc091dGxpbmUo
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNPdXRsaW5lLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYg
KGZsb3cuaXNSdWJ5VGV4dCgpIHx8IGZsb3cuaXNSdWJ5QmFzZSgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd0lzUnVieSwgZmFsbHRocm91Z2gpOwogICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlv
biB3aXRob3V0IGEgZmxvdyB0aHJlYWQuCiAgICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc1BhZ2luYXRlZCwgZmFsbHRocm91Z2gpOwogICAg
IGlmIChmbG93LmlzQW5vbnltb3VzKCkgJiYgZmxvdy5maXJzdExpbmVCbG9jaygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChm
bG93LmlzQW5vbnltb3VzQmxvY2soKSAmJiBmbG93LnBhcmVudCgpLT5zdHlsZSgpLnRleHRPdmVy
ZmxvdygpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1RleHRPdmVyZmxvdywgZmFsbHRocm91Z2gp
OwogICAgIGlmIChmbG93LnBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3gsIGZhbGx0aHJvdWdoKTsKICAgICAv
LyBGSVhNRTogUGxhY2Vob2xkZXJzIGRvIHNvbWV0aGluZyBzdHJhbmdlLgogICAgIGlmIChpczxS
ZW5kZXJUZXh0Q29udHJvbD4oKmZsb3cucGFyZW50KCkpICYmIGRvd25jYXN0PFJlbmRlclRleHRD
b250cm9sPigqZmxvdy5wYXJlbnQoKSkudGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnBsYWNlaG9s
ZGVyRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05f
QU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVt
ZW50LCBmYWxsdGhyb3VnaCk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9mIHdyYXA9
aGFyZCBsb29rcyBpbnRvIGxpbmVib3hlcy4KICAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNUZXh0
QXJlYSgpICYmIGZsb3cucGFyZW50KCktPmVsZW1lbnQoKS0+ZmFzdEhhc0F0dHJpYnV0ZShIVE1M
TmFtZXM6OndyYXBBdHRyKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0
aFdyYXBwaW5nLCBmYWxsdGhyb3VnaCk7CiAgICAgLy8gVGhpcyBjdXJyZW50bHkgY292ZXJzIDxi
bG9ja2Zsb3c+I3RleHQ8L2Jsb2NrZmxvdz4sIDxibG9ja2Zsb3c+I3RleHQ8YnI+PC9ibG9ja2Zs
b3c+IGFuZCBtdXRpcGxlIChzaWJsaW5nKSBSZW5kZXJUZXh0IGNhc2VzLgogICAgIC8vIFRoZSA8
YmxvY2tmbG93PjxpbmxpbmU+I3RleHQ8L2lubGluZT48L2Jsb2NrZmxvdz4gY2FzZSBpcyBhbHNv
IHBvcHVsYXIgYW5kIHNob3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gY292ZXIuCiAgICAgZm9y
IChjb25zdCBhdXRvKiBjaGlsZCA9IGZsb3cuZmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKQEAgLTIw
MSwxMCArMzA4LDEyIEBAIGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxv
dykKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAg
ICBjb250aW51ZTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc05vblN1cHBvcnRl
ZENoaWxkLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWNh
blVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBh
dXRvIHN0eWxlUmVhc29ucyA9IGNhblVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSwgZmFsbHRocm91
Z2gpOworICAgIGlmIChzdHlsZVJlYXNvbnMgIT0gTm9SZWFzb24pCisgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgc3R5bGVSZWFzb25zLCBmYWxsdGhyb3Vn
aCk7CiAgICAgLy8gV2UgY2FuJ3QgdXNlIHRoZSBjb2RlIHBhdGggaWYgYW55IGxpbmVzIHdvdWxk
IG5lZWQgdG8gYmUgc2hpZnRlZCBiZWxvdyBmbG9hdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24n
dCBrZWVwIHBlci1saW5lIHkgY29vcmRpbmF0ZXMuCiAgICAgaWYgKGZsb3cuY29udGFpbnNGbG9h
dHMoKSkgewogICAgICAgICBmbG9hdCBtaW5pbXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om51bWVyaWNf
bGltaXRzPGZsb2F0Pjo6bWF4KCk7CkBAIC0yMTcsMTcgKzMyNiwyMyBAQCBib29sIGNhblVzZUZv
cihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCiAgICAgICAgICAgICAgICAgLy8gaWYgYSBm
bG9hdCBoYXMgYSBzaGFwZSwgd2UgY2Fubm90IHRlbGwgaWYgY29udGVudCB3aWxsIG5lZWQgdG8g
YmUgc2hpZnRlZCB1bnRpbCBhZnRlciB3ZSBsYXkgaXQgb3V0LAogICAgICAgICAgICAgICAgIC8v
IHNpbmNlIHRoZSBhbW91bnQgb2Ygc3BhY2UgaXMgbm90IHVuaWZvcm0gZm9yIHRoZSBoZWlnaHQg
b2YgdGhlIGZsb2F0LgogICAgICAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVy
ZXIoKS5zaGFwZU91dHNpZGVJbmZvKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChy
ZWFzb25zLCBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwgZmFsbHRocm91Z2gpOwogI2VuZGlmCiAg
ICAgICAgICAgICAgICAgZmxvYXQgYXZhaWxhYmxlV2lkdGggPSBmbG93LmF2YWlsYWJsZUxvZ2lj
YWxXaWR0aEZvckxpbmUoZmxvYXRpbmdPYmplY3QtPnkoKSwgZmFsc2UpOwogICAgICAgICAgICAg
ICAgIGlmIChhdmFpbGFibGVXaWR0aCA8IG1pbmltdW1XaWR0aE5lZWRlZCkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCBmYWxs
dGhyb3VnaCk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFjYW5V
c2VGb3JGb250QW5kVGV4dChmbG93KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biB0cnVlOworICAgIGF1dG8gZm9udEFuZFRleHRSZWFzb25zID0gY2FuVXNlRm9yRm9udEFuZFRl
eHQoZmxvdywgZmFsbHRocm91Z2gpOworICAgIGlmIChmb250QW5kVGV4dFJlYXNvbnMgIT0gTm9S
ZWFzb24pCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Zm9udEFuZFRleHRSZWFzb25zLCBmYWxsdGhyb3VnaCk7CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9
CisKK2Jvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAgICBy
ZXR1cm4gY2FuVXNlRm9yV2l0aFJlYXNvbihmbG93LCBGYWxsVGhyb3VnaDo6Tm8pID09IE5vUmVh
c29uOwogfQogCiBzdGF0aWMgZmxvYXQgY29tcHV0ZUxpbmVMZWZ0KEVUZXh0QWxpZ24gdGV4dEFs
aWduLCBmbG9hdCBhdmFpbGFibGVXaWR0aCwgZmxvYXQgY29tbWl0dGVkV2lkdGgsIGZsb2F0IGxv
Z2ljYWxMZWZ0T2Zmc2V0KQpAQCAtNjYyLDUgKzc3NywyOTQgQEAgTGF5b3V0OjpMYXlvdXQoY29u
c3QgUnVuVmVjdG9yJiBydW5WZWN0b3IsIHVuc2lnbmVkIGxpbmVDb3VudCkKICAgICBtZW1jcHko
bV9ydW5zLCBydW5WZWN0b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9mKFJ1bikpOwogfQog
CisjaWZuZGVmIE5ERUJVRworc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oTm9uU2ltcGxlTGF5b3V0
UmVhc29uIHJlYXNvbiwgVGV4dFN0cmVhbSYgc3RyZWFtKQoreworICAgIHN3aXRjaCAocmVhc29u
KSB7CisgICAgY2FzZSBGbG93SXNJbnNpZGVSZWdpb246CisgICAgICAgIHN0cmVhbSA8PCAiZmxv
dyBpcyBpbnNpZGUgcmVnaW9uIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzSG9y
aXpvbmFsV3JpdGluZ01vZGU6CisgICAgICAgIHN0cmVhbSA8PCAiaG9yaXpvbnRhbCB3cml0aW5n
IG1vZGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNPdXRsaW5lOgorICAgICAg
ICBzdHJlYW0gPDwgIm91dGxpbmUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc1J1
Ynk6CisgICAgICAgIHN0cmVhbSA8PCAicnVieSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rmxvd0lzUGFnaW5hdGVkOgorICAgICAgICBzdHJlYW0gPDwgInBhZ2luYXRlZCI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1RleHRPdmVyZmxvdzoKKyAgICAgICAgc3RyZWFtIDw8
ICJ0ZXh0LW92ZXJmbG93IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SXNEZXByaWNh
dGVkRmxleEJveDoKKyAgICAgICAgc3RyZWFtIDw8ICJkZXByaWNhdGVkRmxleEJveCI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50OgorICAg
ICAgICBzdHJlYW0gPDwgInBsYWNlaG9sZGVyIGVsZW1lbnQiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5nOgorICAgICAgICBzdHJlYW0g
PDwgIndyYXBwaW5nIHRleHRhcmVhIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFz
Tm9uU3VwcG9ydGVkQ2hpbGQ6CisgICAgICAgIHN0cmVhbSA8PCAibmVzdGVkIHJlbmRlcmVycyI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQ6CisgICAg
ICAgIHN0cmVhbSA8PCAiY29tcGxpY2F0ZWQgZmxvYXQiOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEZsb3dIYXNUZXh0RGVjb3JhdGlvbjoKKyAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LWRlY29y
YXRpb24iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc0p1c3RpZnlBbGlnbmVkOgor
ICAgICAgICBzdHJlYW0gPDwgInRleHQtYWxpZ246IGp1c3RpZnkiOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEZsb3dIYXNPdmVyZmxvd1Zpc2libGU6CisgICAgICAgIHN0cmVhbSA8PCAib3Zl
cmZsb3c6IHZpc2libGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc05vdExUUjoK
KyAgICAgICAgc3RyZWFtIDw8ICJkaXIgaXMgbm90IExUUiI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmxvd0hhc0xpbmVCb3hDb250YWluUHJvcGVydHk6CisgICAgICAgIHN0cmVhbSA8PCAi
bGluZS1ib3gtY29udGFpbiBwcm9wZXJ0eSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxv
d0lzTm90VG9wVG9Cb3R0b206CisgICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcC10by1ib3R0b20g
ZmxvdyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0xpbmVCcmVhazoKKyAgICAg
ICAgc3RyZWFtIDw8ICJsaW5lLWJyZWFrIHByb3BlcnR5IjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGbG93SGFzV29yZEJyZWFrOgorICAgICAgICBzdHJlYW0gPDwgIndvcmQtYnJlYWsgcHJv
cGVydHkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNOb25Ob3JtYWxVbmljb2Rl
QmlEaToKKyAgICAgICAgc3RyZWFtIDw8ICJub24tbm9ybWFsIFVuaWNvZGUgYmlkaSI7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1JUTE9yZGVyaW5nOgorICAgICAgICBzdHJlYW0g
PDwgIi13ZWJraXQtcnRsLW9yZGVyaW5nIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93
SGFzTGluZUFsaWduRWRnZXM6CisgICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLWFsaWdu
IGVkZ2VzIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzTGluZVNuYXA6CisgICAg
ICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLXNuYXAgcHJvcGVydHkiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dIYXNIeXBlbnNBdXRvOgorICAgICAgICBzdHJlYW0gPDwgImh5cGhl
bjogYXV0byI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1RleHRFbXBoYXNpc0Zp
bGxPck1hcms6CisgICAgICAgIHN0cmVhbSA8PCAidGV4dC1lbXBoYXNpcyAoZmlsbC9tYXJrKSI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZToKKyAgICAg
ICAgc3RyZWFtIDw8ICJmaXJzdC1saW5lIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93
SGFzUHNldWRvRmlyc3RMZXR0ZXI6CisgICAgICAgIHN0cmVhbSA8PCAiZmlyc3QtbGV0dGVyIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzVGV4dENvbWJpbmU6CisgICAgICAgIHN0
cmVhbSA8PCAidGV4dCBjb21iaW5lIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFz
VGV4dEZpbGxCb3g6CisgICAgICAgIHN0cmVhbSA8PCAiYmFja2dyb3VuZC1jb2xvciAodGV4dC1m
aWxsKSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0JvcmRlckZpdExpbmVzOgor
ICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtYm9yZGVyLWZpdCI7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgRmxvd0hhc05vbkF1dG9MaW5lQnJlYWs6CisgICAgICAgIHN0cmVhbSA8PCAibGlu
ZS1icmVhayBpcyBub3QgYXV0byI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc05v
bkF1dG9UcmFpbGluZ1dvcmQ6CisgICAgICAgIHN0cmVhbSA8PCAiLWFwcGxlLXRyYWlsaW5nLXdv
cmQgaXMgbm90IGF1dG8iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNTVkdGb250
OgorICAgICAgICBzdHJlYW0gPDwgIlNWRyBmb250IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGbG93VGV4dEhhc05vQnJlYWtTcGFjZToKKyAgICAgICAgc3RyZWFtIDw8ICJOby1icmVhay1z
cGFjZSBjaGFyYWN0ZXIiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dUZXh0SGFzU29m
dEh5cGhlbjoKKyAgICAgICAgc3RyZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgorICAg
ICAgICBzdHJlYW0gPDwgImRpcmVjdGlvbiBjaGFyYWN0ZXIiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udDoKKyAgICAgICAgc3RyZWFtIDw8ICJtaXNz
aW5nIHByaW1hcnkgZm9udCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0ZvbnRJc01p
c3NpbmdHbHlwaDoKKyAgICAgICAgc3RyZWFtIDw8ICJtaXNzaW5nIGdseXBoIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzQ29tYmluZVRleHQ6CisgICAgICAgIHN0cmVhbSA8
PCAidGV4dCBpcyBjb21iaW5lIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElz
UmVuZGVyQ291bnRlcjoKKyAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBSZW5kZXJDb3Vu
dGVyIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzUmVuZGVyUXVvdGU6Cisg
ICAgICAgIHN0cmVhbSA8PCAidW5zdXBwb3J0ZWQgUmVuZGVyUXVvdGUiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQ6CisgICAgICAgIHN0cmVhbSA8PCAi
dW5zdXBwb3J0ZWQgVGV4dEZyYWdtZW50IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93
VGV4dElzU1ZHSW5saW5lVGV4dDoKKyAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBTVkdJ
bmxpbmVUZXh0IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93Rm9udElzTm90U2ltcGxl
OgorICAgICAgICBzdHJlYW0gPDwgImNvbXBsZXh0IGZvbnQiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZsb3dIYXNUZXh0U2hhZG93OgorICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hhZG93
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzRW1wdHk6CisgICAgY2FzZSBG
bG93SGFzTm9DaGlsZDoKKyAgICBjYXNlIEZsb3dIYXNOb1BhcmVudDoKKyAgICBjYXNlIEZlYXR1
cmVJc0Rpc2FibGVkOgorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwor
c3RhdGljIHZvaWQgcHJpbnRSZWFzb25zKE5vblNpbXBsZUxheW91dFJlYXNvbkZsYWdzIHJlYXNv
bnMsIFRleHRTdHJlYW0mIHN0cmVhbSkKK3sKKyAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICBm
b3IgKGF1dG8gcmVhc29uSXRlbSA9IEVuZE9mUmVhc29ucyA+PiAxOyByZWFzb25JdGVtICE9IE5v
UmVhc29uOyByZWFzb25JdGVtID4+PSAxKSB7CisgICAgICAgIGlmICghKHJlYXNvbnMgJiByZWFz
b25JdGVtKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBzdHJlYW0gPDwgKGZpcnN0
ID8gIiAiIDogIiwgIik7CisgICAgICAgIGZpcnN0ID0gZmFsc2U7CisgICAgICAgIHByaW50UmVh
c29uKHJlYXNvbkl0ZW0sIHN0cmVhbSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBwcmludFRl
eHRGb3JTdWJ0cmVlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkJiBjaGFy
YWN0ZXJzTGVmdCwgVGV4dFN0cmVhbSYgc3RyZWFtKQoreworICAgIGlmICghY2hhcmFjdGVyc0xl
ZnQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKSB7
CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRl
eHQoKTsKKyAgICAgICAgdGV4dCA9IHRleHQuc3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIHVu
c2lnbmVkIGxlbiA9IHN0ZDo6bWluKGNoYXJhY3RlcnNMZWZ0LCB0ZXh0Lmxlbmd0aCgpKTsKKyAg
ICAgICAgc3RyZWFtIDw8IHRleHQubGVmdChsZW4pOworICAgICAgICBjaGFyYWN0ZXJzTGVmdCAt
PSBsZW47CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKCFpczxSZW5kZXJFbGVtZW50
PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybjsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxk
ID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpCisgICAgICAgIHByaW50VGV4dEZvclN1YnRy
ZWUoKmNoaWxkLCBjaGFyYWN0ZXJzTGVmdCwgc3RyZWFtKTsKK30KKworc3RhdGljIHVuc2lnbmVk
IHRleHRMZW5ndGhGb3JTdWJ0cmVlKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7Cisg
ICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0
PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0TGVuZ3RoKCk7CisgICAgaWYgKCFpczxSZW5kZXJF
bGVtZW50PihyZW5kZXJlcikpCisgICAgICAgIHJldHVybiAwOworICAgIHVuc2lnbmVkIHRleHRM
ZW5ndGggPSAwOworICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJF
bGVtZW50PihyZW5kZXJlcikuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkKKyAgICAgICAgdGV4dExlbmd0aCArPSB0ZXh0TGVuZ3RoRm9yU3VidHJlZSgq
Y2hpbGQpOworICAgIHJldHVybiB0ZXh0TGVuZ3RoOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0
Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93cyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVy
LCBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+JiBsZWFmUmVuZGVyZXJzKQoreworICAg
IGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJlcikpIHsKKyAgICAgICAgaWYgKCFkb3duY2FzdDxS
ZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dExlbmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAvLyBGaW5kIFJlbmRlckJsb2NrRmxvdyBhbmNlc3Rvci4KKyAgICAgICAgZm9yIChj
b25zdCBhdXRvKiBjdXJyZW50ID0gcmVuZGVyZXIucGFyZW50KCk7IGN1cnJlbnQ7IGN1cnJlbnQg
PSBjdXJyZW50LT5wYXJlbnQoKSkgeworICAgICAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zs
b3c+KGN1cnJlbnQpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGVh
ZlJlbmRlcmVycy5hZGQoZG93bmNhc3Q8UmVuZGVyQmxvY2tGbG93PihjdXJyZW50KSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlm
ICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVyZXIpKQorICAgICAgICByZXR1cm47CisgICAgZm9y
IChjb25zdCBhdXRvKiBjaGlsZCA9IGRvd25jYXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5m
aXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAg
ICBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93cygqY2hpbGQsIGxlYWZSZW5kZXJl
cnMpOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93
c0ZvckN1cnJlbnRQYWdlKEhhc2hTZXQ8Y29uc3QgUmVuZGVyQmxvY2tGbG93Kj4mIGxlYWZSZW5k
ZXJlcnMpCit7CisgICAgZm9yIChjb25zdCBhdXRvKiBkb2N1bWVudCA6IERvY3VtZW50OjphbGxE
b2N1bWVudHMoKSkgeworICAgICAgICBpZiAoIWRvY3VtZW50LT5yZW5kZXJWaWV3KCkgfHwgZG9j
dW1lbnQtPmluUGFnZUNhY2hlKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KCFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQoKSAmJiAhZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVu
dCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNvbGxlY3ROb25FbXB0eUxlYWZS
ZW5kZXJCbG9ja0Zsb3dzKCpkb2N1bWVudC0+cmVuZGVyVmlldygpLCBsZWFmUmVuZGVyZXJzKTsK
KyAgICB9Cit9CisKK3ZvaWQgcHJpbnRTaW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0KCkKK3sKKyAg
ICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+IGxlYWZSZW5kZXJlcnM7CisgICAgY29s
bGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVy
ZXJzKTsKKyAgICBpZiAoIWxlYWZSZW5kZXJlcnMuc2l6ZSgpKSB7CisgICAgICAgIFdURkxvZ0Fs
d2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlzIGRvY3VtZW50XG4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICBzdHJlYW0gPDwgIi0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBmb3Ig
KGNvbnN0IGF1dG8qIGZsb3cgOiBsZWFmUmVuZGVyZXJzKSB7CisgICAgICAgIGF1dG8gcmVhc29u
ID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxvdywgRmFsbFRocm91Z2g6Olllcyk7CisgICAgICAg
IGlmIChyZWFzb24gPT0gTm9SZWFzb24pCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
dW5zaWduZWQgcHJpbnRlZExlbmd0aCA9IDMwOworICAgICAgICBzdHJlYW0gPDwgIlwiIjsKKyAg
ICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgqZmxvdywgcHJpbnRlZExlbmd0aCwgc3RyZWFtKTsK
KyAgICAgICAgZm9yICg7cHJpbnRlZExlbmd0aCA+IDA7IC0tcHJpbnRlZExlbmd0aCkKKyAgICAg
ICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAgICAgIHN0cmVhbSA8PCAiXCIoIiA8PCB0ZXh0TGVu
Z3RoRm9yU3VidHJlZSgqZmxvdykgPDwgIik6IjsKKyAgICAgICAgcHJpbnRSZWFzb25zKHJlYXNv
biwgc3RyZWFtKTsKKyAgICAgICAgc3RyZWFtIDw8ICJcbiI7CisgICAgfQorICAgIHN0cmVhbSA8
PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4i
OworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkp
OworfQorCit2b2lkIHByaW50U2ltcGxlTGluZUxheW91dENvdmVyYWdlKCkKK3sKKyAgICBIYXNo
U2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+IGxlYWZSZW5kZXJlcnM7CisgICAgY29sbGVjdE5v
bkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVyZXJzKTsK
KyAgICBpZiAoIWxlYWZSZW5kZXJlcnMuc2l6ZSgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygi
Tm8gdGV4dCBmb3VuZCBpbiB0aGlzIGRvY3VtZW50XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsKKyAgICBIYXNoTWFwPE5vblNpbXBsZUxheW91dFJl
YXNvbiwgdW5zaWduZWQ+IGZsb3dTdGF0aXN0aWNzOworICAgIHVuc2lnbmVkIHRleHRMZW5ndGgg
PSAwOworICAgIHVuc2lnbmVkIHVuc3VwcG9ydGVkVGV4dExlbmd0aCA9IDA7CisgICAgdW5zaWdu
ZWQgbnVtYmVyT2ZVbnN1cHBvcnRlZExlYWZCbG9ja3MgPSAwOworICAgIGZvciAoY29uc3QgYXV0
byogZmxvdyA6IGxlYWZSZW5kZXJlcnMpIHsKKyAgICAgICAgYXV0byBmbG93TGVuZ3RoID0gdGV4
dExlbmd0aEZvclN1YnRyZWUoKmZsb3cpOworICAgICAgICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5n
dGg7CisgICAgICAgIGF1dG8gcmVhc29ucyA9IGNhblVzZUZvcldpdGhSZWFzb24oKmZsb3csIEZh
bGxUaHJvdWdoOjpZZXMpOworICAgICAgICBpZiAocmVhc29ucyA9PSBOb1JlYXNvbikKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICArK251bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tz
OworICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsKKyAgICAgICAg
Zm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNvbnMgPj4gMTsgcmVhc29uSXRlbSAhPSBO
b1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgeworICAgICAgICAgICAgaWYgKCEocmVhc29ucyAm
IHJlYXNvbkl0ZW0pKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgYXV0
byByZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVhc29uSXRlbSwgZmxvd0xlbmd0aCk7Cisg
ICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5pdGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsKKyAgICAgICAgfQorICAgIH0KKyAgICBz
dHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLVxuIjsKKyAgICBzdHJlYW0gPDwgIk51bWJlciBvZiB0ZXh0IGJsb2NrczogdG90YWwoIiA8
PCAgbGVhZlJlbmRlcmVycy5zaXplKCkgPDwgIikgbm9uLXNpbXBsZSgiIDw8IG51bWJlck9mVW5z
dXBwb3J0ZWRMZWFmQmxvY2tzIDw8ICIpXG5UZXh0IGxlbmd0aDogdG90YWwoIiA8PAorICAgICAg
ICB0ZXh0TGVuZ3RoIDw8ICIpIG5vbi1zaW1wbGUoIiA8PCB1bnN1cHBvcnRlZFRleHRMZW5ndGgg
PDwgIilcbiI7CisgICAgZm9yIChjb25zdCBhdXRvIHJlYXNvbkVudHJ5IDogZmxvd1N0YXRpc3Rp
Y3MpIHsKKyAgICAgICAgcHJpbnRSZWFzb24ocmVhc29uRW50cnkua2V5LCBzdHJlYW0pOworICAg
ICAgICBzdHJlYW0gPDwgIjogIiA8PCAoZmxvYXQpcmVhc29uRW50cnkudmFsdWUgLyAoZmxvYXQp
dGV4dExlbmd0aCAqIDEwMCA8PCAiJVxuIjsKKyAgICB9CisgICAgc3RyZWFtIDw8ICJzaW1wbGUg
bGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZsb2F0KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0
ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3RoICogMTAwIDw8ICIlXG4iOworICAgIHN0
cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tXG4iOworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBzdHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5k
YXRhKCkpOworfQorI2VuZGlmCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266548</attachid>
            <date>2015-12-03 13:01:09 -0800</date>
            <delta_ts>2015-12-06 12:21:08 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-151806-20151203130044.patch</filename>
            <type>text/plain</type>
            <size>30487</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkyOTAzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMjEyNDk2OTYyNDgwYTZk
ODg3OTQzMjlmNjMxY2Y4NDAwNDI3YjdmNi4uNDcxMDQ2NGI2MGMxMTM2M2FjYTViNGYwMWU0ZWNm
MDBiYWNlOWQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEyLTAzICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgU2ltcGxlIGxpbmUgbGF5b3V0
OiBQcmludCBvdXQgc2ltcGxlIGxpbmUgbGF5b3V0IHN0YXRpc3RpY3MgZm9yIHRoZSBjdXJyZW50
IHBhZ2UgZnJvbSBjb21tYW5kIGxpbmUuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTE4MDYKKworICAgICAgICBSZXZpZXdlZCBTaW1vbiBGcmFzZXIu
CisKKyAgICAgICAgY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxheW91dENvdmVyYWdl
IHByaW50cyBvdXQgYSBjb3ZlcmFnZSBzdW1tYXJ5IG9mIHRoZSBjdXJyZW50IHBhZ2UsCisgICAg
ICAgIHdoaWxlIGNvbS5hcHBsZS5XZWJLaXQuc2hvd1NpbXBsZUxpbmVMYXlvdXRSZWFzb25zIGxp
c3RzIHRoZSBub24tc2ltcGxlIGxpbmUgbGF5b3V0IGJsb2NrcyBpbmNsdWRpbmcgdGhlIHJlYXNv
bnMgd2h5CisgICAgICAgIHRoZXkgYXJlIG5vdCBjb3ZlcmVkLgorCisgICAgICAgIE5vIGNoYW5n
ZSBpbiBmdW5jdGlvbmFsaXR5LgorCisgICAgICAgICogcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlv
dXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNlRm9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JGb250QW5k
VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JTdHls
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5Vc2VGb3JXaXRoUmVh
c29uKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFJlYXNvbik6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFJlYXNvbnMpOgorICAgICAgICAoV2Vi
Q29yZTo6U2ltcGxlTGluZUxheW91dDo6cHJpbnRUZXh0Rm9yU3VidHJlZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojp0ZXh0TGVuZ3RoRm9yU3VidHJlZSk6CisgICAgICAg
IChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxv
Y2tGbG93cyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpjb2xsZWN0Tm9u
RW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93c0ZvckN1cnJlbnRQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpwcmludFNpbXBsZUxpbmVMYXlvdXRD
b3ZlcmFnZSk6CisKIDIwMTUtMTItMDEgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgog
CiAgICAgICAgIEZpeCBhbm9tYWx5IHdoZXJlIGlzTW91c2VFdmVudCByZXR1cm5zIGZhbHNlIGZv
ciB3aGVlbCBldmVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1w
bGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5lTGF5
b3V0LmNwcAppbmRleCBhMzdiYmJkZTU3N2ZkNzUyMDNiMmJjMzMzMjZkNTU2MDQyMDc5MjMxLi44
ZDFhMzY4NTE5NjE0YTAwZGYxNGZlNTI1M2ZmNzEzYjQ5OGRjYzE3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIKICNp
bmNsdWRlICJMaW5lV2lkdGguaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFp
bnRJbmZvLmgiCiAjaW5jbHVkZSAiUmVuZGVyQmxvY2tGbG93LmgiCiAjaW5jbHVkZSAiUmVuZGVy
Q2hpbGRJdGVyYXRvci5oIgpAQCAtNDksMTYgKzUwLDk2IEBACiAjaW5jbHVkZSAiU2ltcGxlTGlu
ZUxheW91dFRleHRGcmFnbWVudEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgogI2luY2x1
ZGUgIlRleHRQYWludFN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dFN0cmVhbS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU2ltcGxlTGluZUxheW91dCB7CiAKKyNpZm5kZWYgTkRF
QlVHCit2b2lkIHByaW50U2ltcGxlTGluZUxheW91dENvdmVyYWdlKCk7Cit2b2lkIHByaW50U2lt
cGxlTGluZUxheW91dEJsb2NrTGlzdCgpOworI2VuZGlmCisKK2VudW0gQXZvaWRhbmNlUmVhc29u
XyA6IHVpbnQ2NF90IHsKKyAgICBOb1JlYXNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDAsCisgICAgRmxvd0lzSW5zaWRlUmVnaW9uICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCAxLAorICAgIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9kZSAgICAgICAgID0gMUxM
VSAgPDwgMiwKKyAgICBGbG93SGFzT3V0bGluZSAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDMsCisgICAgRmxvd0lzUnVieSAgICAgICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8
PCA0LAorICAgIEZsb3dJc1BhZ2luYXRlZCAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwg
NSwKKyAgICBGbG93SGFzVGV4dE92ZXJmbG93ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDYs
CisgICAgRmxvd0lzRGVwcmljYXRlZEZsZXhCb3ggICAgICAgICAgICAgPSAxTExVICA8PCA3LAor
ICAgIEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudCAgICAgID0gMUxMVSAgPDwgOCwKKyAg
ICBGbG93UGFyZW50SXNUZXh0QXJlYVdpdGhXcmFwcGluZyAgICA9IDFMTFUgIDw8IDksCisgICAg
Rmxvd0hhc05vblN1cHBvcnRlZENoaWxkICAgICAgICAgICAgPSAxTExVICA8PCAxMCwKKyAgICBG
bG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICA9IDFMTFUgIDw8IDExLAorICAgIEZs
b3dIYXNUZXh0RGVjb3JhdGlvbiAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTIsCisgICAgRmxv
d0lzSnVzdGlmeUFsaWduZWQgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxMywKKyAgICBGbG93
SGFzT3ZlcmZsb3dWaXNpYmxlICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE0LAorICAgIEZsb3dJ
c05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTUsCisgICAgRmxvd0hh
c0xpbmVCb3hDb250YWluUHJvcGVydHkgICAgICAgPSAxTExVICA8PCAxNiwKKyAgICBGbG93SXNO
b3RUb3BUb0JvdHRvbSAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE3LAorICAgIEZsb3dIYXNM
aW5lQnJlYWsgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTgsCisgICAgRmxvd0hhc1dv
cmRCcmVhayAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOSwKKyAgICBGbG93SGFzTm9u
Tm9ybWFsVW5pY29kZUJpRGkgICAgICAgICA9IDFMTFUgIDw8IDIwLAorICAgIEZsb3dIYXNSVExP
cmRlcmluZyAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjEsCisgICAgRmxvd0hhc0xpbmVB
bGlnbkVkZ2VzICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMiwKKyAgICBGbG93SGFzTGluZVNu
YXAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIzLAorICAgIEZsb3dIYXNIeXBlbnNB
dXRvICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjQsCisgICAgRmxvd0hhc1RleHRFbXBo
YXNpc0ZpbGxPck1hcmsgICAgICAgPSAxTExVICA8PCAyNSwKKyAgICBGbG93SGFzVGV4dFNoYWRv
dyAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI2LAorICAgIEZsb3dIYXNQc2V1ZG9GaXJz
dExpbmUgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjcsCisgICAgRmxvd0hhc1BzZXVkb0ZpcnN0
TGV0dGVyICAgICAgICAgICAgPSAxTExVICA8PCAyOCwKKyAgICBGbG93SGFzVGV4dENvbWJpbmUg
ICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI5LAorICAgIEZsb3dIYXNUZXh0RmlsbEJveCAg
ICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzAsCisgICAgRmxvd0hhc0JvcmRlckZpdExpbmVz
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMSwKKyAgICBGbG93SGFzTm9uQXV0b0xpbmVCcmVh
ayAgICAgICAgICAgICA9IDFMTFUgIDw8IDMyLAorICAgIEZsb3dIYXNOb25BdXRvVHJhaWxpbmdX
b3JkICAgICAgICAgID0gMUxMVSAgPDwgMzMsCisgICAgRmxvd0hhc1NWR0ZvbnQgICAgICAgICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzNCwKKyAgICBGbG93VGV4dElzRW1wdHkgICAgICAgICAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDM1LAorICAgIEZsb3dUZXh0SGFzTm9CcmVha1NwYWNlICAg
ICAgICAgICAgID0gMUxMVSAgPDwgMzYsCisgICAgRmxvd1RleHRIYXNTb2Z0SHlwaGVuICAgICAg
ICAgICAgICAgPSAxTExVICA8PCAzNywKKyAgICBGbG93VGV4dEhhc0RpcmVjdGlvbkNoYXJhY3Rl
ciAgICAgICA9IDFMTFUgIDw8IDM4LAorICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCAgICAg
ICAgICAgID0gMUxMVSAgPDwgMzksCisgICAgRmxvd0ZvbnRJc01pc3NpbmdHbHlwaCAgICAgICAg
ICAgICAgPSAxTExVICA8PCA0MCwKKyAgICBGbG93VGV4dElzQ29tYmluZVRleHQgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQxLAorICAgIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDIsCisgICAgRmxvd1RleHRJc1JlbmRlclF1b3RlICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA0MywKKyAgICBGbG93VGV4dElzVGV4dEZyYWdtZW50ICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDQ0LAorICAgIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0ICAgICAgICAgICAg
ID0gMUxMVSAgPDwgNDUsCisgICAgRmxvd0ZvbnRJc05vdFNpbXBsZSAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCA0NiwKKyAgICBGZWF0dXJlSXNEaXNhYmxlZCAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDQ3LAorICAgIEZsb3dIYXNOb1BhcmVudCAgICAgICAgICAgICAgICAgICAgID0g
MUxMVSAgPDwgNDgsCisgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCA0OSwKKyAgICBFbmRPZlJlYXNvbnMgICAgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDUwCit9OwordHlwZWRlZiB1aW50NjRfdCBBdm9pZGFuY2VSZWFzb247Cit0eXBlZGVm
IHVpbnQ2NF90IEF2b2lkYW5jZVJlYXNvbkZsYWdzOworCitlbnVtIGNsYXNzIEZhbGxUaHJvdWdo
IHsgWWVzLCBObyB9OworCisjaWZuZGVmIE5ERUJVRworI2RlZmluZSBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIHJlYXNvbiwgZmFsbHRocm91Z2gpIHsgXAorICAgICAg
ICByZWFzb25zIHw9IHJlYXNvbjsgXAorICAgICAgICBpZiAoZmFsbHRocm91Z2ggPT0gRmFsbFRo
cm91Z2g6Ok5vKSBcCisgICAgICAgICAgICByZXR1cm4gcmVhc29uczsgXAorICAgIH0KKyNlbHNl
CisjZGVmaW5lIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgcmVhc29u
LCBmYWxsdGhyb3VnaCkgeyBcCisgICAgICAgIEFTU0VSVF9VTlVTRUQoZmFsbHRocm91Z2gsIGZh
bGx0aHJvdWdoID09IEZhbGxUaHJvdWdoOjpObyk7IFwKKyAgICAgICAgcmVhc29ucyB8PSByZWFz
b247IFwKKyAgICAgICAgcmV0dXJuIHJlYXNvbnM7IFwKKyAgICB9CisjZW5kaWYKKwogdGVtcGxh
dGUgPHR5cGVuYW1lIENoYXJhY3RlclR5cGU+Ci1zdGF0aWMgYm9vbCBjYW5Vc2VGb3JUZXh0KGNv
bnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9u
dCkKK3N0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJh
Y3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgRmFsbFRo
cm91Z2ggZmFsbHRocm91Z2gpCiB7CisgICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9
IE5vUmVhc29uOwogICAgIC8vIEZJWE1FOiA8dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdlbmVyYXRl
cyBlbXB0eSB0ZXh0IG5vZGUuCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
VGV4dElzRW1wdHksIGZhbGx0aHJvdWdoKTsKKwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSB0ZXh0W2ldOwogICAg
ICAgICBpZiAoY2hhcmFjdGVyID09ICcgJykKQEAgLTY2LDEzMCArMTQ3LDE1NiBAQCBzdGF0aWMg
Ym9vbCBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJhY3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxl
bmd0aCwgY29uc3QgRm9udAogCiAgICAgICAgIC8vIFRoZXNlIHdvdWxkIGJlIGVhc3kgdG8gc3Vw
cG9ydC4KICAgICAgICAgaWYgKGNoYXJhY3RlciA9PSBub0JyZWFrU3BhY2UpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dUZXh0SGFzTm9CcmVha1NwYWNlLCBmYWxsdGhyb3VnaCk7CiAgICAg
ICAgIGlmIChjaGFyYWN0ZXIgPT0gc29mdEh5cGhlbikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd1RleHRIYXNTb2Z0SHlwaGVuLCBmYWxsdGhyb3VnaCk7CiAKICAgICAgICAgVUNoYXJEaXJl
Y3Rpb24gZGlyZWN0aW9uID0gdV9jaGFyRGlyZWN0aW9uKGNoYXJhY3Rlcik7CiAgICAgICAgIGlm
IChkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RP
X0xFRlRfQVJBQklDCiAgICAgICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZU
X0VNQkVERElORyB8fCBkaXJlY3Rpb24gPT0gVV9SSUdIVF9UT19MRUZUX09WRVJSSURFCiAgICAg
ICAgICAgICB8fCBkaXJlY3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX0VNQkVERElORyB8fCBkaXJl
Y3Rpb24gPT0gVV9MRUZUX1RPX1JJR0hUX09WRVJSSURFCiAgICAgICAgICAgICB8fCBkaXJlY3Rp
b24gPT0gVV9QT1BfRElSRUNUSU9OQUxfRk9STUFUIHx8IGRpcmVjdGlvbiA9PSBVX0JPVU5EQVJZ
X05FVVRSQUwpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hh
cmFjdGVyLCBmYWxsdGhyb3VnaCk7CiAKICAgICAgICAgaWYgKCFmb250LmdseXBoRm9yQ2hhcmFj
dGVyKGNoYXJhY3RlcikpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dGb250SXNNaXNzaW5n
R2x5cGgsIGZhbGx0aHJvdWdoKTsKICAgICB9Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJu
IHJlYXNvbnM7CiB9CiAKLXN0YXRpYyBib29sIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4
dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBGb250JiBmb250KQorc3RhdGljIEF2b2lkYW5jZVJlYXNv
bkZsYWdzIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25z
dCBGb250JiBmb250LCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKIHsKICAgICBpZiAodGV4dFJl
bmRlcmVyLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVy
ZXIuY2hhcmFjdGVyczgoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCk7Ci0gICAg
cmV0dXJuIGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLmNoYXJhY3RlcnMxNigpLCB0ZXh0UmVu
ZGVyZXIudGV4dExlbmd0aCgpLCBmb250KTsKKyAgICAgICAgcmV0dXJuIGNhblVzZUZvclRleHQo
dGV4dFJlbmRlcmVyLmNoYXJhY3RlcnM4KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZv
bnQsIGZhbGx0aHJvdWdoKTsKKyAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIu
Y2hhcmFjdGVyczE2KCksIHRleHRSZW5kZXJlci50ZXh0TGVuZ3RoKCksIGZvbnQsIGZhbGx0aHJv
dWdoKTsKIH0KIAotc3RhdGljIGJvb2wgY2FuVXNlRm9yRm9udEFuZFRleHQoY29uc3QgUmVuZGVy
QmxvY2tGbG93JiBmbG93KQorc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdzIGNhblVzZUZvckZv
bnRBbmRUZXh0KGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgRmFsbFRocm91Z2ggZmFsbHRo
cm91Z2gpCiB7CisgICAgQXZvaWRhbmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IE5vUmVhc29uOwog
ICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFzZWQgcHVyZWx5
IG9uIHRoZSBwcmltYXJ5IGZvbnQuCiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBmbG93LnN0eWxl
KCk7CiAgICAgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgpLnByaW1hcnlG
b250KCk7CiAgICAgaWYgKHByaW1hcnlGb250LmlzTG9hZGluZygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd0lzTWlzc2luZ1ByaW1hcnlGb250LCBmYWxsdGhyb3VnaCk7CisgICAgaWYgKHByaW1hcnlG
b250LmlzU1ZHRm9udCgpKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KHJlYXNvbnMsIEZsb3dIYXNTVkdGb250LCBmYWxsdGhyb3VnaCk7CisKICAgICBmb3IgKGNvbnN0
IGF1dG8mIHRleHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7
Ci0gICAgICAgIGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpIHx8IHRleHRSZW5kZXJl
ci5pc0NvdW50ZXIoKSB8fCB0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpIHx8IHRleHRSZW5kZXJlci5p
c1RleHRGcmFnbWVudCgpCi0gICAgICAgICAgICB8fCB0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVU
ZXh0KCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmICh0ZXh0UmVuZGVy
ZXIuaXNDb21iaW5lVGV4dCgpKQorICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb25zLCBGbG93VGV4dElzQ29tYmluZVRleHQsIGZhbGx0aHJvdWdoKTsKKyAg
ICAgICAgaWYgKHRleHRSZW5kZXJlci5pc0NvdW50ZXIoKSkKKyAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc1JlbmRlckNvdW50ZXIs
IGZhbGx0aHJvdWdoKTsKKyAgICAgICAgaWYgKHRleHRSZW5kZXJlci5pc1F1b3RlKCkpCisgICAg
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0
SXNSZW5kZXJRdW90ZSwgZmFsbHRocm91Z2gpOworICAgICAgICBpZiAodGV4dFJlbmRlcmVyLmlz
VGV4dEZyYWdtZW50KCkpCisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dUZXh0SXNUZXh0RnJhZ21lbnQsIGZhbGx0aHJvdWdoKTsKKyAgICAg
ICAgaWYgKHRleHRSZW5kZXJlci5pc1NWR0lubGluZVRleHQoKSkKKyAgICAgICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc1NWR0lubGluZVRl
eHQsIGZhbGx0aHJvdWdoKTsKICAgICAgICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCkuY29kZVBh
dGgoVGV4dFJ1bih0ZXh0UmVuZGVyZXIudGV4dCgpKSkgIT0gRm9udENhc2NhZGU6OlNpbXBsZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKCFjYW5Vc2VGb3JUZXh0KHRl
eHRSZW5kZXJlciwgcHJpbWFyeUZvbnQpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93Rm9u
dElzTm90U2ltcGxlLCBmYWxsdGhyb3VnaCk7CisKKyAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9
IGNhblVzZUZvclRleHQodGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udCwgZmFsbHRocm91Z2gpOwor
ICAgICAgICBpZiAodGV4dFJlYXNvbnMgIT0gTm9SZWFzb24pCisgICAgICAgICAgICBTRVRfUkVB
U09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIHRleHRSZWFzb25zLCBmYWxsdGhyb3Vn
aCk7CiAgICAgfQotICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiByZWFzb25zOwogfQogCi1z
dGF0aWMgYm9vbCBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUpCitzdGF0
aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKIHsKKyAgICBBdm9pZGFuY2VSZWFzb25G
bGFncyByZWFzb25zID0gTm9SZWFzb247CiAgICAgaWYgKHN0eWxlLnRleHRPdmVyZmxvdygpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQocmVhc29ucywgRmxvd0hhc1RleHRPdmVyZmxvdywgZmFsbHRocm91Z2gpOwogICAgIGlm
IChzdHlsZS50ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCgpICE9IFRleHREZWNvcmF0aW9uTm9uZSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0RGVjb3JhdGlvbiwgZmFsbHRocm91Z2gpOwogICAg
IGlmIChzdHlsZS50ZXh0QWxpZ24oKSA9PSBKVVNUSUZZKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lz
SnVzdGlmeUFsaWduZWQsIGZhbGx0aHJvdWdoKTsKICAgICAvLyBOb24tdmlzaWJsZSBvdmVyZmxv
dyBzaG91bGQgYmUgcHJldHR5IGVhc3kgdG8gc3VwcG9ydC4KICAgICBpZiAoc3R5bGUub3ZlcmZs
b3dYKCkgIT0gT1ZJU0lCTEUgfHwgc3R5bGUub3ZlcmZsb3dZKCkgIT0gT1ZJU0lCTEUpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb25zLCBGbG93SGFzT3ZlcmZsb3dWaXNpYmxlLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYg
KCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SXNO
b3RMVFIsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUubGluZUJveENvbnRhaW4oKSAhPSBS
ZW5kZXJTdHlsZTo6aW5pdGlhbExpbmVCb3hDb250YWluKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
SGFzTGluZUJveENvbnRhaW5Qcm9wZXJ0eSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS53
cml0aW5nTW9kZSgpICE9IFRvcFRvQm90dG9tV3JpdGluZ01vZGUpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBG
bG93SXNOb3RUb3BUb0JvdHRvbSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS5saW5lQnJl
YWsoKSAhPSBMaW5lQnJlYWtBdXRvKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc0xpbmVCcmVhaywg
ZmFsbHRocm91Z2gpOwogICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSAhPSBOb3JtYWxXb3JkQnJl
YWspCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoc3R5bGUudW5pY29kZUJpZGkoKSAh
PSBVQk5vcm1hbCB8fCBzdHlsZS5ydGxPcmRlcmluZygpICE9IExvZ2ljYWxPcmRlcikKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS5saW5lQWxpZ24oKSAhPSBMaW5lQWxpZ25O
b25lIHx8IHN0eWxlLmxpbmVTbmFwKCkgIT0gTGluZVNuYXBOb25lKQotICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd0hhc1dvcmRCcmVhaywgZmFsbHRocm91Z2gpOworICAgIGlmIChzdHlsZS51bmljb2RlQmlk
aSgpICE9IFVCTm9ybWFsKQorICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KHJlYXNvbnMsIEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaSwgZmFsbHRocm91Z2gpOworICAg
IGlmIChzdHlsZS5ydGxPcmRlcmluZygpICE9IExvZ2ljYWxPcmRlcikKKyAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzUlRMT3JkZXJpbmcsIGZh
bGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUubGluZUFsaWduKCkgIT0gTGluZUFsaWduTm9uZSkK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFz
TGluZUFsaWduRWRnZXMsIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUubGluZVNuYXAoKSAh
PSBMaW5lU25hcE5vbmUpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc0xpbmVTbmFwLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLmh5
cGhlbnMoKSA9PSBIeXBoZW5zQXV0bykKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNIeXBlbnNBdXRv
LCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHRFbXBoYXNpc0ZpbGwoKSAhPSBUZXh0
RW1waGFzaXNGaWxsRmlsbGVkIHx8IHN0eWxlLnRleHRFbXBoYXNpc01hcmsoKSAhPSBUZXh0RW1w
aGFzaXNNYXJrTm9uZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNUZXh0RW1waGFzaXNGaWxsT3JN
YXJrLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLnRleHRTaGFkb3coKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MSU5FKSB8
fCBzdHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxv
d0hhc1RleHRTaGFkb3csIGZhbGx0aHJvdWdoKTsKKyAgICBpZiAoc3R5bGUuaGFzUHNldWRvU3R5
bGUoRklSU1RfTElORSkpCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZSwgZmFsbHRocm91Z2gpOworICAgIGlmIChz
dHlsZS5oYXNQc2V1ZG9TdHlsZShGSVJTVF9MRVRURVIpKQorICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwgZmFs
bHRocm91Z2gpOwogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29tYmluZSgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29u
cywgRmxvd0hhc1RleHRDb21iaW5lLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKHN0eWxlLmJhY2tn
cm91bmRDbGlwKCkgPT0gVGV4dEZpbGxCb3gpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dEZp
bGxCb3gsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoc3R5bGUuYm9yZGVyRml0KCkgPT0gQm9yZGVy
Rml0TGluZXMpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzQm9yZGVyRml0TGluZXMsIGZhbGx0aHJv
dWdoKTsKICAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrQXV0bykKLSAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KHJlYXNvbnMsIEZsb3dIYXNOb25BdXRvTGluZUJyZWFrLCBmYWxsdGhyb3VnaCk7CiAjaWYgRU5B
QkxFKENTU19UUkFJTElOR19XT1JEKQogICAgIGlmIChzdHlsZS50cmFpbGluZ1dvcmQoKSAhPSBU
cmFpbGluZ1dvcmQ6OkF1dG8pCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JF
QVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9uQXV0b1RyYWlsaW5n
V29yZCwgZmFsbHRocm91Z2gpOwogI2VuZGlmCi0gICAgaWYgKHN0eWxlLmZvbnRDYXNjYWRlKCku
cHJpbWFyeUZvbnQoKS5pc1NWR0ZvbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiB0cnVlOworICAgIHJldHVybiByZWFzb25zOwogfQogCi1ib29sIGNhblVzZUZvcihjb25z
dCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cpCitzdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2Fu
VXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEZhbGxUaHJvdWdo
IGZhbGx0aHJvdWdoKQogeworI2lmbmRlZiBOREVCVUcKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAg
cmVnaXN0ZXJOb3RpZnlDYWxsYmFjaygiY29tLmFwcGxlLldlYktpdC5zaG93U2ltcGxlTGluZUxh
eW91dENvdmVyYWdlIiwgcHJpbnRTaW1wbGVMaW5lTGF5b3V0Q292ZXJhZ2UpOworICAgICAgICBy
ZWdpc3Rlck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5
b3V0UmVhc29ucyIsIHByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCk7CisgICAgfSk7Cisj
ZW5kaWYKKyAgICBBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25zID0gTm9SZWFzb247CiAgICAg
aWYgKCFmbG93LmZyYW1lKCkuc2V0dGluZ3MoKS5zaW1wbGVMaW5lTGF5b3V0RW5hYmxlZCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQocmVhc29ucywgRmVhdHVyZUlzRGlzYWJsZWQsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAo
IWZsb3cucGFyZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9QYXJlbnQsIGZhbGx0aHJv
dWdoKTsKICAgICBpZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hh
c05vQ2hpbGQsIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoZmxvdy5mbG93VGhyZWFkU3RhdGUoKSAh
PSBSZW5kZXJPYmplY3Q6Ok5vdEluc2lkZUZsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
SXNJbnNpZGVSZWdpb24sIGZhbGx0aHJvdWdoKTsKICAgICBpZiAoIWZsb3cuaXNIb3Jpem9udGFs
V3JpdGluZ01vZGUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNIb3Jpem9uYWxXcml0aW5nTW9k
ZSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93Lmhhc091dGxpbmUoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNv
bnMsIEZsb3dIYXNPdXRsaW5lLCBmYWxsdGhyb3VnaCk7CiAgICAgaWYgKGZsb3cuaXNSdWJ5VGV4
dCgpIHx8IGZsb3cuaXNSdWJ5QmFzZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzUnVieSwgZmFs
bHRocm91Z2gpOwogICAgIC8vIFByaW50aW5nIGRvZXMgcGFnaW5hdGlvbiB3aXRob3V0IGEgZmxv
dyB0aHJlYWQuCiAgICAgaWYgKGZsb3cuZG9jdW1lbnQoKS5wYWdpbmF0ZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJl
YXNvbnMsIEZsb3dJc1BhZ2luYXRlZCwgZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93LmlzQW5v
bnltb3VzKCkgJiYgZmxvdy5maXJzdExpbmVCbG9jaygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hh
c1BzZXVkb0ZpcnN0TGluZSwgZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93LmlzQW5vbnltb3Vz
QmxvY2soKSAmJiBmbG93LnBhcmVudCgpLT5zdHlsZSgpLnRleHRPdmVyZmxvdygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd0hhc1RleHRPdmVyZmxvdywgZmFsbHRocm91Z2gpOwogICAgIGlmIChmbG93
LnBhcmVudCgpLT5pc0RlcHJlY2F0ZWRGbGV4aWJsZUJveCgpKQotICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxv
d0lzRGVwcmljYXRlZEZsZXhCb3gsIGZhbGx0aHJvdWdoKTsKICAgICAvLyBGSVhNRTogUGxhY2Vo
b2xkZXJzIGRvIHNvbWV0aGluZyBzdHJhbmdlLgogICAgIGlmIChpczxSZW5kZXJUZXh0Q29udHJv
bD4oKmZsb3cucGFyZW50KCkpICYmIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sPigqZmxvdy5w
YXJlbnQoKSkudGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnBsYWNlaG9sZGVyRWxlbWVudCgpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQocmVhc29ucywgRmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50LCBmYWxsdGhyb3Vn
aCk7CiAgICAgLy8gRklYTUU6IEltcGxlbWVudGF0aW9uIG9mIHdyYXA9aGFyZCBsb29rcyBpbnRv
IGxpbmVib3hlcy4KICAgICBpZiAoZmxvdy5wYXJlbnQoKS0+aXNUZXh0QXJlYSgpICYmIGZsb3cu
cGFyZW50KCktPmVsZW1lbnQoKS0+ZmFzdEhhc0F0dHJpYnV0ZShIVE1MTmFtZXM6OndyYXBBdHRy
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKHJlYXNvbnMsIEZsb3dQYXJlbnRJc1RleHRBcmVhV2l0aFdyYXBwaW5nLCBmYWxs
dGhyb3VnaCk7CiAgICAgLy8gVGhpcyBjdXJyZW50bHkgY292ZXJzIDxibG9ja2Zsb3c+I3RleHQ8
L2Jsb2NrZmxvdz4sIDxibG9ja2Zsb3c+I3RleHQ8YnI+PC9ibG9ja2Zsb3c+IGFuZCBtdXRpcGxl
IChzaWJsaW5nKSBSZW5kZXJUZXh0IGNhc2VzLgogICAgIC8vIFRoZSA8YmxvY2tmbG93Pjxpbmxp
bmU+I3RleHQ8L2lubGluZT48L2Jsb2NrZmxvdz4gY2FzZSBpcyBhbHNvIHBvcHVsYXIgYW5kIHNo
b3VsZCBiZSByZWxhdGl2ZWx5IGVhc3kgdG8gY292ZXIuCiAgICAgZm9yIChjb25zdCBhdXRvKiBj
aGlsZCA9IGZsb3cuZmlyc3RDaGlsZCgpOyBjaGlsZDspIHsKQEAgLTIwMSwxMCArMzA4LDEyIEBA
IGJvb2wgY2FuVXNlRm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKICAgICAgICAgICAg
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAg
ICAgICAgfQotICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc05vblN1cHBvcnRlZENoaWxkLCBmYWxsdGhy
b3VnaCk7CisgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWNhblVzZUZvclN0eWxlKGZs
b3cuc3R5bGUoKSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBhdXRvIHN0eWxlUmVhc29u
cyA9IGNhblVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSwgZmFsbHRocm91Z2gpOworICAgIGlmIChz
dHlsZVJlYXNvbnMgIT0gTm9SZWFzb24pCisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQocmVhc29ucywgc3R5bGVSZWFzb25zLCBmYWxsdGhyb3VnaCk7CiAgICAgLy8gV2Ug
Y2FuJ3QgdXNlIHRoZSBjb2RlIHBhdGggaWYgYW55IGxpbmVzIHdvdWxkIG5lZWQgdG8gYmUgc2hp
ZnRlZCBiZWxvdyBmbG9hdHMuIFRoaXMgaXMgYmVjYXVzZSB3ZSBkb24ndCBrZWVwIHBlci1saW5l
IHkgY29vcmRpbmF0ZXMuCiAgICAgaWYgKGZsb3cuY29udGFpbnNGbG9hdHMoKSkgewogICAgICAg
ICBmbG9hdCBtaW5pbXVtV2lkdGhOZWVkZWQgPSBzdGQ6Om51bWVyaWNfbGltaXRzPGZsb2F0Pjo6
bWF4KCk7CkBAIC0yMTcsMTcgKzMyNiwyMyBAQCBib29sIGNhblVzZUZvcihjb25zdCBSZW5kZXJC
bG9ja0Zsb3cmIGZsb3cpCiAgICAgICAgICAgICAgICAgLy8gaWYgYSBmbG9hdCBoYXMgYSBzaGFw
ZSwgd2UgY2Fubm90IHRlbGwgaWYgY29udGVudCB3aWxsIG5lZWQgdG8gYmUgc2hpZnRlZCB1bnRp
bCBhZnRlciB3ZSBsYXkgaXQgb3V0LAogICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBhbW91
bnQgb2Ygc3BhY2UgaXMgbm90IHVuaWZvcm0gZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGZsb2F0Lgog
ICAgICAgICAgICAgICAgIGlmIChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNp
ZGVJbmZvKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFz
VW5zdXBwb3J0ZWRGbG9hdCwgZmFsbHRocm91Z2gpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAg
ZmxvYXQgYXZhaWxhYmxlV2lkdGggPSBmbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUo
ZmxvYXRpbmdPYmplY3QtPnkoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChhdmFpbGFi
bGVXaWR0aCA8IG1pbmltdW1XaWR0aE5lZWRlZCkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCBmYWxsdGhyb3VnaCk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKCFjYW5Vc2VGb3JGb250QW5kVGV4
dChmbG93KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiB0cnVlOworICAgIGF1
dG8gZm9udEFuZFRleHRSZWFzb25zID0gY2FuVXNlRm9yRm9udEFuZFRleHQoZmxvdywgZmFsbHRo
cm91Z2gpOworICAgIGlmIChmb250QW5kVGV4dFJlYXNvbnMgIT0gTm9SZWFzb24pCisgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgZm9udEFuZFRleHRSZWFz
b25zLCBmYWxsdGhyb3VnaCk7CisgICAgcmV0dXJuIHJlYXNvbnM7Cit9CisKK2Jvb2wgY2FuVXNl
Rm9yKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdykKK3sKKyAgICByZXR1cm4gY2FuVXNlRm9y
V2l0aFJlYXNvbihmbG93LCBGYWxsVGhyb3VnaDo6Tm8pID09IE5vUmVhc29uOwogfQogCiBzdGF0
aWMgZmxvYXQgY29tcHV0ZUxpbmVMZWZ0KEVUZXh0QWxpZ24gdGV4dEFsaWduLCBmbG9hdCBhdmFp
bGFibGVXaWR0aCwgZmxvYXQgY29tbWl0dGVkV2lkdGgsIGZsb2F0IGxvZ2ljYWxMZWZ0T2Zmc2V0
KQpAQCAtNjYyLDUgKzc3NywyOTQgQEAgTGF5b3V0OjpMYXlvdXQoY29uc3QgUnVuVmVjdG9yJiBy
dW5WZWN0b3IsIHVuc2lnbmVkIGxpbmVDb3VudCkKICAgICBtZW1jcHkobV9ydW5zLCBydW5WZWN0
b3IuZGF0YSgpLCBtX3J1bkNvdW50ICogc2l6ZW9mKFJ1bikpOwogfQogCisjaWZuZGVmIE5ERUJV
Rworc3RhdGljIHZvaWQgcHJpbnRSZWFzb24oQXZvaWRhbmNlUmVhc29uIHJlYXNvbiwgVGV4dFN0
cmVhbSYgc3RyZWFtKQoreworICAgIHN3aXRjaCAocmVhc29uKSB7CisgICAgY2FzZSBGbG93SXNJ
bnNpZGVSZWdpb246CisgICAgICAgIHN0cmVhbSA8PCAiZmxvdyBpcyBpbnNpZGUgcmVnaW9uIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGU6Cisg
ICAgICAgIHN0cmVhbSA8PCAiaG9yaXpvbnRhbCB3cml0aW5nIG1vZGUiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dIYXNPdXRsaW5lOgorICAgICAgICBzdHJlYW0gPDwgIm91dGxpbmUi
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc1J1Ynk6CisgICAgICAgIHN0cmVhbSA8
PCAicnVieSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0lzUGFnaW5hdGVkOgorICAg
ICAgICBzdHJlYW0gPDwgInBhZ2luYXRlZCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxv
d0hhc1RleHRPdmVyZmxvdzoKKyAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LW92ZXJmbG93IjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SXNEZXByaWNhdGVkRmxleEJveDoKKyAgICAgICAg
c3RyZWFtIDw8ICJkZXByaWNhdGVkRmxleEJveCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rmxvd1BhcmVudElzUGxhY2Vob2xkZXJFbGVtZW50OgorICAgICAgICBzdHJlYW0gPDwgInBsYWNl
aG9sZGVyIGVsZW1lbnQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dQYXJlbnRJc1Rl
eHRBcmVhV2l0aFdyYXBwaW5nOgorICAgICAgICBzdHJlYW0gPDwgIndyYXBwaW5nIHRleHRhcmVh
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzTm9uU3VwcG9ydGVkQ2hpbGQ6Cisg
ICAgICAgIHN0cmVhbSA8PCAibmVzdGVkIHJlbmRlcmVycyI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQ6CisgICAgICAgIHN0cmVhbSA8PCAiY29tcGxp
Y2F0ZWQgZmxvYXQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNUZXh0RGVjb3Jh
dGlvbjoKKyAgICAgICAgc3RyZWFtIDw8ICJ0ZXh0LWRlY29yYXRpb24iOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dJc0p1c3RpZnlBbGlnbmVkOgorICAgICAgICBzdHJlYW0gPDwgInRl
eHQtYWxpZ246IGp1c3RpZnkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNPdmVy
Zmxvd1Zpc2libGU6CisgICAgICAgIHN0cmVhbSA8PCAib3ZlcmZsb3c6IHZpc2libGUiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc05vdExUUjoKKyAgICAgICAgc3RyZWFtIDw8ICJk
aXIgaXMgbm90IExUUiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc0xpbmVCb3hD
b250YWluUHJvcGVydHk6CisgICAgICAgIHN0cmVhbSA8PCAibGluZS1ib3gtY29udGFpbiBwcm9w
ZXJ0eSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0lzTm90VG9wVG9Cb3R0b206Cisg
ICAgICAgIHN0cmVhbSA8PCAibm9uIHRvcC10by1ib3R0b20gZmxvdyI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmxvd0hhc0xpbmVCcmVhazoKKyAgICAgICAgc3RyZWFtIDw8ICJsaW5lLWJy
ZWFrIHByb3BlcnR5IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzV29yZEJyZWFr
OgorICAgICAgICBzdHJlYW0gPDwgIndvcmQtYnJlYWsgcHJvcGVydHkiOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEZsb3dIYXNOb25Ob3JtYWxVbmljb2RlQmlEaToKKyAgICAgICAgc3RyZWFt
IDw8ICJub24tbm9ybWFsIFVuaWNvZGUgYmlkaSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Rmxvd0hhc1JUTE9yZGVyaW5nOgorICAgICAgICBzdHJlYW0gPDwgIi13ZWJraXQtcnRsLW9yZGVy
aW5nIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzTGluZUFsaWduRWRnZXM6Cisg
ICAgICAgIHN0cmVhbSA8PCAiLXdlYmtpdC1saW5lLWFsaWduIGVkZ2VzIjsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBGbG93SGFzTGluZVNuYXA6CisgICAgICAgIHN0cmVhbSA8PCAiLXdlYmtp
dC1saW5lLXNuYXAgcHJvcGVydHkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNI
eXBlbnNBdXRvOgorICAgICAgICBzdHJlYW0gPDwgImh5cGhlbjogYXV0byI7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgRmxvd0hhc1RleHRFbXBoYXNpc0ZpbGxPck1hcms6CisgICAgICAgIHN0
cmVhbSA8PCAidGV4dC1lbXBoYXNpcyAoZmlsbC9tYXJrKSI7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgRmxvd0hhc1BzZXVkb0ZpcnN0TGluZToKKyAgICAgICAgc3RyZWFtIDw8ICJmaXJzdC1s
aW5lIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzUHNldWRvRmlyc3RMZXR0ZXI6
CisgICAgICAgIHN0cmVhbSA8PCAiZmlyc3QtbGV0dGVyIjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBGbG93SGFzVGV4dENvbWJpbmU6CisgICAgICAgIHN0cmVhbSA8PCAidGV4dCBjb21iaW5l
IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93SGFzVGV4dEZpbGxCb3g6CisgICAgICAg
IHN0cmVhbSA8PCAiYmFja2dyb3VuZC1jb2xvciAodGV4dC1maWxsKSI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRmxvd0hhc0JvcmRlckZpdExpbmVzOgorICAgICAgICBzdHJlYW0gPDwgIi13
ZWJraXQtYm9yZGVyLWZpdCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc05vbkF1
dG9MaW5lQnJlYWs6CisgICAgICAgIHN0cmVhbSA8PCAibGluZS1icmVhayBpcyBub3QgYXV0byI7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0hhc05vbkF1dG9UcmFpbGluZ1dvcmQ6Cisg
ICAgICAgIHN0cmVhbSA8PCAiLWFwcGxlLXRyYWlsaW5nLXdvcmQgaXMgbm90IGF1dG8iOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNTVkdGb250OgorICAgICAgICBzdHJlYW0gPDwg
IlNWRyBmb250IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dEhhc05vQnJlYWtT
cGFjZToKKyAgICAgICAgc3RyZWFtIDw8ICJOby1icmVhay1zcGFjZSBjaGFyYWN0ZXIiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dUZXh0SGFzU29mdEh5cGhlbjoKKyAgICAgICAgc3Ry
ZWFtIDw8ICJzb2Z0IGh5cGhlbiBjaGFyYWN0ZXIiOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZsb3dUZXh0SGFzRGlyZWN0aW9uQ2hhcmFjdGVyOgorICAgICAgICBzdHJlYW0gPDwgImRpcmVj
dGlvbiBjaGFyYWN0ZXIiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dJc01pc3NpbmdQ
cmltYXJ5Rm9udDoKKyAgICAgICAgc3RyZWFtIDw8ICJtaXNzaW5nIHByaW1hcnkgZm9udCI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgRmxvd0ZvbnRJc01pc3NpbmdHbHlwaDoKKyAgICAgICAg
c3RyZWFtIDw8ICJtaXNzaW5nIGdseXBoIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93
VGV4dElzQ29tYmluZVRleHQ6CisgICAgICAgIHN0cmVhbSA8PCAidGV4dCBpcyBjb21iaW5lIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzUmVuZGVyQ291bnRlcjoKKyAgICAg
ICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBSZW5kZXJDb3VudGVyIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGbG93VGV4dElzUmVuZGVyUXVvdGU6CisgICAgICAgIHN0cmVhbSA8PCAidW5z
dXBwb3J0ZWQgUmVuZGVyUXVvdGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dUZXh0
SXNUZXh0RnJhZ21lbnQ6CisgICAgICAgIHN0cmVhbSA8PCAidW5zdXBwb3J0ZWQgVGV4dEZyYWdt
ZW50IjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGbG93VGV4dElzU1ZHSW5saW5lVGV4dDoK
KyAgICAgICAgc3RyZWFtIDw8ICJ1bnN1cHBvcnRlZCBTVkdJbmxpbmVUZXh0IjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGbG93Rm9udElzTm90U2ltcGxlOgorICAgICAgICBzdHJlYW0gPDwg
ImNvbXBsZXh0IGZvbnQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZsb3dIYXNUZXh0U2hh
ZG93OgorICAgICAgICBzdHJlYW0gPDwgInRleHQtc2hhZG93IjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBGbG93VGV4dElzRW1wdHk6CisgICAgY2FzZSBGbG93SGFzTm9DaGlsZDoKKyAgICBj
YXNlIEZsb3dIYXNOb1BhcmVudDoKKyAgICBjYXNlIEZlYXR1cmVJc0Rpc2FibGVkOgorICAgIGRl
ZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgcHJpbnRSZWFz
b25zKEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMsIFRleHRTdHJlYW0mIHN0cmVhbSkKK3sK
KyAgICBib29sIGZpcnN0ID0gdHJ1ZTsKKyAgICBmb3IgKGF1dG8gcmVhc29uSXRlbSA9IEVuZE9m
UmVhc29ucyA+PiAxOyByZWFzb25JdGVtICE9IE5vUmVhc29uOyByZWFzb25JdGVtID4+PSAxKSB7
CisgICAgICAgIGlmICghKHJlYXNvbnMgJiByZWFzb25JdGVtKSkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBzdHJlYW0gPDwgKGZpcnN0ID8gIiAiIDogIiwgIik7CisgICAgICAgIGZp
cnN0ID0gZmFsc2U7CisgICAgICAgIHByaW50UmVhc29uKHJlYXNvbkl0ZW0sIHN0cmVhbSk7Cisg
ICAgfQorfQorCitzdGF0aWMgdm9pZCBwcmludFRleHRGb3JTdWJ0cmVlKGNvbnN0IFJlbmRlck9i
amVjdCYgcmVuZGVyZXIsIHVuc2lnbmVkJiBjaGFyYWN0ZXJzTGVmdCwgVGV4dFN0cmVhbSYgc3Ry
ZWFtKQoreworICAgIGlmICghY2hhcmFjdGVyc0xlZnQpCisgICAgICAgIHJldHVybjsKKyAgICBp
ZiAoaXM8UmVuZGVyVGV4dD4ocmVuZGVyZXIpKSB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZG93
bmNhc3Q8UmVuZGVyVGV4dD4ocmVuZGVyZXIpLnRleHQoKTsKKyAgICAgICAgdGV4dCA9IHRleHQu
c3RyaXBXaGl0ZVNwYWNlKCk7CisgICAgICAgIHVuc2lnbmVkIGxlbiA9IHN0ZDo6bWluKGNoYXJh
Y3RlcnNMZWZ0LCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgc3RyZWFtIDw8IHRleHQubGVmdChs
ZW4pOworICAgICAgICBjaGFyYWN0ZXJzTGVmdCAtPSBsZW47CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgaWYgKCFpczxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCisgICAgICAgIHJldHVy
bjsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGNoaWxkID0gZG93bmNhc3Q8UmVuZGVyRWxlbWVudD4o
cmVuZGVyZXIpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5n
KCkpCisgICAgICAgIHByaW50VGV4dEZvclN1YnRyZWUoKmNoaWxkLCBjaGFyYWN0ZXJzTGVmdCwg
c3RyZWFtKTsKK30KKworc3RhdGljIHVuc2lnbmVkIHRleHRMZW5ndGhGb3JTdWJ0cmVlKGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZGVyZXIpCit7CisgICAgaWYgKGlzPFJlbmRlclRleHQ+KHJlbmRl
cmVyKSkKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlclRleHQ+KHJlbmRlcmVyKS50ZXh0
TGVuZ3RoKCk7CisgICAgaWYgKCFpczxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikpCisgICAgICAg
IHJldHVybiAwOworICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSAwOworICAgIGZvciAoY29uc3Qg
YXV0byogY2hpbGQgPSBkb3duY2FzdDxSZW5kZXJFbGVtZW50PihyZW5kZXJlcikuZmlyc3RDaGls
ZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkKKyAgICAgICAgdGV4dExl
bmd0aCArPSB0ZXh0TGVuZ3RoRm9yU3VidHJlZSgqY2hpbGQpOworICAgIHJldHVybiB0ZXh0TGVu
Z3RoOworfQorCitzdGF0aWMgdm9pZCBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93
cyhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlcmVyLCBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2Nr
Rmxvdyo+JiBsZWFmUmVuZGVyZXJzKQoreworICAgIGlmIChpczxSZW5kZXJUZXh0PihyZW5kZXJl
cikpIHsKKyAgICAgICAgaWYgKCFkb3duY2FzdDxSZW5kZXJUZXh0PihyZW5kZXJlcikudGV4dExl
bmd0aCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGaW5kIFJlbmRlckJsb2Nr
RmxvdyBhbmNlc3Rvci4KKyAgICAgICAgZm9yIChjb25zdCBhdXRvKiBjdXJyZW50ID0gcmVuZGVy
ZXIucGFyZW50KCk7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5wYXJlbnQoKSkgeworICAg
ICAgICAgICAgaWYgKCFpczxSZW5kZXJCbG9ja0Zsb3c+KGN1cnJlbnQpKQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbGVhZlJlbmRlcmVycy5hZGQoZG93bmNhc3Q8UmVu
ZGVyQmxvY2tGbG93PihjdXJyZW50KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghaXM8UmVuZGVyRWxlbWVudD4ocmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm47CisgICAgZm9yIChjb25zdCBhdXRvKiBjaGlsZCA9IGRvd25j
YXN0PFJlbmRlckVsZW1lbnQ+KHJlbmRlcmVyKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT5uZXh0U2libGluZygpKQorICAgICAgICBjb2xsZWN0Tm9uRW1wdHlMZWFmUmVuZGVy
QmxvY2tGbG93cygqY2hpbGQsIGxlYWZSZW5kZXJlcnMpOworfQorCitzdGF0aWMgdm9pZCBjb2xs
ZWN0Tm9uRW1wdHlMZWFmUmVuZGVyQmxvY2tGbG93c0ZvckN1cnJlbnRQYWdlKEhhc2hTZXQ8Y29u
c3QgUmVuZGVyQmxvY2tGbG93Kj4mIGxlYWZSZW5kZXJlcnMpCit7CisgICAgZm9yIChjb25zdCBh
dXRvKiBkb2N1bWVudCA6IERvY3VtZW50OjphbGxEb2N1bWVudHMoKSkgeworICAgICAgICBpZiAo
IWRvY3VtZW50LT5yZW5kZXJWaWV3KCkgfHwgZG9jdW1lbnQtPmluUGFnZUNhY2hlKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKCFkb2N1bWVudC0+aXNIVE1MRG9jdW1lbnQo
KSAmJiAhZG9jdW1lbnQtPmlzWEhUTUxEb2N1bWVudCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGNvbGxlY3ROb25FbXB0eUxlYWZSZW5kZXJCbG9ja0Zsb3dzKCpkb2N1bWVudC0+
cmVuZGVyVmlldygpLCBsZWFmUmVuZGVyZXJzKTsKKyAgICB9Cit9CisKK3ZvaWQgcHJpbnRTaW1w
bGVMaW5lTGF5b3V0QmxvY2tMaXN0KCkKK3sKKyAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2Nr
Rmxvdyo+IGxlYWZSZW5kZXJlcnM7CisgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2Nr
Rmxvd3NGb3JDdXJyZW50UGFnZShsZWFmUmVuZGVyZXJzKTsKKyAgICBpZiAoIWxlYWZSZW5kZXJl
cnMuc2l6ZSgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlz
IGRvY3VtZW50XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXh0U3RyZWFtIHN0
cmVhbTsKKyAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBmb3IgKGNvbnN0IGF1dG8qIGZsb3cgOiBsZWFmUmVu
ZGVyZXJzKSB7CisgICAgICAgIGF1dG8gcmVhc29uID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxv
dywgRmFsbFRocm91Z2g6Olllcyk7CisgICAgICAgIGlmIChyZWFzb24gPT0gTm9SZWFzb24pCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgdW5zaWduZWQgcHJpbnRlZExlbmd0aCA9IDMw
OworICAgICAgICBzdHJlYW0gPDwgIlwiIjsKKyAgICAgICAgcHJpbnRUZXh0Rm9yU3VidHJlZSgq
ZmxvdywgcHJpbnRlZExlbmd0aCwgc3RyZWFtKTsKKyAgICAgICAgZm9yICg7cHJpbnRlZExlbmd0
aCA+IDA7IC0tcHJpbnRlZExlbmd0aCkKKyAgICAgICAgICAgIHN0cmVhbSA8PCAiICI7CisgICAg
ICAgIHN0cmVhbSA8PCAiXCIoIiA8PCB0ZXh0TGVuZ3RoRm9yU3VidHJlZSgqZmxvdykgPDwgIik6
IjsKKyAgICAgICAgcHJpbnRSZWFzb25zKHJlYXNvbiwgc3RyZWFtKTsKKyAgICAgICAgc3RyZWFt
IDw8ICJcbiI7CisgICAgfQorICAgIHN0cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBz
dHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIHByaW50U2ltcGxlTGlu
ZUxheW91dENvdmVyYWdlKCkKK3sKKyAgICBIYXNoU2V0PGNvbnN0IFJlbmRlckJsb2NrRmxvdyo+
IGxlYWZSZW5kZXJlcnM7CisgICAgY29sbGVjdE5vbkVtcHR5TGVhZlJlbmRlckJsb2NrRmxvd3NG
b3JDdXJyZW50UGFnZShsZWFmUmVuZGVyZXJzKTsKKyAgICBpZiAoIWxlYWZSZW5kZXJlcnMuc2l6
ZSgpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiTm8gdGV4dCBmb3VuZCBpbiB0aGlzIGRvY3Vt
ZW50XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBUZXh0U3RyZWFtIHN0cmVhbTsK
KyAgICBIYXNoTWFwPEF2b2lkYW5jZVJlYXNvbiwgdW5zaWduZWQ+IGZsb3dTdGF0aXN0aWNzOwor
ICAgIHVuc2lnbmVkIHRleHRMZW5ndGggPSAwOworICAgIHVuc2lnbmVkIHVuc3VwcG9ydGVkVGV4
dExlbmd0aCA9IDA7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZVbnN1cHBvcnRlZExlYWZCbG9ja3Mg
PSAwOworICAgIGZvciAoY29uc3QgYXV0byogZmxvdyA6IGxlYWZSZW5kZXJlcnMpIHsKKyAgICAg
ICAgYXV0byBmbG93TGVuZ3RoID0gdGV4dExlbmd0aEZvclN1YnRyZWUoKmZsb3cpOworICAgICAg
ICB0ZXh0TGVuZ3RoICs9IGZsb3dMZW5ndGg7CisgICAgICAgIGF1dG8gcmVhc29ucyA9IGNhblVz
ZUZvcldpdGhSZWFzb24oKmZsb3csIEZhbGxUaHJvdWdoOjpZZXMpOworICAgICAgICBpZiAocmVh
c29ucyA9PSBOb1JlYXNvbikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICArK251bWJl
ck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzOworICAgICAgICB1bnN1cHBvcnRlZFRleHRMZW5ndGgg
Kz0gZmxvd0xlbmd0aDsKKyAgICAgICAgZm9yIChhdXRvIHJlYXNvbkl0ZW0gPSBFbmRPZlJlYXNv
bnMgPj4gMTsgcmVhc29uSXRlbSAhPSBOb1JlYXNvbjsgcmVhc29uSXRlbSA+Pj0gMSkgeworICAg
ICAgICAgICAgaWYgKCEocmVhc29ucyAmIHJlYXNvbkl0ZW0pKQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBmbG93U3RhdGlzdGljcy5hZGQocmVh
c29uSXRlbSwgZmxvd0xlbmd0aCk7CisgICAgICAgICAgICBpZiAoIXJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUgKz0gZmxvd0xlbmd0aDsK
KyAgICAgICAgfQorICAgIH0KKyAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKKyAgICBzdHJlYW0gPDwgIk51bWJlciBv
ZiB0ZXh0IGJsb2NrczogdG90YWwoIiA8PCAgbGVhZlJlbmRlcmVycy5zaXplKCkgPDwgIikgbm9u
LXNpbXBsZSgiIDw8IG51bWJlck9mVW5zdXBwb3J0ZWRMZWFmQmxvY2tzIDw8ICIpXG5UZXh0IGxl
bmd0aDogdG90YWwoIiA8PAorICAgICAgICB0ZXh0TGVuZ3RoIDw8ICIpIG5vbi1zaW1wbGUoIiA8
PCB1bnN1cHBvcnRlZFRleHRMZW5ndGggPDwgIilcbiI7CisgICAgZm9yIChjb25zdCBhdXRvIHJl
YXNvbkVudHJ5IDogZmxvd1N0YXRpc3RpY3MpIHsKKyAgICAgICAgcHJpbnRSZWFzb24ocmVhc29u
RW50cnkua2V5LCBzdHJlYW0pOworICAgICAgICBzdHJlYW0gPDwgIjogIiA8PCAoZmxvYXQpcmVh
c29uRW50cnkudmFsdWUgLyAoZmxvYXQpdGV4dExlbmd0aCAqIDEwMCA8PCAiJVxuIjsKKyAgICB9
CisgICAgc3RyZWFtIDw8ICJzaW1wbGUgbGluZSBsYXlvdXQgY292ZXJhZ2U6ICIgPDwgKGZsb2F0
KSh0ZXh0TGVuZ3RoIC0gdW5zdXBwb3J0ZWRUZXh0TGVuZ3RoKSAvIChmbG9hdCl0ZXh0TGVuZ3Ro
ICogMTAwIDw8ICIlXG4iOworICAgIHN0cmVhbSA8PCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iOworICAgIFdURkxvZ0Fsd2F5cygiJXMiLCBz
dHJlYW0ucmVsZWFzZSgpLnV0ZjgoKS5kYXRhKCkpOworfQorI2VuZGlmCiB9CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>266733</attachid>
            <date>2015-12-06 12:21:08 -0800</date>
            <delta_ts>2015-12-06 19:57:59 -0800</delta_ts>
            <desc>Addressing post-review comments on r193374</desc>
            <filename>Patch.txt</filename>
            <type>text/plain</type>
            <size>26804</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBkZDcyMzZkLi40OWU0MGM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTgg
QEAKKzIwMTUtMTItMDYgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KKworICAgICAg
ICBBZGRyZXNzaW5nIHBvc3QtcmV2aWV3IGNvbW1lbnRzIG9uIHIxOTMzNzQuCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgQW50dGkgS29pdmlzdG8uCisKKyAgICAgICAgKiByZW5kZXJpbmcvU2ltcGxl
TGluZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0OjpjYW5V
c2VGb3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZv
ckZvbnRBbmRUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVz
ZUZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OmNhblVzZUZv
cldpdGhSZWFzb24pOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlTGluZUxheW91dDo6Y2FuVXNl
Rm9yKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUxpbmVMYXlvdXQ6OnByaW50U2ltcGxlTGlu
ZUxheW91dEJsb2NrTGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVMaW5lTGF5b3V0Ojpw
cmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSk6CisKIDIwMTUtMTItMDMgIFphbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTaW1wbGUgbGluZSBsYXlvdXQ6IFByaW50
IG91dCBzaW1wbGUgbGluZSBsYXlvdXQgc3RhdGlzdGljcyBmb3IgdGhlIGN1cnJlbnQgcGFnZSBm
cm9tIGNvbW1hbmQgbGluZS4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9T
aW1wbGVMaW5lTGF5b3V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9TaW1wbGVMaW5l
TGF5b3V0LmNwcAppbmRleCA4ZDFhMzY4Li5hZjY5OWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvU2ltcGxlTGluZUxheW91dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1NpbXBsZUxpbmVMYXlvdXQuY3BwCkBAIC02MSw4NCArNjEsODUgQEAgdm9pZCBw
cmludFNpbXBsZUxpbmVMYXlvdXRCbG9ja0xpc3QoKTsKICNlbmRpZgogCiBlbnVtIEF2b2lkYW5j
ZVJlYXNvbl8gOiB1aW50NjRfdCB7Ci0gICAgTm9SZWFzb24gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCAwLAotICAgIEZsb3dJc0luc2lkZVJlZ2lvbiAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgMSwKLSAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAg
ICA9IDFMTFUgIDw8IDIsCi0gICAgRmxvd0hhc091dGxpbmUgICAgICAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCAzLAotICAgIEZsb3dJc1J1YnkgICAgICAgICAgICAgICAgICAgICAgICAgID0g
MUxMVSAgPDwgNCwKLSAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICA9IDFM
TFUgIDw8IDUsCi0gICAgRmxvd0hhc1RleHRPdmVyZmxvdyAgICAgICAgICAgICAgICAgPSAxTExV
ICA8PCA2LAotICAgIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94ICAgICAgICAgICAgID0gMUxMVSAg
PDwgNywKLSAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICA9IDFMTFUgIDw8
IDgsCi0gICAgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmcgICAgPSAxTExVICA8PCA5
LAotICAgIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCAgICAgICAgICAgID0gMUxMVSAgPDwgMTAs
Ci0gICAgRmxvd0hhc1Vuc3VwcG9ydGVkRmxvYXQgICAgICAgICAgICAgPSAxTExVICA8PCAxMSwK
LSAgICBGbG93SGFzVGV4dERlY29yYXRpb24gICAgICAgICAgICAgICA9IDFMTFUgIDw8IDEyLAot
ICAgIEZsb3dJc0p1c3RpZnlBbGlnbmVkICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTMsCi0g
ICAgRmxvd0hhc092ZXJmbG93VmlzaWJsZSAgICAgICAgICAgICAgPSAxTExVICA8PCAxNCwKLSAg
ICBGbG93SXNOb3RMVFIgICAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE1LAotICAg
IEZsb3dIYXNMaW5lQm94Q29udGFpblByb3BlcnR5ICAgICAgID0gMUxMVSAgPDwgMTYsCi0gICAg
Rmxvd0lzTm90VG9wVG9Cb3R0b20gICAgICAgICAgICAgICAgPSAxTExVICA8PCAxNywKLSAgICBG
bG93SGFzTGluZUJyZWFrICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE4LAotICAgIEZs
b3dIYXNXb3JkQnJlYWsgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTksCi0gICAgRmxv
d0hhc05vbk5vcm1hbFVuaWNvZGVCaURpICAgICAgICAgPSAxTExVICA8PCAyMCwKLSAgICBGbG93
SGFzUlRMT3JkZXJpbmcgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIxLAotICAgIEZsb3dI
YXNMaW5lQWxpZ25FZGdlcyAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjIsCi0gICAgRmxvd0hh
c0xpbmVTbmFwICAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMywKLSAgICBGbG93SGFz
SHlwZW5zQXV0byAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI0LAotICAgIEZsb3dIYXNU
ZXh0RW1waGFzaXNGaWxsT3JNYXJrICAgICAgID0gMUxMVSAgPDwgMjUsCi0gICAgRmxvd0hhc1Rl
eHRTaGFkb3cgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyNiwKLSAgICBGbG93SGFzUHNl
dWRvRmlyc3RMaW5lICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI3LAotICAgIEZsb3dIYXNQc2V1
ZG9GaXJzdExldHRlciAgICAgICAgICAgID0gMUxMVSAgPDwgMjgsCi0gICAgRmxvd0hhc1RleHRD
b21iaW5lICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAyOSwKLSAgICBGbG93SGFzVGV4dEZp
bGxCb3ggICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDMwLAotICAgIEZsb3dIYXNCb3JkZXJG
aXRMaW5lcyAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzEsCi0gICAgRmxvd0hhc05vbkF1dG9M
aW5lQnJlYWsgICAgICAgICAgICAgPSAxTExVICA8PCAzMiwKLSAgICBGbG93SGFzTm9uQXV0b1Ry
YWlsaW5nV29yZCAgICAgICAgICA9IDFMTFUgIDw8IDMzLAotICAgIEZsb3dIYXNTVkdGb250ICAg
ICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzQsCi0gICAgRmxvd1RleHRJc0VtcHR5ICAg
ICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAzNSwKLSAgICBGbG93VGV4dEhhc05vQnJlYWtT
cGFjZSAgICAgICAgICAgICA9IDFMTFUgIDw8IDM2LAotICAgIEZsb3dUZXh0SGFzU29mdEh5cGhl
biAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMzcsCi0gICAgRmxvd1RleHRIYXNEaXJlY3Rpb25D
aGFyYWN0ZXIgICAgICAgPSAxTExVICA8PCAzOCwKLSAgICBGbG93SXNNaXNzaW5nUHJpbWFyeUZv
bnQgICAgICAgICAgICA9IDFMTFUgIDw8IDM5LAotICAgIEZsb3dGb250SXNNaXNzaW5nR2x5cGgg
ICAgICAgICAgICAgID0gMUxMVSAgPDwgNDAsCi0gICAgRmxvd1RleHRJc0NvbWJpbmVUZXh0ICAg
ICAgICAgICAgICAgPSAxTExVICA8PCA0MSwKLSAgICBGbG93VGV4dElzUmVuZGVyQ291bnRlciAg
ICAgICAgICAgICA9IDFMTFUgIDw8IDQyLAotICAgIEZsb3dUZXh0SXNSZW5kZXJRdW90ZSAgICAg
ICAgICAgICAgID0gMUxMVSAgPDwgNDMsCi0gICAgRmxvd1RleHRJc1RleHRGcmFnbWVudCAgICAg
ICAgICAgICAgPSAxTExVICA8PCA0NCwKLSAgICBGbG93VGV4dElzU1ZHSW5saW5lVGV4dCAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDQ1LAotICAgIEZsb3dGb250SXNOb3RTaW1wbGUgICAgICAgICAg
ICAgICAgID0gMUxMVSAgPDwgNDYsCi0gICAgRmVhdHVyZUlzRGlzYWJsZWQgICAgICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA0NywKLSAgICBGbG93SGFzTm9QYXJlbnQgICAgICAgICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQ4LAotICAgIEZsb3dIYXNOb0NoaWxkICAgICAgICAgICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDksCi0gICAgRW5kT2ZSZWFzb25zICAgICAgICAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA1MAorICAgIEZsb3dJc0luc2lkZVJlZ2lvbiAgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgMCwKKyAgICBGbG93SGFzSG9yaXpvbmFsV3JpdGluZ01vZGUgICAgICAgICA9
IDFMTFUgIDw8IDEsCisgICAgRmxvd0hhc091dGxpbmUgICAgICAgICAgICAgICAgICAgICAgPSAx
TExVICA8PCAyLAorICAgIEZsb3dJc1J1YnkgICAgICAgICAgICAgICAgICAgICAgICAgID0gMUxM
VSAgPDwgMywKKyAgICBGbG93SXNQYWdpbmF0ZWQgICAgICAgICAgICAgICAgICAgICA9IDFMTFUg
IDw8IDQsCisgICAgRmxvd0hhc1RleHRPdmVyZmxvdyAgICAgICAgICAgICAgICAgPSAxTExVICA8
PCA1LAorICAgIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94ICAgICAgICAgICAgID0gMUxMVSAgPDwg
NiwKKyAgICBGbG93UGFyZW50SXNQbGFjZWhvbGRlckVsZW1lbnQgICAgICA9IDFMTFUgIDw8IDcs
CisgICAgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmcgICAgPSAxTExVICA8PCA4LAor
ICAgIEZsb3dIYXNOb25TdXBwb3J0ZWRDaGlsZCAgICAgICAgICAgID0gMUxMVSAgPDwgOSwKKyAg
ICBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCAgICAgICAgICAgICA9IDFMTFUgIDw8IDEwLAorICAg
IEZsb3dIYXNUZXh0RGVjb3JhdGlvbiAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTEsCisgICAg
Rmxvd0lzSnVzdGlmeUFsaWduZWQgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxMiwKKyAgICBG
bG93SGFzT3ZlcmZsb3dWaXNpYmxlICAgICAgICAgICAgICA9IDFMTFUgIDw8IDEzLAorICAgIEZs
b3dJc05vdExUUiAgICAgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTQsCisgICAgRmxv
d0hhc0xpbmVCb3hDb250YWluUHJvcGVydHkgICAgICAgPSAxTExVICA8PCAxNSwKKyAgICBGbG93
SXNOb3RUb3BUb0JvdHRvbSAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDE2LAorICAgIEZsb3dI
YXNMaW5lQnJlYWsgICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMTcsCisgICAgRmxvd0hh
c1dvcmRCcmVhayAgICAgICAgICAgICAgICAgICAgPSAxTExVICA8PCAxOCwKKyAgICBGbG93SGFz
Tm9uTm9ybWFsVW5pY29kZUJpRGkgICAgICAgICA9IDFMTFUgIDw8IDE5LAorICAgIEZsb3dIYXNS
VExPcmRlcmluZyAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjAsCisgICAgRmxvd0hhc0xp
bmVBbGlnbkVkZ2VzICAgICAgICAgICAgICAgPSAxTExVICA8PCAyMSwKKyAgICBGbG93SGFzTGlu
ZVNuYXAgICAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDIyLAorICAgIEZsb3dIYXNIeXBl
bnNBdXRvICAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjMsCisgICAgRmxvd0hhc1RleHRF
bXBoYXNpc0ZpbGxPck1hcmsgICAgICAgPSAxTExVICA8PCAyNCwKKyAgICBGbG93SGFzVGV4dFNo
YWRvdyAgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI1LAorICAgIEZsb3dIYXNQc2V1ZG9G
aXJzdExpbmUgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjYsCisgICAgRmxvd0hhc1BzZXVkb0Zp
cnN0TGV0dGVyICAgICAgICAgICAgPSAxTExVICA8PCAyNywKKyAgICBGbG93SGFzVGV4dENvbWJp
bmUgICAgICAgICAgICAgICAgICA9IDFMTFUgIDw8IDI4LAorICAgIEZsb3dIYXNUZXh0RmlsbEJv
eCAgICAgICAgICAgICAgICAgID0gMUxMVSAgPDwgMjksCisgICAgRmxvd0hhc0JvcmRlckZpdExp
bmVzICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMCwKKyAgICBGbG93SGFzTm9uQXV0b0xpbmVC
cmVhayAgICAgICAgICAgICA9IDFMTFUgIDw8IDMxLAorICAgIEZsb3dIYXNOb25BdXRvVHJhaWxp
bmdXb3JkICAgICAgICAgID0gMUxMVSAgPDwgMzIsCisgICAgRmxvd0hhc1NWR0ZvbnQgICAgICAg
ICAgICAgICAgICAgICAgPSAxTExVICA8PCAzMywKKyAgICBGbG93VGV4dElzRW1wdHkgICAgICAg
ICAgICAgICAgICAgICA9IDFMTFUgIDw8IDM0LAorICAgIEZsb3dUZXh0SGFzTm9CcmVha1NwYWNl
ICAgICAgICAgICAgID0gMUxMVSAgPDwgMzUsCisgICAgRmxvd1RleHRIYXNTb2Z0SHlwaGVuICAg
ICAgICAgICAgICAgPSAxTExVICA8PCAzNiwKKyAgICBGbG93VGV4dEhhc0RpcmVjdGlvbkNoYXJh
Y3RlciAgICAgICA9IDFMTFUgIDw8IDM3LAorICAgIEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCAg
ICAgICAgICAgID0gMUxMVSAgPDwgMzgsCisgICAgRmxvd0ZvbnRJc01pc3NpbmdHbHlwaCAgICAg
ICAgICAgICAgPSAxTExVICA8PCAzOSwKKyAgICBGbG93VGV4dElzQ29tYmluZVRleHQgICAgICAg
ICAgICAgICA9IDFMTFUgIDw8IDQwLAorICAgIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyICAgICAg
ICAgICAgID0gMUxMVSAgPDwgNDEsCisgICAgRmxvd1RleHRJc1JlbmRlclF1b3RlICAgICAgICAg
ICAgICAgPSAxTExVICA8PCA0MiwKKyAgICBGbG93VGV4dElzVGV4dEZyYWdtZW50ICAgICAgICAg
ICAgICA9IDFMTFUgIDw8IDQzLAorICAgIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0ICAgICAgICAg
ICAgID0gMUxMVSAgPDwgNDQsCisgICAgRmxvd0ZvbnRJc05vdFNpbXBsZSAgICAgICAgICAgICAg
ICAgPSAxTExVICA8PCA0NSwKKyAgICBGZWF0dXJlSXNEaXNhYmxlZCAgICAgICAgICAgICAgICAg
ICA9IDFMTFUgIDw8IDQ2LAorICAgIEZsb3dIYXNOb1BhcmVudCAgICAgICAgICAgICAgICAgICAg
ID0gMUxMVSAgPDwgNDcsCisgICAgRmxvd0hhc05vQ2hpbGQgICAgICAgICAgICAgICAgICAgICAg
PSAxTExVICA8PCA0OCwKKyAgICBFbmRPZlJlYXNvbnMgICAgICAgICAgICAgICAgICAgICAgICA9
IDFMTFUgIDw8IDQ5CiB9OworY29uc3QgdW5zaWduZWQgTm9SZWFzb24gPSAwOworCiB0eXBlZGVm
IHVpbnQ2NF90IEF2b2lkYW5jZVJlYXNvbjsKIHR5cGVkZWYgdWludDY0X3QgQXZvaWRhbmNlUmVh
c29uRmxhZ3M7CiAKLWVudW0gY2xhc3MgRmFsbFRocm91Z2ggeyBZZXMsIE5vIH07CitlbnVtIGNs
YXNzIEluY2x1ZGVSZWFzb25zIHsgRmlyc3QgLCBBbGwgfTsKIAogI2lmbmRlZiBOREVCVUcKLSNk
ZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCByZWFzb24sIGZh
bGx0aHJvdWdoKSB7IFwKKyNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChy
ZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKICAgICAgICAgcmVhc29ucyB8PSBy
ZWFzb247IFwKLSAgICAgICAgaWYgKGZhbGx0aHJvdWdoID09IEZhbGxUaHJvdWdoOjpObykgXAor
ICAgICAgICBpZiAoaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSBcCiAg
ICAgICAgICAgICByZXR1cm4gcmVhc29uczsgXAogICAgIH0KICNlbHNlCi0jZGVmaW5lIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgcmVhc29uLCBmYWxsdGhyb3VnaCkg
eyBcCi0gICAgICAgIEFTU0VSVF9VTlVTRUQoZmFsbHRocm91Z2gsIGZhbGx0aHJvdWdoID09IEZh
bGxUaHJvdWdoOjpObyk7IFwKKyNkZWZpbmUgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChyZWFzb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKSB7IFwKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChpbmNsdWRlUmVhc29ucywgaW5jbHVkZVJlYXNvbnMgPT0gSW5jbHVkZVJlYXNvbnM6OkZp
cnN0KTsgXAogICAgICAgICByZWFzb25zIHw9IHJlYXNvbjsgXAogICAgICAgICByZXR1cm4gcmVh
c29uczsgXAogICAgIH0KICNlbmRpZgogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlw
ZT4KLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JUZXh0KGNvbnN0IENoYXJh
Y3RlclR5cGUqIHRleHQsIHVuc2lnbmVkIGxlbmd0aCwgY29uc3QgRm9udCYgZm9udCwgRmFsbFRo
cm91Z2ggZmFsbHRocm91Z2gpCitzdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9y
VGV4dChjb25zdCBDaGFyYWN0ZXJUeXBlKiB0ZXh0LCB1bnNpZ25lZCBsZW5ndGgsIGNvbnN0IEZv
bnQmIGZvbnQsIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQogewotICAgIEF2b2lkYW5j
ZVJlYXNvbkZsYWdzIHJlYXNvbnMgPSBOb1JlYXNvbjsKKyAgICBBdm9pZGFuY2VSZWFzb25GbGFn
cyByZWFzb25zID0geyB9OwogICAgIC8vIEZJWE1FOiA8dGV4dGFyZWEgbWF4bGVuZ3RoPTA+IGdl
bmVyYXRlcyBlbXB0eSB0ZXh0IG5vZGUuCiAgICAgaWYgKCFsZW5ndGgpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc0VtcHR5LCBmYWxs
dGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1Rl
eHRJc0VtcHR5LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gdGV4
dFtpXTsKQEAgLTE0NywxMTggKzE0OCwxMTggQEAgc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZsYWdz
IGNhblVzZUZvclRleHQoY29uc3QgQ2hhcmFjdGVyVHlwZSogdGV4dCwgdW5zaWduZWQgbGUKIAog
ICAgICAgICAvLyBUaGVzZSB3b3VsZCBiZSBlYXN5IHRvIHN1cHBvcnQuCiAgICAgICAgIGlmIChj
aGFyYWN0ZXIgPT0gbm9CcmVha1NwYWNlKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVU
VVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4dEhhc05vQnJlYWtTcGFjZSwgZmFsbHRocm91
Z2gpOworICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4
dEhhc05vQnJlYWtTcGFjZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgICAgICBpZiAo
Y2hhcmFjdGVyID09IHNvZnRIeXBoZW4pCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SGFzU29mdEh5cGhlbiwgZmFsbHRocm91Z2gp
OworICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93VGV4dEhh
c1NvZnRIeXBoZW4sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKIAogICAgICAgICBVQ2hhckRp
cmVjdGlvbiBkaXJlY3Rpb24gPSB1X2NoYXJEaXJlY3Rpb24oY2hhcmFjdGVyKTsKICAgICAgICAg
aWYgKGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlQgfHwgZGlyZWN0aW9uID09IFVfUklHSFRf
VE9fTEVGVF9BUkFCSUMKICAgICAgICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xF
RlRfRU1CRURESU5HIHx8IGRpcmVjdGlvbiA9PSBVX1JJR0hUX1RPX0xFRlRfT1ZFUlJJREUKICAg
ICAgICAgICAgIHx8IGRpcmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfRU1CRURESU5HIHx8IGRp
cmVjdGlvbiA9PSBVX0xFRlRfVE9fUklHSFRfT1ZFUlJJREUKICAgICAgICAgICAgIHx8IGRpcmVj
dGlvbiA9PSBVX1BPUF9ESVJFQ1RJT05BTF9GT1JNQVQgfHwgZGlyZWN0aW9uID09IFVfQk9VTkRB
UllfTkVVVFJBTCkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd1RleHRIYXNEaXJlY3Rpb25DaGFyYWN0ZXIsIGZhbGx0aHJvdWdoKTsKKyAg
ICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1RleHRIYXNEaXJl
Y3Rpb25DaGFyYWN0ZXIsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKIAogICAgICAgICBpZiAo
IWZvbnQuZ2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKSkKLSAgICAgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0ZvbnRJc01pc3NpbmdHbHlwaCwg
ZmFsbHRocm91Z2gpOworICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93Rm9udElzTWlzc2luZ0dseXBoLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAg
fQogICAgIHJldHVybiByZWFzb25zOwogfQogCi1zdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3Mg
Y2FuVXNlRm9yVGV4dChjb25zdCBSZW5kZXJUZXh0JiB0ZXh0UmVuZGVyZXIsIGNvbnN0IEZvbnQm
IGZvbnQsIEZhbGxUaHJvdWdoIGZhbGx0aHJvdWdoKQorc3RhdGljIEF2b2lkYW5jZVJlYXNvbkZs
YWdzIGNhblVzZUZvclRleHQoY29uc3QgUmVuZGVyVGV4dCYgdGV4dFJlbmRlcmVyLCBjb25zdCBG
b250JiBmb250LCBJbmNsdWRlUmVhc29ucyBpbmNsdWRlUmVhc29ucykKIHsKICAgICBpZiAodGV4
dFJlbmRlcmVyLmlzOEJpdCgpKQotICAgICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVu
ZGVyZXIuY2hhcmFjdGVyczgoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCwgZmFs
bHRocm91Z2gpOwotICAgIHJldHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0
ZXJzMTYoKSwgdGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCwgZmFsbHRocm91Z2gpOwor
ICAgICAgICByZXR1cm4gY2FuVXNlRm9yVGV4dCh0ZXh0UmVuZGVyZXIuY2hhcmFjdGVyczgoKSwg
dGV4dFJlbmRlcmVyLnRleHRMZW5ndGgoKSwgZm9udCwgaW5jbHVkZVJlYXNvbnMpOworICAgIHJl
dHVybiBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlci5jaGFyYWN0ZXJzMTYoKSwgdGV4dFJlbmRl
cmVyLnRleHRMZW5ndGgoKSwgZm9udCwgaW5jbHVkZVJlYXNvbnMpOwogfQogCi1zdGF0aWMgQXZv
aWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yRm9udEFuZFRleHQoY29uc3QgUmVuZGVyQmxvY2tG
bG93JiBmbG93LCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKK3N0YXRpYyBBdm9pZGFuY2VSZWFz
b25GbGFncyBjYW5Vc2VGb3JGb250QW5kVGV4dChjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3cs
IEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQogewotICAgIEF2b2lkYW5jZVJlYXNvbkZs
YWdzIHJlYXNvbnMgPSBOb1JlYXNvbjsKKyAgICBBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25z
ID0geyB9OwogICAgIC8vIFdlIGFzc3VtZSB0aGF0IGFsbCBsaW5lcyBoYXZlIG1ldHJpY3MgYmFz
ZWQgcHVyZWx5IG9uIHRoZSBwcmltYXJ5IGZvbnQuCiAgICAgY29uc3QgYXV0byYgc3R5bGUgPSBm
bG93LnN0eWxlKCk7CiAgICAgYXV0byYgcHJpbWFyeUZvbnQgPSBzdHlsZS5mb250Q2FzY2FkZSgp
LnByaW1hcnlGb250KCk7CiAgICAgaWYgKHByaW1hcnlGb250LmlzTG9hZGluZygpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dJc01pc3NpbmdQ
cmltYXJ5Rm9udCwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dJc01pc3NpbmdQcmltYXJ5Rm9udCwgcmVhc29ucywgaW5jbHVkZVJlYXNv
bnMpOwogICAgIGlmIChwcmltYXJ5Rm9udC5pc1NWR0ZvbnQoKSkKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzU1ZHRm9udCwgZmFsbHRocm91
Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNTVkdG
b250LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAKICAgICBmb3IgKGNvbnN0IGF1dG8mIHRl
eHRSZW5kZXJlciA6IGNoaWxkcmVuT2ZUeXBlPFJlbmRlclRleHQ+KGZsb3cpKSB7CiAgICAgICAg
IGlmICh0ZXh0UmVuZGVyZXIuaXNDb21iaW5lVGV4dCgpKQotICAgICAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4dElzQ29tYmluZVRleHQsIGZh
bGx0aHJvdWdoKTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
Rmxvd1RleHRJc0NvbWJpbmVUZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAg
IGlmICh0ZXh0UmVuZGVyZXIuaXNDb3VudGVyKCkpCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SXNSZW5kZXJDb3VudGVyLCBmYWxs
dGhyb3VnaCk7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dUZXh0SXNSZW5kZXJDb3VudGVyLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAg
IGlmICh0ZXh0UmVuZGVyZXIuaXNRdW90ZSgpKQotICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRf
UkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93VGV4dElzUmVuZGVyUXVvdGUsIGZhbGx0aHJv
dWdoKTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd1Rl
eHRJc1JlbmRlclF1b3RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAgIGlmICh0
ZXh0UmVuZGVyZXIuaXNUZXh0RnJhZ21lbnQoKSkKLSAgICAgICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd1RleHRJc1RleHRGcmFnbWVudCwgZmFsbHRo
cm91Z2gpOworICAgICAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93
VGV4dElzVGV4dEZyYWdtZW50LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAgIGlm
ICh0ZXh0UmVuZGVyZXIuaXNTVkdJbmxpbmVUZXh0KCkpCi0gICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0LCBm
YWxsdGhyb3VnaCk7CisgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVE
KEZsb3dUZXh0SXNTVkdJbmxpbmVUZXh0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAg
ICAgIGlmIChzdHlsZS5mb250Q2FzY2FkZSgpLmNvZGVQYXRoKFRleHRSdW4odGV4dFJlbmRlcmVy
LnRleHQoKSkpICE9IEZvbnRDYXNjYWRlOjpTaW1wbGUpCi0gICAgICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dGb250SXNOb3RTaW1wbGUsIGZhbGx0
aHJvdWdoKTsKKyAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxv
d0ZvbnRJc05vdFNpbXBsZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogCi0gICAgICAgIGF1
dG8gdGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JUZXh0KHRleHRSZW5kZXJlciwgcHJpbWFyeUZvbnQs
IGZhbGx0aHJvdWdoKTsKKyAgICAgICAgYXV0byB0ZXh0UmVhc29ucyA9IGNhblVzZUZvclRleHQo
dGV4dFJlbmRlcmVyLCBwcmltYXJ5Rm9udCwgaW5jbHVkZVJlYXNvbnMpOwogICAgICAgICBpZiAo
dGV4dFJlYXNvbnMgIT0gTm9SZWFzb24pCi0gICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKHJlYXNvbnMsIHRleHRSZWFzb25zLCBmYWxsdGhyb3VnaCk7CisgICAgICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHRleHRSZWFzb25zLCByZWFzb25z
LCBpbmNsdWRlUmVhc29ucyk7CiAgICAgfQogICAgIHJldHVybiByZWFzb25zOwogfQogCi1zdGF0
aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yU3R5bGUoY29uc3QgUmVuZGVyU3R5bGUm
IHN0eWxlLCBGYWxsVGhyb3VnaCBmYWxsdGhyb3VnaCkKK3N0YXRpYyBBdm9pZGFuY2VSZWFzb25G
bGFncyBjYW5Vc2VGb3JTdHlsZShjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIEluY2x1ZGVSZWFz
b25zIGluY2x1ZGVSZWFzb25zKQogewotICAgIEF2b2lkYW5jZVJlYXNvbkZsYWdzIHJlYXNvbnMg
PSBOb1JlYXNvbjsKKyAgICBBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25zID0geyB9OwogICAg
IGlmIChzdHlsZS50ZXh0T3ZlcmZsb3coKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dE92ZXJmbG93LCBmYWxsdGhyb3VnaCk7Cisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRPdmVyZmxv
dywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS50ZXh0RGVjb3JhdGlv
bnNJbkVmZmVjdCgpICE9IFRleHREZWNvcmF0aW9uTm9uZSkKLSAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dERlY29yYXRpb24sIGZhbGx0
aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
VGV4dERlY29yYXRpb24sIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBpZiAoc3R5bGUu
dGV4dEFsaWduKCkgPT0gSlVTVElGWSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb25zLCBGbG93SXNKdXN0aWZ5QWxpZ25lZCwgZmFsbHRocm91Z2gpOworICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc0p1c3RpZnlBbGlnbmVk
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgLy8gTm9uLXZpc2libGUgb3ZlcmZsb3cg
c2hvdWxkIGJlIHByZXR0eSBlYXN5IHRvIHN1cHBvcnQuCiAgICAgaWYgKHN0eWxlLm92ZXJmbG93
WCgpICE9IE9WSVNJQkxFIHx8IHN0eWxlLm92ZXJmbG93WSgpICE9IE9WSVNJQkxFKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNPdmVyZmxv
d1Zpc2libGUsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzT3ZlcmZsb3dWaXNpYmxlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
CiAgICAgaWYgKCFzdHlsZS5pc0xlZnRUb1JpZ2h0RGlyZWN0aW9uKCkpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzTm90TFRSLCBmYWxsdGhy
b3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90
TFRSLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKHN0eWxlLmxpbmVCb3hDb250
YWluKCkgIT0gUmVuZGVyU3R5bGU6OmluaXRpYWxMaW5lQm94Q29udGFpbigpKQotICAgICAgICBT
RVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNMaW5lQm94Q29u
dGFpblByb3BlcnR5LCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc0xpbmVCb3hDb250YWluUHJvcGVydHksIHJlYXNvbnMsIGluY2x1
ZGVSZWFzb25zKTsKICAgICBpZiAoc3R5bGUud3JpdGluZ01vZGUoKSAhPSBUb3BUb0JvdHRvbVdy
aXRpbmdNb2RlKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNv
bnMsIEZsb3dJc05vdFRvcFRvQm90dG9tLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzTm90VG9wVG9Cb3R0b20sIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKICAgICBpZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrQXV0
bykKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93
SGFzTGluZUJyZWFrLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQoRmxvd0hhc0xpbmVCcmVhaywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwog
ICAgIGlmIChzdHlsZS53b3JkQnJlYWsoKSAhPSBOb3JtYWxXb3JkQnJlYWspCi0gICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1dvcmRCcmVhaywg
ZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dIYXNXb3JkQnJlYWssIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBpZiAoc3R5bGUu
dW5pY29kZUJpZGkoKSAhPSBVQk5vcm1hbCkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9uTm9ybWFsVW5pY29kZUJpRGksIGZhbGx0aHJv
dWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9u
Tm9ybWFsVW5pY29kZUJpRGksIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBpZiAoc3R5
bGUucnRsT3JkZXJpbmcoKSAhPSBMb2dpY2FsT3JkZXIpCi0gICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1JUTE9yZGVyaW5nLCBmYWxsdGhyb3Vn
aCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1JUTE9y
ZGVyaW5nLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKHN0eWxlLmxpbmVBbGln
bigpICE9IExpbmVBbGlnbk5vbmUpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQocmVhc29ucywgRmxvd0hhc0xpbmVBbGlnbkVkZ2VzLCBmYWxsdGhyb3VnaCk7CisgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0xpbmVBbGlnbkVkZ2Vz
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKHN0eWxlLmxpbmVTbmFwKCkgIT0g
TGluZVNuYXBOb25lKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJl
YXNvbnMsIEZsb3dIYXNMaW5lU25hcCwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09O
X0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNMaW5lU25hcCwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwogICAgIGlmIChzdHlsZS5oeXBoZW5zKCkgPT0gSHlwaGVuc0F1dG8pCi0gICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc0h5cGVuc0F1
dG8sIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzSHlwZW5zQXV0bywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChz
dHlsZS50ZXh0RW1waGFzaXNGaWxsKCkgIT0gVGV4dEVtcGhhc2lzRmlsbEZpbGxlZCB8fCBzdHls
ZS50ZXh0RW1waGFzaXNNYXJrKCkgIT0gVGV4dEVtcGhhc2lzTWFya05vbmUpCi0gICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1RleHRFbXBoYXNp
c0ZpbGxPck1hcmssIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJO
X0lGX05FRURFRChGbG93SGFzVGV4dEVtcGhhc2lzRmlsbE9yTWFyaywgcmVhc29ucywgaW5jbHVk
ZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS50ZXh0U2hhZG93KCkpCi0gICAgICAgIFNFVF9SRUFT
T05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1RleHRTaGFkb3csIGZhbGx0
aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFz
VGV4dFNoYWRvdywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS5oYXNQ
c2V1ZG9TdHlsZShGSVJTVF9MSU5FKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb25zLCBGbG93SGFzUHNldWRvRmlyc3RMaW5lLCBmYWxsdGhyb3VnaCk7Cisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1BzZXVkb0ZpcnN0
TGluZSwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS5oYXNQc2V1ZG9T
dHlsZShGSVJTVF9MRVRURVIpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dIYXNQc2V1ZG9GaXJzdExldHRlciwgZmFsbHRocm91Z2gpOworICAg
ICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExl
dHRlciwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChzdHlsZS5oYXNUZXh0Q29t
YmluZSgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMs
IEZsb3dIYXNUZXh0Q29tYmluZSwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FO
RF9SRVRVUk5fSUZfTkVFREVEKEZsb3dIYXNUZXh0Q29tYmluZSwgcmVhc29ucywgaW5jbHVkZVJl
YXNvbnMpOwogICAgIGlmIChzdHlsZS5iYWNrZ3JvdW5kQ2xpcCgpID09IFRleHRGaWxsQm94KQot
ICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dIYXNU
ZXh0RmlsbEJveCwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5f
SUZfTkVFREVEKEZsb3dIYXNUZXh0RmlsbEJveCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwog
ICAgIGlmIChzdHlsZS5ib3JkZXJGaXQoKSA9PSBCb3JkZXJGaXRMaW5lcykKLSAgICAgICAgU0VU
X1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzQm9yZGVyRml0TGlu
ZXMsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURF
RChGbG93SGFzQm9yZGVyRml0TGluZXMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBp
ZiAoc3R5bGUubGluZUJyZWFrKCkgIT0gTGluZUJyZWFrQXV0bykKLSAgICAgICAgU0VUX1JFQVNP
Tl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzTm9uQXV0b0xpbmVCcmVhaywg
ZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZs
b3dIYXNOb25BdXRvTGluZUJyZWFrLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAjaWYgRU5B
QkxFKENTU19UUkFJTElOR19XT1JEKQogICAgIGlmIChzdHlsZS50cmFpbGluZ1dvcmQoKSAhPSBU
cmFpbGluZ1dvcmQ6OkF1dG8pCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVE
RUQocmVhc29ucywgRmxvd0hhc05vbkF1dG9UcmFpbGluZ1dvcmQsIGZhbGx0aHJvdWdoKTsKKyAg
ICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzTm9uQXV0b1RyYWls
aW5nV29yZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogI2VuZGlmCiAgICAgcmV0dXJuIHJl
YXNvbnM7CiB9CiAKLXN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFncyBjYW5Vc2VGb3JXaXRoUmVh
c29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgRmFsbFRocm91Z2ggZmFsbHRocm91Z2gp
CitzdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25zdCBS
ZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEluY2x1ZGVSZWFzb25zIGluY2x1ZGVSZWFzb25zKQogewog
I2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CkBAIC0y
NjcsMzYgKzI2OCwzNiBAQCBzdGF0aWMgQXZvaWRhbmNlUmVhc29uRmxhZ3MgY2FuVXNlRm9yV2l0
aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEZhbAogICAgICAgICByZWdpc3Rl
ck5vdGlmeUNhbGxiYWNrKCJjb20uYXBwbGUuV2ViS2l0LnNob3dTaW1wbGVMaW5lTGF5b3V0UmVh
c29ucyIsIHByaW50U2ltcGxlTGluZUxheW91dEJsb2NrTGlzdCk7CiAgICAgfSk7CiAjZW5kaWYK
LSAgICBBdm9pZGFuY2VSZWFzb25GbGFncyByZWFzb25zID0gTm9SZWFzb247CisgICAgQXZvaWRh
bmNlUmVhc29uRmxhZ3MgcmVhc29ucyA9IHsgfTsKICAgICBpZiAoIWZsb3cuZnJhbWUoKS5zZXR0
aW5ncygpLnNpbXBsZUxpbmVMYXlvdXRFbmFibGVkKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5E
X1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmVhdHVyZUlzRGlzYWJsZWQsIGZhbGx0aHJvdWdo
KTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGZWF0dXJlSXNEaXNh
YmxlZCwgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmICghZmxvdy5wYXJlbnQoKSkK
LSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFz
Tm9QYXJlbnQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChGbG93SGFzTm9QYXJlbnQsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBp
ZiAoIWZsb3cuZmlyc3RDaGlsZCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKHJlYXNvbnMsIEZsb3dIYXNOb0NoaWxkLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNF
VF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vQ2hpbGQsIHJlYXNvbnMsIGlu
Y2x1ZGVSZWFzb25zKTsKICAgICBpZiAoZmxvdy5mbG93VGhyZWFkU3RhdGUoKSAhPSBSZW5kZXJP
YmplY3Q6Ok5vdEluc2lkZUZsb3dUaHJlYWQpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVS
Tl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzSW5zaWRlUmVnaW9uLCBmYWxsdGhyb3VnaCk7Cisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzSW5zaWRlUmVnaW9u
LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKCFmbG93LmlzSG9yaXpvbnRhbFdy
aXRpbmdNb2RlKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVh
c29ucywgRmxvd0hhc0hvcml6b25hbFdyaXRpbmdNb2RlLCBmYWxsdGhyb3VnaCk7CisgICAgICAg
IFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc0hvcml6b25hbFdyaXRpbmdN
b2RlLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKGZsb3cuaGFzT3V0bGluZSgp
KQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dI
YXNPdXRsaW5lLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9J
Rl9ORUVERUQoRmxvd0hhc091dGxpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBp
ZiAoZmxvdy5pc1J1YnlUZXh0KCkgfHwgZmxvdy5pc1J1YnlCYXNlKCkpCi0gICAgICAgIFNFVF9S
RUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0lzUnVieSwgZmFsbHRocm91
Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKEZsb3dJc1J1Ynks
IHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAvLyBQcmludGluZyBkb2VzIHBhZ2luYXRp
b24gd2l0aG91dCBhIGZsb3cgdGhyZWFkLgogICAgIGlmIChmbG93LmRvY3VtZW50KCkucGFnaW5h
dGVkKCkpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywg
Rmxvd0lzUGFnaW5hdGVkLCBmYWxsdGhyb3VnaCk7CisgICAgICAgIFNFVF9SRUFTT05fQU5EX1JF
VFVSTl9JRl9ORUVERUQoRmxvd0lzUGFnaW5hdGVkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
CiAgICAgaWYgKGZsb3cuaXNBbm9ueW1vdXMoKSAmJiBmbG93LmZpcnN0TGluZUJsb2NrKCkpCi0g
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxvd0hhc1Bz
ZXVkb0ZpcnN0TGluZSwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRV
Uk5fSUZfTkVFREVEKEZsb3dIYXNQc2V1ZG9GaXJzdExpbmUsIHJlYXNvbnMsIGluY2x1ZGVSZWFz
b25zKTsKICAgICBpZiAoZmxvdy5pc0Fub255bW91c0Jsb2NrKCkgJiYgZmxvdy5wYXJlbnQoKS0+
c3R5bGUoKS50ZXh0T3ZlcmZsb3coKSkKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChyZWFzb25zLCBGbG93SGFzVGV4dE92ZXJmbG93LCBmYWxsdGhyb3VnaCk7CisgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc1RleHRPdmVyZmxvdywg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIGlmIChmbG93LnBhcmVudCgpLT5pc0RlcHJl
Y2F0ZWRGbGV4aWJsZUJveCgpKQotICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVF
REVEKHJlYXNvbnMsIEZsb3dJc0RlcHJpY2F0ZWRGbGV4Qm94LCBmYWxsdGhyb3VnaCk7CisgICAg
ICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0lzRGVwcmljYXRlZEZsZXhC
b3gsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAvLyBGSVhNRTogUGxhY2Vob2xkZXJz
IGRvIHNvbWV0aGluZyBzdHJhbmdlLgogICAgIGlmIChpczxSZW5kZXJUZXh0Q29udHJvbD4oKmZs
b3cucGFyZW50KCkpICYmIGRvd25jYXN0PFJlbmRlclRleHRDb250cm9sPigqZmxvdy5wYXJlbnQo
KSkudGV4dEZvcm1Db250cm9sRWxlbWVudCgpLnBsYWNlaG9sZGVyRWxlbWVudCgpKQotICAgICAg
ICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZfTkVFREVEKHJlYXNvbnMsIEZsb3dQYXJlbnRJc1Bs
YWNlaG9sZGVyRWxlbWVudCwgZmFsbHRocm91Z2gpOworICAgICAgICBTRVRfUkVBU09OX0FORF9S
RVRVUk5fSUZfTkVFREVEKEZsb3dQYXJlbnRJc1BsYWNlaG9sZGVyRWxlbWVudCwgcmVhc29ucywg
aW5jbHVkZVJlYXNvbnMpOwogICAgIC8vIEZJWE1FOiBJbXBsZW1lbnRhdGlvbiBvZiB3cmFwPWhh
cmQgbG9va3MgaW50byBsaW5lYm94ZXMuCiAgICAgaWYgKGZsb3cucGFyZW50KCktPmlzVGV4dEFy
ZWEoKSAmJiBmbG93LnBhcmVudCgpLT5lbGVtZW50KCktPmZhc3RIYXNBdHRyaWJ1dGUoSFRNTE5h
bWVzOjp3cmFwQXR0cikpCi0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQo
cmVhc29ucywgRmxvd1BhcmVudElzVGV4dEFyZWFXaXRoV3JhcHBpbmcsIGZhbGx0aHJvdWdoKTsK
KyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93UGFyZW50SXNUZXh0
QXJlYVdpdGhXcmFwcGluZywgcmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogICAgIC8vIFRoaXMg
Y3VycmVudGx5IGNvdmVycyA8YmxvY2tmbG93PiN0ZXh0PC9ibG9ja2Zsb3c+LCA8YmxvY2tmbG93
PiN0ZXh0PGJyPjwvYmxvY2tmbG93PiBhbmQgbXV0aXBsZSAoc2libGluZykgUmVuZGVyVGV4dCBj
YXNlcy4KICAgICAvLyBUaGUgPGJsb2NrZmxvdz48aW5saW5lPiN0ZXh0PC9pbmxpbmU+PC9ibG9j
a2Zsb3c+IGNhc2UgaXMgYWxzbyBwb3B1bGFyIGFuZCBzaG91bGQgYmUgcmVsYXRpdmVseSBlYXN5
IHRvIGNvdmVyLgogICAgIGZvciAoY29uc3QgYXV0byogY2hpbGQgPSBmbG93LmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7KSB7CkBAIC0zMDgsMTIgKzMwOSwxMiBAQCBzdGF0aWMgQXZvaWRhbmNlUmVhc29u
RmxhZ3MgY2FuVXNlRm9yV2l0aFJlYXNvbihjb25zdCBSZW5kZXJCbG9ja0Zsb3cmIGZsb3csIEZh
bAogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9O
RUVERUQocmVhc29ucywgRmxvd0hhc05vblN1cHBvcnRlZENoaWxkLCBmYWxsdGhyb3VnaCk7Cisg
ICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQoRmxvd0hhc05vblN1cHBvcnRl
ZENoaWxkLCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
LSAgICBhdXRvIHN0eWxlUmVhc29ucyA9IGNhblVzZUZvclN0eWxlKGZsb3cuc3R5bGUoKSwgZmFs
bHRocm91Z2gpOworICAgIGF1dG8gc3R5bGVSZWFzb25zID0gY2FuVXNlRm9yU3R5bGUoZmxvdy5z
dHlsZSgpLCBpbmNsdWRlUmVhc29ucyk7CiAgICAgaWYgKHN0eWxlUmVhc29ucyAhPSBOb1JlYXNv
bikKLSAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBzdHls
ZVJlYXNvbnMsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lG
X05FRURFRChzdHlsZVJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICAvLyBX
ZSBjYW4ndCB1c2UgdGhlIGNvZGUgcGF0aCBpZiBhbnkgbGluZXMgd291bGQgbmVlZCB0byBiZSBz
aGlmdGVkIGJlbG93IGZsb2F0cy4gVGhpcyBpcyBiZWNhdXNlIHdlIGRvbid0IGtlZXAgcGVyLWxp
bmUgeSBjb29yZGluYXRlcy4KICAgICBpZiAoZmxvdy5jb250YWluc0Zsb2F0cygpKSB7CiAgICAg
ICAgIGZsb2F0IG1pbmltdW1XaWR0aE5lZWRlZCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8ZmxvYXQ+
OjptYXgoKTsKQEAgLTMyNiwyMyArMzI3LDIzIEBAIHN0YXRpYyBBdm9pZGFuY2VSZWFzb25GbGFn
cyBjYW5Vc2VGb3JXaXRoUmVhc29uKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgZmxvdywgRmFsCiAg
ICAgICAgICAgICAgICAgLy8gaWYgYSBmbG9hdCBoYXMgYSBzaGFwZSwgd2UgY2Fubm90IHRlbGwg
aWYgY29udGVudCB3aWxsIG5lZWQgdG8gYmUgc2hpZnRlZCB1bnRpbCBhZnRlciB3ZSBsYXkgaXQg
b3V0LAogICAgICAgICAgICAgICAgIC8vIHNpbmNlIHRoZSBhbW91bnQgb2Ygc3BhY2UgaXMgbm90
IHVuaWZvcm0gZm9yIHRoZSBoZWlnaHQgb2YgdGhlIGZsb2F0LgogICAgICAgICAgICAgICAgIGlm
IChmbG9hdGluZ09iamVjdC0+cmVuZGVyZXIoKS5zaGFwZU91dHNpZGVJbmZvKCkpCi0gICAgICAg
ICAgICAgICAgICAgIFNFVF9SRUFTT05fQU5EX1JFVFVSTl9JRl9ORUVERUQocmVhc29ucywgRmxv
d0hhc1Vuc3VwcG9ydGVkRmxvYXQsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgICAgICAgICAgICAg
U0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwg
cmVhc29ucywgaW5jbHVkZVJlYXNvbnMpOwogI2VuZGlmCiAgICAgICAgICAgICAgICAgZmxvYXQg
YXZhaWxhYmxlV2lkdGggPSBmbG93LmF2YWlsYWJsZUxvZ2ljYWxXaWR0aEZvckxpbmUoZmxvYXRp
bmdPYmplY3QtPnkoKSwgZmFsc2UpOwogICAgICAgICAgICAgICAgIGlmIChhdmFpbGFibGVXaWR0
aCA8IG1pbmltdW1XaWR0aE5lZWRlZCkKLSAgICAgICAgICAgICAgICAgICAgU0VUX1JFQVNPTl9B
TkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBGbG93SGFzVW5zdXBwb3J0ZWRGbG9hdCwgZmFs
bHRocm91Z2gpOworICAgICAgICAgICAgICAgICAgICBTRVRfUkVBU09OX0FORF9SRVRVUk5fSUZf
TkVFREVEKEZsb3dIYXNVbnN1cHBvcnRlZEZsb2F0LCByZWFzb25zLCBpbmNsdWRlUmVhc29ucyk7
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgYXV0byBmb250QW5kVGV4dFJl
YXNvbnMgPSBjYW5Vc2VGb3JGb250QW5kVGV4dChmbG93LCBmYWxsdGhyb3VnaCk7CisgICAgYXV0
byBmb250QW5kVGV4dFJlYXNvbnMgPSBjYW5Vc2VGb3JGb250QW5kVGV4dChmbG93LCBpbmNsdWRl
UmVhc29ucyk7CiAgICAgaWYgKGZvbnRBbmRUZXh0UmVhc29ucyAhPSBOb1JlYXNvbikKLSAgICAg
ICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05FRURFRChyZWFzb25zLCBmb250QW5kVGV4dFJl
YXNvbnMsIGZhbGx0aHJvdWdoKTsKKyAgICAgICAgU0VUX1JFQVNPTl9BTkRfUkVUVVJOX0lGX05F
RURFRChmb250QW5kVGV4dFJlYXNvbnMsIHJlYXNvbnMsIGluY2x1ZGVSZWFzb25zKTsKICAgICBy
ZXR1cm4gcmVhc29uczsKIH0KIAogYm9vbCBjYW5Vc2VGb3IoY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBmbG93KQogewotICAgIHJldHVybiBjYW5Vc2VGb3JXaXRoUmVhc29uKGZsb3csIEZhbGxUaHJv
dWdoOjpObykgPT0gTm9SZWFzb247CisgICAgcmV0dXJuIGNhblVzZUZvcldpdGhSZWFzb24oZmxv
dywgSW5jbHVkZVJlYXNvbnM6OkZpcnN0KSA9PSBOb1JlYXNvbjsKIH0KIAogc3RhdGljIGZsb2F0
IGNvbXB1dGVMaW5lTGVmdChFVGV4dEFsaWduIHRleHRBbGlnbiwgZmxvYXQgYXZhaWxhYmxlV2lk
dGgsIGZsb2F0IGNvbW1pdHRlZFdpZHRoLCBmbG9hdCBsb2dpY2FsTGVmdE9mZnNldCkKQEAgLTEw
MDksNyArMTAxMCw3IEBAIHZvaWQgcHJpbnRTaW1wbGVMaW5lTGF5b3V0QmxvY2tMaXN0KCkKICAg
ICBUZXh0U3RyZWFtIHN0cmVhbTsKICAgICBzdHJlYW0gPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIjsKICAgICBmb3IgKGNvbnN0IGF1dG8q
IGZsb3cgOiBsZWFmUmVuZGVyZXJzKSB7Ci0gICAgICAgIGF1dG8gcmVhc29uID0gY2FuVXNlRm9y
V2l0aFJlYXNvbigqZmxvdywgRmFsbFRocm91Z2g6Olllcyk7CisgICAgICAgIGF1dG8gcmVhc29u
ID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxvdywgSW5jbHVkZVJlYXNvbnM6OkFsbCk7CiAgICAg
ICAgIGlmIChyZWFzb24gPT0gTm9SZWFzb24pCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgdW5zaWduZWQgcHJpbnRlZExlbmd0aCA9IDMwOwpAQCAtMTA0MSw3ICsxMDQyLDcgQEAgdm9p
ZCBwcmludFNpbXBsZUxpbmVMYXlvdXRDb3ZlcmFnZSgpCiAgICAgZm9yIChjb25zdCBhdXRvKiBm
bG93IDogbGVhZlJlbmRlcmVycykgewogICAgICAgICBhdXRvIGZsb3dMZW5ndGggPSB0ZXh0TGVu
Z3RoRm9yU3VidHJlZSgqZmxvdyk7CiAgICAgICAgIHRleHRMZW5ndGggKz0gZmxvd0xlbmd0aDsK
LSAgICAgICAgYXV0byByZWFzb25zID0gY2FuVXNlRm9yV2l0aFJlYXNvbigqZmxvdywgRmFsbFRo
cm91Z2g6Olllcyk7CisgICAgICAgIGF1dG8gcmVhc29ucyA9IGNhblVzZUZvcldpdGhSZWFzb24o
KmZsb3csIEluY2x1ZGVSZWFzb25zOjpBbGwpOwogICAgICAgICBpZiAocmVhc29ucyA9PSBOb1Jl
YXNvbikKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICArK251bWJlck9mVW5zdXBwb3J0
ZWRMZWFmQmxvY2tzOwo=
</data>
<flag name="commit-queue"
          id="291739"
          type_id="3"
          status="-"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>