<?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>149996</bug_id>
          
          <creation_ts>2015-10-09 22:02:29 -0700</creation_ts>
          <short_desc>Support bezier paths in clip-path property</short_desc>
          <delta_ts>2015-10-25 22:00:43 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, WebExposed</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Simon Fraser (smfr)">simon.fraser</reporter>
          <assigned_to name="Simon Fraser (smfr)">simon.fraser</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jonlee</cc>
    
    <cc>mitz</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1132112</commentid>
    <comment_count>0</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-09 22:02:29 -0700</bug_when>
    <thetext>Support bezier paths in clip-path property</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132113</commentid>
    <comment_count>1</comment_count>
      <attachid>262823</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-09 22:04:00 -0700</bug_when>
    <thetext>Created attachment 262823
Work in progress.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132114</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-09 22:05:15 -0700</bug_when>
    <thetext>Attachment 262823 did not pass style-queue:


ERROR: Source/WebCore/rendering/style/BasicShapes.cpp:41:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/WebCore/rendering/style/BasicShapes.cpp:315:  Use &apos;WTF::move()&apos; instead of &apos;std::move()&apos;.  [runtime/wtf_move] [4]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:483:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:484:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:485:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:486:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:487:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/page/animation/CSSPropertyAnimation.cpp:488:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/WebCore/css/CSSBasicShapes.cpp:38:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 9 in 14 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136423</commentid>
    <comment_count>3</comment_count>
      <attachid>264020</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-25 12:17:51 -0700</bug_when>
    <thetext>Created attachment 264020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136424</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2015-10-25 12:20:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/23250919&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136425</commentid>
    <comment_count>5</comment_count>
      <attachid>264021</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-25 12:43:34 -0700</bug_when>
    <thetext>Created attachment 264021
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136445</commentid>
    <comment_count>6</comment_count>
      <attachid>264021</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-10-25 16:48:31 -0700</bug_when>
    <thetext>Comment on attachment 264021
Patch

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

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:108
&gt; +        const auto&amp; pathShape = downcast&lt;BasicShapePath&gt;(basicShape);

No need to say const here, since basicShape is already a const reference. We don’t need to explicitly specify const. Same applies in existing code.

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:111
&gt; +        basicShapeValue = pathShapeValue.copyRef();

This should use WTF::move, not copyRef. Same mistake in existing code.

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:267
&gt; +        const CSSBasicShapePath&amp; pathValue = downcast&lt;CSSBasicShapePath&gt;(*basicShapeValue);

Should just use auto&amp;. Same for existing code.

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:269
&gt; +        RefPtr&lt;BasicShapePath&gt; path = BasicShapePath::create(pathValue.pathData()-&gt;copy());

Should use auto. Same for existing code.

&gt; Source/WebCore/css/BasicShapeFunctions.cpp:271
&gt; +        basicShape = path.release();

Should be WTF::move(path), not path.release().

&gt; Source/WebCore/css/CSSBasicShapes.cpp:250
&gt; +    auto&amp; otherShapePath = downcast&lt;CSSBasicShapePath&gt;(otherShape);
&gt; +    if (m_windRule != otherShapePath.windRule())
&gt; +        return false;
&gt; +
&gt; +    return m_byteStream == otherShapePath.m_byteStream;

Should use m_windRule for both, not windRule() for one.

I suggest writing like this:

    auto&amp; otherShapePath = downcast&lt;CSSBasicShapePath&gt;(otherShape);
    return m_windRule == otherShapePath.m_windRule &amp;&amp; m_byteStream == otherShapePath.m_byteStream;

&gt; Source/WebCore/css/CSSBasicShapes.h:219
&gt; +    static Ref&lt;CSSBasicShapePath&gt; create(std::unique_ptr&lt;SVGPathByteStream&gt;&amp;&amp; byteStream)

Argument name should be pathData, not byteStream.

&gt; Source/WebCore/css/CSSBasicShapes.h:224
&gt; +    const SVGPathByteStream* pathData() const;

Do we need to support pathData of null? I suggest having this return a reference rather than a pointer.

&gt; Source/WebCore/css/CSSBasicShapes.h:226
&gt; +    void setWindRule(WindRule w) { m_windRule = w; }

I suggest the word rule instead of the letter &quot;w&quot; for the argument name.

&gt; Source/WebCore/css/CSSBasicShapes.h:230
&gt; +    virtual String cssText() const override;
&gt; +    virtual bool equals(const CSSBasicShape&amp;) const override;

I suggest marking these private unless they need to be called non-polymorphically.

&gt; Source/WebCore/css/CSSBasicShapes.h:237
&gt; +    std::unique_ptr&lt;SVGPathByteStream&gt; m_byteStream;

Why is this called m_byteStream rather than m_pathData?

&gt; Source/WebCore/css/CSSParser.cpp:6670
&gt; +    args.next(); // FIXME: why?

It’s strange to have brand new code with a FIXME, especially such a cryptic one. Can you deal with this before landing?

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:112
&gt; +    auto&amp; otherCircle = downcast&lt;BasicShapeCircle&gt;(other);
&gt; +    return radius().canBlend(otherCircle.radius());

Not sure the local variable is helpful.

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:268
&gt; +void BasicShapePath::path(Path&amp; path, const FloatRect&amp; boundingBox)
&gt; +{
&gt; +    ASSERT(path.isEmpty());
&gt; +    buildPathFromByteStream(*m_byteStream, path);
&gt; +    path.translate(toFloatSize(boundingBox.location()));
&gt; +}

This is a peculiar function name given what it does. Also, why does it take a Path by value rather than returning a Path?

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:279
&gt; +    const auto&amp; otherPath = downcast&lt;BasicShapePath&gt;(other);
&gt; +    if (m_windRule != otherPath.m_windRule)
&gt; +        return false;
&gt; +
&gt; +    return *m_byteStream == *otherPath.m_byteStream;

I would write:

    auto&amp; otherPath = downcast&lt;BasicShapePath&gt;(other);
    return m_windRule == otherPath.m_windRule &amp;&amp; *m_byteStream == *otherPath.m_byteStream;

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:298
&gt; +    const auto&amp; fromPath = downcast&lt;BasicShapePath&gt;(from);

auto&amp; would be fine, no need for const auto&amp;

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:300
&gt; +    std::unique_ptr&lt;SVGPathByteStream&gt; resultingPathBytes = std::make_unique&lt;SVGPathByteStream&gt;();

auto is better than repeating the type twice here.

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:304
&gt; +    RefPtr&lt;BasicShapePath&gt; result =  BasicShapePath::create(WTF::move(resultingPathBytes));
&gt; +    return result.releaseNonNull();

This should be a single line without a RefPtr and without a releaseNonNull.

&gt; Source/WebCore/rendering/style/BasicShapes.h:243
&gt; +    BasicShapePolygon()
&gt; +    {
&gt; +    }

Better way to write this is:

    BasicShapePolygon() = default;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136473</commentid>
    <comment_count>7</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2015-10-25 22:00:43 -0700</bug_when>
    <thetext>Addressed all the comments except this:

&gt; Source/WebCore/rendering/style/BasicShapes.cpp:268
&gt; +void BasicShapePath::path(Path&amp; path, const FloatRect&amp; boundingBox)
&gt; +{
&gt; +    ASSERT(path.isEmpty());
&gt; +    buildPathFromByteStream(*m_byteStream, path);
&gt; +    path.translate(toFloatSize(boundingBox.location()));
&gt; +}

This is a peculiar function name given what it does. Also, why does it take a Path by value rather than returning a Path?

which can be done as a follow-up, fixing all the classes.

https://trac.webkit.org/changeset/191551</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262823</attachid>
            <date>2015-10-09 22:04:00 -0700</date>
            <delta_ts>2015-10-25 12:17:47 -0700</delta_ts>
            <desc>Work in progress.</desc>
            <filename>bug-149996-20151009220326.patch</filename>
            <type>text/plain</type>
            <size>28371</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkwODMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGM5ZDA3YWE0YmUyNGY1
MmY1NjliZjA2YWE2M2RkMGU0OWIyYWU5MS4uM2ExMTk2NTJkNjY4Zjk1NTBkMWIwMjEyMTgwYjQ0
YTQ5ZTEzMDMwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDUzIEBACisyMDE1LTEwLTA5ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgYmV6
aWVyIHBhdGhzIGluIGNsaXAtcGF0aCBwcm9wZXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIGEgcGF0aCBmdW5jdGlvbiBp
biBjbGlwLXBhdGguIEl0IHBhcnNlcyBsaWtlIFNWRyBwYXRocywKKyAgICAgICAgYW5kIGlzIGFu
aW1hdGFibGUuCisKKyAgICAgICAgKiBjc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpiYXNpY1NoYXBlRm9yVmFsdWUpOgorICAgICAgICAqIGNzcy9DU1NCYXNp
Y1NoYXBlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NCYXNpY1NoYXBlUGF0aDo6Q1NTQmFz
aWNTaGFwZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNTaGFwZVBhdGg6OnNldFBh
dGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVQYXRoOjpwYXRoRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpidWlsZFBhdGhTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTQmFzaWNTaGFwZVBhdGg6OmNzc1RleHQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQmFzaWNT
aGFwZVBhdGg6OmVxdWFscyk6CisgICAgICAgICogY3NzL0NTU0Jhc2ljU2hhcGVzLmg6CisgICAg
ICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBh
cnNlQmFzaWNTaGFwZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJh
c2ljU2hhcGUpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQcm9w
ZXJ0eVdyYXBwZXJDbGlwUGF0aDo6ZXF1YWxzKToKKyAgICAgICAgKiByZW5kZXJpbmcvQ2xpcFBh
dGhPcGVyYXRpb24uaDoKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZTo6Y2FuQmxlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmFzaWNTaGFwZUNpcmNsZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpC
YXNpY1NoYXBlRWxsaXBzZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1No
YXBlUG9seWdvbjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0
aDo6QmFzaWNTaGFwZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZVBhdGg6OnNl
dFBhdGhEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpwYXRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdl
YkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpibGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1No
YXBlSW5zZXQ6Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHJlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5oOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGU6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZVJhZGl1czo6b3BlcmF0b3I9
PSk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YTo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpjbGlw
UGF0aE9wZXJhdGlvbnNFcXVpdmFsZW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvc3R5bGUvU3R5
bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoVXRpbGl0aWVz
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6YnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKToKKyAgICAgICAg
KiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5oOgorCiAyMDE1LTEwLTA5ICBOYW4gV2FuZyAgPG5fd2Fu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEFSSUEgMS4xIGltcGxlbWVudCBhcmlhLWNvbGNv
dW50LCBhcmlhLWNvbGluZGV4LCBhcmlhLWNvbHNwYW4sIGFyaWEtcm93Y291bnQsIGFyaWEtcm93
aW5kZXggYW5kIGFyaWEtcm93c3BhbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5j
dGlvbnMuY3BwCmluZGV4IDA2NGZjZDJlYzY5YzFkY2ZkOTdmZDMxNjc0ZWI2MzBhODM2NmNkODgu
LmMxMzdkNzhhOTk4YTAzNTIzN2M0ZmYwOTI2NTM2Y2Y4NTcxMjc1NzUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNs
dWRlICJDU1NWYWx1ZVBvb2wuaCIKICNpbmNsdWRlICJQYWlyLmgiCiAjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0cmVhbS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTI1Nyw2ICsyNTgsMTUgQEAgUmVmPEJhc2ljU2hhcGU+IGJhc2ljU2hhcGVG
b3JWYWx1ZShjb25zdCBDU1NUb0xlbmd0aENvbnZlcnNpb25EYXRhJiBjb252ZXJzaW9uRGEKICAg
ICAgICAgYmFzaWNTaGFwZSA9IHJlY3QucmVsZWFzZSgpOwogICAgICAgICBicmVhazsKICAgICB9
CisgICAgY2FzZSBDU1NCYXNpY1NoYXBlOjpDU1NCYXNpY1NoYXBlUGF0aFR5cGU6IHsKKyAgICAg
ICAgY29uc3QgQ1NTQmFzaWNTaGFwZVBhdGgmIHBhdGhWYWx1ZSA9IGRvd25jYXN0PENTU0Jhc2lj
U2hhcGVQYXRoPigqYmFzaWNTaGFwZVZhbHVlKTsKKyAgICAgICAgUmVmUHRyPEJhc2ljU2hhcGVQ
YXRoPiBwYXRoID0gQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZSgpOworCisgICAgICAgIHBhdGgtPnNl
dFBhdGhEYXRhKHBhdGhWYWx1ZS5wYXRoRGF0YSgpLT5jb3B5KCkpOworCisgICAgICAgIGJhc2lj
U2hhcGUgPSBwYXRoLnJlbGVhc2UoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NCYXNpY1NoYXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMu
Y3BwCmluZGV4IDFkZTc3MTY2NmYzM2M2MDY0MjE1ZmEwMjAzMjg2Yjc0NDYzYjNmZWUuLmZjY2Qx
ZmE3YWQ3MDRjZmRhZGYzMDU2ZGQwZjAwNmIwZmM3Y2RjZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0Jhc2ljU2hhcGVzLmNwcApAQCAtMzEsOSArMzEsMTIgQEAKIAogI2luY2x1ZGUgIkNTU0Jhc2lj
U2hhcGVzLmgiCiAKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZU1hcHBpbmdzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAi
UGFpci5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdQYXRo
Qnl0ZVN0cmVhbS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogdXNp
bmcgbmFtZXNwYWNlIFdURjsKQEAgLTE5OCw2ICsyMDEsNzAgQEAgYm9vbCBDU1NCYXNpY1NoYXBl
RWxsaXBzZTo6ZXF1YWxzKGNvbnN0IENTU0Jhc2ljU2hhcGUmIHNoYXBlKSBjb25zdAogICAgICAg
ICAmJiBjb21wYXJlQ1NTVmFsdWVQdHIobV9yYWRpdXNZLCBvdGhlci5tX3JhZGl1c1kpOwogfQog
CitDU1NCYXNpY1NoYXBlUGF0aDo6Q1NTQmFzaWNTaGFwZVBhdGgoKQorICAgIDogbV93aW5kUnVs
ZShSVUxFX05PTlpFUk8pCit7Cit9CisKK3ZvaWQgQ1NTQmFzaWNTaGFwZVBhdGg6OnNldFBhdGhE
YXRhKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gYnl0ZVN0cmVhbSkKK3sKKyAg
ICBtX2J5dGVTdHJlYW0gPSBXVEY6Om1vdmUoYnl0ZVN0cmVhbSk7Cit9CisKK2NvbnN0IFNWR1Bh
dGhCeXRlU3RyZWFtKiBDU1NCYXNpY1NoYXBlUGF0aDo6cGF0aERhdGEoKSBjb25zdAoreworICAg
IHJldHVybiBtX2J5dGVTdHJlYW0uZ2V0KCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgYnVpbGRQYXRo
U3RyaW5nKGNvbnN0IFdpbmRSdWxlJiB3aW5kUnVsZSwgY29uc3QgU3RyaW5nJiBwYXRoLCBjb25z
dCBTdHJpbmcmIGJveCkKK3sKKyAgICBTdHJpbmdCdWlsZGVyIHJlc3VsdDsKKyAgICBjaGFyIGV2
ZW5PZGRPcGVuaW5nW10gPSAicGF0aChldmVub2RkLCAiOworICAgIGNoYXIgbm9uWmVyb09wZW5p
bmdbXSA9ICJwYXRoKCI7CisKKyAgICBpZiAod2luZFJ1bGUgPT0gUlVMRV9FVkVOT0REKQorICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbChldmVuT2RkT3BlbmluZyk7CisgICAgZWxzZQorICAg
ICAgICByZXN1bHQuYXBwZW5kTGl0ZXJhbChub25aZXJvT3BlbmluZyk7CisKKyAgICByZXN1bHQu
YXBwZW5kKHF1b3RlQ1NTU3RyaW5nKHBhdGgpKTsKKyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisK
KyAgICBpZiAoYm94Lmxlbmd0aCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChib3gpOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9T
dHJpbmcoKTsKK30KKworU3RyaW5nIENTU0Jhc2ljU2hhcGVQYXRoOjpjc3NUZXh0KCkgY29uc3QK
K3sKKyAgICBTdHJpbmcgcGF0aFN0cmluZzsKKyAgICBidWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFt
KG1fYnl0ZVN0cmVhbS5nZXQoKSwgcGF0aFN0cmluZywgVW5hbHRlcmVkUGFyc2luZyk7CisKKyAg
ICByZXR1cm4gYnVpbGRQYXRoU3RyaW5nKG1fd2luZFJ1bGUsIHBhdGhTdHJpbmcsIG1fcmVmZXJl
bmNlQm94ID8gbV9yZWZlcmVuY2VCb3gtPmNzc1RleHQoKSA6IFN0cmluZygpKTsKK30KKworYm9v
bCBDU1NCYXNpY1NoYXBlUGF0aDo6ZXF1YWxzKGNvbnN0IENTU0Jhc2ljU2hhcGUmIG90aGVyU2hh
cGUpIGNvbnN0Cit7CisgICAgaWYgKCFpczxDU1NCYXNpY1NoYXBlUGF0aD4ob3RoZXJTaGFwZSkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8mIG90aGVyU2hhcGVQYXRoID0gZG93
bmNhc3Q8Q1NTQmFzaWNTaGFwZVBhdGg+KG90aGVyU2hhcGUpOworICAgIGlmIChtX3dpbmRSdWxl
ICE9IG90aGVyU2hhcGVQYXRoLndpbmRSdWxlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIEZJWE1FOiB2ZXJ5IGxhbWUgd2F5IHRvIGNvbXBhcmUuIENhbiB3ZSBqdXN0IGNvbXBh
cmUgYnl0ZXM/CisgICAgU3RyaW5nIHBhdGhTdHJpbmc7CisgICAgYnVpbGRTdHJpbmdGcm9tQnl0
ZVN0cmVhbShtX2J5dGVTdHJlYW0uZ2V0KCksIHBhdGhTdHJpbmcsIFVuYWx0ZXJlZFBhcnNpbmcp
OworCisgICAgU3RyaW5nIG90aGVyUGF0aFN0cmluZzsKKyAgICBidWlsZFN0cmluZ0Zyb21CeXRl
U3RyZWFtKG90aGVyU2hhcGVQYXRoLnBhdGhEYXRhKCksIG90aGVyUGF0aFN0cmluZywgVW5hbHRl
cmVkUGFyc2luZyk7CisKKyAgICByZXR1cm4gcGF0aFN0cmluZyA9PSBvdGhlclBhdGhTdHJpbmc7
Cit9CisKIHN0YXRpYyBTdHJpbmcgYnVpbGRQb2x5Z29uU3RyaW5nKGNvbnN0IFdpbmRSdWxlJiB3
aW5kUnVsZSwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBvaW50cykKIHsKICAgICBBU1NFUlQoIShw
b2ludHMuc2l6ZSgpICUgMikpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Jh
c2ljU2hhcGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuaAppbmRleCA0
Y2MxZTI0OWQwN2I1MTkxM2YyYjc0NDQ1YTYzMzM3ZGI5ZTk1MjVlLi5lZGI5N2YwNjc5ZjY3ZDI0
Yzc2YWMyZmJkMTU5ODRiMjRhNmMyMzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQmFzaWNTaGFwZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMu
aApAQCAtMzksMTMgKzM5LDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgU1ZH
UGF0aEJ5dGVTdHJlYW07CisKIGNsYXNzIENTU0Jhc2ljU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRl
ZDxDU1NCYXNpY1NoYXBlPiB7CiBwdWJsaWM6CiAgICAgZW51bSBUeXBlIHsKICAgICAgICAgQ1NT
QmFzaWNTaGFwZVBvbHlnb25UeXBlLAogICAgICAgICBDU1NCYXNpY1NoYXBlQ2lyY2xlVHlwZSwK
ICAgICAgICAgQ1NTQmFzaWNTaGFwZUVsbGlwc2VUeXBlLAotICAgICAgICBDU1NCYXNpY1NoYXBl
SW5zZXRUeXBlCisgICAgICAgIENTU0Jhc2ljU2hhcGVJbnNldFR5cGUsCisgICAgICAgIENTU0Jh
c2ljU2hhcGVQYXRoVHlwZQogICAgIH07CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
ID0gMDsKQEAgLTIxMSw2ICsyMTQsMjggQEAgcHJpdmF0ZToKICAgICBXaW5kUnVsZSBtX3dpbmRS
dWxlOwogfTsKIAorY2xhc3MgQ1NTQmFzaWNTaGFwZVBhdGggZmluYWwgOiBwdWJsaWMgQ1NTQmFz
aWNTaGFwZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZVBh
dGg+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBDU1NCYXNpY1NoYXBlUGF0aCk7IH0K
KworICAgIHZvaWQgc2V0UGF0aERhdGEoc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFt
Pik7CisgICAgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGhEYXRhKCkgY29uc3Q7CisKKyAg
ICB2b2lkIHNldFdpbmRSdWxlKFdpbmRSdWxlIHcpIHsgbV93aW5kUnVsZSA9IHc7IH0KKyAgICBX
aW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKworICAgIHZp
cnR1YWwgU3RyaW5nIGNzc1RleHQoKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIGJvb2wg
ZXF1YWxzKGNvbnN0IENTU0Jhc2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBDU1NCYXNpY1NoYXBlUGF0aCgpOworCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBDU1NCYXNpY1NoYXBlUGF0aFR5cGU7IH0KKworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gbV9ieXRlU3RyZWFtOworICAgIFdpbmRSdWxl
IG1fd2luZFJ1bGU7Cit9OworCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNkZWZpbmUgU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19DU1NfQkFTSUNfU0hBUEVTKFRvVmFsdWVUeXBlTmFtZSkgXApA
QCAtMjIyLDUgKzI0Nyw2IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX0JBU0lDX1NIQVBF
UyhDU1NCYXNpY1NoYXBlSW5zZXQpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19T
SEFQRVMoQ1NTQmFzaWNTaGFwZUNpcmNsZSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQ1NTX0JB
U0lDX1NIQVBFUyhDU1NCYXNpY1NoYXBlRWxsaXBzZSkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNf
Q1NTX0JBU0lDX1NIQVBFUyhDU1NCYXNpY1NoYXBlUG9seWdvbikKK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX0JBU0lDX1NIQVBFUyhDU1NCYXNpY1NoYXBlUGF0aCkKIAogI2VuZGlmIC8vIENT
U0Jhc2ljU2hhcGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKaW5kZXggZWVkZTVhNzIxMjUy
NzVlMTQ1YjNkN2Q1OGZjZDg0YmIyNDYyMDM2ZC4uMDM4ZjUwNDlhMDgzNTdmMTQ2OTlhYzY3OTA2
ZTU0OGRmNzBlYTI5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTgwLDYgKzgwLDgg
QEAKICNpbmNsdWRlICJSZW5kZXJUaGVtZS5oIgogI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKKyNpbmNsdWRlICJTVkdQ
YXRoQnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRl
ICJTZWxlY3RvckNoZWNrZXIuaCIKICNpbmNsdWRlICJTZWxlY3RvckNoZWNrZXJUZXN0RnVuY3Rp
b25zLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKQEAgLTY1NjcsNiArNjU2OSwzNSBAQCBSZWZQ
dHI8Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVQb2x5Z29uKENTU1Bh
cnNlclZhbHVlTGlzdCYgYXJncwogICAgIHJldHVybiBzaGFwZTsKIH0KIAorUmVmUHRyPENTU0Jh
c2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUGF0aChDU1NQYXJzZXJWYWx1ZUxp
c3QmIGFyZ3MpCit7CisgICAgdW5zaWduZWQgc2l6ZSA9IGFyZ3Muc2l6ZSgpOworICAgIGlmIChz
aXplICE9IDEgJiYgc2l6ZSAhPSAzKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIFJl
ZlB0cjxDU1NCYXNpY1NoYXBlUGF0aD4gc2hhcGUgPSBDU1NCYXNpY1NoYXBlUGF0aDo6Y3JlYXRl
KCk7CisKKyAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQoKTsKKyAg
ICBpZiAoYXJndW1lbnQtPmlkID09IENTU1ZhbHVlRXZlbm9kZCB8fCBhcmd1bWVudC0+aWQgPT0g
Q1NTVmFsdWVOb256ZXJvKSB7CisgICAgICAgIHNoYXBlLT5zZXRXaW5kUnVsZShhcmd1bWVudC0+
aWQgPT0gQ1NTVmFsdWVFdmVub2RkID8gUlVMRV9FVkVOT0REIDogUlVMRV9OT05aRVJPKTsKKwor
ICAgICAgICBpZiAoIWlzQ29tbWEoYXJncy5uZXh0KCkpKQorICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisgICAgICAgIGFyZ3VtZW50ID0gYXJncy5uZXh0KCk7CisgICAgfQorCisgICAgaWYg
KGFyZ3VtZW50LT51bml0ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RSSU5HKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gYnl0ZVN0cmVhbSA9IHN0ZDo6bWFrZV91bmlx
dWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7CisgICAgaWYgKCFidWlsZFNWR1BhdGhCeXRlU3RyZWFt
RnJvbVN0cmluZyhhcmd1bWVudC0+c3RyaW5nLCBieXRlU3RyZWFtLmdldCgpLCBVbmFsdGVyZWRQ
YXJzaW5nKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgc2hhcGUtPnNldFBhdGhEYXRh
KFdURjo6bW92ZShieXRlU3RyZWFtKSk7CisKKyAgICBhcmdzLm5leHQoKTsgLy8gRklYTUU6IHdo
eT8KKyAgICByZXR1cm4gc2hhcGU7Cit9CisKIHN0YXRpYyBib29sIGlzQm94VmFsdWUoQ1NTVmFs
dWVJRCB2YWx1ZUlkLCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIHsKICAgICBzd2l0Y2ggKHZhbHVl
SWQpIHsKQEAgLTY2NzcsNiArNjcwOCw4IEBAIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gQ1NT
UGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQogICAgICAgICBzaGFwZSA9IHBhcnNlQmFzaWNTaGFw
ZUVsbGlwc2UoKmFyZ3MpOwogICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbHVlLmZ1
bmN0aW9uLT5uYW1lLCAicG9seWdvbigiKSkKICAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hh
cGVQb2x5Z29uKCphcmdzKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS5m
dW5jdGlvbi0+bmFtZSwgInBhdGgoIikpCisgICAgICAgIHNoYXBlID0gcGFyc2VCYXNpY1NoYXBl
UGF0aCgqYXJncyk7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UodmFsdWUuZnVuY3Rp
b24tPm5hbWUsICJpbnNldCgiKSkKICAgICAgICAgc2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVJbnNl
dCgqYXJncyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBjZjZiNzUwNTY0YTMzY2NjNjU1
NjllOGZkNDUwOTRhYjMyYmY3OTczLi4zMWU3ZTdkMTQzNjE3ZWRhZWU0Y2Q3N2E5NGQ1YzJkNDU2
NjdhMTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yNDMsNiArMjQzLDcgQEAgcHVibGlj
OgogICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJhc2ljU2hhcGVDaXJjbGUoQ1NTUGFy
c2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFw
ZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+
IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CisgICAgUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7
CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNl
clZhbHVlTGlzdCYpOwogCiAgICAgYm9vbCBwYXJzZUZvbnQoYm9vbCBpbXBvcnRhbnQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwCmluZGV4IDI5MzAwMjhjNWY1OTU0MzcwMGRlNjcxNjIyZDQ4ZTFjMDY3MDBhOTkuLjk1
YTVlMzQxYTNjMmUzNzUzZTRhZTMyZDYxMjZhYjlmM2NiZjc5ZGQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKQEAg
LTQ3Nyw2ICs0NzcsMjQgQEAgcHVibGljOgogICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdy
YXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQogICAgIHsKICAg
ICB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3QKKyAgICB7CisgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgorICAgICAg
IC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJl
dHVybiB0cnVlLgorICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAg
ICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIGlmIChjbGlwUGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAg
fQogfTsKIAogI2lmIEVOQUJMRShDU1NfU0hBUEVTKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL0NsaXBQYXRoT3BlcmF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ2xpcFBhdGhPcGVyYXRpb24uaAppbmRleCAyMjBiODJiYzA0OGY3ODE0NmE5YTFmNGRkM2Y3
YzA5MjhkMmRjYWVlLi5jZTRjZTNmZTY0YzVkNWIyMjk3MGMwZDRjODIxYjk1Yzc5YWZlMzBmIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2xpcFBhdGhPcGVyYXRpb24uaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ2xpcFBhdGhPcGVyYXRpb24uaApAQCAtMTE5
LDcgKzExOSw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmICghaXNTYW1lVHlwZShvdGhlcikpCiAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIGNvbnN0IGF1dG8mIHNoYXBlQ2xpcCA9
IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KG90aGVyKTsKLSAgICAgICAgcmV0dXJu
IG1fc2hhcGUucHRyKCkgPT0gc2hhcGVDbGlwLm1fc2hhcGUucHRyKCk7CisgICAgICAgIHJldHVy
biBtX3NoYXBlLnB0cigpID09IHNoYXBlQ2xpcC5tX3NoYXBlLnB0cigpIHx8IG1fc2hhcGUuZ2V0
KCkgPT0gc2hhcGVDbGlwLm1fc2hhcGUuZ2V0KCk7CiAgICAgfQogCiAgICAgZXhwbGljaXQgU2hh
cGVDbGlwUGF0aE9wZXJhdGlvbihSZWY8QmFzaWNTaGFwZT4mJiBzaGFwZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwCmluZGV4IDg3M2E0MDY0MGJm
MzI2ZmYzN2QwOGYyODM1ZWZmZDQ0NWFlNGY3ZDYuLjBiZWNiMDA3YTdmZTEwYjc3MjBlNzQwMDRk
NjRlZGQ4ODM4MzNjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHls
ZS9CYXNpY1NoYXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jh
c2ljU2hhcGVzLmNwcApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9u
cy5oIgogI2luY2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRl
ICJTVkdQYXRoVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC03OCw2ICs4MCwxMSBAQCBib29sIEJhc2ljU2hhcGU6
OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KIAorICAgIGlmIChpczxCYXNpY1NoYXBlUGF0aD4oKnRoaXMpKSB7
CisgICAgICAgIC8vIEZJWE1FCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwogICAgIC8v
IEVsbGlwc2VzIHdpdGgga2V5d29yZHMgZm9yIHJhZGlpIGNvb3JkaW5hdGVzIGNhbm5vdCBiZSBh
bmltYXRlZC4KICAgICBpZiAoIWlzPEJhc2ljU2hhcGVFbGxpcHNlPigqdGhpcykpCiAgICAgICAg
IHJldHVybiB0cnVlOwpAQCAtODgsNiArOTUsMTggQEAgYm9vbCBCYXNpY1NoYXBlOjpjYW5CbGVu
ZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKICAgICAgICAgJiYgdGhpc0VsbGlwc2Uu
cmFkaXVzWSgpLmNhbkJsZW5kKG90aGVyRWxsaXBzZS5yYWRpdXNZKCkpKTsKIH0KIAorCitib29s
IEJhc2ljU2hhcGVDaXJjbGU6Om9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNv
bnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGNvbnN0IGF1dG8mIG90aGVyQ2lyY2xlID0gZG93bmNhc3Q8QmFzaWNTaGFw
ZUNpcmNsZT4ob3RoZXIpOworICAgIHJldHVybiBtX2NlbnRlclggPT0gb3RoZXJDaXJjbGUubV9j
ZW50ZXJYCisgICAgICAgICYmIG1fY2VudGVyWSA9PSBvdGhlckNpcmNsZS5tX2NlbnRlclkKKyAg
ICAgICAgJiYgbV9yYWRpdXMgPT0gb3RoZXJDaXJjbGUubV9yYWRpdXM7Cit9CisKIGZsb2F0IEJh
c2ljU2hhcGVDaXJjbGU6OmZsb2F0VmFsdWVGb3JSYWRpdXNJbkJveChmbG9hdCBib3hXaWR0aCwg
ZmxvYXQgYm94SGVpZ2h0KSBjb25zdAogewogICAgIGlmIChtX3JhZGl1cy50eXBlKCkgPT0gQmFz
aWNTaGFwZVJhZGl1czo6VmFsdWUpCkBAIC0xMzIsNiArMTUxLDE4IEBAIFJlZjxCYXNpY1NoYXBl
PiBCYXNpY1NoYXBlQ2lyY2xlOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91Ymxl
IHByb2dyZXNzCiAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlTm9uTnVsbCgpOwogfQogCitib29s
IEJhc2ljU2hhcGVFbGxpcHNlOjpvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBj
b25zdAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBjb25zdCBhdXRvJiBvdGhlckVsbGlwc2UgPSBkb3duY2FzdDxCYXNpY1No
YXBlRWxsaXBzZT4ob3RoZXIpOworICAgIHJldHVybiBtX2NlbnRlclggPT0gb3RoZXJFbGxpcHNl
Lm1fY2VudGVyWAorICAgICAgICAmJiBtX2NlbnRlclkgPT0gb3RoZXJFbGxpcHNlLm1fY2VudGVy
WQorICAgICAgICAmJiBtX3JhZGl1c1ggPT0gb3RoZXJFbGxpcHNlLm1fcmFkaXVzWAorICAgICAg
ICAmJiBtX3JhZGl1c1kgPT0gb3RoZXJFbGxpcHNlLm1fcmFkaXVzWTsKK30KKwogZmxvYXQgQmFz
aWNTaGFwZUVsbGlwc2U6OmZsb2F0VmFsdWVGb3JSYWRpdXNJbkJveChjb25zdCBCYXNpY1NoYXBl
UmFkaXVzJiByYWRpdXMsIGZsb2F0IGNlbnRlciwgZmxvYXQgYm94V2lkdGhPckhlaWdodCkgY29u
c3QKIHsKICAgICBpZiAocmFkaXVzLnR5cGUoKSA9PSBCYXNpY1NoYXBlUmFkaXVzOjpWYWx1ZSkK
QEAgLTE4Miw2ICsyMTMsMTYgQEAgUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVFbGxpcHNlOjpi
bGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXMKICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7CiB9CiAKK2Jvb2wgQmFzaWNTaGFwZVBvbHlnb246Om9w
ZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUo
KSAhPSBvdGhlci50eXBlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGF1
dG8mIG90aGVyUG9seWdvbiA9IGRvd25jYXN0PEJhc2ljU2hhcGVQb2x5Z29uPihvdGhlcik7Cisg
ICAgcmV0dXJuIG1fd2luZFJ1bGUgPT0gb3RoZXJQb2x5Z29uLm1fd2luZFJ1bGUKKyAgICAgICAg
JiYgbV92YWx1ZXMgPT0gb3RoZXJQb2x5Z29uLm1fdmFsdWVzOworfQorCiB2b2lkIEJhc2ljU2hh
cGVQb2x5Z29uOjpwYXRoKFBhdGgmIHBhdGgsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gp
CiB7CiAgICAgQVNTRVJUKHBhdGguaXNFbXB0eSgpKTsKQEAgLTIyMyw2ICsyNjQsNzUgQEAgUmVm
PEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBv
dGhlciwgZG91YmxlIHByb2dyZXMKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7
CiB9CiAKK0Jhc2ljU2hhcGVQYXRoOjpCYXNpY1NoYXBlUGF0aCgpCisgICAgOiBtX3dpbmRSdWxl
KFJVTEVfTk9OWkVSTykKK3sKK30KKwordm9pZCBCYXNpY1NoYXBlUGF0aDo6c2V0UGF0aERhdGEo
c3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBieXRlU3RyZWFtKQoreworICAgIC8v
IEZJWE1FOiBQYXJzZSB0aGUgcGF0aCB1cC1mcm9udD8KKyAgICBtX2J5dGVTdHJlYW0gPSBXVEY6
Om1vdmUoYnl0ZVN0cmVhbSk7Cit9CisKK3ZvaWQgQmFzaWNTaGFwZVBhdGg6OnBhdGgoUGF0aCYg
cGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBBU1NFUlQocGF0aC5p
c0VtcHR5KCkpOworICAgIGJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKG1fYnl0ZVN0cmVhbS5nZXQo
KSwgcGF0aCk7CisgICAgcGF0aC50cmFuc2xhdGUodG9GbG9hdFNpemUoYm91bmRpbmdCb3gubG9j
YXRpb24oKSkpOworfQorCitib29sIEJhc2ljU2hhcGVQYXRoOjpvcGVyYXRvcj09KGNvbnN0IEJh
c2ljU2hhcGUmIG90aGVyKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjb25zdCBhdXRvJiBvdGhlclBhdGggPSBk
b3duY2FzdDxCYXNpY1NoYXBlUGF0aD4ob3RoZXIpOworICAgIGlmIChtX3dpbmRSdWxlICE9IG90
aGVyUGF0aC5tX3dpbmRSdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhN
RTogdmVyeSBsYW1lIHdheSB0byBjb21wYXJlLiBDYW4gd2UganVzdCBjb21wYXJlIGJ5dGVzPwor
ICAgIC8vIEZJWE1FOiBzaGFyZSB3aXRoIENTU0Jhc2ljU2hhcGVzCisgICAgU3RyaW5nIHBhdGhT
dHJpbmc7CisgICAgYnVpbGRTdHJpbmdGcm9tQnl0ZVN0cmVhbShtX2J5dGVTdHJlYW0uZ2V0KCks
IHBhdGhTdHJpbmcsIFVuYWx0ZXJlZFBhcnNpbmcpOworCisgICAgU3RyaW5nIG90aGVyUGF0aFN0
cmluZzsKKyAgICBidWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKG90aGVyUGF0aC5wYXRoRGF0YSgp
LCBvdGhlclBhdGhTdHJpbmcsIFVuYWx0ZXJlZFBhcnNpbmcpOworCisgICAgcmV0dXJuIHBhdGhT
dHJpbmcgPT0gb3RoZXJQYXRoU3RyaW5nOworfQorCitSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFw
ZVBhdGg6OmJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIGZyb20sIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QKK3sKKyAgICBBU1NFUlQodHlwZSgpID09IGZyb20udHlwZSgpKTsKKworICAgIGNvbnN0IGF1
dG8mIGZyb21QYXRoID0gZG93bmNhc3Q8QmFzaWNTaGFwZVBhdGg+KGZyb20pOworCisgICAgUmVm
UHRyPEJhc2ljU2hhcGVQYXRoPiByZXN1bHQgPSAgQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZSgpOwor
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiByZXN1bHRpbmdQYXRoQnl0
ZXMgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFtPigpOworICAgIGJ1aWxkQW5p
bWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShmcm9tUGF0aC5tX2J5dGVTdHJlYW0uZ2V0KCksIG1fYnl0
ZVN0cmVhbS5nZXQoKSwgcmVzdWx0aW5nUGF0aEJ5dGVzLmdldCgpLCBwcm9ncmVzcyk7CisgICAg
cmVzdWx0LT5zZXRQYXRoRGF0YShzdGQ6Om1vdmUocmVzdWx0aW5nUGF0aEJ5dGVzKSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0LnJlbGVhc2VOb25OdWxsKCk7Cit9CisKK2Jvb2wgQmFzaWNTaGFwZUlu
c2V0OjpvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAoreworICAgIGlm
ICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBj
b25zdCBhdXRvJiBvdGhlckluc2V0ID0gZG93bmNhc3Q8QmFzaWNTaGFwZUluc2V0PihvdGhlcik7
CisgICAgcmV0dXJuIG1fcmlnaHQgPT0gb3RoZXJJbnNldC5tX3JpZ2h0CisgICAgICAgICYmIG1f
dG9wID09IG90aGVySW5zZXQubV90b3AKKyAgICAgICAgJiYgbV9ib3R0b20gPT0gb3RoZXJJbnNl
dC5tX2JvdHRvbQorICAgICAgICAmJiBtX2xlZnQgPT0gb3RoZXJJbnNldC5tX2xlZnQKKyAgICAg
ICAgJiYgbV90b3BMZWZ0UmFkaXVzID09IG90aGVySW5zZXQubV90b3BMZWZ0UmFkaXVzCisgICAg
ICAgICYmIG1fdG9wUmlnaHRSYWRpdXMgPT0gb3RoZXJJbnNldC5tX3RvcFJpZ2h0UmFkaXVzCisg
ICAgICAgICYmIG1fYm90dG9tUmlnaHRSYWRpdXMgPT0gb3RoZXJJbnNldC5tX2JvdHRvbVJpZ2h0
UmFkaXVzCisgICAgICAgICYmIG1fYm90dG9tTGVmdFJhZGl1cyA9PSBvdGhlckluc2V0Lm1fYm90
dG9tTGVmdFJhZGl1czsKK30KKwogc3RhdGljIEZsb2F0U2l6ZSBmbG9hdFNpemVGb3JMZW5ndGhT
aXplKGNvbnN0IExlbmd0aFNpemUmIGxlbmd0aFNpemUsIGNvbnN0IEZsb2F0UmVjdCYgYm91bmRp
bmdCb3gpCiB7CiAgICAgcmV0dXJuIEZsb2F0U2l6ZShmbG9hdFZhbHVlRm9yTGVuZ3RoKGxlbmd0
aFNpemUud2lkdGgoKSwgYm91bmRpbmdCb3gud2lkdGgoKSksCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oCmluZGV4IDg2MmFmMjI2NWFkZWExYjQzNzhhMDFm
ZDZhMzEyZWE3ODU4OTE4YWQuLjE2Yjk0NTVkZGM2MWEzYmM4MjU1YzRiNWQxYTg5NGNjMDVmZDhh
MzUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBl
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oCkBA
IC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UmVjdDsKIGNs
YXNzIFBhdGg7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKIAog
Y2xhc3MgQmFzaWNTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2ljU2hhcGU+IHsKIHB1Ymxp
YzoKQEAgLTUxLDYgKzUyLDcgQEAgcHVibGljOgogCiAgICAgZW51bSBUeXBlIHsKICAgICAgICAg
QmFzaWNTaGFwZVBvbHlnb25UeXBlLAorICAgICAgICBCYXNpY1NoYXBlUGF0aFR5cGUsCiAgICAg
ICAgIEJhc2ljU2hhcGVDaXJjbGVUeXBlLAogICAgICAgICBCYXNpY1NoYXBlRWxsaXBzZVR5cGUs
CiAgICAgICAgIEJhc2ljU2hhcGVJbnNldFR5cGUKQEAgLTYzLDYgKzY1LDcgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3Vi
bGUpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCA9IDA7CiB9
OwogCiBjbGFzcyBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSB7CkBAIC0xMDEsNiArMTA0LDEz
IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHJldHVybiBCYXNpY1NoYXBlQ2VudGVyQ29vcmRp
bmF0ZShUb3BMZWZ0LCBtX2NvbXB1dGVkTGVuZ3RoLmJsZW5kKG90aGVyLm1fY29tcHV0ZWRMZW5n
dGgsIHByb2dyZXNzKSk7CiAgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
YXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9kaXJlY3Rpb24gPT0gb3RoZXIubV9kaXJlY3Rpb24KKyAgICAgICAgICAgICYmIG1f
bGVuZ3RoID09IG90aGVyLm1fbGVuZ3RoCisgICAgICAgICAgICAmJiBtX2NvbXB1dGVkTGVuZ3Ro
ID09IG90aGVyLm1fY29tcHV0ZWRMZW5ndGg7CisgICAgfQogCiBwcml2YXRlOgogICAgIERpcmVj
dGlvbiBtX2RpcmVjdGlvbjsKQEAgLTEzOCw2ICsxNDgsMTEgQEAgcHVibGljOgogCiAgICAgICAg
IHJldHVybiBCYXNpY1NoYXBlUmFkaXVzKG1fdmFsdWUuYmxlbmQob3RoZXIudmFsdWUoKSwgcHJv
Z3Jlc3MpKTsKICAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hh
cGVSYWRpdXMmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZSAmJiBtX3R5cGUgPT0gb3RoZXIubV90eXBlOworICAgIH0KIAogcHJpdmF0
ZToKICAgICBMZW5ndGggbV92YWx1ZTsKQEAgLTE2Miw2ICsxNzcsOCBAQCBwdWJsaWM6CiAgICAg
dmlydHVhbCBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKICAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEJhc2ljU2hhcGVDaXJjbGVUeXBlOyB9CisgICAgdmlydHVhbCBib29sIG9wZXJh
dG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJhc2ljU2hh
cGVDaXJjbGUoKSB7IH0KIApAQCAtMTg5LDYgKzIwNiw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiwgZG91YmxlKSBjb25zdCBv
dmVycmlkZTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gQmFzaWNTaGFwZUVsbGlwc2VUeXBlOyB9CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJhc2ljU2hhcGVFbGxp
cHNlKCkgeyB9CiAKQEAgLTIxNSw2ICsyMzQsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBXaW5k
UnVsZSB3aW5kUnVsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KIAog
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQmFzaWNTaGFw
ZVBvbHlnb25UeXBlOyB9CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNT
aGFwZSYpIGNvbnN0OworCiBwcml2YXRlOgogICAgIEJhc2ljU2hhcGVQb2x5Z29uKCkKICAgICAg
ICAgOiBtX3dpbmRSdWxlKFJVTEVfTk9OWkVSTykKQEAgLTIyNCw2ICsyNDUsMjkgQEAgcHJpdmF0
ZToKICAgICBWZWN0b3I8TGVuZ3RoPiBtX3ZhbHVlczsKIH07CiAKK2NsYXNzIEJhc2ljU2hhcGVQ
YXRoIGZpbmFsIDogcHVibGljIEJhc2ljU2hhcGUgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
QmFzaWNTaGFwZVBhdGg+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmFzaWNTaGFw
ZVBhdGgpOyB9CisKKyAgICB2b2lkIHNldFdpbmRSdWxlKFdpbmRSdWxlIHdpbmRSdWxlKSB7IG1f
d2luZFJ1bGUgPSB3aW5kUnVsZTsgfQorICAgIHZvaWQgc2V0UGF0aERhdGEoc3RkOjp1bmlxdWVf
cHRyPFNWR1BhdGhCeXRlU3RyZWFtPik7CisgICAgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBh
dGhEYXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU3RyZWFtLmdldCgpOyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgcGF0aChQYXRoJiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisgICAgdmly
dHVhbCBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIFdpbmRSdWxlIHdpbmRSdWxlKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV93aW5kUnVsZTsgfQorCisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNpY1NoYXBlUGF0aFR5cGU7IH0KKyAgICB2aXJ0dWFs
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgQmFzaWNTaGFwZVBhdGgoKTsKKworICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX2J5dGVTdHJlYW07Cit9OworCiBjbGFz
cyBCYXNpY1NoYXBlSW5zZXQgZmluYWwgOiBwdWJsaWMgQmFzaWNTaGFwZSB7CiBwdWJsaWM6CiAg
ICAgc3RhdGljIFJlZjxCYXNpY1NoYXBlSW5zZXQ+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQmFzaWNTaGFwZUluc2V0KTsgfQpAQCAtMjUyLDYgKzI5Niw4IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiwgZG91Ymxl
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gQmFzaWNTaGFwZUluc2V0VHlwZTsgfQorICAgIHZpcnR1YWwgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBCYXNpY1No
YXBlSW5zZXQoKSB7IH0KIApAQCAtMjc2LDYgKzMyMiw3IEBAIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkFTSUNfU0hBUEUoQmFzaWNTaGFwZUNp
cmNsZSwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGUpCiBTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JBU0lDX1NIQVBFKEJhc2ljU2hhcGVFbGxpcHNlLCBCYXNpY1NoYXBlOjpCYXNpY1No
YXBlRWxsaXBzZVR5cGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJhc2lj
U2hhcGVQb2x5Z29uLCBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5cGUpCitTUEVDSUFM
SVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJhc2ljU2hhcGVQYXRoLCBCYXNpY1NoYXBlOjpC
YXNpY1NoYXBlUGF0aFR5cGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJh
c2ljU2hhcGVJbnNldCwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0VHlwZSkKIAogI2VuZGlm
IC8vIEJhc2ljU2hhcGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9z
dHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmNwcAppbmRleCAwZDRkOGI1YzVl
ODNhOTFlNTJiZWY2MzQwNmZmZDRlNzllOTY3ZGUwLi4zMDNiNDFiNjFlODc0NmZlNzYwNzFkZjVi
NDI0NTY1NDliMWZhN2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5
bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuY3BwCkBAIC0yNDcsNyArMjQ3
LDcgQEAgYm9vbCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjpvcGVyYXRvcj09KGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGMKICAgICAgICAgJiYgbV9zaGFwZU1hcmdpbiA9
PSBvLm1fc2hhcGVNYXJnaW4KICAgICAgICAgJiYgbV9zaGFwZUltYWdlVGhyZXNob2xkID09IG8u
bV9zaGFwZUltYWdlVGhyZXNob2xkCiAjZW5kaWYKLSAgICAgICAgJiYgbV9jbGlwUGF0aCA9PSBv
Lm1fY2xpcFBhdGggLy8gRklYTUU6IFRoaXMgbmVlZHMgdG8gY29tcGFyZSB2YWx1ZXMuCisgICAg
ICAgICYmIGNsaXBQYXRoT3BlcmF0aW9uc0VxdWl2YWxlbnQobykKICAgICAgICAgJiYgbV90ZXh0
RGVjb3JhdGlvbkNvbG9yID09IG8ubV90ZXh0RGVjb3JhdGlvbkNvbG9yCiAgICAgICAgICYmIG1f
dmlzaXRlZExpbmtUZXh0RGVjb3JhdGlvbkNvbG9yID09IG8ubV92aXNpdGVkTGlua1RleHREZWNv
cmF0aW9uQ29sb3IKICAgICAgICAgJiYgbV92aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciA9PSBv
Lm1fdmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IKQEAgLTM2Myw2ICszNjMsMTUgQEAgYm9vbCBT
dHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhOjp0cmFuc2l0aW9uRGF0YUVxdWl2YWxlbnQoY29uc3Qg
U3R5bGVSYXJlTm9uSW5oZXIKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9vbCBTdHlsZVJhcmVO
b25Jbmhlcml0ZWREYXRhOjpjbGlwUGF0aE9wZXJhdGlvbnNFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmIG8pIGNvbnN0Cit7CisgICAgaWYgKCghbV9jbGlwUGF0aCAm
JiBvLm1fY2xpcFBhdGgpIHx8IChtX2NsaXBQYXRoICYmICFvLm1fY2xpcFBhdGgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKG1fY2xpcFBhdGggJiYgby5tX2NsaXBQYXRoICYmICgq
bV9jbGlwUGF0aCAhPSAqby5tX2NsaXBQYXRoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IHJldHVybiB0cnVlOworfQorCiBib29sIFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGE6Omhhc0Zp
bHRlcnMoKSBjb25zdAogewogICAgIHJldHVybiBtX2ZpbHRlci5nZXQoKSAmJiAhbV9maWx0ZXIt
Pm1fb3BlcmF0aW9ucy5pc0VtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N0eWxlL1N0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEuaAppbmRleCBmNjE3NTJk
YTljNTdiMzJjMzRlY2M4MjA0ZTdkZTk0YjExMmQ3MTc1Li4zYmU5ZjI1NTBiMzk4OTc0OWRmMDdi
NTdlNGY2ZGM1ZWQ3ZTllN2M4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
c3R5bGUvU3R5bGVSYXJlTm9uSW5oZXJpdGVkRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdHlsZS9TdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRhLmgKQEAgLTk4LDYgKzk4LDcg
QEAgcHVibGljOgogICAgIGJvb2wgcmVmbGVjdGlvbkRhdGFFcXVpdmFsZW50KGNvbnN0IFN0eWxl
UmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29sIGFuaW1hdGlvbkRhdGFFcXVp
dmFsZW50KGNvbnN0IFN0eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29s
IHRyYW5zaXRpb25EYXRhRXF1aXZhbGVudChjb25zdCBTdHlsZVJhcmVOb25Jbmhlcml0ZWREYXRh
JikgY29uc3Q7CisgICAgYm9vbCBjbGlwUGF0aE9wZXJhdGlvbnNFcXVpdmFsZW50KGNvbnN0IFN0
eWxlUmFyZU5vbkluaGVyaXRlZERhdGEmKSBjb25zdDsKICAgICBib29sIGhhc0ZpbHRlcnMoKSBj
b25zdDsKICNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQogICAgIGJvb2wgaGFzQmFja2Ryb3BG
aWx0ZXJzKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0
aWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKaW5k
ZXggYWVhNWY1MTc2NDI4ZThmNThjNDM1YjIxOTk3ZjI5OTlkM2FlZmY1MC4uMjhmNDE1ZjgzM2Y1
YmFjNDExYzQ5ZGFiNDZlZjNjMTc3NjU2YWQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRo
VXRpbGl0aWVzLmNwcApAQCAtMTkxLDcgKzE5MSw3IEBAIGJvb2wgYnVpbGRTVkdQYXRoU2VnTGlz
dEZyb21CeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiBzdHJlYW0sIFNWR1BhdGhFbGVtZW50
CiAgICAgcmV0dXJuIG9rOwogfQogCi1ib29sIGJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0oU1ZH
UGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSwgU3RyaW5nJiByZXN1bHQsIFBhdGhQYXJzaW5nTW9kZSBw
YXJzaW5nTW9kZSkKK2Jvb2wgYnVpbGRTdHJpbmdGcm9tQnl0ZVN0cmVhbShjb25zdCBTVkdQYXRo
Qnl0ZVN0cmVhbSogc3RyZWFtLCBTdHJpbmcmIHJlc3VsdCwgUGF0aFBhcnNpbmdNb2RlIHBhcnNp
bmdNb2RlKQogewogICAgIEFTU0VSVChzdHJlYW0pOwogICAgIGlmIChzdHJlYW0tPmlzRW1wdHko
KSkKQEAgLTE5OSw3ICsxOTksNyBAQCBib29sIGJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0oU1ZH
UGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSwgU3RyaW5nJiByZXN1bHQsIFBhdGhQYQogCiAgICAgU1ZH
UGF0aFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRoU3RyaW5nQnVpbGRlcigp
OwogCi0gICAgYXV0byBzb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlPihzdHJlYW0pOworICAgIGF1dG8gc291cmNlID0gc3RkOjptYWtlX3VuaXF1ZTxTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZT4oY29uc3RfY2FzdDxTVkdQYXRoQnl0ZVN0cmVhbSo+KHN0cmVh
bSkpOwogICAgIFNWR1BhdGhQYXJzZXIqIHBhcnNlciA9IGdsb2JhbFNWR1BhdGhQYXJzZXIoc291
cmNlLmdldCgpLCBidWlsZGVyKTsKICAgICBib29sIG9rID0gcGFyc2VyLT5wYXJzZVBhdGhEYXRh
RnJvbVNvdXJjZShwYXJzaW5nTW9kZSk7CiAgICAgcmVzdWx0ID0gYnVpbGRlci0+cmVzdWx0KCk7
CkBAIC0yMzksNyArMjM5LDcgQEAgYm9vbCBidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmlu
Zyhjb25zdCBTdHJpbmcmIGQsIFNWR1BhdGhCeXRlU3RyZWFtKiByZXN1bHQKICAgICByZXR1cm4g
b2s7CiB9CiAKLWJvb2wgYnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKFNWR1BhdGhCeXRl
U3RyZWFtKiBmcm9tU3RyZWFtLCBTVkdQYXRoQnl0ZVN0cmVhbSogdG9TdHJlYW0sIFNWR1BhdGhC
eXRlU3RyZWFtKiByZXN1bHQsIGZsb2F0IHByb2dyZXNzKQorYm9vbCBidWlsZEFuaW1hdGVkU1ZH
UGF0aEJ5dGVTdHJlYW0oY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIGZyb21TdHJlYW0sIGNvbnN0
IFNWR1BhdGhCeXRlU3RyZWFtKiB0b1N0cmVhbSwgU1ZHUGF0aEJ5dGVTdHJlYW0qIHJlc3VsdCwg
ZmxvYXQgcHJvZ3Jlc3MpCiB7CiAgICAgQVNTRVJUKGZyb21TdHJlYW0pOwogICAgIEFTU0VSVCh0
b1N0cmVhbSk7CkBAIC0yNTIsOCArMjUyLDggQEAgYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5
dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIGZyb21TdHJlYW0sIFNWR1BhdGhCeXRlU3QKIAog
ICAgIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlcihyZXN1bHQpOwogCi0gICAgYXV0byBmcm9tU291cmNlID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4oZnJvbVN0cmVhbSk7Ci0gICAgYXV0byB0
b1NvdXJjZSA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2U+KHRvU3Ry
ZWFtKTsKKyAgICBhdXRvIGZyb21Tb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRl
U3RyZWFtU291cmNlPihjb25zdF9jYXN0PFNWR1BhdGhCeXRlU3RyZWFtKj4oZnJvbVN0cmVhbSkp
OworICAgIGF1dG8gdG9Tb3VyY2UgPSBzdGQ6Om1ha2VfdW5pcXVlPFNWR1BhdGhCeXRlU3RyZWFt
U291cmNlPihjb25zdF9jYXN0PFNWR1BhdGhCeXRlU3RyZWFtKj4odG9TdHJlYW0pKTsKICAgICBT
VkdQYXRoQmxlbmRlciogYmxlbmRlciA9IGdsb2JhbFNWR1BhdGhCbGVuZGVyKCk7CiAgICAgYm9v
bCBvayA9IGJsZW5kZXItPmJsZW5kQW5pbWF0ZWRQYXRoKHByb2dyZXNzLCBmcm9tU291cmNlLmdl
dCgpLCB0b1NvdXJjZS5nZXQoKSwgYnVpbGRlcik7CiAgICAgYmxlbmRlci0+Y2xlYW51cCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuaCBiL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmgKaW5kZXggYzJkMWYxNGMwNGVjMWE1NDI5
OTNjZjhlYzc2MTNmOWFlMGQ2YjRmOC4uNjkxMGY5M2E2NzZkZGMzYmU2ZWQ4MmZhYzcwNDI5MTFm
ZDUyMzUyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5oCkBAIC00MiwxMyAr
NDIsMTMgQEAgYm9vbCBhcHBlbmRTVkdQYXRoQnl0ZVN0cmVhbUZyb21TVkdQYXRoU2VnKFJlZlB0
cjxTVkdQYXRoU2VnPiYmLCBTVkdQYXRoQnl0ZVN0cmUKIGJvb2wgYnVpbGRTVkdQYXRoQnl0ZVN0
cmVhbUZyb21TdHJpbmcoY29uc3QgU3RyaW5nJiwgU1ZHUGF0aEJ5dGVTdHJlYW0qLCBQYXRoUGFy
c2luZ01vZGUpOwogCiAvLyBTVkdQYXRoQnl0ZVN0cmVhbS9TVkdQYXRoU2VnTGlzdCAtPiBTdHJp
bmcKLWJvb2wgYnVpbGRTdHJpbmdGcm9tQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIFN0
cmluZyYsIFBhdGhQYXJzaW5nTW9kZSk7Citib29sIGJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0o
Y29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qLCBTdHJpbmcmLCBQYXRoUGFyc2luZ01vZGUpOwogYm9v
bCBidWlsZFN0cmluZ0Zyb21TVkdQYXRoU2VnTGlzdChjb25zdCBTVkdQYXRoU2VnTGlzdCYsIFN0
cmluZyYsIFBhdGhQYXJzaW5nTW9kZSk7CiAKIC8vIFNWR1BhdGhCeXRlU3RyZWFtIC0+IFNWR1Bh
dGhTZWdMaXN0CiBib29sIGJ1aWxkU1ZHUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0cmVhbShTVkdQYXRo
Qnl0ZVN0cmVhbSosIFNWR1BhdGhFbGVtZW50KiwgU1ZHUGF0aFNlZ0xpc3QmLCBQYXRoUGFyc2lu
Z01vZGUpOwogCi1ib29sIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0
ZVN0cmVhbSosIFNWR1BhdGhCeXRlU3RyZWFtKiwgU1ZHUGF0aEJ5dGVTdHJlYW0qLCBmbG9hdCk7
Citib29sIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShjb25zdCBTVkdQYXRoQnl0ZVN0
cmVhbSogZnJvbSwgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIHRvLCBTVkdQYXRoQnl0ZVN0cmVh
bSosIGZsb2F0KTsKIGJvb2wgYWRkVG9TVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVh
bSosIFNWR1BhdGhCeXRlU3RyZWFtKiwgdW5zaWduZWQgcmVwZWF0Q291bnQgPSAxKTsKIAogYm9v
bCBnZXRTVkdQYXRoU2VnQXRMZW5ndGhGcm9tU1ZHUGF0aEJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVT
dHJlYW0qLCBmbG9hdCBsZW5ndGgsIHVuc2lnbmVkJiBwYXRoU2VnKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264020</attachid>
            <date>2015-10-25 12:17:51 -0700</date>
            <delta_ts>2015-10-25 12:43:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149996-20151025121703.patch</filename>
            <type>text/plain</type>
            <size>52355</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmZkODYxZTVhMmFmM2Uw
NDNlMWNiNGVhYjVlMzQ2MzBiYmM5YjNlYy4uMDg2ZjRhOTU2NzVhMDdkYzhhMGU5NDRhZjYxYzMy
YjU5ZTg5OTc1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc4IEBACisyMDE1LTEwLTI1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgYmV6
aWVyIHBhdGhzIGluIGNsaXAtcGF0aCBwcm9wZXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBTdXBwb3J0IHBhdGgoKSBpbiB0aGUgLXdl
YmtpdC1jbGlwLXBhdGggcHJvcGVydHksIGFzIHNwZWNpZmllZCBpbgorICAgICAgICBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXNoYXBlcy0yLyNzdXBwb3J0ZWQtYmFzaWMtc2hhcGVzCisg
ICAgICAgIAorICAgICAgICBBZGRlZCBCYXNpY1NoYXBlUGF0aCBhbmQgQ1NTQmFzaWNTaGFwZVBh
dGgsIHdoaWNoIGJvdGggcmVwcmVzZW50IHRoZSBwYXRoCisgICAgICAgIGFzIGEgU1ZHUGF0aEJ5
dGVTdHJlYW0gYW5kIHdpbmQgcnVsZS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgQmFzaWNTaGFw
ZTo6Y2FuQmxlbmQoKSBhIHZpcnR1YWwgZnVuY3Rpb24sIGFuZCBpbXBsZW1lbnQgaXQgb24gZWFj
aCBzdWJjbGFzcy4KKyAgICAgICAgTWFrZSB2YXJpb3VzIEJhc2ljU2hhcGUgc3ViY2xhc3MgZnVu
Y3Rpb24gb3ZlcnJpZGVzIHByaXZhdGUsIG90aGVyIHRoYW4gd2luZFJ1bGUoKQorICAgICAgICB3
aWNoIGlzIGNhbGxlZCBvbiBkZXJpdmVkIGNsYXNzZXMgaW4gYSBmZXcgcGxhY2VzLgorICAgICAg
ICAKKyAgICAgICAgQWRkIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKCkgd2hpY2ggcmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwYXRocyBjYW4gYmUKKyAgICAgICAgaW50ZXJwb2xhdGVk
LiBVc2VzIHRoZSBzYW1lIGxvZ2ljIGFzIGJsZW5kQW5pbWF0ZWRQYXRoKCksIHdpdGhvdXQgZG9p
bmcgYW55IGludGVycG9sYXRpb24uCisgICAgICAgIAorICAgICAgICBSZW5kZXJFbGVtZW50Ojpj
cmVhdGVzR3JvdXAoKSBpcyBmaXhlZCB0byBoYXZlIGNsaXAtcGF0aCB0cmlnZ2VyIGEgZ3JvdXAs
CisgICAgICAgIHdoaWNoIGZpeGVzIHJlbmRlcmluZyBvZiBjbGlwLXBhdGggd2l0aCBhIGRlc2Nl
bmRhbnQgY29tcG9zaXRpbmcgbGF5ZXIuCisKKyAgICAgICAgVGVzdHM6IGNvbXBvc2l0aW5nL21h
c2tzL2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQuaHRtbAorICAgICAgICAgICAgICAg
Y3NzMy9tYXNraW5nL2NsaXAtcGF0aC13aXRoLXBhdGguaHRtbAorCisgICAgICAgICogY3NzL0Jh
c2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVGb3JCYXNpY1No
YXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hhcGVGb3JWYWx1ZSk6CisgICAgICAgICog
Y3NzL0NTU0Jhc2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVQ
YXRoOjpDU1NCYXNpY1NoYXBlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NCYXNpY1NoYXBl
UGF0aDo6cGF0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRQYXRoU3RyaW5nKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVQYXRoOjpjc3NUZXh0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU0Jhc2ljU2hhcGVQYXRoOjplcXVhbHMpOgorICAgICAgICAqIGNzcy9DU1NCYXNp
Y1NoYXBlcy5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckVsZW1lbnQ6OmNyZWF0ZXNHcm91cCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxlL0Jh
c2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVDaXJjbGU6OmNhbkJs
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVFbGxpcHNlOjpjYW5CbGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUG9seWdvbjo6Y2FuQmxlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6QmFzaWNTaGFwZVBhdGg6OkJhc2ljU2hhcGVQYXRoKToKKyAgICAgICAgKFdlYkNv
cmU6OkJhc2ljU2hhcGVQYXRoOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQ
YXRoOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpjYW5C
bGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6YmxlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpjYW5CbGVuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpCYXNpY1NoYXBlOjpjYW5CbGVuZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3N0
eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjphZGRBbmltYXRlZFBhdGgpOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1BhdGhCbGVuZGVyOjpTVkdQYXRoQmxlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21vb3Ro
U2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6Ymxl
bmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQmxl
bmRlci5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHN2Zy9TVkdQ
YXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkJsZW5kU1ZHUGF0aEJ5dGVT
dHJlYW1zKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5oOgorCiAyMDE1LTEwLTIz
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmFkaW9Ob2RlTGlz
dCBzaG91bGQgYmUgZXhwb3NlZCBvbiBXaW5kb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNpY1No
YXBlRnVuY3Rpb25zLmNwcAppbmRleCAwNjRmY2QyZWM2OWMxZGNmZDk3ZmQzMTY3NGViNjMwYTgz
NjZjZDg4Li4zMTZlNjc5NzdlYzYyZGUwY2JhMDMyYmRkNzUzNDJkNWQ1MTkwMjkzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCkBAIC0zNiw2ICszNiw3IEBA
CiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1ZGUg
IlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0xMDMsNiArMTA0LDEzIEBAIFJlZjxDU1NWYWx1ZT4gdmFsdWVG
b3JCYXNpY1NoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQmFzaWNTaGFwZSYg
YmFzCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IHBvbHlnb25WYWx1ZS5jb3B5UmVmKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVQYXRo
VHlwZTogeworICAgICAgICBjb25zdCBhdXRvJiBwYXRoU2hhcGUgPSBkb3duY2FzdDxCYXNpY1No
YXBlUGF0aD4oYmFzaWNTaGFwZSk7CisgICAgICAgIGF1dG8gcGF0aFNoYXBlVmFsdWUgPSBDU1NC
YXNpY1NoYXBlUGF0aDo6Y3JlYXRlKHBhdGhTaGFwZS5wYXRoRGF0YSgpLT5jb3B5KCkpOworICAg
ICAgICBwYXRoU2hhcGVWYWx1ZS0+c2V0V2luZFJ1bGUocGF0aFNoYXBlLndpbmRSdWxlKCkpOwor
ICAgICAgICBiYXNpY1NoYXBlVmFsdWUgPSBwYXRoU2hhcGVWYWx1ZS5jb3B5UmVmKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFR5
cGU6IHsKICAgICAgICAgY29uc3QgYXV0byYgaW5zZXQgPSBkb3duY2FzdDxCYXNpY1NoYXBlSW5z
ZXQ+KGJhc2ljU2hhcGUpOwogICAgICAgICBhdXRvIGluc2V0VmFsdWUgPSBDU1NCYXNpY1NoYXBl
SW5zZXQ6OmNyZWF0ZSgpOwpAQCAtMTIwLDggKzEyOCw2IEBAIFJlZjxDU1NWYWx1ZT4gdmFsdWVG
b3JCYXNpY1NoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQmFzaWNTaGFwZSYg
YmFzCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IGluc2V0VmFsdWUuY29weVJlZigpOwogICAg
ICAgICBicmVhazsKICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShiYXNpY1NoYXBlVmFsdWUucmVs
ZWFzZU5vbk51bGwoKSk7CkBAIC0yNTcsNiArMjYzLDE0IEBAIFJlZjxCYXNpY1NoYXBlPiBiYXNp
Y1NoYXBlRm9yVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVyc2lv
bkRhCiAgICAgICAgIGJhc2ljU2hhcGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJlYWs7
CiAgICAgfQorICAgIGNhc2UgQ1NTQmFzaWNTaGFwZTo6Q1NTQmFzaWNTaGFwZVBhdGhUeXBlOiB7
CisgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVQYXRoJiBwYXRoVmFsdWUgPSBkb3duY2FzdDxD
U1NCYXNpY1NoYXBlUGF0aD4oKmJhc2ljU2hhcGVWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRyPEJh
c2ljU2hhcGVQYXRoPiBwYXRoID0gQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZShwYXRoVmFsdWUucGF0
aERhdGEoKS0+Y29weSgpKTsKKyAgICAgICAgcGF0aC0+c2V0V2luZFJ1bGUocGF0aFZhbHVlLndp
bmRSdWxlKCkpOworICAgICAgICBiYXNpY1NoYXBlID0gcGF0aC5yZWxlYXNlKCk7CisgICAgICAg
IGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAppbmRleCAxZGU3NzE2NjZmMzNjNjA2NDIxNWZh
MDIwMzI4NmI3NDQ2M2IzZmVlLi5kNWY5ZTBjYTE2NDcyYjgwYjE0NTkzNmMzMDFkYzRhMjY2ZjZl
Mzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKQEAgLTMxLDkgKzMxLDEy
IEBACiAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgogCisjaW5jbHVkZSAiQ1NTUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUgIkNT
U1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0ZVN0
cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC0xOTgsNiArMjAx
LDU1IEBAIGJvb2wgQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmVxdWFscyhjb25zdCBDU1NCYXNpY1No
YXBlJiBzaGFwZSkgY29uc3QKICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fcmFkaXVz
WSwgb3RoZXIubV9yYWRpdXNZKTsKIH0KIAorQ1NTQmFzaWNTaGFwZVBhdGg6OkNTU0Jhc2ljU2hh
cGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mJiBieXRlU3RyZWFtKQor
ICAgIDogbV9ieXRlU3RyZWFtKFdURjo6bW92ZShieXRlU3RyZWFtKSkKK3sKK30KKworY29uc3Qg
U1ZHUGF0aEJ5dGVTdHJlYW0qIENTU0Jhc2ljU2hhcGVQYXRoOjpwYXRoRGF0YSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fYnl0ZVN0cmVhbS5nZXQoKTsKK30KKworc3RhdGljIFN0cmluZyBidWls
ZFBhdGhTdHJpbmcoY29uc3QgV2luZFJ1bGUmIHdpbmRSdWxlLCBjb25zdCBTdHJpbmcmIHBhdGgs
IGNvbnN0IFN0cmluZyYgYm94KQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAgIGlm
ICh3aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRlcmFs
KCJwYXRoKGV2ZW5vZGQsICIpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0LmFwcGVuZExpdGVy
YWwoInBhdGgoIik7CisKKyAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ1NTU3RyaW5nKHBhdGgpKTsK
KyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisKKyAgICBpZiAoYm94Lmxlbmd0aCgpKSB7CisgICAg
ICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChib3gpOworICAg
IH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIENTU0Jhc2lj
U2hhcGVQYXRoOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcGF0aFN0cmluZzsKKyAg
ICBidWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKCptX2J5dGVTdHJlYW0sIHBhdGhTdHJpbmcsIFVu
YWx0ZXJlZFBhcnNpbmcpOworCisgICAgcmV0dXJuIGJ1aWxkUGF0aFN0cmluZyhtX3dpbmRSdWxl
LCBwYXRoU3RyaW5nLCBtX3JlZmVyZW5jZUJveCA/IG1fcmVmZXJlbmNlQm94LT5jc3NUZXh0KCkg
OiBTdHJpbmcoKSk7Cit9CisKK2Jvb2wgQ1NTQmFzaWNTaGFwZVBhdGg6OmVxdWFscyhjb25zdCBD
U1NCYXNpY1NoYXBlJiBvdGhlclNoYXBlKSBjb25zdAoreworICAgIGlmICghaXM8Q1NTQmFzaWNT
aGFwZVBhdGg+KG90aGVyU2hhcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRv
JiBvdGhlclNoYXBlUGF0aCA9IGRvd25jYXN0PENTU0Jhc2ljU2hhcGVQYXRoPihvdGhlclNoYXBl
KTsKKyAgICBpZiAobV93aW5kUnVsZSAhPSBvdGhlclNoYXBlUGF0aC53aW5kUnVsZSgpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9ieXRlU3RyZWFtID09IG90aGVyU2hh
cGVQYXRoLm1fYnl0ZVN0cmVhbTsKK30KKwogc3RhdGljIFN0cmluZyBidWlsZFBvbHlnb25TdHJp
bmcoY29uc3QgV2luZFJ1bGUmIHdpbmRSdWxlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcG9pbnRz
KQogewogICAgIEFTU0VSVCghKHBvaW50cy5zaXplKCkgJSAyKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NC
YXNpY1NoYXBlcy5oCmluZGV4IDRjYzFlMjQ5ZDA3YjUxOTEzZjJiNzQ0NDVhNjMzMzdkYjllOTUy
NWUuLjQxZDQ5YjFlNzQwN2ExZmY1ZGVjMDk5MWUwMzQwZGM4ZjgwNDNkMWYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NCYXNpY1NoYXBlcy5oCkBAIC0zOSwxMyArMzksMTYgQEAKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKKwogY2xhc3MgQ1NTQmFzaWNTaGFw
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU0Jhc2ljU2hhcGU+IHsKIHB1YmxpYzoKICAgICBlbnVt
IFR5cGUgewogICAgICAgICBDU1NCYXNpY1NoYXBlUG9seWdvblR5cGUsCiAgICAgICAgIENTU0Jh
c2ljU2hhcGVDaXJjbGVUeXBlLAogICAgICAgICBDU1NCYXNpY1NoYXBlRWxsaXBzZVR5cGUsCi0g
ICAgICAgIENTU0Jhc2ljU2hhcGVJbnNldFR5cGUKKyAgICAgICAgQ1NTQmFzaWNTaGFwZUluc2V0
VHlwZSwKKyAgICAgICAgQ1NTQmFzaWNTaGFwZVBhdGhUeXBlCiAgICAgfTsKIAogICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwpAQCAtMjExLDYgKzIxNCwzMCBAQCBwcml2YXRlOgog
ICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCitjbGFzcyBDU1NCYXNpY1NoYXBlUGF0aCBm
aW5hbCA6IHB1YmxpYyBDU1NCYXNpY1NoYXBlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPENT
U0Jhc2ljU2hhcGVQYXRoPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFt
PiYmIGJ5dGVTdHJlYW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDU1NC
YXNpY1NoYXBlUGF0aChXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpKTsKKyAgICB9CisKKyAgICBjb25z
dCBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aERhdGEoKSBjb25zdDsKKworICAgIHZvaWQgc2V0V2lu
ZFJ1bGUoV2luZFJ1bGUgdykgeyBtX3dpbmRSdWxlID0gdzsgfQorICAgIFdpbmRSdWxlIHdpbmRS
dWxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQorCisgICAgdmlydHVhbCBTdHJpbmcg
Y3NzVGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
Q1NTQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIENTU0Jhc2lj
U2hhcGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mJik7CisKKyAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENTU0Jhc2ljU2hhcGVQ
YXRoVHlwZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX2J5
dGVTdHJlYW07CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZSB7IFJVTEVfTk9OWkVSTyB9OworfTsK
KwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfQ1NTX0JBU0lDX1NIQVBFUyhUb1ZhbHVlVHlwZU5hbWUpIFwKQEAgLTIyMiw1ICsyNDksNiBA
QCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQRVMoQ1NTQmFzaWNTaGFwZUlu
c2V0KQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfQkFTSUNfU0hBUEVTKENTU0Jhc2ljU2hh
cGVDaXJjbGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQRVMoQ1NTQmFz
aWNTaGFwZUVsbGlwc2UpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQRVMo
Q1NTQmFzaWNTaGFwZVBvbHlnb24pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19T
SEFQRVMoQ1NTQmFzaWNTaGFwZVBhdGgpCiAKICNlbmRpZiAvLyBDU1NCYXNpY1NoYXBlc19oCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDdjMTEwOTIzZDI0ZDExOWQwZDQ0YzcwZDM2ODg0
ZjU4NDFiYjliOWUuLjc4MTQxMDYwMTBkZGQyZWEwYWJmMzJjMmI5M2JkMGI4MDhmN2Y0OGEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC04Myw2ICs4Myw4IEBACiAjaW5jbHVkZSAiUmVu
ZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5jbHVk
ZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIK
KyNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2Vy
LmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCkBAIC02NjM4LDYgKzY2NDAsMzcgQEAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+
IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3QmIGFy
Z3MKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKK1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJz
ZXI6OnBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQoreworICAg
IHVuc2lnbmVkIHNpemUgPSBhcmdzLnNpemUoKTsKKyAgICBpZiAoc2l6ZSAhPSAxICYmIHNpemUg
IT0gMykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXaW5kUnVsZSB3aW5kUnVsZSA9
IFJVTEVfTk9OWkVSTzsKKworICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3MuY3Vy
cmVudCgpOworICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkIHx8IGFyZ3Vt
ZW50LT5pZCA9PSBDU1NWYWx1ZU5vbnplcm8pIHsKKyAgICAgICAgd2luZFJ1bGUgPSBhcmd1bWVu
dC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkID8gUlVMRV9FVkVOT0REIDogUlVMRV9OT05aRVJPOwor
CisgICAgICAgIGlmICghaXNDb21tYShhcmdzLm5leHQoKSkpCisgICAgICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKKyAgICB9CisKKyAgICBp
ZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtlX3Vu
aXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKKyAgICBpZiAoIWJ1aWxkU1ZHUGF0aEJ5dGVTdHJl
YW1Gcm9tU3RyaW5nKGFyZ3VtZW50LT5zdHJpbmcsICpieXRlU3RyZWFtLCBVbmFsdGVyZWRQYXJz
aW5nKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8Q1NTQmFzaWNTaGFw
ZVBhdGg+IHNoYXBlID0gQ1NTQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZShXVEY6Om1vdmUoYnl0ZVN0
cmVhbSkpOworICAgIHNoYXBlLT5zZXRXaW5kUnVsZSh3aW5kUnVsZSk7CisKKyAgICBhcmdzLm5l
eHQoKTsgLy8gRklYTUU6IHdoeT8KKyAgICByZXR1cm4gc2hhcGU7Cit9CisKIHN0YXRpYyBib29s
IGlzQm94VmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZUlkLCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkKIHsK
ICAgICBzd2l0Y2ggKHZhbHVlSWQpIHsKQEAgLTY3NDgsNiArNjc4MSw4IEBAIFJlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQogICAgICAgICBzaGFw
ZSA9IHBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoKmFyZ3MpOwogICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicG9seWdvbigiKSkKICAgICAgICAgc2hh
cGUgPSBwYXJzZUJhc2ljU2hhcGVQb2x5Z29uKCphcmdzKTsKKyAgICBlbHNlIGlmIChlcXVhbEln
bm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInBhdGgoIikpCisgICAgICAgIHNoYXBl
ID0gcGFyc2VCYXNpY1NoYXBlUGF0aCgqYXJncyk7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmlu
Z0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJpbnNldCgiKSkKICAgICAgICAgc2hhcGUgPSBw
YXJzZUJhc2ljU2hhcGVJbnNldCgqYXJncyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBi
ODAwYWIwZjViY2ZlYTFkNDJkNTFjYzJmN2UwMzQyZThkMTMzZDc1Li4wNDk1MmRiNzAwY2U1NTM4
Y2FlNmMwNWZhMGIzZTAxMDc3MDA2ZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0yNDQs
NiArMjQ0LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJhc2lj
U2hhcGVDaXJjbGUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hh
cGU+IHBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVm
UHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFsdWVM
aXN0Jik7CisgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NT
UGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNT
aGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYpOwogCiAgICAgYm9vbCBwYXJzZUZvbnQoYm9v
bCBpbXBvcnRhbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5k
ZXggZTI2OGJlYjhkZDhiZGViM2M0ZGMyMjRiYzRlNjAwMDc0YTFhMTcyMC4uNmIxZDZjNGMzOWUz
Njc5ZTc3YjBjODBlMzFlYmZkYzIzOWRlNjA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5oCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wgbWF5
Q2F1c2VSZXBhaW50SW5zaWRlVmlld3BvcnQoY29uc3QgSW50UmVjdCogdmlzaWJsZVJlY3QgPSBu
dWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJlbmRlcmVyIHJl
cXVpcmVzIGEgbmV3IHN0YWNraW5nIGNvbnRleHQuCi0gICAgYm9vbCBjcmVhdGVzR3JvdXAoKSBj
b25zdCB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpIHx8IGhhc0ZpbHRlcigp
IHx8IGhhc0JhY2tkcm9wRmlsdGVyKCkgfHwgaGFzQmxlbmRNb2RlKCk7IH0KKyAgICBib29sIGNy
ZWF0ZXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNrKCkg
fHwgaGFzQ2xpcFBhdGgoKSB8fCBoYXNGaWx0ZXIoKSB8fCBoYXNCYWNrZHJvcEZpbHRlcigpIHx8
IGhhc0JsZW5kTW9kZSgpOyB9CiAKICAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBjb25zdCB7IHJl
dHVybiBzdHlsZSgpLm9wYWNpdHkoKSA8IDEuMGY7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS5vcGFjaXR5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwCmluZGV4IDIxZWMyOTkzZTFjY2QxYjA4MTdmOWMx
YTY5NjlhY2IzYWZhNjY2YTkuLjZhMDk5M2I2MjhjZWM4YmQ3NDU2MjVhMjk4ZTY5ZGUzOTA4NGRj
ODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBl
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVzLmNw
cApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0
ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC01OCwzNyArNjAsNiBAQCB2b2lkIEJhc2ljU2hhcGVDZW50ZXJDb29yZGlu
YXRlOjp1cGRhdGVDb21wdXRlZExlbmd0aCgpCiAgICAgbV9jb21wdXRlZExlbmd0aCA9IExlbmd0
aChDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoV1RGOjptb3ZlKG9wKSwgQ2FsY3VsYXRpb25SYW5n
ZUFsbCkpOwogfQogCi1ib29sIEJhc2ljU2hhcGU6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUm
IG90aGVyKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2Vl
biBkaWZmZXJlbnQgc2hhcGVzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHR5cGUoKSAhPSBvdGhl
ci50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEp1c3QgcG9seWdvbnMg
d2l0aCBzYW1lIG51bWJlciBvZiB2ZXJ0aWNlcyBjYW4gYmUgYW5pbWF0ZWQuCi0gICAgaWYgKGlz
PEJhc2ljU2hhcGVQb2x5Z29uPigqdGhpcykKLSAgICAgICAgJiYgKGRvd25jYXN0PEJhc2ljU2hh
cGVQb2x5Z29uPigqdGhpcykudmFsdWVzKCkuc2l6ZSgpICE9IGRvd25jYXN0PEJhc2ljU2hhcGVQ
b2x5Z29uPihvdGhlcikudmFsdWVzKCkuc2l6ZSgpCi0gICAgICAgIHx8IGRvd25jYXN0PEJhc2lj
U2hhcGVQb2x5Z29uPigqdGhpcykud2luZFJ1bGUoKSAhPSBkb3duY2FzdDxCYXNpY1NoYXBlUG9s
eWdvbj4ob3RoZXIpLndpbmRSdWxlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAv
LyBDaXJjbGVzIHdpdGgga2V5d29yZHMgZm9yIHJhZGlpIGNvb3JkaW5hdGVzIGNhbm5vdCBiZSBh
bmltYXRlZC4KLSAgICBpZiAoaXM8QmFzaWNTaGFwZUNpcmNsZT4oKnRoaXMpKSB7Ci0gICAgICAg
IGNvbnN0IGF1dG8mIHRoaXNDaXJjbGUgPSBkb3duY2FzdDxCYXNpY1NoYXBlQ2lyY2xlPigqdGhp
cyk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIG90aGVyQ2lyY2xlID0gZG93bmNhc3Q8QmFzaWNTaGFw
ZUNpcmNsZT4ob3RoZXIpOwotICAgICAgICBpZiAoIXRoaXNDaXJjbGUucmFkaXVzKCkuY2FuQmxl
bmQob3RoZXJDaXJjbGUucmFkaXVzKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0KLQotICAgIC8vIEVsbGlwc2VzIHdpdGgga2V5d29yZHMgZm9yIHJhZGlpIGNvb3JkaW5hdGVz
IGNhbm5vdCBiZSBhbmltYXRlZC4KLSAgICBpZiAoIWlzPEJhc2ljU2hhcGVFbGxpcHNlPigqdGhp
cykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgYXV0byYgdGhpc0VsbGlwc2Ug
PSBkb3duY2FzdDxCYXNpY1NoYXBlRWxsaXBzZT4oKnRoaXMpOwotICAgIGNvbnN0IGF1dG8mIG90
aGVyRWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7Ci0gICAgcmV0
dXJuICh0aGlzRWxsaXBzZS5yYWRpdXNYKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1go
KSkKLSAgICAgICAgJiYgdGhpc0VsbGlwc2UucmFkaXVzWSgpLmNhbkJsZW5kKG90aGVyRWxsaXBz
ZS5yYWRpdXNZKCkpKTsKLX0KLQotCiBib29sIEJhc2ljU2hhcGVDaXJjbGU6Om9wZXJhdG9yPT0o
Y29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBvdGhl
ci50eXBlKCkpCkBAIC0xMzIsNiArMTAzLDE1IEBAIHZvaWQgQmFzaWNTaGFwZUNpcmNsZTo6cGF0
aChQYXRoJiBwYXRoLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KQogICAgICkpOwogfQog
Citib29sIEJhc2ljU2hhcGVDaXJjbGU6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVy
KSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdGhlckNpcmNsZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVD
aXJjbGU+KG90aGVyKTsKKyAgICByZXR1cm4gcmFkaXVzKCkuY2FuQmxlbmQob3RoZXJDaXJjbGUu
cmFkaXVzKCkpOworfQorCiBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUNpcmNsZTo6YmxlbmQo
Y29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAgICBB
U1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CkBAIC0xODQsNiArMTY0LDE1IEBAIHZvaWQg
QmFzaWNTaGFwZUVsbGlwc2U6OnBhdGgoUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3Vu
ZGluZ0JveCkKICAgICAgICAgcmFkaXVzWSAqIDIpKTsKIH0KIAorYm9vbCBCYXNpY1NoYXBlRWxs
aXBzZTo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYg
KHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8mIG90aGVyRWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7Cisg
ICAgcmV0dXJuIHJhZGl1c1goKS5jYW5CbGVuZChvdGhlckVsbGlwc2UucmFkaXVzWCgpKSAmJiBy
YWRpdXNZKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1koKSk7Cit9CisKIFJlZjxCYXNp
Y1NoYXBlPiBCYXNpY1NoYXBlRWxsaXBzZTo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5
cGUoKSk7CkBAIC0yMzQsNiArMjIzLDE1IEBAIHZvaWQgQmFzaWNTaGFwZVBvbHlnb246OnBhdGgo
UGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKICAgICBwYXRoLmNsb3Nl
U3VicGF0aCgpOwogfQogCitib29sIEJhc2ljU2hhcGVQb2x5Z29uOjpjYW5CbGVuZChjb25zdCBC
YXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5cGUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3RoZXJQb2x5Z29uID0gZG93
bmNhc3Q8QmFzaWNTaGFwZVBvbHlnb24+KG90aGVyKTsKKyAgICByZXR1cm4gdmFsdWVzKCkuc2l6
ZSgpID09IG90aGVyUG9seWdvbi52YWx1ZXMoKS5zaXplKCkgJiYgd2luZFJ1bGUoKSA9PSBvdGhl
clBvbHlnb24ud2luZFJ1bGUoKTsKK30KKwogUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5
Z29uOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXNzKSBjb25z
dAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gb3RoZXIudHlwZSgpKTsKQEAgLTI1Nyw2ICsyNTUs
NTUgQEAgUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBCYXNp
Y1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXMKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VO
b25OdWxsKCk7CiB9CiAKK0Jhc2ljU2hhcGVQYXRoOjpCYXNpY1NoYXBlUGF0aChzdGQ6OnVuaXF1
ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+JiYgYnl0ZVN0cmVhbSkKKyAgICA6IG1fYnl0ZVN0cmVh
bShXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpCit7Cit9CisKK3ZvaWQgQmFzaWNTaGFwZVBhdGg6OnBh
dGgoUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBBU1NF
UlQocGF0aC5pc0VtcHR5KCkpOworICAgIGJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKCptX2J5dGVT
dHJlYW0sIHBhdGgpOworICAgIHBhdGgudHJhbnNsYXRlKHRvRmxvYXRTaXplKGJvdW5kaW5nQm94
LmxvY2F0aW9uKCkpKTsKK30KKworYm9vbCBCYXNpY1NoYXBlUGF0aDo6b3BlcmF0b3I9PShjb25z
dCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5
cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgYXV0byYgb3RoZXJQYXRo
ID0gZG93bmNhc3Q8QmFzaWNTaGFwZVBhdGg+KG90aGVyKTsKKyAgICBpZiAobV93aW5kUnVsZSAh
PSBvdGhlclBhdGgubV93aW5kUnVsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuICptX2J5dGVTdHJlYW0gPT0gKm90aGVyUGF0aC5tX2J5dGVTdHJlYW07Cit9CisKK2Jvb2wg
QmFzaWNTaGFwZVBhdGg6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25zdAor
eworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBhdXRvJiBvdGhlclBhdGggPSBkb3duY2FzdDxCYXNpY1NoYXBlUGF0aD4ob3RoZXIp
OworICAgIGlmICh3aW5kUnVsZSgpICE9IG90aGVyUGF0aC53aW5kUnVsZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGNhbkJsZW5kU1ZHUGF0aEJ5dGVTdHJlYW1z
KCptX2J5dGVTdHJlYW0sICpvdGhlclBhdGgucGF0aERhdGEoKSk7Cit9CisKK1JlZjxCYXNpY1No
YXBlPiBCYXNpY1NoYXBlUGF0aDo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gZnJvbS50eXBlKCkpOwor
CisgICAgY29uc3QgYXV0byYgZnJvbVBhdGggPSBkb3duY2FzdDxCYXNpY1NoYXBlUGF0aD4oZnJv
bSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IHJlc3VsdGluZ1Bh
dGhCeXRlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7CisgICAgYnVp
bGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKCpmcm9tUGF0aC5tX2J5dGVTdHJlYW0sICptX2J5
dGVTdHJlYW0sICpyZXN1bHRpbmdQYXRoQnl0ZXMsIHByb2dyZXNzKTsKKworICAgIFJlZlB0cjxC
YXNpY1NoYXBlUGF0aD4gcmVzdWx0ID0gIEJhc2ljU2hhcGVQYXRoOjpjcmVhdGUoV1RGOjptb3Zl
KHJlc3VsdGluZ1BhdGhCeXRlcykpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZU5vbk51bGwo
KTsKK30KKwogYm9vbCBCYXNpY1NoYXBlSW5zZXQ6Om9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFw
ZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCkBAIC0y
OTUsNiArMzQyLDExIEBAIHZvaWQgQmFzaWNTaGFwZUluc2V0OjpwYXRoKFBhdGgmIHBhdGgsIGNv
bnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpCiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChGbG9h
dFJvdW5kZWRSZWN0KHJlY3QsIHJhZGlpKSk7CiB9CiAKK2Jvb2wgQmFzaWNTaGFwZUluc2V0Ojpj
YW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gdHlw
ZSgpID09IG90aGVyLnR5cGUoKTsKK30KKwogUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVJbnNl
dDo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QK
IHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oCmluZGV4IGQ4OGM3YWJkYThlOTBjN2M1NmVl
ZmMxYzUxZTQzNjVhNTY4Yjc3MjIuLjAyNzg2M2YxMTNiN2ZmM2E0YzE3N2ZkNzlkZGM0YTA2ZTVj
NTZiNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5o
CkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UmVjdDsK
IGNsYXNzIFBhdGg7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsK
IAogY2xhc3MgQmFzaWNTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2ljU2hhcGU+IHsKIHB1
YmxpYzoKQEAgLTUxLDE1ICs1MiwxNiBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFR5cGUgewogICAg
ICAgICBCYXNpY1NoYXBlUG9seWdvblR5cGUsCisgICAgICAgIEJhc2ljU2hhcGVQYXRoVHlwZSwK
ICAgICAgICAgQmFzaWNTaGFwZUNpcmNsZVR5cGUsCiAgICAgICAgIEJhc2ljU2hhcGVFbGxpcHNl
VHlwZSwKICAgICAgICAgQmFzaWNTaGFwZUluc2V0VHlwZQogICAgIH07CiAKLSAgICBib29sIGNh
bkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdDsKLQogICAgIHZpcnR1YWwgdm9pZCBwYXRo
KFBhdGgmLCBjb25zdCBGbG9hdFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBXaW5kUnVsZSB3aW5k
UnVsZSgpIGNvbnN0IHsgcmV0dXJuIFJVTEVfTk9OWkVSTzsgfQorCisgICAgdmlydHVhbCBib29s
IGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWY8
QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkgY29uc3QgPSAwOwog
CiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCA9IDA7CkBAIC0xNzEsMTQgKzE3MywxNSBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzZXRDZW50ZXJZKEJhc2ljU2hhcGVDZW50ZXJDb29yZGluYXRl
IGNlbnRlclkpIHsgbV9jZW50ZXJZID0gV1RGOjptb3ZlKGNlbnRlclkpOyB9CiAgICAgdm9pZCBz
ZXRSYWRpdXMoQmFzaWNTaGFwZVJhZGl1cyByYWRpdXMpIHsgbV9yYWRpdXMgPSBXVEY6Om1vdmUo
cmFkaXVzKTsgfQogCitwcml2YXRlOgorICAgIEJhc2ljU2hhcGVDaXJjbGUoKSB7IH0KKwogICAg
IHZpcnR1YWwgdm9pZCBwYXRoKFBhdGgmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKICAg
ICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNpY1NoYXBlJiwgZG91Ymxl
KSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gQmFzaWNTaGFwZUNpcmNsZVR5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0g
ICAgQmFzaWNTaGFwZUNpcmNsZSgpIHsgfQorICAgIHZpcnR1YWwgYm9vbCBjYW5CbGVuZChjb25z
dCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBCYXNpY1NoYXBlQ2VudGVyQ29v
cmRpbmF0ZSBtX2NlbnRlclg7CiAgICAgQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUgbV9jZW50
ZXJZOwpAQCAtMjAwLDE1ICsyMDMsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzWChC
YXNpY1NoYXBlUmFkaXVzIHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gV1RGOjptb3ZlKHJhZGl1c1gp
OyB9CiAgICAgdm9pZCBzZXRSYWRpdXNZKEJhc2ljU2hhcGVSYWRpdXMgcmFkaXVzWSkgeyBtX3Jh
ZGl1c1kgPSBXVEY6Om1vdmUocmFkaXVzWSk7IH0KIAorcHJpdmF0ZToKKyAgICBCYXNpY1NoYXBl
RWxsaXBzZSgpIHsgfQorCiAgICAgdmlydHVhbCB2b2lkIHBhdGgoUGF0aCYsIGNvbnN0IEZsb2F0
UmVjdCYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kKGNvbnN0IEJhc2lj
U2hhcGUmKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVu
ZChjb25zdCBCYXNpY1NoYXBlJiwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZpcnR1
YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQmFzaWNTaGFwZUVsbGlwc2VU
eXBlOyB9CiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNv
bnN0IG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEJhc2ljU2hhcGVFbGxpcHNlKCkgeyB9Ci0K
ICAgICBCYXNpY1NoYXBlQ2VudGVyQ29vcmRpbmF0ZSBtX2NlbnRlclg7CiAgICAgQmFzaWNTaGFw
ZUNlbnRlckNvb3JkaW5hdGUgbV9jZW50ZXJZOwogICAgIEJhc2ljU2hhcGVSYWRpdXMgbV9yYWRp
dXNYOwpAQCAtMjI2LDIxICsyMzEsNTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0V2luZFJ1bGUo
V2luZFJ1bGUgd2luZFJ1bGUpIHsgbV93aW5kUnVsZSA9IHdpbmRSdWxlOyB9CiAgICAgdm9pZCBh
cHBlbmRQb2ludChMZW5ndGggeCwgTGVuZ3RoIHkpIHsgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92
ZSh4KSk7IG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUoeSkpOyB9CiAKKyAgICB2aXJ0dWFsIFdp
bmRSdWxlIHdpbmRSdWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV93aW5kUnVsZTsgfQor
Citwcml2YXRlOgorICAgIEJhc2ljU2hhcGVQb2x5Z29uKCkKKyAgICB7CisgICAgfQorCiAgICAg
dmlydHVhbCB2b2lkIHBhdGgoUGF0aCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJyaWRlOwotICAg
IHZpcnR1YWwgUmVmPEJhc2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3VibGUp
IGNvbnN0IG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2luZFJ1bGU7IH0KKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxl
bmQoY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmPEJh
c2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRl
OwogCiAgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNp
Y1NoYXBlUG9seWdvblR5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBC
YXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKKyAgICBXaW5kUnVsZSBtX3dpbmRSdWxlIHsg
UlVMRV9OT05aRVJPIH07CisgICAgVmVjdG9yPExlbmd0aD4gbV92YWx1ZXM7Cit9OworCitjbGFz
cyBCYXNpY1NoYXBlUGF0aCBmaW5hbCA6IHB1YmxpYyBCYXNpY1NoYXBlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPEJhc2ljU2hhcGVQYXRoPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR1Bh
dGhCeXRlU3RyZWFtPiYmIGJ5dGVTdHJlYW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBCYXNpY1NoYXBlUGF0aChXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpKTsKKyAgICB9CisK
KyAgICB2b2lkIHNldFdpbmRSdWxlKFdpbmRSdWxlIHdpbmRSdWxlKSB7IG1fd2luZFJ1bGUgPSB3
aW5kUnVsZTsgfQorICAgIHZpcnR1YWwgV2luZFJ1bGUgd2luZFJ1bGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX3dpbmRSdWxlOyB9CisKKyAgICBjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSog
cGF0aERhdGEoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTdHJlYW0uZ2V0KCk7IH0KKwogcHJpdmF0
ZToKLSAgICBCYXNpY1NoYXBlUG9seWdvbigpCi0gICAgICAgIDogbV93aW5kUnVsZShSVUxFX05P
TlpFUk8pCi0gICAgeyB9CisgICAgQmFzaWNTaGFwZVBhdGgoc3RkOjp1bmlxdWVfcHRyPFNWR1Bh
dGhCeXRlU3RyZWFtPiYmKTsKIAotICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7Ci0gICAgVmVjdG9y
PExlbmd0aD4gbV92YWx1ZXM7CisgICAgdmlydHVhbCB2b2lkIHBhdGgoUGF0aCYsIGNvbnN0IEZs
b2F0UmVjdCYpIG92ZXJyaWRlOworCisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kKGNvbnN0IEJh
c2ljU2hhcGUmKSBjb25zdCBvdmVycmlkZTsKKyAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBi
bGVuZChjb25zdCBCYXNpY1NoYXBlJiwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsKKworICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQmFzaWNTaGFwZVBhdGhU
eXBlOyB9CisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNv
bnN0OworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX2J5dGVTdHJl
YW07CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZSB7IFJVTEVfTk9OWkVSTyB9OwogfTsKIAogY2xh
c3MgQmFzaWNTaGFwZUluc2V0IGZpbmFsIDogcHVibGljIEJhc2ljU2hhcGUgewpAQCAtMjY3LDE1
ICszMDEsMTcgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm90dG9tUmlnaHRSYWRpdXMoTGVuZ3Ro
U2l6ZSByYWRpdXMpIHsgbV9ib3R0b21SaWdodFJhZGl1cyA9IFdURjo6bW92ZShyYWRpdXMpOyB9
CiAgICAgdm9pZCBzZXRCb3R0b21MZWZ0UmFkaXVzKExlbmd0aFNpemUgcmFkaXVzKSB7IG1fYm90
dG9tTGVmdFJhZGl1cyA9IFdURjo6bW92ZShyYWRpdXMpOyB9CiAKK3ByaXZhdGU6CisgICAgQmFz
aWNTaGFwZUluc2V0KCkgeyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGF0aChQYXRoJiwgY29uc3Qg
RmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmQoY29uc3Qg
QmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmPEJhc2ljU2hhcGU+
IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAg
dmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNpY1NoYXBlSW5z
ZXRUeXBlOyB9CiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYp
IGNvbnN0IG92ZXJyaWRlOwogCi1wcml2YXRlOgotICAgIEJhc2ljU2hhcGVJbnNldCgpIHsgfQot
CiAgICAgTGVuZ3RoIG1fcmlnaHQ7CiAgICAgTGVuZ3RoIG1fdG9wOwogICAgIExlbmd0aCBtX2Jv
dHRvbTsKQEAgLTI5Nyw2ICszMzMsNyBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCiBT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJhc2ljU2hhcGVDaXJjbGUsIEJhc2lj
U2hhcGU6OkJhc2ljU2hhcGVDaXJjbGVUeXBlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CQVNJ
Q19TSEFQRShCYXNpY1NoYXBlRWxsaXBzZSwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUVsbGlwc2VU
eXBlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CQVNJQ19TSEFQRShCYXNpY1NoYXBlUG9seWdv
biwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVBvbHlnb25UeXBlKQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CQVNJQ19TSEFQRShCYXNpY1NoYXBlUGF0aCwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZVBh
dGhUeXBlKQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CQVNJQ19TSEFQRShCYXNpY1NoYXBlSW5z
ZXQsIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNldFR5cGUpCiAKICNlbmRpZiAvLyBCYXNpY1No
YXBlc19oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcAppbmRleCA3YWE4NGU4Zjdh
MGYxNGJlMmM1NGQ1OTdkOTI1ODQxYjVlZTU2OTQ3Li5mNTlmY2M4OGI4NDMyZThiNjgyOTQyOWY2
ZDIyZGRkOTgyNzk2Mjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJs
ZW5kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKQEAg
LTMwLDE3ICszMCwyMyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGJvb2wgU1ZHUGF0aEJsZW5k
ZXI6OmFkZEFuaW1hdGVkUGF0aChTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRoU291
cmNlJiB0b1NvdXJjZSwgU1ZHUGF0aENvbnN1bWVyJiBjb25zdW1lciwgdW5zaWduZWQgcmVwZWF0
Q291bnQpCiB7Ci0gICAgU1ZHUGF0aEJsZW5kZXIgYmxlbmRlcihmcm9tU291cmNlLCB0b1NvdXJj
ZSwgY29uc3VtZXIpOworICAgIFNWR1BhdGhCbGVuZGVyIGJsZW5kZXIoZnJvbVNvdXJjZSwgdG9T
b3VyY2UsICZjb25zdW1lcik7CiAgICAgcmV0dXJuIGJsZW5kZXIuYWRkQW5pbWF0ZWRQYXRoKHJl
cGVhdENvdW50KTsKIH0KIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZFBhdGgo
U1ZHUGF0aFNvdXJjZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIFNWR1Bh
dGhDb25zdW1lciYgY29uc3VtZXIsIGZsb2F0IHByb2dyZXNzKQogewotICAgIFNWR1BhdGhCbGVu
ZGVyIGJsZW5kZXIoZnJvbVNvdXJjZSwgdG9Tb3VyY2UsIGNvbnN1bWVyKTsKKyAgICBTVkdQYXRo
QmxlbmRlciBibGVuZGVyKGZyb21Tb3VyY2UsIHRvU291cmNlLCAmY29uc3VtZXIpOwogICAgIHJl
dHVybiBibGVuZGVyLmJsZW5kQW5pbWF0ZWRQYXRoKHByb2dyZXNzKTsKIH0KIAotU1ZHUGF0aEJs
ZW5kZXI6OlNWR1BhdGhCbGVuZGVyKFNWR1BhdGhTb3VyY2UmIGZyb21Tb3VyY2UsIFNWR1BhdGhT
b3VyY2UmIHRvU291cmNlLCBTVkdQYXRoQ29uc3VtZXImIGNvbnN1bWVyKQorYm9vbCBTVkdQYXRo
QmxlbmRlcjo6Y2FuQmxlbmRQYXRocyhTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSkKK3sKKyAgICBTVkdQYXRoQmxlbmRlciBibGVuZGVyKGZyb21Tb3Vy
Y2UsIHRvU291cmNlKTsKKyAgICByZXR1cm4gYmxlbmRlci5jYW5CbGVuZFBhdGhzKCk7Cit9CisK
K1NWR1BhdGhCbGVuZGVyOjpTVkdQYXRoQmxlbmRlcihTVkdQYXRoU291cmNlJiBmcm9tU291cmNl
LCBTVkdQYXRoU291cmNlJiB0b1NvdXJjZSwgU1ZHUGF0aENvbnN1bWVyKiBjb25zdW1lcikKICAg
ICA6IG1fZnJvbVNvdXJjZShmcm9tU291cmNlKQogICAgICwgbV90b1NvdXJjZSh0b1NvdXJjZSkK
ICAgICAsIG1fY29uc3VtZXIoY29uc3VtZXIpCkBAIC0xMTgsNyArMTI0LDEwIEBAIGJvb2wgU1ZH
UGF0aEJsZW5kZXI6OmJsZW5kTW92ZVRvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKICAgICAgICAg
fHwgIW1fdG9Tb3VyY2UucGFyc2VNb3ZlVG9TZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLm1vdmVUbyhibGVuZEFuaW1hdGVkRmxv
YXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgZmFsc2Us
IG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAg
ICBpZiAoIW1fY29uc3VtZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9jb25zdW1l
ci0+bW92ZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJn
ZXRQb2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBt
X2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJl
bnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01v
ZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBv
aW50ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTEzMiw3ICsxNDEsMTAg
QEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9TZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1NlZ21lbnQodG9UYXJnZXRQb2lu
dCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIubGluZVRvKGJsZW5k
QW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jl
c3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7
CisgICAgaWYgKCFtX2NvbnN1bWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fY29u
c3VtZXItPmxpbmVUbyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRv
VGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zy
b21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQ
b2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90b01vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVudFBvaW50
ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTE0Niw3ICsxNTgsMTAgQEAg
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRMaW5lVG9Ib3Jpem9udGFsU2VnbWVudChmbG9hdCBw
cm9ncmVzcykKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VMaW5lVG9Ib3Jpem9udGFsU2Vn
bWVudCh0b1gpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLmxpbmVU
b0hvcml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWCwgdG9YLCBCbGVu
ZEhvcml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zy
b21Nb2RlIDogbV90b01vZGUpOworICAgIGlmICghbV9jb25zdW1lcikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBtX2NvbnN1bWVyLT5saW5lVG9Ib3Jpem9udGFsKGJsZW5kQW5pbWF0ZWRE
aW1lbnNvbmFsRmxvYXQoZnJvbVgsIHRvWCwgQmxlbmRIb3Jpem9udGFsLCBwcm9ncmVzcyksIG1f
aXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBt
X2Zyb21DdXJyZW50UG9pbnQuc2V0WChtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMg
PyBmcm9tWCA6IG1fZnJvbUN1cnJlbnRQb2ludC54KCkgKyBmcm9tWCk7CiAgICAgbV90b0N1cnJl
bnRQb2ludC5zZXRYKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyB0b1ggOiBtX3Rv
Q3VycmVudFBvaW50LngoKSArIHRvWCk7CiAgICAgcmV0dXJuIHRydWU7CkBAIC0xNjAsNyArMTc1
LDEwIEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUxpbmVUb1ZlcnRpY2Fs
U2VnbWVudCh0b1kpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1bWVyLmxp
bmVUb1ZlcnRpY2FsKGJsZW5kQW5pbWF0ZWREaW1lbnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxl
bmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJv
bU1vZGUgOiBtX3RvTW9kZSk7CisgICAgaWYgKCFtX2NvbnN1bWVyKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKworICAgIG1fY29uc3VtZXItPmxpbmVUb1ZlcnRpY2FsKGJsZW5kQW5pbWF0ZWREaW1l
bnNvbmFsRmxvYXQoZnJvbVksIHRvWSwgQmxlbmRWZXJ0aWNhbCwgcHJvZ3Jlc3MpLCBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9t
Q3VycmVudFBvaW50LnNldFkobV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJv
bVkgOiBtX2Zyb21DdXJyZW50UG9pbnQueSgpICsgZnJvbVkpOwogICAgIG1fdG9DdXJyZW50UG9p
bnQuc2V0WShtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9ZIDogbV90b0N1cnJl
bnRQb2ludC55KCkgKyB0b1kpOwogICAgIHJldHVybiB0cnVlOwpAQCAtMTc4LDcgKzE5NiwxMCBA
QCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnQoZmxvYXQgcHJv
Z3Jlc3MpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb0N1YmljU2VnbWVudCh0
b1BvaW50MSwgdG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBtX2NvbnN1bWVyLmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChm
cm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAorICAgIGlmICghbV9jb25zdW1lcikKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWMoYmxlbmRB
bmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwgdG9Qb2ludDEsIHByb2dyZXNzKSwKICAgICAg
ICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNz
KSwKICAgICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1Rh
cmdldFBvaW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9u
ID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKQEAgLTE5Nyw3ICsyMTgsMTAgQEAgYm9vbCBTVkdQ
YXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KGZsb2F0IHByb2dyZXNz
KQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9DdWJpY1Ntb290aFNlZ21lbnQo
dG9Qb2ludDIsIHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBt
X2NvbnN1bWVyLmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9t
UG9pbnQyLCB0b1BvaW50MiwgcHJvZ3Jlc3MpLAorICAgIGlmICghbV9jb25zdW1lcikKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRvQ3ViaWNTbW9vdGgoYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MiwgdG9Qb2ludDIsIHByb2dyZXNzKSwKICAg
ICAgICAgYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBv
aW50LCBwcm9ncmVzcyksCiAgICAgICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9m
cm9tTW9kZSA6IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50
UG9pbnQgKyBmcm9tVGFyZ2V0UG9pbnQ7CkBAIC0yMTUsNyArMjM5LDEwIEBAIGJvb2wgU1ZHUGF0
aEJsZW5kZXI6OmJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiAg
ICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQodG9Qb2lu
dDEsIHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnN1
bWVyLmN1cnZlVG9RdWFkcmF0aWMoYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVBvaW50MSwg
dG9Qb2ludDEsIHByb2dyZXNzKSwKKyAgICBpZiAoIW1fY29uc3VtZXIpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgbV9jb25zdW1lci0+Y3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVk
RmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAogICAgICAgICBibGVu
ZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dy
ZXNzKSwKICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDog
bV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1
dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZy
b21UYXJnZXRQb2ludDsKQEAgLTIzMSw3ICsyNTgsMTAgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6
YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudChmbG9hdCBwcm9ncmVzcykKICAgICAg
ICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCh0b1Rh
cmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb25zdW1lci5jdXJ2
ZVRvUXVhZHJhdGljU21vb3RoKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2lu
dCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJzdEhhbGZPZkFuaW1hdGlvbiA/
IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgaWYgKCFtX2NvbnN1bWVyKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIG1fY29uc3VtZXItPmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxl
bmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9n
cmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2Rl
KTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQgPSBtX2Zyb21Nb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMgPyBmcm9tVGFyZ2V0UG9pbnQgOiBtX2Zyb21DdXJyZW50UG9pbnQgKyBmcm9tVGFyZ2V0
UG9pbnQ7CiAgICAgbV90b0N1cnJlbnRQb2ludCA9IG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMgPyB0b1RhcmdldFBvaW50IDogbV90b0N1cnJlbnRQb2ludCArIHRvVGFyZ2V0UG9pbnQ7
CiAgICAgcmV0dXJuIHRydWU7CkBAIC0yNTUsMTEgKzI4NSwxNCBAQCBib29sIFNWR1BhdGhCbGVu
ZGVyOjpibGVuZEFyY1RvU2VnbWVudChmbG9hdCBwcm9ncmVzcykKICAgICAgICAgfHwgIW1fdG9T
b3VyY2UucGFyc2VBcmNUb1NlZ21lbnQodG9SeCwgdG9SeSwgdG9BbmdsZSwgdG9MYXJnZUFyYywg
dG9Td2VlcCwgdG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAorICAgIGlm
ICghbV9jb25zdW1lcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKICAgICBpZiAobV9hZGRUeXBl
c0NvdW50KSB7CiAgICAgICAgIEFTU0VSVChtX2Zyb21Nb2RlID09IG1fdG9Nb2RlKTsKICAgICAg
ICAgRmxvYXRQb2ludCBzY2FsZWRUb1RhcmdldFBvaW50ID0gdG9UYXJnZXRQb2ludDsKICAgICAg
ICAgc2NhbGVkVG9UYXJnZXRQb2ludC5zY2FsZShtX2FkZFR5cGVzQ291bnQsIG1fYWRkVHlwZXND
b3VudCk7Ci0gICAgICAgIG1fY29uc3VtZXIuYXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRkVHlw
ZXNDb3VudCwKKyAgICAgICAgbV9jb25zdW1lci0+YXJjVG8oZnJvbVJ4ICsgdG9SeCAqIG1fYWRk
VHlwZXNDb3VudCwKICAgICAgICAgICAgIGZyb21SeSArIHRvUnkgKiBtX2FkZFR5cGVzQ291bnQs
CiAgICAgICAgICAgICBmcm9tQW5nbGUgKyB0b0FuZ2xlICogbV9hZGRUeXBlc0NvdW50LAogICAg
ICAgICAgICAgZnJvbUxhcmdlQXJjIHx8IHRvTGFyZ2VBcmMsCkBAIC0yNjcsNyArMzAwLDcgQEAg
Ym9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiAg
ICAgICAgICAgICBmcm9tVGFyZ2V0UG9pbnQgKyBzY2FsZWRUb1RhcmdldFBvaW50LAogICAgICAg
ICAgICAgbV9mcm9tTW9kZSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgbV9jb25zdW1lci5hcmNU
byhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNzKSwKKyAgICAgICAgbV9jb25zdW1lci0+YXJj
VG8oYmxlbmQoZnJvbVJ4LCB0b1J4LCBwcm9ncmVzcyksCiAgICAgICAgICAgICBibGVuZChmcm9t
UnksIHRvUnksIHByb2dyZXNzKSwKICAgICAgICAgICAgIGJsZW5kKGZyb21BbmdsZSwgdG9Bbmds
ZSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBm
cm9tTGFyZ2VBcmMgOiB0b0xhcmdlQXJjLApAQCAtMzEyLDYgKzM0NSw4NyBAQCBib29sIFNWR1Bh
dGhCbGVuZGVyOjphZGRBbmltYXRlZFBhdGgodW5zaWduZWQgcmVwZWF0Q291bnQpCiAgICAgcmV0
dXJuIGJsZW5kQW5pbWF0ZWRQYXRoKDApOwogfQogCitib29sIFNWR1BhdGhCbGVuZGVyOjpjYW5C
bGVuZFBhdGhzKCkKK3sKKyAgICBmbG9hdCBwcm9ncmVzcyA9IDAuNTsKKyAgICBib29sIGZyb21T
b3VyY2VIYWREYXRhID0gbV9mcm9tU291cmNlLmhhc01vcmVEYXRhKCk7CisgICAgd2hpbGUgKG1f
dG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkgeworICAgICAgICBTVkdQYXRoU2VnVHlwZSBmcm9tQ29t
bWFuZDsKKyAgICAgICAgU1ZHUGF0aFNlZ1R5cGUgdG9Db21tYW5kOworICAgICAgICBpZiAoKGZy
b21Tb3VyY2VIYWREYXRhICYmICFtX2Zyb21Tb3VyY2UucGFyc2VTVkdTZWdtZW50VHlwZShmcm9t
Q29tbWFuZCkpIHx8ICFtX3RvU291cmNlLnBhcnNlU1ZHU2VnbWVudFR5cGUodG9Db21tYW5kKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX3RvTW9kZSA9IGNvb3JkaW5h
dGVNb2RlT2ZDb21tYW5kKHRvQ29tbWFuZCk7CisgICAgICAgIG1fZnJvbU1vZGUgPSBmcm9tU291
cmNlSGFkRGF0YSA/IGNvb3JkaW5hdGVNb2RlT2ZDb21tYW5kKGZyb21Db21tYW5kKSA6IG1fdG9N
b2RlOworICAgICAgICBpZiAobV9mcm9tTW9kZSAhPSBtX3RvTW9kZSAmJiBtX2FkZFR5cGVzQ291
bnQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGZyb21Tb3VyY2VI
YWREYXRhICYmICFpc1NlZ21lbnRFcXVhbChmcm9tQ29tbWFuZCwgdG9Db21tYW5kLCBtX2Zyb21N
b2RlLCBtX3RvTW9kZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgc3dp
dGNoICh0b0NvbW1hbmQpIHsKKyAgICAgICAgY2FzZSBQYXRoU2VnTW92ZVRvUmVsOgorICAgICAg
ICBjYXNlIFBhdGhTZWdNb3ZlVG9BYnM6CisgICAgICAgICAgICBpZiAoIWJsZW5kTW92ZVRvU2Vn
bWVudChwcm9ncmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1JlbDoKKyAgICAgICAgY2FzZSBQ
YXRoU2VnTGluZVRvQWJzOgorICAgICAgICAgICAgaWYgKCFibGVuZExpbmVUb1NlZ21lbnQocHJv
Z3Jlc3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsUmVsOgorICAgICAgICBjYXNl
IFBhdGhTZWdMaW5lVG9Ib3Jpem9udGFsQWJzOgorICAgICAgICAgICAgaWYgKCFibGVuZExpbmVU
b0hvcml6b250YWxTZWdtZW50KHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRvVmVydGlj
YWxSZWw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb1ZlcnRpY2FsQWJzOgorICAgICAgICAg
ICAgaWYgKCFibGVuZExpbmVUb1ZlcnRpY2FsU2VnbWVudChwcm9ncmVzcykpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0
aFNlZ0Nsb3NlUGF0aDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhTZWdD
dXJ2ZVRvQ3ViaWNSZWw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY0FiczoKKyAg
ICAgICAgICAgIGlmICghYmxlbmRDdXJ2ZVRvQ3ViaWNTZWdtZW50KHByb2dyZXNzKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBQYXRoU2VnQ3VydmVUb0N1YmljU21vb3RoUmVsOgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2
ZVRvQ3ViaWNTbW9vdGhBYnM6CisgICAgICAgICAgICBpZiAoIWJsZW5kQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudChwcm9ncmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNSZWw6
CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNBYnM6CisgICAgICAgICAgICBp
ZiAoIWJsZW5kQ3VydmVUb1F1YWRyYXRpY1NlZ21lbnQocHJvZ3Jlc3MpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhT
ZWdDdXJ2ZVRvUXVhZHJhdGljU21vb3RoUmVsOgorICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRv
UXVhZHJhdGljU21vb3RoQWJzOgorICAgICAgICAgICAgaWYgKCFibGVuZEN1cnZlVG9RdWFkcmF0
aWNTbW9vdGhTZWdtZW50KHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQXJjUmVsOgorICAgICAg
ICBjYXNlIFBhdGhTZWdBcmNBYnM6CisgICAgICAgICAgICBpZiAoIWJsZW5kQXJjVG9TZWdtZW50
KHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnVW5rbm93bjoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghZnJvbVNvdXJjZUhhZERhdGEpCisgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG1fZnJvbVNvdXJjZS5oYXNNb3JlRGF0YSgp
ICE9IG1fdG9Tb3VyY2UuaGFzTW9yZURhdGEoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgaWYgKCFtX2Zyb21Tb3VyY2UuaGFzTW9yZURhdGEoKSB8fCAhbV90b1NvdXJjZS5o
YXNNb3JlRGF0YSgpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIHRydWU7Cit9CisKIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKGZs
b2F0IHByb2dyZXNzKQogewogICAgIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID0gcHJvZ3Jl
c3MgPCAwLjVmOwpAQCAtMzUzLDcgKzQ2Nyw3IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5k
QW5pbWF0ZWRQYXRoKGZsb2F0IHByb2dyZXNzKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFBhdGhTZWdDbG9zZVBhdGg6Ci0g
ICAgICAgICAgICBtX2NvbnN1bWVyLmNsb3NlUGF0aCgpOworICAgICAgICAgICAgbV9jb25zdW1l
ci0+Y2xvc2VQYXRoKCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBQYXRoU2Vn
Q3VydmVUb0N1YmljUmVsOgogICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNBYnM6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5kZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5oCmluZGV4IDUwNWQxMDgwNzE0MGY1ZDQwNDdmYmI4
NWI3MTAxNTlkNmNiNWJjNzIuLmRhZTdlMTBhMzQ0ZDMzMmViODZiZDA0Yjk1ZjQ4ODBlYTViMWMz
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5oCkBAIC0zOSw4ICszOSwxMiBAQCBw
dWJsaWM6CiAgICAgc3RhdGljIGJvb2wgYWRkQW5pbWF0ZWRQYXRoKFNWR1BhdGhTb3VyY2UmIGZy
b20sIFNWR1BhdGhTb3VyY2UmIHRvLCBTVkdQYXRoQ29uc3VtZXImLCB1bnNpZ25lZCByZXBlYXRD
b3VudCk7CiAgICAgc3RhdGljIGJvb2wgYmxlbmRBbmltYXRlZFBhdGgoU1ZHUGF0aFNvdXJjZSYg
ZnJvbSwgU1ZHUGF0aFNvdXJjZSYgdG8sIFNWR1BhdGhDb25zdW1lciYsIGZsb2F0KTsKIAorICAg
IHN0YXRpYyBib29sIGNhbkJsZW5kUGF0aHMoU1ZHUGF0aFNvdXJjZSYgZnJvbSwgU1ZHUGF0aFNv
dXJjZSYgdG8pOworCiBwcml2YXRlOgotICAgIFNWR1BhdGhCbGVuZGVyKFNWR1BhdGhTb3VyY2Um
LCBTVkdQYXRoU291cmNlJiwgU1ZHUGF0aENvbnN1bWVyJik7CisgICAgU1ZHUGF0aEJsZW5kZXIo
U1ZHUGF0aFNvdXJjZSYsIFNWR1BhdGhTb3VyY2UmLCBTVkdQYXRoQ29uc3VtZXIqID0gbnVsbHB0
cik7CisKKyAgICBib29sIGNhbkJsZW5kUGF0aHMoKTsKIAogICAgIGJvb2wgYWRkQW5pbWF0ZWRQ
YXRoKHVuc2lnbmVkIHJlcGVhdENvdW50KTsKICAgICBib29sIGJsZW5kQW5pbWF0ZWRQYXRoKGZs
b2F0IHByb2dyZXNzKTsKQEAgLTYwLDcgKzY0LDcgQEAgcHJpdmF0ZToKIAogICAgIFNWR1BhdGhT
b3VyY2UmIG1fZnJvbVNvdXJjZTsKICAgICBTVkdQYXRoU291cmNlJiBtX3RvU291cmNlOwotICAg
IFNWR1BhdGhDb25zdW1lciYgbV9jb25zdW1lcjsKKyAgICBTVkdQYXRoQ29uc3VtZXIqIG1fY29u
c3VtZXI7IC8vIEEgbnVsbCBjb25zdW1lciBpbmRpY2F0ZXMgdGhhdCB3ZSdyZSBqdXN0IGNoZWNr
aW5nIGJsZW5kYWJpbGl0eS4KIAogICAgIEZsb2F0UG9pbnQgbV9mcm9tQ3VycmVudFBvaW50Owog
ICAgIEZsb2F0UG9pbnQgbV90b0N1cnJlbnRQb2ludDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhC
eXRlU3RyZWFtLmgKaW5kZXggYTgzYWZlZjliZDMxNzdiOThiMjc4MjBhMjUzZDIxYjg0OGM2YTI0
MC4uMGJkN2I3NTMzYmJhZDk3OGQzMGU5OGE5OGFjNWQ3ZDgxMzMxYzM1ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmgKQEAgLTQ5LDYgKzQ5LDExIEBAIHB1YmxpYzoKIAog
ICAgIFNWR1BhdGhCeXRlU3RyZWFtKCkgeyB9CiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0oY29uc3Qg
RGF0YSYgZGF0YSkgOiBtX2RhdGEoZGF0YSkgeyB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2RhdGEgPT0gb3RoZXIubV9kYXRhOworICAgIH0KIAogICAgIHN0ZDo6dW5pcXVlX3B0
cjxTVkdQYXRoQnl0ZVN0cmVhbT4gY29weSgpIGNvbnN0CiAgICAgewpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhVdGlsaXRpZXMuY3BwCmluZGV4IGJhYjQ5OGY0ZDIyZGZjNjMyY2U4ZGIyZWI4YWM3
ZGQ0ZDk3YmE3OWQuLjE0MmEyMmNiOTZjMzZkMGYzM2JiNDU0NWZmNWJhODViYTkyM2JlNGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKQEAgLTEyNSw2ICsxMjUsMTMg
QEAgYm9vbCBidWlsZFNWR1BhdGhCeXRlU3RyZWFtRnJvbVN0cmluZyhjb25zdCBTdHJpbmcmIGQs
IFNWR1BhdGhCeXRlU3RyZWFtJiByZXN1bHQKICAgICByZXR1cm4gU1ZHUGF0aFBhcnNlcjo6cGFy
c2VUb0J5dGVTdHJlYW0oc291cmNlLCByZXN1bHQsIHBhcnNpbmdNb2RlKTsKIH0KIAorYm9vbCBj
YW5CbGVuZFNWR1BhdGhCeXRlU3RyZWFtcyhjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgZnJvbVN0
cmVhbSwgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIHRvU3RyZWFtKQoreworICAgIFNWR1BhdGhC
eXRlU3RyZWFtU291cmNlIGZyb21Tb3VyY2UoZnJvbVN0cmVhbSk7CisgICAgU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2UgdG9Tb3VyY2UodG9TdHJlYW0pOworICAgIHJldHVybiBTVkdQYXRoQmxlbmRl
cjo6Y2FuQmxlbmRQYXRocyhmcm9tU291cmNlLCB0b1NvdXJjZSk7Cit9CisKIGJvb2wgYnVpbGRB
bmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBmcm9tU3Ry
ZWFtLCBjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgdG9TdHJlYW0sIFNWR1BhdGhCeXRlU3RyZWFt
JiByZXN1bHQsIGZsb2F0IHByb2dyZXNzKQogewogICAgIEFTU0VSVCgmdG9TdHJlYW0gIT0gJnJl
c3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5o
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhVdGlsaXRpZXMuaAppbmRleCBmNjRhMTI0ODQx
ZGYwOTY4NDgyNWFjMTJhNDgzMmFiYjhmZWE4NzFiLi40NWQyOWZiOTU2NzFhNDA2ZjA3ZDFiNGEw
MDFlZmE5YjA5NGQzYWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0
aWxpdGllcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmgKQEAg
LTQ5LDYgKzQ5LDggQEAgYm9vbCBidWlsZFN0cmluZ0Zyb21TVkdQYXRoU2VnTGlzdChjb25zdCBT
VkdQYXRoU2VnTGlzdCYsIFN0cmluZyYsIFBhdGhQYXJzaW5nTW8KIC8vIFNWR1BhdGhCeXRlU3Ry
ZWFtIC0+IFNWR1BhdGhTZWdMaXN0CiBib29sIGJ1aWxkU1ZHUGF0aFNlZ0xpc3RGcm9tQnl0ZVN0
cmVhbShjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYsIFNWR1BhdGhFbGVtZW50JiwgU1ZHUGF0aFNl
Z0xpc3QmLCBQYXRoUGFyc2luZ01vZGUpOwogCitib29sIGNhbkJsZW5kU1ZHUGF0aEJ5dGVTdHJl
YW1zKGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBmcm9tLCBjb25zdCBTVkdQYXRoQnl0ZVN0cmVh
bSYgdG8pOworCiBib29sIGJ1aWxkQW5pbWF0ZWRTVkdQYXRoQnl0ZVN0cmVhbShjb25zdCBTVkdQ
YXRoQnl0ZVN0cmVhbSYgZnJvbSwgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIHRvLCBTVkdQYXRo
Qnl0ZVN0cmVhbSYgcmVzdWx0LCBmbG9hdCBwcm9ncmVzcyk7CiBib29sIGFkZFRvU1ZHUGF0aEJ5
dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0mIHN0cmVhbVRvQXBwZW5kVG8sIGNvbnN0IFNWR1Bh
dGhCeXRlU3RyZWFtJiBmcm9tLCB1bnNpZ25lZCByZXBlYXRDb3VudCA9IDEpOwogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
YTM2MTFmN2Q1MGNlNmZjMmM3NTMxOGEwYjVkMTRhYmY2NmJmMzcxYS4uZTliYWEyMDE4OWQ1M2Uy
ZTg1ZWQxOTkyNTk0MDc1NTcxNjU2ZmY5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2IEBACisyMDE1LTEw
LTI1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN1
cHBvcnQgYmV6aWVyIHBhdGhzIGluIGNsaXAtcGF0aCBwcm9wZXJ0eQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTk2CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUZXN0cyBmb3IgY29tcG9z
aXRpbmcgd2l0aCBjbGlwLXBhdGggYW5kIGEgY29tcG9zaXRlZCBkZXNjZW5kYW50LAorICAgICAg
ICBhIHJlZiB0ZXN0IHdoaWNoIHRlc3RzIGNsaXAtcGF0aHMgd2l0aCBldmVub2RkLCBjb21wYXJp
bmcgdG8gU1ZHIHJlbmRlcmluZywKKyAgICAgICAgYW5kIGEgdHJhbnNpdGlvbiB0ZXN0IHRvIHRl
c3QgcGF0aCBibGVuZGFiaWxpdHkuCisKKyAgICAgICAgKiBjb21wb3NpdGluZy9tYXNrcy9jbGlw
LXBhdGgtY29tcG9zaXRlZC1kZXNjZW5kZW50LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogY29tcG9zaXRpbmcvbWFza3MvY2xpcC1wYXRoLWNvbXBvc2l0ZWQtZGVzY2VuZGVudC5odG1s
OiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgtcGF0aC1leHBl
Y3RlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBjc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgt
cGF0aC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10
cmFuc2l0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHRyYW5zaXRpb25zL2Ns
aXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRyYW5zaXRp
b25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qczogQWRkIHNvbWUgYmFzaWMg
cGFyc2luZworICAgICAgICBzdXBwb3J0IGZvciBwYXRocy5zCisgICAgICAgIChleHRyYWN0UGF0
aFZhbHVlcyk6CisgICAgICAgIChwYXJzZUNsaXBQYXRoKToKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9zdmctdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0OgorCiAyMDE1LTEwLTIzICBDaHJpcyBEdW1l
eiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmFkaW9Ob2RlTGlzdCBzaG91bGQgYmUg
ZXhwb3NlZCBvbiBXaW5kb3cKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL21h
c2tzL2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvY29tcG9zaXRpbmcvbWFza3MvY2xpcC1wYXRoLWNvbXBvc2l0ZWQtZGVzY2VuZGVudC1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZkZGQ1M2FjNDhlN2UyZjc4NmFiYTkwNDMzZTJhMzE5
MmIwYjM0NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL21hc2tz
L2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MjcgQEAKKyhHcmFwaGljc0xheWVyCisgIChhbmNob3IgMC4wMCAwLjAwKQorICAoYm91bmRzIDgw
MC4wMCA2MDAuMDApCisgIChjaGlsZHJlbiAxCisgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgIChi
b3VuZHMgODAwLjAwIDYwMC4wMCkKKyAgICAgIChjb250ZW50c09wYXF1ZSAxKQorICAgICAgKGNo
aWxkcmVuIDEKKyAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAocG9zaXRpb24gOC4w
MCA4LjAwKQorICAgICAgICAgIChib3VuZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAobWFz
ayBsYXllcikKKyAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAgICAgICAgIChib3Vu
ZHMgMjAwLjAwIDIwMC4wMCkKKyAgICAgICAgICAgICkKKyAgICAgICAgICAoY2hpbGRyZW4gMQor
ICAgICAgICAgICAgKEdyYXBoaWNzTGF5ZXIKKyAgICAgICAgICAgICAgKGJvdW5kcyAzMDAuMDAg
MzAwLjAwKQorICAgICAgICAgICAgICAoY29udGVudHNPcGFxdWUgMSkKKyAgICAgICAgICAgICkK
KyAgICAgICAgICApCisgICAgICAgICkKKyAgICAgICkKKyAgICApCisgICkKKykKKwpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvbWFza3MvY2xpcC1wYXRoLWNvbXBvc2l0ZWQt
ZGVzY2VuZGVudC5odG1sIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvbWFza3MvY2xpcC1wYXRo
LWNvbXBvc2l0ZWQtZGVzY2VuZGVudC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxYWQwNGU2NTM2NDM1OTFm
ZTFmY2MzMTlkNDY2ZmJmODM1M2Y1NWEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9j
b21wb3NpdGluZy9tYXNrcy9jbGlwLXBhdGgtY29tcG9zaXRlZC1kZXNjZW5kZW50Lmh0bWwKQEAg
LTAsMCArMSw0MCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPHRp
dGxlPlRlc3RzIHRoYXQgY2xpcC1wYXRoIHdpdGggYSBjb21wb3NpdGVkIGRlc2NlbmRlbnQgdHJp
Z2dlcnMgY29tcG9zaXRlZCBjbGlwcGluZzwvdGl0bGU+CisgICAgPHN0eWxlPgorICAgICAgICAu
Ym94IHsKKyAgICAgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgICAgIGhlaWdodDogMjAw
cHg7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7CisgICAgICAgICAgICAtd2Vi
a2l0LWNsaXAtcGF0aDogaW5zZXQoMTAwcHggMTAwcHggMHB4IDBweCk7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIC5jaGlsZCB7CisgICAgICAgICAgICB3aWR0aDogMzAwcHg7CisgICAg
ICAgICAgICBoZWlnaHQ6IDMwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogZ3Jl
ZW47CisgICAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogdHJhbnNsYXRlWigwKTsKKyAgICAg
ICAgfQorICAgIDwvc3R5bGU+CisgICAgPHNjcmlwdD4KKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0
UnVubmVyKQorICAgICAgICAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CisKKyAgICAgICAg
ZnVuY3Rpb24gZG9UZXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHdpbmRvdy5pbnRl
cm5hbHMpCisgICAgICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xheWVycycp
LnRleHRDb250ZW50ID0gd2luZG93LmludGVybmFscy5sYXllclRyZWVBc1RleHQoZG9jdW1lbnQp
OworCisgICAgICAgIH0KKyAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBk
b1Rlc3QsIGZhbHNlKTsKKyAgICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxkaXYg
Y2xhc3M9ImJveCI+CisgICAgICAgIDxkaXYgY2xhc3M9ImNoaWxkIj48L2Rpdj4KKyAgICA8L2Rp
dj4KKzxwcmUgaWQ9ImxheWVycyI+PC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9jc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgtcGF0aC1leHBlY3RlZC5o
dG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9tYXNraW5nL2NsaXAtcGF0aC13aXRoLXBhdGgtZXhwZWN0
ZWQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40NGE3MWM1NmJhYWJiMGEzYTA5YTA4ZTE3ZjEzMzMwZmU0MTI4
M2M3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9tYXNraW5nL2NsaXAtcGF0
aC13aXRoLXBhdGgtZXhwZWN0ZWQuaHRtbApAQCAtMCwwICsxLDM0IEBACis8IURPQ1RZUEUgaHRt
bD4KKworPGh0bWw+Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIC5ib3ggeworICAgICAg
ICAgICAgbWFyZ2luOiAyMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTBweDsKKyAgICAgICAg
ICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9k
eT4KKworPGRpdiBjbGFzcz0iYm94Ij4KKyAgICA8c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEw
MCUiIHZpZXdCb3g9IjAgMCAyMDAgMTUwIj4KKwkJPGNsaXBQYXRoIGlkPSJjbGlwMSI+CisJCQk8
cGF0aCBkPSJNMTAwLDQwbDIwLDAgMCw2MCAyMCwwIDAsLTIwIC02MCwwIDAsLTIwIDgwLDAgMCw2
MCAtNjAsMCAwLC04MHoiLz4KKwkJPC9jbGlwUGF0aD4KKwkJPHJlY3QgeD0iNTAiIHk9IjMwIiB3
aWR0aD0iMzUwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iYmx1ZSIgY2xpcC1wYXRoPSJ1cmwoI2NsaXAx
KSIvPgorICAgIDwvc3ZnPgorPC9kaXY+CisKKzxkaXYgY2xhc3M9ImV2ZW5vZGQgYm94Ij4KKyAg
ICA8c3ZnIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEwMCUiIHZpZXdCb3g9IjAgMCAyMDAgMTUwIj4K
KwkJPGNsaXBQYXRoIGlkPSJjbGlwMiI+CisJCQk8cGF0aCBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9
Ik0xMDAsNDBsMjAsMCAwLDYwIDIwLDAgMCwtMjAgLTYwLDAgMCwtMjAgODAsMCAwLDYwIC02MCww
IDAsLTgweiIvPgorCQk8L2NsaXBQYXRoPgorCQk8cmVjdCB4PSI1MCIgeT0iMzAiIHdpZHRoPSIz
NTAiIGhlaWdodD0iMTAwIiBmaWxsPSJncmVlbiIgY2xpcC1wYXRoPSJ1cmwoI2NsaXAyKSIvPgor
ICAgIDwvc3ZnPgorPC9kaXY+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2NzczMvbWFza2luZy9jbGlwLXBhdGgtd2l0aC1wYXRoLmh0bWwgYi9MYXlvdXRUZXN0
cy9jc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgtcGF0aC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2ODg5
MWVjMjgwNTY3MTA5ZTY5ODg0MTY4MTBjZDU2NzRkNWU4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9jc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgtcGF0aC5odG1sCkBAIC0wLDAg
KzEsMjYgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8aHRtbD4KKzxoZWFkPgorICAgIDxzdHlsZT4K
KyAgICAgICAgLmJveCB7CisgICAgICAgICAgICBtYXJnaW46IDIwcHg7CisgICAgICAgICAgICBo
ZWlnaHQ6IDE1MHB4OworICAgICAgICAgICAgd2lkdGg6IDIwMHB4OworICAgICAgICAgICAgLXdl
YmtpdC1jbGlwLXBhdGg6IHBhdGgoIk0xMDAsNDBsMjAsMCAwLDYwIDIwLDAgMCwtMjAgLTYwLDAg
MCwtMjAgODAsMCAwLDYwIC02MCwwIDAsLTgweiIpOworICAgICAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogYmx1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLmJveC5ldmVub2RkIHsK
KyAgICAgICAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBwYXRoKGV2ZW5vZGQsICJNMTAwLDQwbDIw
LDAgMCw2MCAyMCwwIDAsLTIwIC02MCwwIDAsLTIwIDgwLDAgMCw2MCAtNjAsMCAwLC04MHoiKTsK
KyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgICAgICB9CisgICAgPC9z
dHlsZT4KKzwvaGVhZD4KKzxib2R5PgorCis8ZGl2IGNsYXNzPSJib3giPjwvZGl2PgorPGRpdiBj
bGFzcz0iZXZlbm9kZCBib3giPjwvZGl2PgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0
aW9ucy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTUwZmY1MGY5NWJjZDFkOGI1MzA5ODZmNzFm
YTNmMDZkNTJjMjFkMAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUgQEAK
KyAgCitQQVNTIC0gIi13ZWJraXQtY2xpcC1wYXRoIiBwcm9wZXJ0eSBmb3IgInBhdGgxIiBlbGVt
ZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IHBhdGgoJ00gODAgNDAgbCAyMCAwIGwg
MCA2MCBsIDIwIDAgbCAwIC0yMCBsIC01MCAwIGwgMCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02MCAw
IGwgMCAtODAgWicpCitQQVNTIC0gIi13ZWJraXQtY2xpcC1wYXRoIiBwcm9wZXJ0eSBmb3IgInBh
dGgyIiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IHBhdGgoJ00gMTAwIDQw
IGwgMjAgMCBsIDAgNjAgbCAwIC0yMCBsIC02MCAwIGwgMCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02
MCAwIGwgMCAtODAgWicpCitQQVNTIC0gIi13ZWJraXQtY2xpcC1wYXRoIiBwcm9wZXJ0eSBmb3Ig
InBhdGgzIiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IHBhdGgoZXZlbm9k
ZCwgJ00gMTAwIDQwIGwgMjAgMCBsIDAgNjAgbCAyMCAwIGwgMCAtMjAgbCAtNjAgMCBsIDAgLTIw
IGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFonKQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44MDRhZDMxMzg0YmRmZjU5YmY5ZDhmNzE3YmIwZWNmYjQ4YTU1NGRlCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlv
bnMuaHRtbApAQCAtMCwwICsxLDY2IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+Cis8aGVh
ZD4KKyAgPHN0eWxlPgorICAgIC5ib3ggeworICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgICAgIGhlaWdodDogMjAwcHg7CisgICAgICAgIHdpZHRoOiAyMDBweDsKKyAgICAgICAg
bWFyZ2luOiAxMHB4OworICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmF5OworICAgICAgICB0
cmFuc2l0aW9uOiAtd2Via2l0LWNsaXAtcGF0aCAycyBsaW5lYXI7CisgICAgfQorICAgIAorICAg
ICNwYXRoMSB7CisgICAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBwYXRoKCJNIDYwIDQwIGwgMjAg
MCBsIDAgNjAgbCAyMCAwIGwgMCAtMjAgbCAtNDAgMCBsIDAgLTIwIGwgODAgMCBsIDAgNjAgbCAt
NjAgMCBsIDAgLTgwIFoiKQorICAgIH0KKyAgICAKKyAgICBib2R5LmZpbmFsICNwYXRoMSB7Cisg
ICAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBwYXRoKCJNIDEwMCA0MCBsIDIwIDAgbCAwIDYwIGwg
MjAgMCBsIDAgLTIwIGwgLTYwIDAgbCAwIC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04
MCBaIik7CisgICAgfQorCisgICAgLyogTm9ubWF0Y2hlZCBzZWdtZW50cywgc2hvdWxkIG5vdCBh
bmltYXRlICovCisgICAgI3BhdGgyIHsKKyAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IHBhdGgo
Ik0gNjAgNDAgbCAyMCAwIGwgMCA2MCBsIDIwIDAgbCAwIC0yMCBsIC00MCAwIGwgMCAtMjAgbCA4
MCAwIGwgMCA2MCBsIC02MCAwIGwgMCAtODAgWiIpCisgICAgfQorICAgIAorICAgIGJvZHkuZmlu
YWwgI3BhdGgyIHsKKyAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IHBhdGgoIk0gMTAwIDQwIGwg
MjAgMCBsIDAgNjAgbCAwIC0yMCBsIC02MCAwIGwgMCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02MCAw
IGwgMCAtODAgWiIpOworICAgIH0KKworICAgIC8qIE5vbm1hdGNoZWQgd2luZGluZyBydWxlLCBz
aG91bGQgbm90IGFuaW1hdGUgKi8KKyAgICAjcGF0aDMgeworICAgICAgICAtd2Via2l0LWNsaXAt
cGF0aDogcGF0aCgiTSA2MCA0MCBsIDIwIDAgbCAwIDYwIGwgMjAgMCBsIDAgLTIwIGwgLTQwIDAg
bCAwIC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04MCBaIikKKyAgICB9CisgICAgCisg
ICAgYm9keS5maW5hbCAjcGF0aDMgeworICAgICAgICAtd2Via2l0LWNsaXAtcGF0aDogcGF0aChl
dmVub2RkLCAiTSAxMDAgNDAgbCAyMCAwIGwgMCA2MCBsIDIwIDAgbCAwIC0yMCBsIC02MCAwIGwg
MCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02MCAwIGwgMCAtODAgWiIpOworICAgIH0KKyAgPC9zdHls
ZT4KKyAgPHNjcmlwdCBzcmM9InJlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcyI+
PC9zY3JpcHQ+CisgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KKworICAgIGNvbnN0
IGV4cGVjdGVkVmFsdWVzID0gWworICAgICAgLy8gW3RpbWUsIGVsZW1lbnQtaWQsIHByb3BlcnR5
LCBleHBlY3RlZC12YWx1ZSwgdG9sZXJhbmNlXQorICAgICAgWzEsICdwYXRoMScsICctd2Via2l0
LWNsaXAtcGF0aCcsICdwYXRoKFwnTSA4MCA0MCBsIDIwIDAgbCAwIDYwIGwgMjAgMCBsIDAgLTIw
IGwgLTUwIDAgbCAwIC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04MCBaXCcpJywgMl0s
CisgICAgICBbMSwgJ3BhdGgyJywgJy13ZWJraXQtY2xpcC1wYXRoJywgJ3BhdGgoXCdNIDEwMCA0
MCBsIDIwIDAgbCAwIDYwIGwgMCAtMjAgbCAtNjAgMCBsIDAgLTIwIGwgODAgMCBsIDAgNjAgbCAt
NjAgMCBsIDAgLTgwIFpcJyknLCAyXSwKKyAgICAgIFsxLCAncGF0aDMnLCAnLXdlYmtpdC1jbGlw
LXBhdGgnLCAncGF0aChldmVub2RkLCBcJ00gMTAwIDQwIGwgMjAgMCBsIDAgNjAgbCAyMCAwIGwg
MCAtMjAgbCAtNjAgMCBsIDAgLTIwIGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFpcJykn
LCAyXSwKKyAgICBdOworICAKKyAgICBmdW5jdGlvbiBzZXR1cFRlc3QoKQorICAgIHsKKyAgICAg
ICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKCdmaW5hbCcpOworICAgIH0KKyAgICAKKyAg
ICBydW5UcmFuc2l0aW9uVGVzdChleHBlY3RlZFZhbHVlcywgc2V0dXBUZXN0LCB1c2VQYXVzZUFQ
SSk7CisgIDwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+CisgIDxkaXYgaWQ9InBhdGgxIiBjbGFz
cz0iYm94Ij48L2Rpdj4KKyAgPGRpdiBpZD0icGF0aDIiIGNsYXNzPSJib3giPjwvZGl2PgorICA8
ZGl2IGlkPSJwYXRoMyIgY2xhc3M9ImJveCI+PC9kaXY+CisKKyAgPGRpdiBpZD0icmVzdWx0Ij48
L2Rpdj4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCBlMGNl
ZjIxZTIyNjY4MDczZmQ3NTdiZmMzZDRhNGRlNDI4YWI2NjczLi42MTAzMzNiYjE1NjkwM2Y3ZjVm
OWEzNjkxM2Y4NzJjMjFlNGVjZjBmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC02OSwx
NyArNjksMzUgQEAgZnVuY3Rpb24gcGFyc2VDcm9zc0ZhZGUocykKICAgICByZXR1cm4geyJmcm9t
IjogbWF0Y2hlc1sxXSwgInRvIjogbWF0Y2hlc1syXSwgInBlcmNlbnQiOiBwYXJzZUZsb2F0KG1h
dGNoZXNbM10pfQogfQogCitmdW5jdGlvbiBleHRyYWN0UGF0aFZhbHVlcyhwYXRoKQoreworICAg
IHZhciBjb21wb25lbnRzID0gcGF0aC5zcGxpdCgnICcpOworICAgIHZhciByZXN1bHQgPSBbXTsK
KyAgICBmb3IgKGNvbXBvbmVudCBvZiBjb21wb25lbnRzKSB7CisgICAgICAgIHZhciBjb21wTWF0
Y2g7CisgICAgICAgIGlmIChjb21wTWF0Y2ggPSBjb21wb25lbnQubWF0Y2goL1swLTkuLV0rLykp
IHsKKyAgICAgICAgICAgIHJlc3VsdC5wdXNoKHBhcnNlRmxvYXQoY29tcG9uZW50KSkKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBmdW5jdGlvbiBwYXJzZUNsaXBQ
YXRoKHMpCiB7CisgICAgdmFyIHBhdGhNYXRjaDsKKyAgICBpZiAocGF0aE1hdGNoID0gcy5tYXRj
aCgvcGF0aFwoKChldmVub2RkfG5vbnplcm8pLCA/KT9cJyguKylcJ1wpLykpCisgICAgICAgIHJl
dHVybiBleHRyYWN0UGF0aFZhbHVlcyhwYXRoTWF0Y2hbcGF0aE1hdGNoLmxlbmd0aCAtIDFdKTsK
KyAgICAKICAgICAvLyBGSVhNRTogVGhpcyBvbmx5IG1hdGNoZXMgYSBzdWJzZXQgb2YgdGhlIHNo
YXBlIHN5bnRheCwgYW5kIHRoZSBwb2x5Z29uIGV4cGVjdHMgNCBwb2ludHMuCiAgICAgdmFyIHBh
dHRlcm5zID0gWwogICAgICAgICAvaW5zZXRcKChbXGQuXSspXHcrIChbXGQuXSspXHcrXCkvLAog
ICAgICAgICAvY2lyY2xlXCgoW1xkLl0rKVx3KyBhdCAoW1xkLl0rKVx3KyAoW1xkLl0rKVx3K1wp
LywKICAgICAgICAgL2VsbGlwc2VcKChbXGQuXSspXHcrIChbXGQuXSspXHcrIGF0IChbXGQuXSsp
XHcrIChbXGQuXSspXHcrXCkvLAotICAgICAgICAvcG9seWdvblwoKFtcZC5dKylcdyogKFtcZC5d
KylcdypcLCAoW1xkLl0rKVx3KiAoW1xkLl0rKVx3KlwsIChbXGQuXSspXHcqIChbXGQuXSspXHcq
XCwgKFtcZC5dKylcdyogKFtcZC5dKylcdypcKS8KKyAgICAgICAgL3BvbHlnb25cKChbXGQuXSsp
XHcqIChbXGQuXSspXHcqXCwgKFtcZC5dKylcdyogKFtcZC5dKylcdypcLCAoW1xkLl0rKVx3KiAo
W1xkLl0rKVx3KlwsIChbXGQuXSspXHcqIChbXGQuXSspXHcqXCkvLAogICAgIF07CiAgICAgCiAg
ICAgZm9yIChwYXR0ZXJuIG9mIHBhdHRlcm5zKSB7CisgICAgICAgIHZhciBtYXRjaFJlc3VsdDsK
ICAgICAgICAgaWYgKG1hdGNoUmVzdWx0ID0gcy5tYXRjaChwYXR0ZXJuKSkgewogICAgICAgICAg
ICAgdmFyIHJlc3VsdCA9IFtdOwogICAgICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBtYXRj
aFJlc3VsdC5sZW5ndGg7ICsraSkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3N2Zy10cmFuc2l0aW9ucy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9z
dmctdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0CmluZGV4IDkxZjZlMDU4YmIzNmI0YmMxOTZlMjhl
NzM1Mjg5MmJkYjkxZTdjNGIuLjU4NTA1ZWEyZThiOTM2MTZlZThjZjRiZWQwNGE0ZGU5YTAzYjZm
N2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25z
LWV4cGVjdGVkLnR4dApAQCAtMSw0ICsxLDQgQEAKLUNPTlNPTEUgTUVTU0FHRTogbGluZSAyNzU6
IEZhaWxlZCB0byBwYXVzZSAnZmlsbCcgdHJhbnNpdGlvbiBvbiBlbGVtZW50ICdyZWN0NycKK0NP
TlNPTEUgTUVTU0FHRTogbGluZSAyOTM6IEZhaWxlZCB0byBwYXVzZSAnZmlsbCcgdHJhbnNpdGlv
biBvbiBlbGVtZW50ICdyZWN0NycKIEV4YW1wbGUKIFBBU1MgLSAiZmlsbC1vcGFjaXR5IiBwcm9w
ZXJ0eSBmb3IgInJlY3QxIiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDAu
NgogUEFTUyAtICJzdHJva2Utd2lkdGgiIHByb3BlcnR5IGZvciAicmVjdDEiIGVsZW1lbnQgYXQg
MXMgc2F3IHNvbWV0aGluZyBjbG9zZSB0bzogMwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264021</attachid>
            <date>2015-10-25 12:43:34 -0700</date>
            <delta_ts>2015-10-25 16:48:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-149996-20151025124245.patch</filename>
            <type>text/plain</type>
            <size>52776</size>
            <attacher name="Simon Fraser (smfr)">simon.fraser</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTkxNTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYmZkODYxZTVhMmFmM2Uw
NDNlMWNiNGVhYjVlMzQ2MzBiYmM5YjNlYy4uNjYxZDkzY2VlNDVlYmMwMDNlOWQ5ZjQ5ODkyYmMx
NGRiOGYxYTk3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc5IEBACisyMDE1LTEwLTI1ICBTaW1v
biBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgorCisgICAgICAgIFN1cHBvcnQgYmV6
aWVyIHBhdGhzIGluIGNsaXAtcGF0aCBwcm9wZXJ0eQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTk2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBTdXBwb3J0IHBhdGgoKSBpbiB0aGUgLXdl
YmtpdC1jbGlwLXBhdGggcHJvcGVydHksIGFzIHNwZWNpZmllZCBpbgorICAgICAgICBodHRwczov
L2RyYWZ0cy5jc3N3Zy5vcmcvY3NzLXNoYXBlcy0yLyNzdXBwb3J0ZWQtYmFzaWMtc2hhcGVzCisg
ICAgICAgIAorICAgICAgICBBZGRlZCBCYXNpY1NoYXBlUGF0aCBhbmQgQ1NTQmFzaWNTaGFwZVBh
dGgsIHdoaWNoIGJvdGggcmVwcmVzZW50IHRoZSBwYXRoCisgICAgICAgIGFzIGEgU1ZHUGF0aEJ5
dGVTdHJlYW0gYW5kIHdpbmQgcnVsZS4KKyAgICAgICAgCisgICAgICAgIE1ha2UgQmFzaWNTaGFw
ZTo6Y2FuQmxlbmQoKSBhIHZpcnR1YWwgZnVuY3Rpb24sIGFuZCBpbXBsZW1lbnQgaXQgb24gZWFj
aCBzdWJjbGFzcy4KKyAgICAgICAgTWFrZSB2YXJpb3VzIEJhc2ljU2hhcGUgc3ViY2xhc3MgZnVu
Y3Rpb24gb3ZlcnJpZGVzIHByaXZhdGUsIG90aGVyIHRoYW4gd2luZFJ1bGUoKQorICAgICAgICB3
aWNoIGlzIGNhbGxlZCBvbiBkZXJpdmVkIGNsYXNzZXMgaW4gYSBmZXcgcGxhY2VzLgorICAgICAg
ICAKKyAgICAgICAgQWRkIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKCkgd2hpY2ggcmV0
dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBwYXRocyBjYW4gYmUKKyAgICAgICAgaW50ZXJwb2xhdGVk
LiBVc2VzIHRoZSBzYW1lIGxvZ2ljIGFzIGJsZW5kQW5pbWF0ZWRQYXRoKCksIHdpdGhvdXQgZG9p
bmcgYW55IGludGVycG9sYXRpb24uCisgICAgICAgIAorICAgICAgICBSZW5kZXJFbGVtZW50Ojpj
cmVhdGVzR3JvdXAoKSBpcyBmaXhlZCB0byBoYXZlIGNsaXAtcGF0aCB0cmlnZ2VyIGEgZ3JvdXAs
CisgICAgICAgIHdoaWNoIGZpeGVzIHJlbmRlcmluZyBvZiBjbGlwLXBhdGggd2l0aCBhIGRlc2Nl
bmRhbnQgY29tcG9zaXRpbmcgbGF5ZXIuCisKKyAgICAgICAgVGVzdHM6IGNvbXBvc2l0aW5nL21h
c2tzL2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQuaHRtbAorICAgICAgICAgICAgICAg
Y3NzMy9tYXNraW5nL2NsaXAtcGF0aC13aXRoLXBhdGguaHRtbAorICAgICAgICAgICAgICAgdHJh
bnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAorCisgICAgICAgICogY3Nz
L0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dmFsdWVGb3JCYXNp
Y1NoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2ljU2hhcGVGb3JWYWx1ZSk6CisgICAgICAg
ICogY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hh
cGVQYXRoOjpDU1NCYXNpY1NoYXBlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NCYXNpY1No
YXBlUGF0aDo6cGF0aERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6YnVpbGRQYXRoU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVQYXRoOjpjc3NUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU0Jhc2ljU2hhcGVQYXRoOjplcXVhbHMpOgorICAgICAgICAqIGNzcy9DU1NC
YXNpY1NoYXBlcy5oOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6OmNyZWF0ZXNHcm91cCk6CisgICAgICAgICogcmVuZGVyaW5nL3N0eWxl
L0Jhc2ljU2hhcGVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVDaXJjbGU6OmNh
bkJsZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVFbGxpcHNlOjpjYW5CbGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUG9seWdvbjo6Y2FuQmxlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6QmFzaWNTaGFwZVBhdGg6OkJhc2ljU2hhcGVQYXRoKToKKyAgICAgICAgKFdl
YkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpwYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hh
cGVQYXRoOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2ljU2hhcGVQYXRoOjpj
YW5CbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNpY1NoYXBlUGF0aDo6YmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6QmFzaWNTaGFwZUluc2V0OjpjYW5CbGVuZCk6CisgICAgICAgIChXZWJD
b3JlOjpCYXNpY1NoYXBlOjpjYW5CbGVuZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L3N0eWxlL0Jhc2ljU2hhcGVzLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhCbGVuZGVyLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjphZGRBbmltYXRlZFBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQW5pbWF0ZWRQYXRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpTVkdQYXRoQmxlbmRlcik6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb1NlZ21lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQpOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1NlZ21lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVUb0N1YmljU21v
b3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2
ZVRvUXVhZHJhdGljU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoQmxlbmRlcjo6
YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU21vb3RoU2VnbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpT
VkdQYXRoQmxlbmRlcjo6YmxlbmRBcmNUb1NlZ21lbnQpOgorICAgICAgICAqIHN2Zy9TVkdQYXRo
QmxlbmRlci5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbS5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEJ5dGVTdHJlYW06Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHN2Zy9T
VkdQYXRoVXRpbGl0aWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbkJsZW5kU1ZHUGF0aEJ5
dGVTdHJlYW1zKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFV0aWxpdGllcy5oOgorCiAyMDE1LTEw
LTIzICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgUmFkaW9Ob2Rl
TGlzdCBzaG91bGQgYmUgZXhwb3NlZCBvbiBXaW5kb3cKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9CYXNpY1NoYXBlRnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9CYXNp
Y1NoYXBlRnVuY3Rpb25zLmNwcAppbmRleCAwNjRmY2QyZWM2OWMxZGNmZDk3ZmQzMTY3NGViNjMw
YTgzNjZjZDg4Li4zMTZlNjc5NzdlYzYyZGUwY2JhMDMyYmRkNzUzNDJkNWQ1MTkwMjkzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQmFzaWNTaGFwZUZ1bmN0aW9ucy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvY3NzL0Jhc2ljU2hhcGVGdW5jdGlvbnMuY3BwCkBAIC0zNiw2ICszNiw3
IEBACiAjaW5jbHVkZSAiQ1NTVmFsdWVQb29sLmgiCiAjaW5jbHVkZSAiUGFpci5oIgogI2luY2x1
ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0uaCIKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMDMsNiArMTA0LDEzIEBAIFJlZjxDU1NWYWx1ZT4gdmFs
dWVGb3JCYXNpY1NoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQmFzaWNTaGFw
ZSYgYmFzCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IHBvbHlnb25WYWx1ZS5jb3B5UmVmKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVQ
YXRoVHlwZTogeworICAgICAgICBjb25zdCBhdXRvJiBwYXRoU2hhcGUgPSBkb3duY2FzdDxCYXNp
Y1NoYXBlUGF0aD4oYmFzaWNTaGFwZSk7CisgICAgICAgIGF1dG8gcGF0aFNoYXBlVmFsdWUgPSBD
U1NCYXNpY1NoYXBlUGF0aDo6Y3JlYXRlKHBhdGhTaGFwZS5wYXRoRGF0YSgpLT5jb3B5KCkpOwor
ICAgICAgICBwYXRoU2hhcGVWYWx1ZS0+c2V0V2luZFJ1bGUocGF0aFNoYXBlLndpbmRSdWxlKCkp
OworICAgICAgICBiYXNpY1NoYXBlVmFsdWUgPSBwYXRoU2hhcGVWYWx1ZS5jb3B5UmVmKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KICAgICBjYXNlIEJhc2ljU2hhcGU6OkJhc2ljU2hhcGVJbnNl
dFR5cGU6IHsKICAgICAgICAgY29uc3QgYXV0byYgaW5zZXQgPSBkb3duY2FzdDxCYXNpY1NoYXBl
SW5zZXQ+KGJhc2ljU2hhcGUpOwogICAgICAgICBhdXRvIGluc2V0VmFsdWUgPSBDU1NCYXNpY1No
YXBlSW5zZXQ6OmNyZWF0ZSgpOwpAQCAtMTIwLDggKzEyOCw2IEBAIFJlZjxDU1NWYWx1ZT4gdmFs
dWVGb3JCYXNpY1NoYXBlKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgY29uc3QgQmFzaWNTaGFw
ZSYgYmFzCiAgICAgICAgIGJhc2ljU2hhcGVWYWx1ZSA9IGluc2V0VmFsdWUuY29weVJlZigpOwog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7CiAgICAg
fQogCiAgICAgcmV0dXJuIGNzc1ZhbHVlUG9vbC5jcmVhdGVWYWx1ZShiYXNpY1NoYXBlVmFsdWUu
cmVsZWFzZU5vbk51bGwoKSk7CkBAIC0yNTcsNiArMjYzLDE0IEBAIFJlZjxCYXNpY1NoYXBlPiBi
YXNpY1NoYXBlRm9yVmFsdWUoY29uc3QgQ1NTVG9MZW5ndGhDb252ZXJzaW9uRGF0YSYgY29udmVy
c2lvbkRhCiAgICAgICAgIGJhc2ljU2hhcGUgPSByZWN0LnJlbGVhc2UoKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQorICAgIGNhc2UgQ1NTQmFzaWNTaGFwZTo6Q1NTQmFzaWNTaGFwZVBhdGhUeXBl
OiB7CisgICAgICAgIGNvbnN0IENTU0Jhc2ljU2hhcGVQYXRoJiBwYXRoVmFsdWUgPSBkb3duY2Fz
dDxDU1NCYXNpY1NoYXBlUGF0aD4oKmJhc2ljU2hhcGVWYWx1ZSk7CisKKyAgICAgICAgUmVmUHRy
PEJhc2ljU2hhcGVQYXRoPiBwYXRoID0gQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZShwYXRoVmFsdWUu
cGF0aERhdGEoKS0+Y29weSgpKTsKKyAgICAgICAgcGF0aC0+c2V0V2luZFJ1bGUocGF0aFZhbHVl
LndpbmRSdWxlKCkpOworICAgICAgICBiYXNpY1NoYXBlID0gcGF0aC5yZWxlYXNlKCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KICAgICBkZWZhdWx0OgogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL0NTU0Jhc2ljU2hhcGVzLmNwcAppbmRleCAxZGU3NzE2NjZmMzNjNjA2NDIx
NWZhMDIwMzI4NmI3NDQ2M2IzZmVlLi5kNWY5ZTBjYTE2NDcyYjgwYjE0NTkzNmMzMDFkYzRhMjY2
ZjZlMzc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5jcHAKQEAgLTMxLDkgKzMx
LDEyIEBACiAKICNpbmNsdWRlICJDU1NCYXNpY1NoYXBlcy5oIgogCisjaW5jbHVkZSAiQ1NTUGFy
c2VyLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIgogI2luY2x1ZGUg
IkNTU1ZhbHVlUG9vbC5oIgogI2luY2x1ZGUgIlBhaXIuaCIKKyNpbmNsdWRlICJTVkdQYXRoQnl0
ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXVEY7CkBAIC0xOTgsNiAr
MjAxLDU1IEBAIGJvb2wgQ1NTQmFzaWNTaGFwZUVsbGlwc2U6OmVxdWFscyhjb25zdCBDU1NCYXNp
Y1NoYXBlJiBzaGFwZSkgY29uc3QKICAgICAgICAgJiYgY29tcGFyZUNTU1ZhbHVlUHRyKG1fcmFk
aXVzWSwgb3RoZXIubV9yYWRpdXNZKTsKIH0KIAorQ1NTQmFzaWNTaGFwZVBhdGg6OkNTU0Jhc2lj
U2hhcGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mJiBieXRlU3RyZWFt
KQorICAgIDogbV9ieXRlU3RyZWFtKFdURjo6bW92ZShieXRlU3RyZWFtKSkKK3sKK30KKworY29u
c3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIENTU0Jhc2ljU2hhcGVQYXRoOjpwYXRoRGF0YSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fYnl0ZVN0cmVhbS5nZXQoKTsKK30KKworc3RhdGljIFN0cmluZyBi
dWlsZFBhdGhTdHJpbmcoY29uc3QgV2luZFJ1bGUmIHdpbmRSdWxlLCBjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgYm94KQoreworICAgIFN0cmluZ0J1aWxkZXIgcmVzdWx0OworICAg
IGlmICh3aW5kUnVsZSA9PSBSVUxFX0VWRU5PREQpCisgICAgICAgIHJlc3VsdC5hcHBlbmRMaXRl
cmFsKCJwYXRoKGV2ZW5vZGQsICIpOworICAgIGVsc2UKKyAgICAgICAgcmVzdWx0LmFwcGVuZExp
dGVyYWwoInBhdGgoIik7CisKKyAgICByZXN1bHQuYXBwZW5kKHF1b3RlQ1NTU3RyaW5nKHBhdGgp
KTsKKyAgICByZXN1bHQuYXBwZW5kKCcpJyk7CisKKyAgICBpZiAoYm94Lmxlbmd0aCgpKSB7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoJyAnKTsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChib3gpOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQudG9TdHJpbmcoKTsKK30KKworU3RyaW5nIENTU0Jh
c2ljU2hhcGVQYXRoOjpjc3NUZXh0KCkgY29uc3QKK3sKKyAgICBTdHJpbmcgcGF0aFN0cmluZzsK
KyAgICBidWlsZFN0cmluZ0Zyb21CeXRlU3RyZWFtKCptX2J5dGVTdHJlYW0sIHBhdGhTdHJpbmcs
IFVuYWx0ZXJlZFBhcnNpbmcpOworCisgICAgcmV0dXJuIGJ1aWxkUGF0aFN0cmluZyhtX3dpbmRS
dWxlLCBwYXRoU3RyaW5nLCBtX3JlZmVyZW5jZUJveCA/IG1fcmVmZXJlbmNlQm94LT5jc3NUZXh0
KCkgOiBTdHJpbmcoKSk7Cit9CisKK2Jvb2wgQ1NTQmFzaWNTaGFwZVBhdGg6OmVxdWFscyhjb25z
dCBDU1NCYXNpY1NoYXBlJiBvdGhlclNoYXBlKSBjb25zdAoreworICAgIGlmICghaXM8Q1NTQmFz
aWNTaGFwZVBhdGg+KG90aGVyU2hhcGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBh
dXRvJiBvdGhlclNoYXBlUGF0aCA9IGRvd25jYXN0PENTU0Jhc2ljU2hhcGVQYXRoPihvdGhlclNo
YXBlKTsKKyAgICBpZiAobV93aW5kUnVsZSAhPSBvdGhlclNoYXBlUGF0aC53aW5kUnVsZSgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gbV9ieXRlU3RyZWFtID09IG90aGVy
U2hhcGVQYXRoLm1fYnl0ZVN0cmVhbTsKK30KKwogc3RhdGljIFN0cmluZyBidWlsZFBvbHlnb25T
dHJpbmcoY29uc3QgV2luZFJ1bGUmIHdpbmRSdWxlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcG9p
bnRzKQogewogICAgIEFTU0VSVCghKHBvaW50cy5zaXplKCkgJSAyKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTQmFzaWNTaGFwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9D
U1NCYXNpY1NoYXBlcy5oCmluZGV4IDRjYzFlMjQ5ZDA3YjUxOTEzZjJiNzQ0NDVhNjMzMzdkYjll
OTUyNWUuLjQxZDQ5YjFlNzQwN2ExZmY1ZGVjMDk5MWUwMzQwZGM4ZjgwNDNkMWYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NCYXNpY1NoYXBlcy5oCkBAIC0zOSwxMyArMzksMTYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVhbTsKKwogY2xhc3MgQ1NTQmFzaWNT
aGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU0Jhc2ljU2hhcGU+IHsKIHB1YmxpYzoKICAgICBl
bnVtIFR5cGUgewogICAgICAgICBDU1NCYXNpY1NoYXBlUG9seWdvblR5cGUsCiAgICAgICAgIENT
U0Jhc2ljU2hhcGVDaXJjbGVUeXBlLAogICAgICAgICBDU1NCYXNpY1NoYXBlRWxsaXBzZVR5cGUs
Ci0gICAgICAgIENTU0Jhc2ljU2hhcGVJbnNldFR5cGUKKyAgICAgICAgQ1NTQmFzaWNTaGFwZUlu
c2V0VHlwZSwKKyAgICAgICAgQ1NTQmFzaWNTaGFwZVBhdGhUeXBlCiAgICAgfTsKIAogICAgIHZp
cnR1YWwgVHlwZSB0eXBlKCkgY29uc3QgPSAwOwpAQCAtMjExLDYgKzIxNCwzMCBAQCBwcml2YXRl
OgogICAgIFdpbmRSdWxlIG1fd2luZFJ1bGU7CiB9OwogCitjbGFzcyBDU1NCYXNpY1NoYXBlUGF0
aCBmaW5hbCA6IHB1YmxpYyBDU1NCYXNpY1NoYXBlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PENTU0Jhc2ljU2hhcGVQYXRoPiBjcmVhdGUoc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3Ry
ZWFtPiYmIGJ5dGVTdHJlYW0pCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBD
U1NCYXNpY1NoYXBlUGF0aChXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpKTsKKyAgICB9CisKKyAgICBj
b25zdCBTVkdQYXRoQnl0ZVN0cmVhbSogcGF0aERhdGEoKSBjb25zdDsKKworICAgIHZvaWQgc2V0
V2luZFJ1bGUoV2luZFJ1bGUgdykgeyBtX3dpbmRSdWxlID0gdzsgfQorICAgIFdpbmRSdWxlIHdp
bmRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV93aW5kUnVsZTsgfQorCisgICAgdmlydHVhbCBTdHJp
bmcgY3NzVGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgQ1NTQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIENTU0Jh
c2ljU2hhcGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mJik7CisKKyAg
ICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIENTU0Jhc2ljU2hh
cGVQYXRoVHlwZTsgfQorCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBt
X2J5dGVTdHJlYW07CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZSB7IFJVTEVfTk9OWkVSTyB9Owor
fTsKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZGVmaW5lIFNQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfQ1NTX0JBU0lDX1NIQVBFUyhUb1ZhbHVlVHlwZU5hbWUpIFwKQEAgLTIyMiw1ICsyNDks
NiBAQCBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQRVMoQ1NTQmFzaWNTaGFw
ZUluc2V0KQogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19DU1NfQkFTSUNfU0hBUEVTKENTU0Jhc2lj
U2hhcGVDaXJjbGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQRVMoQ1NT
QmFzaWNTaGFwZUVsbGlwc2UpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJQ19TSEFQ
RVMoQ1NTQmFzaWNTaGFwZVBvbHlnb24pCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0NTU19CQVNJ
Q19TSEFQRVMoQ1NTQmFzaWNTaGFwZVBhdGgpCiAKICNlbmRpZiAvLyBDU1NCYXNpY1NoYXBlc19o
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDdjMTEwOTIzZDI0ZDExOWQwZDQ0YzcwZDM2
ODg0ZjU4NDFiYjliOWUuLjc4MTQxMDYwMTBkZGQyZWEwYWJmMzJjMmI5M2JkMGI4MDhmN2Y0OGEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCkBAIC04Myw2ICs4Myw4IEBACiAjaW5jbHVkZSAi
UmVuZGVyVGhlbWUuaCIKICNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCiAjaW5j
bHVkZSAiU1ZHUGFyc2VyVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiU1ZHUGF0aEJ5dGVTdHJlYW0u
aCIKKyNpbmNsdWRlICJTVkdQYXRoVXRpbGl0aWVzLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVj
a2VyLmgiCiAjaW5jbHVkZSAiU2VsZWN0b3JDaGVja2VyVGVzdEZ1bmN0aW9ucy5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCkBAIC02NjM4LDYgKzY2NDAsMzcgQEAgUmVmUHRyPENTU0Jhc2ljU2hh
cGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlUG9seWdvbihDU1NQYXJzZXJWYWx1ZUxpc3Qm
IGFyZ3MKICAgICByZXR1cm4gc2hhcGU7CiB9CiAKK1JlZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQ
YXJzZXI6OnBhcnNlQmFzaWNTaGFwZVBhdGgoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQorewor
ICAgIHVuc2lnbmVkIHNpemUgPSBhcmdzLnNpemUoKTsKKyAgICBpZiAoc2l6ZSAhPSAxICYmIHNp
emUgIT0gMykKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBXaW5kUnVsZSB3aW5kUnVs
ZSA9IFJVTEVfTk9OWkVSTzsKKworICAgIENTU1BhcnNlclZhbHVlKiBhcmd1bWVudCA9IGFyZ3Mu
Y3VycmVudCgpOworICAgIGlmIChhcmd1bWVudC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkIHx8IGFy
Z3VtZW50LT5pZCA9PSBDU1NWYWx1ZU5vbnplcm8pIHsKKyAgICAgICAgd2luZFJ1bGUgPSBhcmd1
bWVudC0+aWQgPT0gQ1NTVmFsdWVFdmVub2RkID8gUlVMRV9FVkVOT0REIDogUlVMRV9OT05aRVJP
OworCisgICAgICAgIGlmICghaXNDb21tYShhcmdzLm5leHQoKSkpCisgICAgICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgYXJndW1lbnQgPSBhcmdzLm5leHQoKTsKKyAgICB9CisKKyAg
ICBpZiAoYXJndW1lbnQtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19TVFJJTkcpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBieXRlU3RyZWFtID0gc3RkOjptYWtl
X3VuaXF1ZTxTVkdQYXRoQnl0ZVN0cmVhbT4oKTsKKyAgICBpZiAoIWJ1aWxkU1ZHUGF0aEJ5dGVT
dHJlYW1Gcm9tU3RyaW5nKGFyZ3VtZW50LT5zdHJpbmcsICpieXRlU3RyZWFtLCBVbmFsdGVyZWRQ
YXJzaW5nKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBSZWZQdHI8Q1NTQmFzaWNT
aGFwZVBhdGg+IHNoYXBlID0gQ1NTQmFzaWNTaGFwZVBhdGg6OmNyZWF0ZShXVEY6Om1vdmUoYnl0
ZVN0cmVhbSkpOworICAgIHNoYXBlLT5zZXRXaW5kUnVsZSh3aW5kUnVsZSk7CisKKyAgICBhcmdz
Lm5leHQoKTsgLy8gRklYTUU6IHdoeT8KKyAgICByZXR1cm4gc2hhcGU7Cit9CisKIHN0YXRpYyBi
b29sIGlzQm94VmFsdWUoQ1NTVmFsdWVJRCB2YWx1ZUlkLCBDU1NQcm9wZXJ0eUlEIHByb3BJZCkK
IHsKICAgICBzd2l0Y2ggKHZhbHVlSWQpIHsKQEAgLTY3NDgsNiArNjc4MSw4IEBAIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gQ1NTUGFyc2VyOjpwYXJzZUJhc2ljU2hhcGUoKQogICAgICAgICBz
aGFwZSA9IHBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoKmFyZ3MpOwogICAgIGVsc2UgaWYgKGVxdWFs
SWdub3JpbmdDYXNlKHZhbHVlLmZ1bmN0aW9uLT5uYW1lLCAicG9seWdvbigiKSkKICAgICAgICAg
c2hhcGUgPSBwYXJzZUJhc2ljU2hhcGVQb2x5Z29uKCphcmdzKTsKKyAgICBlbHNlIGlmIChlcXVh
bElnbm9yaW5nQ2FzZSh2YWx1ZS5mdW5jdGlvbi0+bmFtZSwgInBhdGgoIikpCisgICAgICAgIHNo
YXBlID0gcGFyc2VCYXNpY1NoYXBlUGF0aCgqYXJncyk7CiAgICAgZWxzZSBpZiAoZXF1YWxJZ25v
cmluZ0Nhc2UodmFsdWUuZnVuY3Rpb24tPm5hbWUsICJpbnNldCgiKSkKICAgICAgICAgc2hhcGUg
PSBwYXJzZUJhc2ljU2hhcGVJbnNldCgqYXJncyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRl
eCBiODAwYWIwZjViY2ZlYTFkNDJkNTFjYzJmN2UwMzQyZThkMTMzZDc1Li4wNDk1MmRiNzAwY2U1
NTM4Y2FlNmMwNWZhMGIzZTAxMDc3MDA2ZTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCkBAIC0y
NDQsNiArMjQ0LDcgQEAgcHVibGljOgogICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUJh
c2ljU2hhcGVDaXJjbGUoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2lj
U2hhcGU+IHBhcnNlQmFzaWNTaGFwZUVsbGlwc2UoQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAg
UmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVBvbHlnb24oQ1NTUGFyc2VyVmFs
dWVMaXN0Jik7CisgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFzaWNTaGFwZVBhdGgo
Q1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAgICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBhcnNlQmFz
aWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYpOwogCiAgICAgYm9vbCBwYXJzZUZvbnQo
Ym9vbCBpbXBvcnRhbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgK
aW5kZXggZTI2OGJlYjhkZDhiZGViM2M0ZGMyMjRiYzRlNjAwMDc0YTFhMTcyMC4uNmIxZDZjNGMz
OWUzNjc5ZTc3YjBjODBlMzFlYmZkYzIzOWRlNjA0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oCkBAIC0xNTIsNyArMTUyLDcgQEAgcHVibGljOgogICAgIGJvb2wg
bWF5Q2F1c2VSZXBhaW50SW5zaWRlVmlld3BvcnQoY29uc3QgSW50UmVjdCogdmlzaWJsZVJlY3Qg
PSBudWxscHRyKSBjb25zdDsKIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIHJlbmRlcmVy
IHJlcXVpcmVzIGEgbmV3IHN0YWNraW5nIGNvbnRleHQuCi0gICAgYm9vbCBjcmVhdGVzR3JvdXAo
KSBjb25zdCB7IHJldHVybiBpc1RyYW5zcGFyZW50KCkgfHwgaGFzTWFzaygpIHx8IGhhc0ZpbHRl
cigpIHx8IGhhc0JhY2tkcm9wRmlsdGVyKCkgfHwgaGFzQmxlbmRNb2RlKCk7IH0KKyAgICBib29s
IGNyZWF0ZXNHcm91cCgpIGNvbnN0IHsgcmV0dXJuIGlzVHJhbnNwYXJlbnQoKSB8fCBoYXNNYXNr
KCkgfHwgaGFzQ2xpcFBhdGgoKSB8fCBoYXNGaWx0ZXIoKSB8fCBoYXNCYWNrZHJvcEZpbHRlcigp
IHx8IGhhc0JsZW5kTW9kZSgpOyB9CiAKICAgICBib29sIGlzVHJhbnNwYXJlbnQoKSBjb25zdCB7
IHJldHVybiBzdHlsZSgpLm9wYWNpdHkoKSA8IDEuMGY7IH0KICAgICBmbG9hdCBvcGFjaXR5KCkg
Y29uc3QgeyByZXR1cm4gc3R5bGUoKS5vcGFjaXR5KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuY3BwCmluZGV4IDIxZWMyOTkzZTFjY2QxYjA4MTdm
OWMxYTY5NjlhY2IzYWZhNjY2YTkuLjZhMDk5M2I2MjhjZWM4YmQ3NDU2MjVhMjk4ZTY5ZGUzOTA4
NGRjODggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1No
YXBlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N0eWxlL0Jhc2ljU2hhcGVz
LmNwcApAQCAtMzgsNiArMzgsOCBAQAogI2luY2x1ZGUgIkxlbmd0aEZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIlBhdGguaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJTVkdQYXRo
Qnl0ZVN0cmVhbS5oIgorI2luY2x1ZGUgIlNWR1BhdGhVdGlsaXRpZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC01OCwzNyArNjAsNiBAQCB2b2lkIEJhc2ljU2hhcGVDZW50ZXJDb29y
ZGluYXRlOjp1cGRhdGVDb21wdXRlZExlbmd0aCgpCiAgICAgbV9jb21wdXRlZExlbmd0aCA9IExl
bmd0aChDYWxjdWxhdGlvblZhbHVlOjpjcmVhdGUoV1RGOjptb3ZlKG9wKSwgQ2FsY3VsYXRpb25S
YW5nZUFsbCkpOwogfQogCi1ib29sIEJhc2ljU2hhcGU6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hh
cGUmIG90aGVyKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBTdXBwb3J0IGFuaW1hdGlvbnMgYmV0
d2VlbiBkaWZmZXJlbnQgc2hhcGVzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHR5cGUoKSAhPSBv
dGhlci50eXBlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEp1c3QgcG9seWdv
bnMgd2l0aCBzYW1lIG51bWJlciBvZiB2ZXJ0aWNlcyBjYW4gYmUgYW5pbWF0ZWQuCi0gICAgaWYg
KGlzPEJhc2ljU2hhcGVQb2x5Z29uPigqdGhpcykKLSAgICAgICAgJiYgKGRvd25jYXN0PEJhc2lj
U2hhcGVQb2x5Z29uPigqdGhpcykudmFsdWVzKCkuc2l6ZSgpICE9IGRvd25jYXN0PEJhc2ljU2hh
cGVQb2x5Z29uPihvdGhlcikudmFsdWVzKCkuc2l6ZSgpCi0gICAgICAgIHx8IGRvd25jYXN0PEJh
c2ljU2hhcGVQb2x5Z29uPigqdGhpcykud2luZFJ1bGUoKSAhPSBkb3duY2FzdDxCYXNpY1NoYXBl
UG9seWdvbj4ob3RoZXIpLndpbmRSdWxlKCkpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAvLyBDaXJjbGVzIHdpdGgga2V5d29yZHMgZm9yIHJhZGlpIGNvb3JkaW5hdGVzIGNhbm5vdCBi
ZSBhbmltYXRlZC4KLSAgICBpZiAoaXM8QmFzaWNTaGFwZUNpcmNsZT4oKnRoaXMpKSB7Ci0gICAg
ICAgIGNvbnN0IGF1dG8mIHRoaXNDaXJjbGUgPSBkb3duY2FzdDxCYXNpY1NoYXBlQ2lyY2xlPigq
dGhpcyk7Ci0gICAgICAgIGNvbnN0IGF1dG8mIG90aGVyQ2lyY2xlID0gZG93bmNhc3Q8QmFzaWNT
aGFwZUNpcmNsZT4ob3RoZXIpOwotICAgICAgICBpZiAoIXRoaXNDaXJjbGUucmFkaXVzKCkuY2Fu
QmxlbmQob3RoZXJDaXJjbGUucmFkaXVzKCkpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0KLQotICAgIC8vIEVsbGlwc2VzIHdpdGgga2V5d29yZHMgZm9yIHJhZGlpIGNvb3JkaW5h
dGVzIGNhbm5vdCBiZSBhbmltYXRlZC4KLSAgICBpZiAoIWlzPEJhc2ljU2hhcGVFbGxpcHNlPigq
dGhpcykpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgY29uc3QgYXV0byYgdGhpc0VsbGlw
c2UgPSBkb3duY2FzdDxCYXNpY1NoYXBlRWxsaXBzZT4oKnRoaXMpOwotICAgIGNvbnN0IGF1dG8m
IG90aGVyRWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7Ci0gICAg
cmV0dXJuICh0aGlzRWxsaXBzZS5yYWRpdXNYKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1
c1goKSkKLSAgICAgICAgJiYgdGhpc0VsbGlwc2UucmFkaXVzWSgpLmNhbkJsZW5kKG90aGVyRWxs
aXBzZS5yYWRpdXNZKCkpKTsKLX0KLQotCiBib29sIEJhc2ljU2hhcGVDaXJjbGU6Om9wZXJhdG9y
PT0oY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBv
dGhlci50eXBlKCkpCkBAIC0xMzIsNiArMTAzLDE1IEBAIHZvaWQgQmFzaWNTaGFwZUNpcmNsZTo6
cGF0aChQYXRoJiBwYXRoLCBjb25zdCBGbG9hdFJlY3QmIGJvdW5kaW5nQm94KQogICAgICkpOwog
fQogCitib29sIEJhc2ljU2hhcGVDaXJjbGU6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90
aGVyKSBjb25zdAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvJiBvdGhlckNpcmNsZSA9IGRvd25jYXN0PEJhc2ljU2hh
cGVDaXJjbGU+KG90aGVyKTsKKyAgICByZXR1cm4gcmFkaXVzKCkuY2FuQmxlbmQob3RoZXJDaXJj
bGUucmFkaXVzKCkpOworfQorCiBSZWY8QmFzaWNTaGFwZT4gQmFzaWNTaGFwZUNpcmNsZTo6Ymxl
bmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAg
ICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CkBAIC0xODQsNiArMTY0LDE1IEBAIHZv
aWQgQmFzaWNTaGFwZUVsbGlwc2U6OnBhdGgoUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBi
b3VuZGluZ0JveCkKICAgICAgICAgcmFkaXVzWSAqIDIpKTsKIH0KIAorYm9vbCBCYXNpY1NoYXBl
RWxsaXBzZTo6Y2FuQmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAg
aWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8mIG90aGVyRWxsaXBzZSA9IGRvd25jYXN0PEJhc2ljU2hhcGVFbGxpcHNlPihvdGhlcik7
CisgICAgcmV0dXJuIHJhZGl1c1goKS5jYW5CbGVuZChvdGhlckVsbGlwc2UucmFkaXVzWCgpKSAm
JiByYWRpdXNZKCkuY2FuQmxlbmQob3RoZXJFbGxpcHNlLnJhZGl1c1koKSk7Cit9CisKIFJlZjxC
YXNpY1NoYXBlPiBCYXNpY1NoYXBlRWxsaXBzZTo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3Ro
ZXIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVy
LnR5cGUoKSk7CkBAIC0yMzQsNiArMjIzLDE1IEBAIHZvaWQgQmFzaWNTaGFwZVBvbHlnb246OnBh
dGgoUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKICAgICBwYXRoLmNs
b3NlU3VicGF0aCgpOwogfQogCitib29sIEJhc2ljU2hhcGVQb2x5Z29uOjpjYW5CbGVuZChjb25z
dCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVyLnR5
cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byYgb3RoZXJQb2x5Z29uID0g
ZG93bmNhc3Q8QmFzaWNTaGFwZVBvbHlnb24+KG90aGVyKTsKKyAgICByZXR1cm4gdmFsdWVzKCku
c2l6ZSgpID09IG90aGVyUG9seWdvbi52YWx1ZXMoKS5zaXplKCkgJiYgd2luZFJ1bGUoKSA9PSBv
dGhlclBvbHlnb24ud2luZFJ1bGUoKTsKK30KKwogUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQ
b2x5Z29uOjpibGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXNzKSBj
b25zdAogewogICAgIEFTU0VSVCh0eXBlKCkgPT0gb3RoZXIudHlwZSgpKTsKQEAgLTI1Nyw2ICsy
NTUsNTUgQEAgUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVQb2x5Z29uOjpibGVuZChjb25zdCBC
YXNpY1NoYXBlJiBvdGhlciwgZG91YmxlIHByb2dyZXMKICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VOb25OdWxsKCk7CiB9CiAKK0Jhc2ljU2hhcGVQYXRoOjpCYXNpY1NoYXBlUGF0aChzdGQ6OnVu
aXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+JiYgYnl0ZVN0cmVhbSkKKyAgICA6IG1fYnl0ZVN0
cmVhbShXVEY6Om1vdmUoYnl0ZVN0cmVhbSkpCit7Cit9CisKK3ZvaWQgQmFzaWNTaGFwZVBhdGg6
OnBhdGgoUGF0aCYgcGF0aCwgY29uc3QgRmxvYXRSZWN0JiBib3VuZGluZ0JveCkKK3sKKyAgICBB
U1NFUlQocGF0aC5pc0VtcHR5KCkpOworICAgIGJ1aWxkUGF0aEZyb21CeXRlU3RyZWFtKCptX2J5
dGVTdHJlYW0sIHBhdGgpOworICAgIHBhdGgudHJhbnNsYXRlKHRvRmxvYXRTaXplKGJvdW5kaW5n
Qm94LmxvY2F0aW9uKCkpKTsKK30KKworYm9vbCBCYXNpY1NoYXBlUGF0aDo6b3BlcmF0b3I9PShj
b25zdCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAodHlwZSgpICE9IG90aGVy
LnR5cGUoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY29uc3QgYXV0byYgb3RoZXJQ
YXRoID0gZG93bmNhc3Q8QmFzaWNTaGFwZVBhdGg+KG90aGVyKTsKKyAgICBpZiAobV93aW5kUnVs
ZSAhPSBvdGhlclBhdGgubV93aW5kUnVsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuICptX2J5dGVTdHJlYW0gPT0gKm90aGVyUGF0aC5tX2J5dGVTdHJlYW07Cit9CisKK2Jv
b2wgQmFzaWNTaGFwZVBhdGg6OmNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmIG90aGVyKSBjb25z
dAoreworICAgIGlmICh0eXBlKCkgIT0gb3RoZXIudHlwZSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBhdXRvJiBvdGhlclBhdGggPSBkb3duY2FzdDxCYXNpY1NoYXBlUGF0aD4ob3Ro
ZXIpOworICAgIGlmICh3aW5kUnVsZSgpICE9IG90aGVyUGF0aC53aW5kUnVsZSgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgcmV0dXJuIGNhbkJsZW5kU1ZHUGF0aEJ5dGVTdHJl
YW1zKCptX2J5dGVTdHJlYW0sICpvdGhlclBhdGgucGF0aERhdGEoKSk7Cit9CisKK1JlZjxCYXNp
Y1NoYXBlPiBCYXNpY1NoYXBlUGF0aDo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgZnJvbSwgZG91
YmxlIHByb2dyZXNzKSBjb25zdAoreworICAgIEFTU0VSVCh0eXBlKCkgPT0gZnJvbS50eXBlKCkp
OworCisgICAgY29uc3QgYXV0byYgZnJvbVBhdGggPSBkb3duY2FzdDxCYXNpY1NoYXBlUGF0aD4o
ZnJvbSk7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U1ZHUGF0aEJ5dGVTdHJlYW0+IHJlc3VsdGlu
Z1BhdGhCeXRlcyA9IHN0ZDo6bWFrZV91bmlxdWU8U1ZHUGF0aEJ5dGVTdHJlYW0+KCk7CisgICAg
YnVpbGRBbmltYXRlZFNWR1BhdGhCeXRlU3RyZWFtKCpmcm9tUGF0aC5tX2J5dGVTdHJlYW0sICpt
X2J5dGVTdHJlYW0sICpyZXN1bHRpbmdQYXRoQnl0ZXMsIHByb2dyZXNzKTsKKworICAgIFJlZlB0
cjxCYXNpY1NoYXBlUGF0aD4gcmVzdWx0ID0gIEJhc2ljU2hhcGVQYXRoOjpjcmVhdGUoV1RGOjpt
b3ZlKHJlc3VsdGluZ1BhdGhCeXRlcykpOworICAgIHJldHVybiByZXN1bHQucmVsZWFzZU5vbk51
bGwoKTsKK30KKwogYm9vbCBCYXNpY1NoYXBlSW5zZXQ6Om9wZXJhdG9yPT0oY29uc3QgQmFzaWNT
aGFwZSYgb3RoZXIpIGNvbnN0CiB7CiAgICAgaWYgKHR5cGUoKSAhPSBvdGhlci50eXBlKCkpCkBA
IC0yOTUsNiArMzQyLDExIEBAIHZvaWQgQmFzaWNTaGFwZUluc2V0OjpwYXRoKFBhdGgmIHBhdGgs
IGNvbnN0IEZsb2F0UmVjdCYgYm91bmRpbmdCb3gpCiAgICAgcGF0aC5hZGRSb3VuZGVkUmVjdChG
bG9hdFJvdW5kZWRSZWN0KHJlY3QsIHJhZGlpKSk7CiB9CiAKK2Jvb2wgQmFzaWNTaGFwZUluc2V0
OjpjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4g
dHlwZSgpID09IG90aGVyLnR5cGUoKTsKK30KKwogUmVmPEJhc2ljU2hhcGU+IEJhc2ljU2hhcGVJ
bnNldDo6YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYgb3RoZXIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QKIHsKICAgICBBU1NFUlQodHlwZSgpID09IG90aGVyLnR5cGUoKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3R5bGUvQmFzaWNTaGFwZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBlcy5oCmluZGV4IGQ4OGM3YWJkYThlOTBjN2M1
NmVlZmMxYzUxZTQzNjVhNTY4Yjc3MjIuLjgzNmRkZjE0YWViMjI3NjBmNjI3MWUwNWVmMGRmZDI1
ZGQxMWRiYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNp
Y1NoYXBlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdHlsZS9CYXNpY1NoYXBl
cy5oCkBAIC00NCw2ICs0NCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEZsb2F0UmVj
dDsKIGNsYXNzIFBhdGg7CiBjbGFzcyBSZW5kZXJCb3g7CitjbGFzcyBTVkdQYXRoQnl0ZVN0cmVh
bTsKIAogY2xhc3MgQmFzaWNTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2ljU2hhcGU+IHsK
IHB1YmxpYzoKQEAgLTUxLDE4ICs1MiwyMCBAQCBwdWJsaWM6CiAKICAgICBlbnVtIFR5cGUgewog
ICAgICAgICBCYXNpY1NoYXBlUG9seWdvblR5cGUsCisgICAgICAgIEJhc2ljU2hhcGVQYXRoVHlw
ZSwKICAgICAgICAgQmFzaWNTaGFwZUNpcmNsZVR5cGUsCiAgICAgICAgIEJhc2ljU2hhcGVFbGxp
cHNlVHlwZSwKICAgICAgICAgQmFzaWNTaGFwZUluc2V0VHlwZQogICAgIH07CiAKLSAgICBib29s
IGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFR5cGUgdHlw
ZSgpIGNvbnN0ID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBwYXRoKFBhdGgmLCBjb25zdCBGbG9h
dFJlY3QmKSA9IDA7CiAgICAgdmlydHVhbCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IHsgcmV0
dXJuIFJVTEVfTk9OWkVSTzsgfQorCisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kKGNvbnN0IEJh
c2ljU2hhcGUmKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBSZWY8QmFzaWNTaGFwZT4gYmxlbmQo
Y29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkgY29uc3QgPSAwOwogCi0gICAgdmlydHVhbCBUeXBl
IHR5cGUoKSBjb25zdCA9IDA7CiAgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFz
aWNTaGFwZSYpIGNvbnN0ID0gMDsKIH07CiAKQEAgLTE3MSwxNSArMTc0LDE4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldENlbnRlclkoQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUgY2VudGVyWSkg
eyBtX2NlbnRlclkgPSBXVEY6Om1vdmUoY2VudGVyWSk7IH0KICAgICB2b2lkIHNldFJhZGl1cyhC
YXNpY1NoYXBlUmFkaXVzIHJhZGl1cykgeyBtX3JhZGl1cyA9IFdURjo6bW92ZShyYWRpdXMpOyB9
CiAKK3ByaXZhdGU6CisgICAgQmFzaWNTaGFwZUNpcmNsZSgpIHsgfQorCisgICAgdmlydHVhbCBU
eXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNpY1NoYXBlQ2lyY2xlVHlwZTsg
fQorCiAgICAgdmlydHVhbCB2b2lkIHBhdGgoUGF0aCYsIGNvbnN0IEZsb2F0UmVjdCYpIG92ZXJy
aWRlOworCisgICAgdmlydHVhbCBib29sIGNhbkJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmKSBjb25z
dCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIFJlZjxCYXNpY1NoYXBlPiBibGVuZChjb25zdCBCYXNp
Y1NoYXBlJiwgZG91YmxlKSBjb25zdCBvdmVycmlkZTsKIAotICAgIHZpcnR1YWwgVHlwZSB0eXBl
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQmFzaWNTaGFwZUNpcmNsZVR5cGU7IH0KICAgICB2
aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7
CiAKLXByaXZhdGU6Ci0gICAgQmFzaWNTaGFwZUNpcmNsZSgpIHsgfQotCiAgICAgQmFzaWNTaGFw
ZUNlbnRlckNvb3JkaW5hdGUgbV9jZW50ZXJYOwogICAgIEJhc2ljU2hhcGVDZW50ZXJDb29yZGlu
YXRlIG1fY2VudGVyWTsKICAgICBCYXNpY1NoYXBlUmFkaXVzIG1fcmFkaXVzOwpAQCAtMjAwLDE1
ICsyMDYsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmFkaXVzWChCYXNpY1NoYXBlUmFkaXVz
IHJhZGl1c1gpIHsgbV9yYWRpdXNYID0gV1RGOjptb3ZlKHJhZGl1c1gpOyB9CiAgICAgdm9pZCBz
ZXRSYWRpdXNZKEJhc2ljU2hhcGVSYWRpdXMgcmFkaXVzWSkgeyBtX3JhZGl1c1kgPSBXVEY6Om1v
dmUocmFkaXVzWSk7IH0KIAorcHJpdmF0ZToKKyAgICBCYXNpY1NoYXBlRWxsaXBzZSgpIHsgfQor
CisgICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNpY1No
YXBlRWxsaXBzZVR5cGU7IH0KKwogICAgIHZpcnR1YWwgdm9pZCBwYXRoKFBhdGgmLCBjb25zdCBG
bG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZpcnR1YWwgYm9vbCBjYW5CbGVuZChjb25zdCBC
YXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBSZWY8QmFzaWNTaGFwZT4g
YmxlbmQoY29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2
aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIEJhc2ljU2hhcGVFbGxp
cHNlVHlwZTsgfQogICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEJhc2ljU2hhcGUm
KSBjb25zdCBvdmVycmlkZTsKIAotcHJpdmF0ZToKLSAgICBCYXNpY1NoYXBlRWxsaXBzZSgpIHsg
fQotCiAgICAgQmFzaWNTaGFwZUNlbnRlckNvb3JkaW5hdGUgbV9jZW50ZXJYOwogICAgIEJhc2lj
U2hhcGVDZW50ZXJDb29yZGluYXRlIG1fY2VudGVyWTsKICAgICBCYXNpY1NoYXBlUmFkaXVzIG1f
cmFkaXVzWDsKQEAgLTIyNiwyMSArMjM1LDUyIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFdpbmRS
dWxlKFdpbmRSdWxlIHdpbmRSdWxlKSB7IG1fd2luZFJ1bGUgPSB3aW5kUnVsZTsgfQogICAgIHZv
aWQgYXBwZW5kUG9pbnQoTGVuZ3RoIHgsIExlbmd0aCB5KSB7IG1fdmFsdWVzLmFwcGVuZChXVEY6
Om1vdmUoeCkpOyBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHkpKTsgfQogCisgICAgdmlydHVh
bCBXaW5kUnVsZSB3aW5kUnVsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fd2luZFJ1bGU7
IH0KKworcHJpdmF0ZToKKyAgICBCYXNpY1NoYXBlUG9seWdvbigpCisgICAgeworICAgIH0KKwor
ICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gQmFzaWNTaGFw
ZVBvbHlnb25UeXBlOyB9CisKICAgICB2aXJ0dWFsIHZvaWQgcGF0aChQYXRoJiwgY29uc3QgRmxv
YXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxlbmQoY29uc3QgQmFz
aWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZpcnR1YWwgUmVmPEJhc2ljU2hhcGU+IGJs
ZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdmly
dHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOwor
CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZSB7IFJVTEVfTk9OWkVSTyB9OworICAgIFZlY3RvcjxM
ZW5ndGg+IG1fdmFsdWVzOworfTsKKworY2xhc3MgQmFzaWNTaGFwZVBhdGggZmluYWwgOiBwdWJs
aWMgQmFzaWNTaGFwZSB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxCYXNpY1NoYXBlUGF0aD4g
Y3JlYXRlKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mJiBieXRlU3RyZWFtKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQmFzaWNTaGFwZVBhdGgoV1RGOjpt
b3ZlKGJ5dGVTdHJlYW0pKSk7CisgICAgfQorCisgICAgdm9pZCBzZXRXaW5kUnVsZShXaW5kUnVs
ZSB3aW5kUnVsZSkgeyBtX3dpbmRSdWxlID0gd2luZFJ1bGU7IH0KICAgICB2aXJ0dWFsIFdpbmRS
dWxlIHdpbmRSdWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV93aW5kUnVsZTsgfQogCi0g
ICAgdmlydHVhbCBUeXBlIHR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBCYXNpY1NoYXBl
UG9seWdvblR5cGU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0b3I9PShjb25zdCBCYXNpY1No
YXBlJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0qIHBhdGhE
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU3RyZWFtLmdldCgpOyB9CiAKIHByaXZhdGU6Ci0g
ICAgQmFzaWNTaGFwZVBvbHlnb24oKQotICAgICAgICA6IG1fd2luZFJ1bGUoUlVMRV9OT05aRVJP
KQotICAgIHsgfQorICAgIEJhc2ljU2hhcGVQYXRoKHN0ZDo6dW5pcXVlX3B0cjxTVkdQYXRoQnl0
ZVN0cmVhbT4mJik7CiAKLSAgICBXaW5kUnVsZSBtX3dpbmRSdWxlOwotICAgIFZlY3RvcjxMZW5n
dGg+IG1fdmFsdWVzOworICAgIHZpcnR1YWwgVHlwZSB0eXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gQmFzaWNTaGFwZVBhdGhUeXBlOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgcGF0aChQYXRo
JiwgY29uc3QgRmxvYXRSZWN0Jikgb3ZlcnJpZGU7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQmxl
bmQoY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgUmVmPEJh
c2ljU2hhcGU+IGJsZW5kKGNvbnN0IEJhc2ljU2hhcGUmLCBkb3VibGUpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgdmlydHVhbCBib29sIG9wZXJhdG9yPT0oY29uc3QgQmFzaWNTaGFwZSYpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBtX2J5
dGVTdHJlYW07CisgICAgV2luZFJ1bGUgbV93aW5kUnVsZSB7IFJVTEVfTk9OWkVSTyB9OwogfTsK
IAogY2xhc3MgQmFzaWNTaGFwZUluc2V0IGZpbmFsIDogcHVibGljIEJhc2ljU2hhcGUgewpAQCAt
MjY3LDE1ICszMDcsMTggQEAgcHVibGljOgogICAgIHZvaWQgc2V0Qm90dG9tUmlnaHRSYWRpdXMo
TGVuZ3RoU2l6ZSByYWRpdXMpIHsgbV9ib3R0b21SaWdodFJhZGl1cyA9IFdURjo6bW92ZShyYWRp
dXMpOyB9CiAgICAgdm9pZCBzZXRCb3R0b21MZWZ0UmFkaXVzKExlbmd0aFNpemUgcmFkaXVzKSB7
IG1fYm90dG9tTGVmdFJhZGl1cyA9IFdURjo6bW92ZShyYWRpdXMpOyB9CiAKK3ByaXZhdGU6Cisg
ICAgQmFzaWNTaGFwZUluc2V0KCkgeyB9CisKKyAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIEJhc2ljU2hhcGVJbnNldFR5cGU7IH0KKwogICAgIHZpcnR1YWwg
dm9pZCBwYXRoKFBhdGgmLCBjb25zdCBGbG9hdFJlY3QmKSBvdmVycmlkZTsKKworICAgIHZpcnR1
YWwgYm9vbCBjYW5CbGVuZChjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAg
dmlydHVhbCBSZWY8QmFzaWNTaGFwZT4gYmxlbmQoY29uc3QgQmFzaWNTaGFwZSYsIGRvdWJsZSkg
Y29uc3Qgb3ZlcnJpZGU7CiAKLSAgICB2aXJ0dWFsIFR5cGUgdHlwZSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIEJhc2ljU2hhcGVJbnNldFR5cGU7IH0KICAgICB2aXJ0dWFsIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBCYXNpY1NoYXBlJikgY29uc3Qgb3ZlcnJpZGU7CiAKLXByaXZhdGU6Ci0gICAg
QmFzaWNTaGFwZUluc2V0KCkgeyB9Ci0KICAgICBMZW5ndGggbV9yaWdodDsKICAgICBMZW5ndGgg
bV90b3A7CiAgICAgTGVuZ3RoIG1fYm90dG9tOwpAQCAtMjk3LDYgKzM0MCw3IEBAIFNQRUNJQUxJ
WkVfVFlQRV9UUkFJVFNfRU5EKCkKIFNQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkFTSUNfU0hBUEUo
QmFzaWNTaGFwZUNpcmNsZSwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUNpcmNsZVR5cGUpCiBTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJhc2ljU2hhcGVFbGxpcHNlLCBCYXNpY1No
YXBlOjpCYXNpY1NoYXBlRWxsaXBzZVR5cGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lD
X1NIQVBFKEJhc2ljU2hhcGVQb2x5Z29uLCBCYXNpY1NoYXBlOjpCYXNpY1NoYXBlUG9seWdvblR5
cGUpCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JBU0lDX1NIQVBFKEJhc2ljU2hhcGVQYXRoLCBC
YXNpY1NoYXBlOjpCYXNpY1NoYXBlUGF0aFR5cGUpCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JB
U0lDX1NIQVBFKEJhc2ljU2hhcGVJbnNldCwgQmFzaWNTaGFwZTo6QmFzaWNTaGFwZUluc2V0VHlw
ZSkKIAogI2VuZGlmIC8vIEJhc2ljU2hhcGVzX2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJsZW5k
ZXIuY3BwCmluZGV4IDdhYTg0ZThmN2EwZjE0YmUyYzU0ZDU5N2Q5MjU4NDFiNWVlNTY5NDcuLmY1
OWZjYzg4Yjg0MzJlOGI2ODI5NDI5ZjZkMjJkZGQ5ODI3OTYyNzkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoQmxlbmRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCbGVuZGVyLmNwcApAQCAtMzAsMTcgKzMwLDIzIEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogYm9vbCBTVkdQYXRoQmxlbmRlcjo6YWRkQW5pbWF0ZWRQYXRoKFNWR1BhdGhTb3VyY2Um
IGZyb21Tb3VyY2UsIFNWR1BhdGhTb3VyY2UmIHRvU291cmNlLCBTVkdQYXRoQ29uc3VtZXImIGNv
bnN1bWVyLCB1bnNpZ25lZCByZXBlYXRDb3VudCkKIHsKLSAgICBTVkdQYXRoQmxlbmRlciBibGVu
ZGVyKGZyb21Tb3VyY2UsIHRvU291cmNlLCBjb25zdW1lcik7CisgICAgU1ZHUGF0aEJsZW5kZXIg
YmxlbmRlcihmcm9tU291cmNlLCB0b1NvdXJjZSwgJmNvbnN1bWVyKTsKICAgICByZXR1cm4gYmxl
bmRlci5hZGRBbmltYXRlZFBhdGgocmVwZWF0Q291bnQpOwogfQogCiBib29sIFNWR1BhdGhCbGVu
ZGVyOjpibGVuZEFuaW1hdGVkUGF0aChTVkdQYXRoU291cmNlJiBmcm9tU291cmNlLCBTVkdQYXRo
U291cmNlJiB0b1NvdXJjZSwgU1ZHUGF0aENvbnN1bWVyJiBjb25zdW1lciwgZmxvYXQgcHJvZ3Jl
c3MpCiB7Ci0gICAgU1ZHUGF0aEJsZW5kZXIgYmxlbmRlcihmcm9tU291cmNlLCB0b1NvdXJjZSwg
Y29uc3VtZXIpOworICAgIFNWR1BhdGhCbGVuZGVyIGJsZW5kZXIoZnJvbVNvdXJjZSwgdG9Tb3Vy
Y2UsICZjb25zdW1lcik7CiAgICAgcmV0dXJuIGJsZW5kZXIuYmxlbmRBbmltYXRlZFBhdGgocHJv
Z3Jlc3MpOwogfQogCi1TVkdQYXRoQmxlbmRlcjo6U1ZHUGF0aEJsZW5kZXIoU1ZHUGF0aFNvdXJj
ZSYgZnJvbVNvdXJjZSwgU1ZHUGF0aFNvdXJjZSYgdG9Tb3VyY2UsIFNWR1BhdGhDb25zdW1lciYg
Y29uc3VtZXIpCitib29sIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKFNWR1BhdGhTb3Vy
Y2UmIGZyb21Tb3VyY2UsIFNWR1BhdGhTb3VyY2UmIHRvU291cmNlKQoreworICAgIFNWR1BhdGhC
bGVuZGVyIGJsZW5kZXIoZnJvbVNvdXJjZSwgdG9Tb3VyY2UpOworICAgIHJldHVybiBibGVuZGVy
LmNhbkJsZW5kUGF0aHMoKTsKK30KKworU1ZHUGF0aEJsZW5kZXI6OlNWR1BhdGhCbGVuZGVyKFNW
R1BhdGhTb3VyY2UmIGZyb21Tb3VyY2UsIFNWR1BhdGhTb3VyY2UmIHRvU291cmNlLCBTVkdQYXRo
Q29uc3VtZXIqIGNvbnN1bWVyKQogICAgIDogbV9mcm9tU291cmNlKGZyb21Tb3VyY2UpCiAgICAg
LCBtX3RvU291cmNlKHRvU291cmNlKQogICAgICwgbV9jb25zdW1lcihjb25zdW1lcikKQEAgLTEx
OCw3ICsxMjQsMTAgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRNb3ZlVG9TZWdtZW50KGZs
b2F0IHByb2dyZXNzKQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZU1vdmVUb1NlZ21lbnQo
dG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIu
bW92ZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQ
b2ludCwgcHJvZ3Jlc3MpLCBmYWxzZSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zy
b21Nb2RlIDogbV90b01vZGUpOworICAgIGlmICghbV9jb25zdW1lcikKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBtX2NvbnN1bWVyLT5tb3ZlVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQo
ZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIGZhbHNlLCBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9t
Q3VycmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRh
cmdldFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1f
dG9DdXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJn
ZXRQb2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwogICAgIHJldHVybiB0
cnVlOwpAQCAtMTMyLDcgKzE0MSwxMCBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVU
b1NlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlTGlu
ZVRvU2VnbWVudCh0b1RhcmdldFBvaW50KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
bV9jb25zdW1lci5saW5lVG8oYmxlbmRBbmltYXRlZEZsb2F0UG9pbnQoZnJvbVRhcmdldFBvaW50
LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8g
bV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBpZiAoIW1fY29uc3VtZXIpCisgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgbV9jb25zdW1lci0+bGluZVRvKGJsZW5kQW5pbWF0ZWRGbG9hdFBv
aW50KGZyb21UYXJnZXRQb2ludCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3Vy
cmVudFBvaW50ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdl
dFBvaW50IDogbV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwogICAgIG1fdG9D
dXJyZW50UG9pbnQgPSBtX3RvTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gdG9UYXJnZXRQ
b2ludCA6IG1fdG9DdXJyZW50UG9pbnQgKyB0b1RhcmdldFBvaW50OwogICAgIHJldHVybiB0cnVl
OwpAQCAtMTQ2LDcgKzE1OCwxMCBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZExpbmVUb0hv
cml6b250YWxTZWdtZW50KGZsb2F0IHByb2dyZXNzKQogICAgICAgICB8fCAhbV90b1NvdXJjZS5w
YXJzZUxpbmVUb0hvcml6b250YWxTZWdtZW50KHRvWCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIG1fY29uc3VtZXIubGluZVRvSG9yaXpvbnRhbChibGVuZEFuaW1hdGVkRGltZW5zb25h
bEZsb2F0KGZyb21YLCB0b1gsIEJsZW5kSG9yaXpvbnRhbCwgcHJvZ3Jlc3MpLCBtX2lzSW5GaXJz
dEhhbGZPZkFuaW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CisgICAgaWYgKCFtX2Nv
bnN1bWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fY29uc3VtZXItPmxpbmVUb0hv
cml6b250YWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWCwgdG9YLCBCbGVuZEhv
cml6b250YWwsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21N
b2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludC5zZXRYKG1fZnJvbU1vZGUg
PT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21YIDogbV9mcm9tQ3VycmVudFBvaW50LngoKSAr
IGZyb21YKTsKICAgICBtX3RvQ3VycmVudFBvaW50LnNldFgobV90b01vZGUgPT0gQWJzb2x1dGVD
b29yZGluYXRlcyA/IHRvWCA6IG1fdG9DdXJyZW50UG9pbnQueCgpICsgdG9YKTsKICAgICByZXR1
cm4gdHJ1ZTsKQEAgLTE2MCw3ICsxNzUsMTAgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRM
aW5lVG9WZXJ0aWNhbFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiAgICAgICAgIHx8ICFtX3RvU291
cmNlLnBhcnNlTGluZVRvVmVydGljYWxTZWdtZW50KHRvWSkpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIG1fY29uc3VtZXIubGluZVRvVmVydGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29u
YWxGbG9hdChmcm9tWSwgdG9ZLCBCbGVuZFZlcnRpY2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0
SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBpZiAoIW1fY29u
c3VtZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9jb25zdW1lci0+bGluZVRvVmVy
dGljYWwoYmxlbmRBbmltYXRlZERpbWVuc29uYWxGbG9hdChmcm9tWSwgdG9ZLCBCbGVuZFZlcnRp
Y2FsLCBwcm9ncmVzcyksIG1faXNJbkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6
IG1fdG9Nb2RlKTsKICAgICBtX2Zyb21DdXJyZW50UG9pbnQuc2V0WShtX2Zyb21Nb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMgPyBmcm9tWSA6IG1fZnJvbUN1cnJlbnRQb2ludC55KCkgKyBmcm9t
WSk7CiAgICAgbV90b0N1cnJlbnRQb2ludC5zZXRZKG1fdG9Nb2RlID09IEFic29sdXRlQ29vcmRp
bmF0ZXMgPyB0b1kgOiBtX3RvQ3VycmVudFBvaW50LnkoKSArIHRvWSk7CiAgICAgcmV0dXJuIHRy
dWU7CkBAIC0xNzgsNyArMTk2LDEwIEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQ3VydmVU
b0N1YmljU2VnbWVudChmbG9hdCBwcm9ncmVzcykKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFy
c2VDdXJ2ZVRvQ3ViaWNTZWdtZW50KHRvUG9pbnQxLCB0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljKGJs
ZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBwcm9ncmVzcyksCisg
ICAgaWYgKCFtX2NvbnN1bWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fY29uc3Vt
ZXItPmN1cnZlVG9DdWJpYyhibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1Bv
aW50MSwgcHJvZ3Jlc3MpLAogICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9p
bnQyLCB0b1BvaW50MiwgcHJvZ3Jlc3MpLAogICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2lu
dChmcm9tVGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9p
c0luRmlyc3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwpAQCAtMTk3
LDcgKzIxOCwxMCBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9DdWJpY1Ntb290
aFNlZ21lbnQoZmxvYXQgcHJvZ3Jlc3MpCiAgICAgICAgIHx8ICFtX3RvU291cmNlLnBhcnNlQ3Vy
dmVUb0N1YmljU21vb3RoU2VnbWVudCh0b1BvaW50MiwgdG9UYXJnZXRQb2ludCkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIuY3VydmVUb0N1YmljU21vb3RoKGJsZW5k
QW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDIsIHRvUG9pbnQyLCBwcm9ncmVzcyksCisgICAg
aWYgKCFtX2NvbnN1bWVyKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIG1fY29uc3VtZXIt
PmN1cnZlVG9DdWJpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tUG9pbnQyLCB0
b1BvaW50MiwgcHJvZ3Jlc3MpLAogICAgICAgICBibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9t
VGFyZ2V0UG9pbnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwKICAgICAgICAgbV9pc0luRmly
c3RIYWxmT2ZBbmltYXRpb24gPyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1
cnJlbnRQb2ludCA9IG1fZnJvbU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJn
ZXRQb2ludCA6IG1fZnJvbUN1cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKQEAgLTIxNSw3
ICsyMzksMTAgQEAgYm9vbCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRDdXJ2ZVRvUXVhZHJhdGljU2Vn
bWVudChmbG9hdCBwcm9ncmVzcykKICAgICAgICAgfHwgIW1fdG9Tb3VyY2UucGFyc2VDdXJ2ZVRv
UXVhZHJhdGljU2VnbWVudCh0b1BvaW50MSwgdG9UYXJnZXRQb2ludCkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKIAotICAgIG1fY29uc3VtZXIuY3VydmVUb1F1YWRyYXRpYyhibGVuZEFuaW1hdGVk
RmxvYXRQb2ludChmcm9tUG9pbnQxLCB0b1BvaW50MSwgcHJvZ3Jlc3MpLAorICAgIGlmICghbV9j
b25zdW1lcikKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX2NvbnN1bWVyLT5jdXJ2ZVRv
UXVhZHJhdGljKGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21Qb2ludDEsIHRvUG9pbnQxLCBw
cm9ncmVzcyksCiAgICAgICAgIGJsZW5kQW5pbWF0ZWRGbG9hdFBvaW50KGZyb21UYXJnZXRQb2lu
dCwgdG9UYXJnZXRQb2ludCwgcHJvZ3Jlc3MpLAogICAgICAgICBtX2lzSW5GaXJzdEhhbGZPZkFu
aW1hdGlvbiA/IG1fZnJvbU1vZGUgOiBtX3RvTW9kZSk7CiAgICAgbV9mcm9tQ3VycmVudFBvaW50
ID0gbV9mcm9tTW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzID8gZnJvbVRhcmdldFBvaW50IDog
bV9mcm9tQ3VycmVudFBvaW50ICsgZnJvbVRhcmdldFBvaW50OwpAQCAtMjMxLDcgKzI1OCwxMCBA
QCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEN1cnZlVG9RdWFkcmF0aWNTbW9vdGhTZWdtZW50
KGZsb2F0IHByb2dyZXNzKQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUN1cnZlVG9RdWFk
cmF0aWNTbW9vdGhTZWdtZW50KHRvVGFyZ2V0UG9pbnQpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKLSAgICBtX2NvbnN1bWVyLmN1cnZlVG9RdWFkcmF0aWNTbW9vdGgoYmxlbmRBbmltYXRlZEZs
b2F0UG9pbnQoZnJvbVRhcmdldFBvaW50LCB0b1RhcmdldFBvaW50LCBwcm9ncmVzcyksIG1faXNJ
bkZpcnN0SGFsZk9mQW5pbWF0aW9uID8gbV9mcm9tTW9kZSA6IG1fdG9Nb2RlKTsKKyAgICBpZiAo
IW1fY29uc3VtZXIpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9jb25zdW1lci0+Y3Vy
dmVUb1F1YWRyYXRpY1Ntb290aChibGVuZEFuaW1hdGVkRmxvYXRQb2ludChmcm9tVGFyZ2V0UG9p
bnQsIHRvVGFyZ2V0UG9pbnQsIHByb2dyZXNzKSwgbV9pc0luRmlyc3RIYWxmT2ZBbmltYXRpb24g
PyBtX2Zyb21Nb2RlIDogbV90b01vZGUpOwogICAgIG1fZnJvbUN1cnJlbnRQb2ludCA9IG1fZnJv
bU1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IGZyb21UYXJnZXRQb2ludCA6IG1fZnJvbUN1
cnJlbnRQb2ludCArIGZyb21UYXJnZXRQb2ludDsKICAgICBtX3RvQ3VycmVudFBvaW50ID0gbV90
b01vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcyA/IHRvVGFyZ2V0UG9pbnQgOiBtX3RvQ3VycmVu
dFBvaW50ICsgdG9UYXJnZXRQb2ludDsKICAgICByZXR1cm4gdHJ1ZTsKQEAgLTI1NSwxMSArMjg1
LDE0IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmJsZW5kQXJjVG9TZWdtZW50KGZsb2F0IHByb2dy
ZXNzKQogICAgICAgICB8fCAhbV90b1NvdXJjZS5wYXJzZUFyY1RvU2VnbWVudCh0b1J4LCB0b1J5
LCB0b0FuZ2xlLCB0b0xhcmdlQXJjLCB0b1N3ZWVwLCB0b1RhcmdldFBvaW50KSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCisgICAgaWYgKCFtX2NvbnN1bWVyKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKwogICAgIGlmIChtX2FkZFR5cGVzQ291bnQpIHsKICAgICAgICAgQVNTRVJUKG1fZnJvbU1v
ZGUgPT0gbV90b01vZGUpOwogICAgICAgICBGbG9hdFBvaW50IHNjYWxlZFRvVGFyZ2V0UG9pbnQg
PSB0b1RhcmdldFBvaW50OwogICAgICAgICBzY2FsZWRUb1RhcmdldFBvaW50LnNjYWxlKG1fYWRk
VHlwZXNDb3VudCwgbV9hZGRUeXBlc0NvdW50KTsKLSAgICAgICAgbV9jb25zdW1lci5hcmNUbyhm
cm9tUnggKyB0b1J4ICogbV9hZGRUeXBlc0NvdW50LAorICAgICAgICBtX2NvbnN1bWVyLT5hcmNU
byhmcm9tUnggKyB0b1J4ICogbV9hZGRUeXBlc0NvdW50LAogICAgICAgICAgICAgZnJvbVJ5ICsg
dG9SeSAqIG1fYWRkVHlwZXNDb3VudCwKICAgICAgICAgICAgIGZyb21BbmdsZSArIHRvQW5nbGUg
KiBtX2FkZFR5cGVzQ291bnQsCiAgICAgICAgICAgICBmcm9tTGFyZ2VBcmMgfHwgdG9MYXJnZUFy
YywKQEAgLTI2Nyw3ICszMDAsNyBAQCBib29sIFNWR1BhdGhCbGVuZGVyOjpibGVuZEFyY1RvU2Vn
bWVudChmbG9hdCBwcm9ncmVzcykKICAgICAgICAgICAgIGZyb21UYXJnZXRQb2ludCArIHNjYWxl
ZFRvVGFyZ2V0UG9pbnQsCiAgICAgICAgICAgICBtX2Zyb21Nb2RlKTsKICAgICB9IGVsc2Ugewot
ICAgICAgICBtX2NvbnN1bWVyLmFyY1RvKGJsZW5kKGZyb21SeCwgdG9SeCwgcHJvZ3Jlc3MpLAor
ICAgICAgICBtX2NvbnN1bWVyLT5hcmNUbyhibGVuZChmcm9tUngsIHRvUngsIHByb2dyZXNzKSwK
ICAgICAgICAgICAgIGJsZW5kKGZyb21SeSwgdG9SeSwgcHJvZ3Jlc3MpLAogICAgICAgICAgICAg
YmxlbmQoZnJvbUFuZ2xlLCB0b0FuZ2xlLCBwcm9ncmVzcyksCiAgICAgICAgICAgICBtX2lzSW5G
aXJzdEhhbGZPZkFuaW1hdGlvbiA/IGZyb21MYXJnZUFyYyA6IHRvTGFyZ2VBcmMsCkBAIC0zMTIs
NiArMzQ1LDg3IEBAIGJvb2wgU1ZHUGF0aEJsZW5kZXI6OmFkZEFuaW1hdGVkUGF0aCh1bnNpZ25l
ZCByZXBlYXRDb3VudCkKICAgICByZXR1cm4gYmxlbmRBbmltYXRlZFBhdGgoMCk7CiB9CiAKK2Jv
b2wgU1ZHUGF0aEJsZW5kZXI6OmNhbkJsZW5kUGF0aHMoKQoreworICAgIGZsb2F0IHByb2dyZXNz
ID0gMC41OworICAgIGJvb2wgZnJvbVNvdXJjZUhhZERhdGEgPSBtX2Zyb21Tb3VyY2UuaGFzTW9y
ZURhdGEoKTsKKyAgICB3aGlsZSAobV90b1NvdXJjZS5oYXNNb3JlRGF0YSgpKSB7CisgICAgICAg
IFNWR1BhdGhTZWdUeXBlIGZyb21Db21tYW5kOworICAgICAgICBTVkdQYXRoU2VnVHlwZSB0b0Nv
bW1hbmQ7CisgICAgICAgIGlmICgoZnJvbVNvdXJjZUhhZERhdGEgJiYgIW1fZnJvbVNvdXJjZS5w
YXJzZVNWR1NlZ21lbnRUeXBlKGZyb21Db21tYW5kKSkgfHwgIW1fdG9Tb3VyY2UucGFyc2VTVkdT
ZWdtZW50VHlwZSh0b0NvbW1hbmQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIG1fdG9Nb2RlID0gY29vcmRpbmF0ZU1vZGVPZkNvbW1hbmQodG9Db21tYW5kKTsKKyAgICAg
ICAgbV9mcm9tTW9kZSA9IGZyb21Tb3VyY2VIYWREYXRhID8gY29vcmRpbmF0ZU1vZGVPZkNvbW1h
bmQoZnJvbUNvbW1hbmQpIDogbV90b01vZGU7CisgICAgICAgIGlmIChtX2Zyb21Nb2RlICE9IG1f
dG9Nb2RlICYmIG1fYWRkVHlwZXNDb3VudCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAoZnJvbVNvdXJjZUhhZERhdGEgJiYgIWlzU2VnbWVudEVxdWFsKGZyb21Db21t
YW5kLCB0b0NvbW1hbmQsIG1fZnJvbU1vZGUsIG1fdG9Nb2RlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBzd2l0Y2ggKHRvQ29tbWFuZCkgeworICAgICAgICBjYXNlIFBh
dGhTZWdNb3ZlVG9SZWw6CisgICAgICAgIGNhc2UgUGF0aFNlZ01vdmVUb0FiczoKKyAgICAgICAg
ICAgIGlmICghYmxlbmRNb3ZlVG9TZWdtZW50KHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnTGlu
ZVRvUmVsOgorICAgICAgICBjYXNlIFBhdGhTZWdMaW5lVG9BYnM6CisgICAgICAgICAgICBpZiAo
IWJsZW5kTGluZVRvU2VnbWVudChwcm9ncmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6
b250YWxSZWw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0xpbmVUb0hvcml6b250YWxBYnM6CisgICAg
ICAgICAgICBpZiAoIWJsZW5kTGluZVRvSG9yaXpvbnRhbFNlZ21lbnQocHJvZ3Jlc3MpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFBhdGhTZWdMaW5lVG9WZXJ0aWNhbFJlbDoKKyAgICAgICAgY2FzZSBQYXRoU2VnTGluZVRv
VmVydGljYWxBYnM6CisgICAgICAgICAgICBpZiAoIWJsZW5kTGluZVRvVmVydGljYWxTZWdtZW50
KHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBQYXRoU2VnQ2xvc2VQYXRoOgorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1JlbDoKKyAgICAgICAgY2FzZSBQYXRo
U2VnQ3VydmVUb0N1YmljQWJzOgorICAgICAgICAgICAgaWYgKCFibGVuZEN1cnZlVG9DdWJpY1Nl
Z21lbnQocHJvZ3Jlc3MpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNTbW9vdGhSZWw6Cisg
ICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9DdWJpY1Ntb290aEFiczoKKyAgICAgICAgICAgIGlm
ICghYmxlbmRDdXJ2ZVRvQ3ViaWNTbW9vdGhTZWdtZW50KHByb2dyZXNzKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBQYXRo
U2VnQ3VydmVUb1F1YWRyYXRpY1JlbDoKKyAgICAgICAgY2FzZSBQYXRoU2VnQ3VydmVUb1F1YWRy
YXRpY0FiczoKKyAgICAgICAgICAgIGlmICghYmxlbmRDdXJ2ZVRvUXVhZHJhdGljU2VnbWVudChw
cm9ncmVzcykpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhSZWw6CisgICAg
ICAgIGNhc2UgUGF0aFNlZ0N1cnZlVG9RdWFkcmF0aWNTbW9vdGhBYnM6CisgICAgICAgICAgICBp
ZiAoIWJsZW5kQ3VydmVUb1F1YWRyYXRpY1Ntb290aFNlZ21lbnQocHJvZ3Jlc3MpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFBhdGhTZWdBcmNSZWw6CisgICAgICAgIGNhc2UgUGF0aFNlZ0FyY0FiczoKKyAgICAgICAgICAg
IGlmICghYmxlbmRBcmNUb1NlZ21lbnQocHJvZ3Jlc3MpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBhdGhTZWdVbmtub3du
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFm
cm9tU291cmNlSGFkRGF0YSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAobV9m
cm9tU291cmNlLmhhc01vcmVEYXRhKCkgIT0gbV90b1NvdXJjZS5oYXNNb3JlRGF0YSgpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAoIW1fZnJvbVNvdXJjZS5oYXNNb3Jl
RGF0YSgpIHx8ICFtX3RvU291cmNlLmhhc01vcmVEYXRhKCkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBTVkdQYXRoQmxlbmRl
cjo6YmxlbmRBbmltYXRlZFBhdGgoZmxvYXQgcHJvZ3Jlc3MpCiB7CiAgICAgbV9pc0luRmlyc3RI
YWxmT2ZBbmltYXRpb24gPSBwcm9ncmVzcyA8IDAuNWY7CkBAIC0zNTMsNyArNDY3LDcgQEAgYm9v
bCBTVkdQYXRoQmxlbmRlcjo6YmxlbmRBbmltYXRlZFBhdGgoZmxvYXQgcHJvZ3Jlc3MpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgUGF0aFNlZ0Nsb3NlUGF0aDoKLSAgICAgICAgICAgIG1fY29uc3VtZXIuY2xvc2VQYXRoKCk7
CisgICAgICAgICAgICBtX2NvbnN1bWVyLT5jbG9zZVBhdGgoKTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIFBhdGhTZWdDdXJ2ZVRvQ3ViaWNSZWw6CiAgICAgICAgIGNhc2UgUGF0
aFNlZ0N1cnZlVG9DdWJpY0FiczoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQ
YXRoQmxlbmRlci5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVyLmgKaW5kZXgg
NTA1ZDEwODA3MTQwZjVkNDA0N2ZiYjg1YjcxMDE1OWQ2Y2I1YmM3Mi4uZGFlN2UxMGEzNDRkMzMy
ZWI4NmJkMDRiOTVmNDg4MGVhNWIxYzNiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhCbGVuZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCbGVuZGVy
LmgKQEAgLTM5LDggKzM5LDEyIEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBhZGRBbmltYXRl
ZFBhdGgoU1ZHUGF0aFNvdXJjZSYgZnJvbSwgU1ZHUGF0aFNvdXJjZSYgdG8sIFNWR1BhdGhDb25z
dW1lciYsIHVuc2lnbmVkIHJlcGVhdENvdW50KTsKICAgICBzdGF0aWMgYm9vbCBibGVuZEFuaW1h
dGVkUGF0aChTVkdQYXRoU291cmNlJiBmcm9tLCBTVkdQYXRoU291cmNlJiB0bywgU1ZHUGF0aENv
bnN1bWVyJiwgZmxvYXQpOwogCisgICAgc3RhdGljIGJvb2wgY2FuQmxlbmRQYXRocyhTVkdQYXRo
U291cmNlJiBmcm9tLCBTVkdQYXRoU291cmNlJiB0byk7CisKIHByaXZhdGU6Ci0gICAgU1ZHUGF0
aEJsZW5kZXIoU1ZHUGF0aFNvdXJjZSYsIFNWR1BhdGhTb3VyY2UmLCBTVkdQYXRoQ29uc3VtZXIm
KTsKKyAgICBTVkdQYXRoQmxlbmRlcihTVkdQYXRoU291cmNlJiwgU1ZHUGF0aFNvdXJjZSYsIFNW
R1BhdGhDb25zdW1lciogPSBudWxscHRyKTsKKworICAgIGJvb2wgY2FuQmxlbmRQYXRocygpOwog
CiAgICAgYm9vbCBhZGRBbmltYXRlZFBhdGgodW5zaWduZWQgcmVwZWF0Q291bnQpOwogICAgIGJv
b2wgYmxlbmRBbmltYXRlZFBhdGgoZmxvYXQgcHJvZ3Jlc3MpOwpAQCAtNjAsNyArNjQsNyBAQCBw
cml2YXRlOgogCiAgICAgU1ZHUGF0aFNvdXJjZSYgbV9mcm9tU291cmNlOwogICAgIFNWR1BhdGhT
b3VyY2UmIG1fdG9Tb3VyY2U7Ci0gICAgU1ZHUGF0aENvbnN1bWVyJiBtX2NvbnN1bWVyOworICAg
IFNWR1BhdGhDb25zdW1lciogbV9jb25zdW1lcjsgLy8gQSBudWxsIGNvbnN1bWVyIGluZGljYXRl
cyB0aGF0IHdlJ3JlIGp1c3QgY2hlY2tpbmcgYmxlbmRhYmlsaXR5LgogCiAgICAgRmxvYXRQb2lu
dCBtX2Zyb21DdXJyZW50UG9pbnQ7CiAgICAgRmxvYXRQb2ludCBtX3RvQ3VycmVudFBvaW50Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1BhdGhCeXRlU3RyZWFtLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaAppbmRleCBhODNhZmVmOWJkMzE3N2I5
OGIyNzgyMGEyNTNkMjFiODQ4YzZhMjQwLi4wYmQ3Yjc1MzNiYmFkOTc4ZDMwZTk4YTk4YWM1ZDdk
ODEzMzFjMzVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJl
YW0uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW0uaApAQCAtNDks
NiArNDksMTEgQEAgcHVibGljOgogCiAgICAgU1ZHUGF0aEJ5dGVTdHJlYW0oKSB7IH0KICAgICBT
VkdQYXRoQnl0ZVN0cmVhbShjb25zdCBEYXRhJiBkYXRhKSA6IG1fZGF0YShkYXRhKSB7IH0KKyAg
ICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIG90aGVyKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YSA9PSBvdGhlci5tX2RhdGE7CisgICAg
fQogCiAgICAgc3RkOjp1bmlxdWVfcHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBjb3B5KCkgY29uc3QK
ICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxpdGllcy5jcHAKaW5kZXggYmFiNDk4
ZjRkMjJkZmM2MzJjZThkYjJlYjhhYzdkZDRkOTdiYTc5ZC4uMTQyYTIyY2I5NmMzNmQwZjMzYmI0
NTQ1ZmY1YmE4NWJhOTIzYmU0YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1Bh
dGhVdGlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVz
LmNwcApAQCAtMTI1LDYgKzEyNSwxMyBAQCBib29sIGJ1aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9t
U3RyaW5nKGNvbnN0IFN0cmluZyYgZCwgU1ZHUGF0aEJ5dGVTdHJlYW0mIHJlc3VsdAogICAgIHJl
dHVybiBTVkdQYXRoUGFyc2VyOjpwYXJzZVRvQnl0ZVN0cmVhbShzb3VyY2UsIHJlc3VsdCwgcGFy
c2luZ01vZGUpOwogfQogCitib29sIGNhbkJsZW5kU1ZHUGF0aEJ5dGVTdHJlYW1zKGNvbnN0IFNW
R1BhdGhCeXRlU3RyZWFtJiBmcm9tU3RyZWFtLCBjb25zdCBTVkdQYXRoQnl0ZVN0cmVhbSYgdG9T
dHJlYW0pCit7CisgICAgU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UgZnJvbVNvdXJjZShmcm9tU3Ry
ZWFtKTsKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZSB0b1NvdXJjZSh0b1N0cmVhbSk7Cisg
ICAgcmV0dXJuIFNWR1BhdGhCbGVuZGVyOjpjYW5CbGVuZFBhdGhzKGZyb21Tb3VyY2UsIHRvU291
cmNlKTsKK30KKwogYm9vbCBidWlsZEFuaW1hdGVkU1ZHUGF0aEJ5dGVTdHJlYW0oY29uc3QgU1ZH
UGF0aEJ5dGVTdHJlYW0mIGZyb21TdHJlYW0sIGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiB0b1N0
cmVhbSwgU1ZHUGF0aEJ5dGVTdHJlYW0mIHJlc3VsdCwgZmxvYXQgcHJvZ3Jlc3MpCiB7CiAgICAg
QVNTRVJUKCZ0b1N0cmVhbSAhPSAmcmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHUGF0aFV0aWxp
dGllcy5oCmluZGV4IGY2NGExMjQ4NDFkZjA5Njg0ODI1YWMxMmE0ODMyYWJiOGZlYTg3MWIuLjQ1
ZDI5ZmI5NTY3MWE0MDZmMDdkMWI0YTAwMWVmYTliMDk0ZDNhY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdQYXRoVXRpbGl0aWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1BhdGhVdGlsaXRpZXMuaApAQCAtNDksNiArNDksOCBAQCBib29sIGJ1aWxkU3RyaW5nRnJv
bVNWR1BhdGhTZWdMaXN0KGNvbnN0IFNWR1BhdGhTZWdMaXN0JiwgU3RyaW5nJiwgUGF0aFBhcnNp
bmdNbwogLy8gU1ZHUGF0aEJ5dGVTdHJlYW0gLT4gU1ZHUGF0aFNlZ0xpc3QKIGJvb2wgYnVpbGRT
VkdQYXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiwgU1ZH
UGF0aEVsZW1lbnQmLCBTVkdQYXRoU2VnTGlzdCYsIFBhdGhQYXJzaW5nTW9kZSk7CiAKK2Jvb2wg
Y2FuQmxlbmRTVkdQYXRoQnl0ZVN0cmVhbXMoY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIGZyb20s
IGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiB0byk7CisKIGJvb2wgYnVpbGRBbmltYXRlZFNWR1Bh
dGhCeXRlU3RyZWFtKGNvbnN0IFNWR1BhdGhCeXRlU3RyZWFtJiBmcm9tLCBjb25zdCBTVkdQYXRo
Qnl0ZVN0cmVhbSYgdG8sIFNWR1BhdGhCeXRlU3RyZWFtJiByZXN1bHQsIGZsb2F0IHByb2dyZXNz
KTsKIGJvb2wgYWRkVG9TVkdQYXRoQnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSYgc3RyZWFt
VG9BcHBlbmRUbywgY29uc3QgU1ZHUGF0aEJ5dGVTdHJlYW0mIGZyb20sIHVuc2lnbmVkIHJlcGVh
dENvdW50ID0gMSk7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91
dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhMzYxMWY3ZDUwY2U2ZmMyYzc1MzE4YTBiNWQxNGFiZjY2
YmYzNzFhLi5jZGM2YWE1MmI0NDBmZTYwZGIwZTM0Yjk1ZTI4ODg2NThmZDE5M2MzIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjYgQEAKKzIwMTUtMTAtMjUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBh
cHBsZS5jb20+CisKKyAgICAgICAgU3VwcG9ydCBiZXppZXIgcGF0aHMgaW4gY2xpcC1wYXRoIHBy
b3BlcnR5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDk5OTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIFRlc3RzIGZvciBjb21wb3NpdGluZyB3aXRoIGNsaXAtcGF0aCBhbmQgYSBjb21wb3Np
dGVkIGRlc2NlbmRhbnQsCisgICAgICAgIGEgcmVmIHRlc3Qgd2hpY2ggdGVzdHMgY2xpcC1wYXRo
cyB3aXRoIGV2ZW5vZGQsIGNvbXBhcmluZyB0byBTVkcgcmVuZGVyaW5nLAorICAgICAgICBhbmQg
YSB0cmFuc2l0aW9uIHRlc3QgdG8gdGVzdCBwYXRoIGJsZW5kYWJpbGl0eS4KKworICAgICAgICAq
IGNvbXBvc2l0aW5nL21hc2tzL2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBjb21wb3NpdGluZy9tYXNrcy9jbGlwLXBhdGgtY29t
cG9zaXRlZC1kZXNjZW5kZW50Lmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMvbWFza2luZy9j
bGlwLXBhdGgtd2l0aC1wYXRoLWV4cGVjdGVkLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGNzczMv
bWFza2luZy9jbGlwLXBhdGgtd2l0aC1wYXRoLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHRyYW5z
aXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisg
ICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDogQWRk
ZWQuCisgICAgICAgICogdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxw
ZXJzLmpzOiBBZGQgc29tZSBiYXNpYyBwYXJzaW5nCisgICAgICAgIHN1cHBvcnQgZm9yIHBhdGhz
LgorICAgICAgICAoZXh0cmFjdFBhdGhWYWx1ZXMpOgorICAgICAgICAocGFyc2VDbGlwUGF0aCk6
CisgICAgICAgICogdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLWV4cGVjdGVkLnR4dDoKKwog
MjAxNS0xMC0yMyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFJh
ZGlvTm9kZUxpc3Qgc2hvdWxkIGJlIGV4cG9zZWQgb24gV2luZG93CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9jb21wb3NpdGluZy9tYXNrcy9jbGlwLXBhdGgtY29tcG9zaXRlZC1kZXNjZW5kZW50
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL21hc2tzL2NsaXAtcGF0aC1j
b21wb3NpdGVkLWRlc2NlbmRlbnQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2ZGRkNTNhYzQ4
ZTdlMmY3ODZhYmE5MDQzM2UyYTMxOTJiMGIzNDUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy9jb21wb3NpdGluZy9tYXNrcy9jbGlwLXBhdGgtY29tcG9zaXRlZC1kZXNjZW5kZW50LWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDI3IEBACisoR3JhcGhpY3NMYXllcgorICAoYW5jaG9yIDAu
MDAgMC4wMCkKKyAgKGJvdW5kcyA4MDAuMDAgNjAwLjAwKQorICAoY2hpbGRyZW4gMQorICAgIChH
cmFwaGljc0xheWVyCisgICAgICAoYm91bmRzIDgwMC4wMCA2MDAuMDApCisgICAgICAoY29udGVu
dHNPcGFxdWUgMSkKKyAgICAgIChjaGlsZHJlbiAxCisgICAgICAgIChHcmFwaGljc0xheWVyCisg
ICAgICAgICAgKHBvc2l0aW9uIDguMDAgOC4wMCkKKyAgICAgICAgICAoYm91bmRzIDIwMC4wMCAy
MDAuMDApCisgICAgICAgICAgKG1hc2sgbGF5ZXIpCisgICAgICAgICAgICAoR3JhcGhpY3NMYXll
cgorICAgICAgICAgICAgICAoYm91bmRzIDIwMC4wMCAyMDAuMDApCisgICAgICAgICAgICApCisg
ICAgICAgICAgKGNoaWxkcmVuIDEKKyAgICAgICAgICAgIChHcmFwaGljc0xheWVyCisgICAgICAg
ICAgICAgIChib3VuZHMgMzAwLjAwIDMwMC4wMCkKKyAgICAgICAgICAgICAgKGNvbnRlbnRzT3Bh
cXVlIDEpCisgICAgICAgICAgICApCisgICAgICAgICAgKQorICAgICAgICApCisgICAgICApCisg
ICAgKQorICApCispCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2NvbXBvc2l0aW5nL21hc2tz
L2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQuaHRtbCBiL0xheW91dFRlc3RzL2NvbXBv
c2l0aW5nL21hc2tzL2NsaXAtcGF0aC1jb21wb3NpdGVkLWRlc2NlbmRlbnQuaHRtbApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41MWFkMDRlNjUzNjQzNTkxZmUxZmNjMzE5ZDQ2NmZiZjgzNTNmNTVhCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvY29tcG9zaXRpbmcvbWFza3MvY2xpcC1wYXRoLWNvbXBvc2l0
ZWQtZGVzY2VuZGVudC5odG1sCkBAIC0wLDAgKzEsNDAgQEAKKzwhRE9DVFlQRSBodG1sPgorCis8
aHRtbD4KKzxoZWFkPgorICAgIDx0aXRsZT5UZXN0cyB0aGF0IGNsaXAtcGF0aCB3aXRoIGEgY29t
cG9zaXRlZCBkZXNjZW5kZW50IHRyaWdnZXJzIGNvbXBvc2l0ZWQgY2xpcHBpbmc8L3RpdGxlPgor
ICAgIDxzdHlsZT4KKyAgICAgICAgLmJveCB7CisgICAgICAgICAgICB3aWR0aDogMjAwcHg7Cisg
ICAgICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
cmVkOworICAgICAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IGluc2V0KDEwMHB4IDEwMHB4IDBw
eCAwcHgpOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAuY2hpbGQgeworICAgICAgICAg
ICAgd2lkdGg6IDMwMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAzMDBweDsKKyAgICAgICAgICAg
IGJhY2tncm91bmQtY29sb3I6IGdyZWVuOworICAgICAgICAgICAgLXdlYmtpdC10cmFuc2Zvcm06
IHRyYW5zbGF0ZVooMCk7CisgICAgICAgIH0KKyAgICA8L3N0eWxlPgorICAgIDxzY3JpcHQ+Cisg
ICAgICAgIGlmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICAgICAgICAgIHRlc3RSdW5uZXIuZHVt
cEFzVGV4dCgpOworCisgICAgICAgIGZ1bmN0aW9uIGRvVGVzdCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKQorICAgICAgICAgICAgICAgIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdsYXllcnMnKS50ZXh0Q29udGVudCA9IHdpbmRvdy5pbnRlcm5hbHMubGF5
ZXJUcmVlQXNUZXh0KGRvY3VtZW50KTsKKworICAgICAgICB9CisgICAgICAgIHdpbmRvdy5hZGRF
dmVudExpc3RlbmVyKCdsb2FkJywgZG9UZXN0LCBmYWxzZSk7CisgICAgPC9zY3JpcHQ+Cis8L2hl
YWQ+Cis8Ym9keT4KKyAgICA8ZGl2IGNsYXNzPSJib3giPgorICAgICAgICA8ZGl2IGNsYXNzPSJj
aGlsZCI+PC9kaXY+CisgICAgPC9kaXY+Cis8cHJlIGlkPSJsYXllcnMiPjwvcHJlPgorPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvY3NzMy9tYXNraW5nL2NsaXAtcGF0
aC13aXRoLXBhdGgtZXhwZWN0ZWQuaHRtbCBiL0xheW91dFRlc3RzL2NzczMvbWFza2luZy9jbGlw
LXBhdGgtd2l0aC1wYXRoLWV4cGVjdGVkLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDRhNzFjNTZiYWFiYjBh
M2EwOWEwOGUxN2YxMzMzMGZlNDEyODNjNwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2NzczMvbWFza2luZy9jbGlwLXBhdGgtd2l0aC1wYXRoLWV4cGVjdGVkLmh0bWwKQEAgLTAsMCAr
MSwzNCBAQAorPCFET0NUWVBFIGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgICAgPHN0eWxlPgor
ICAgICAgICAuYm94IHsKKyAgICAgICAgICAgIG1hcmdpbjogMjBweDsKKyAgICAgICAgICAgIGhl
aWdodDogMTUwcHg7CisgICAgICAgICAgICB3aWR0aDogMjAwcHg7CisgICAgICAgIH0KKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisKKzxkaXYgY2xhc3M9ImJveCI+CisgICAgPHN2ZyB3
aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2aWV3Qm94PSIwIDAgMjAwIDE1MCI+CisJCTxjbGlw
UGF0aCBpZD0iY2xpcDEiPgorCQkJPHBhdGggZD0iTTEwMCw0MGwyMCwwIDAsNjAgMjAsMCAwLC0y
MCAtNjAsMCAwLC0yMCA4MCwwIDAsNjAgLTYwLDAgMCwtODB6Ii8+CisJCTwvY2xpcFBhdGg+CisJ
CTxyZWN0IHg9IjUwIiB5PSIzMCIgd2lkdGg9IjM1MCIgaGVpZ2h0PSIxMDAiIGZpbGw9ImJsdWUi
IGNsaXAtcGF0aD0idXJsKCNjbGlwMSkiLz4KKyAgICA8L3N2Zz4KKzwvZGl2PgorCis8ZGl2IGNs
YXNzPSJldmVub2RkIGJveCI+CisgICAgPHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB2
aWV3Qm94PSIwIDAgMjAwIDE1MCI+CisJCTxjbGlwUGF0aCBpZD0iY2xpcDIiPgorCQkJPHBhdGgg
Y2xpcC1ydWxlPSJldmVub2RkIiBkPSJNMTAwLDQwbDIwLDAgMCw2MCAyMCwwIDAsLTIwIC02MCww
IDAsLTIwIDgwLDAgMCw2MCAtNjAsMCAwLC04MHoiLz4KKwkJPC9jbGlwUGF0aD4KKwkJPHJlY3Qg
eD0iNTAiIHk9IjMwIiB3aWR0aD0iMzUwIiBoZWlnaHQ9IjEwMCIgZmlsbD0iZ3JlZW4iIGNsaXAt
cGF0aD0idXJsKCNjbGlwMikiLz4KKyAgICA8L3N2Zz4KKzwvZGl2PgorCis8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9jc3MzL21hc2tpbmcvY2xpcC1wYXRoLXdpdGgt
cGF0aC5odG1sIGIvTGF5b3V0VGVzdHMvY3NzMy9tYXNraW5nL2NsaXAtcGF0aC13aXRoLXBhdGgu
aHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNjg4OTFlYzI4MDU2NzEwOWU2OTg4NDE2ODEwY2Q1Njc0ZDVlODQ3
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvY3NzMy9tYXNraW5nL2NsaXAtcGF0aC13
aXRoLXBhdGguaHRtbApAQCAtMCwwICsxLDI2IEBACis8IURPQ1RZUEUgaHRtbD4KKworPGh0bWw+
Cis8aGVhZD4KKyAgICA8c3R5bGU+CisgICAgICAgIC5ib3ggeworICAgICAgICAgICAgbWFyZ2lu
OiAyMHB4OworICAgICAgICAgICAgaGVpZ2h0OiAxNTBweDsKKyAgICAgICAgICAgIHdpZHRoOiAy
MDBweDsKKyAgICAgICAgICAgIC13ZWJraXQtY2xpcC1wYXRoOiBwYXRoKCJNMTAwLDQwbDIwLDAg
MCw2MCAyMCwwIDAsLTIwIC02MCwwIDAsLTIwIDgwLDAgMCw2MCAtNjAsMCAwLC04MHoiKTsKKyAg
ICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6IGJsdWU7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIC5ib3guZXZlbm9kZCB7CisgICAgICAgICAgICAtd2Via2l0LWNsaXAtcGF0aDogcGF0
aChldmVub2RkLCAiTTEwMCw0MGwyMCwwIDAsNjAgMjAsMCAwLC0yMCAtNjAsMCAwLC0yMCA4MCww
IDAsNjAgLTYwLDAgMCwtODB6Iik7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVl
bjsKKyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKworPGRpdiBjbGFz
cz0iYm94Ij48L2Rpdj4KKzxkaXYgY2xhc3M9ImV2ZW5vZGQgYm94Ij48L2Rpdj4KKworPC9ib2R5
PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRo
LXBhdGgtdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk1MGZm
NTBmOTViY2QxZDhiNTMwOTg2ZjcxZmEzZjA2ZDUyYzIxZDAKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSw1IEBACisgIAorUEFTUyAtICItd2Via2l0LWNsaXAtcGF0aCIgcHJv
cGVydHkgZm9yICJwYXRoMSIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNsb3NlIHRvOiBw
YXRoKCdNIDgwIDQwIGwgMjAgMCBsIDAgNjAgbCAyMCAwIGwgMCAtMjAgbCAtNTAgMCBsIDAgLTIw
IGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFonKQorUEFTUyAtICItd2Via2l0LWNsaXAt
cGF0aCIgcHJvcGVydHkgZm9yICJwYXRoMiIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5nIGNs
b3NlIHRvOiBwYXRoKCdNIDEwMCA0MCBsIDIwIDAgbCAwIDYwIGwgMCAtMjAgbCAtNjAgMCBsIDAg
LTIwIGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFonKQorUEFTUyAtICItd2Via2l0LWNs
aXAtcGF0aCIgcHJvcGVydHkgZm9yICJwYXRoMyIgZWxlbWVudCBhdCAxcyBzYXcgc29tZXRoaW5n
IGNsb3NlIHRvOiBwYXRoKGV2ZW5vZGQsICdNIDEwMCA0MCBsIDIwIDAgbCAwIDYwIGwgMjAgMCBs
IDAgLTIwIGwgLTYwIDAgbCAwIC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04MCBaJykK
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRy
YW5zaXRpb25zLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODA0YWQzMTM4NGJkZmY1OWJmOWQ4ZjcxN2JiMGVj
ZmI0OGE1NTRkZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Ns
aXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTAsMCArMSw2NiBAQAorPCFET0NUWVBF
IGh0bWw+CisKKzxodG1sPgorPGhlYWQ+CisgIDxzdHlsZT4KKyAgICAuYm94IHsKKyAgICAgICAg
ZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgICAgICBoZWlnaHQ6IDIwMHB4OworICAgICAgICB3
aWR0aDogMjAwcHg7CisgICAgICAgIG1hcmdpbjogMTBweDsKKyAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogZ3JheTsKKyAgICAgICAgdHJhbnNpdGlvbjogLXdlYmtpdC1jbGlwLXBhdGggMnMgbGlu
ZWFyOworICAgIH0KKyAgICAKKyAgICAjcGF0aDEgeworICAgICAgICAtd2Via2l0LWNsaXAtcGF0
aDogcGF0aCgiTSA2MCA0MCBsIDIwIDAgbCAwIDYwIGwgMjAgMCBsIDAgLTIwIGwgLTQwIDAgbCAw
IC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04MCBaIikKKyAgICB9CisgICAgCisgICAg
Ym9keS5maW5hbCAjcGF0aDEgeworICAgICAgICAtd2Via2l0LWNsaXAtcGF0aDogcGF0aCgiTSAx
MDAgNDAgbCAyMCAwIGwgMCA2MCBsIDIwIDAgbCAwIC0yMCBsIC02MCAwIGwgMCAtMjAgbCA4MCAw
IGwgMCA2MCBsIC02MCAwIGwgMCAtODAgWiIpOworICAgIH0KKworICAgIC8qIE5vbm1hdGNoZWQg
c2VnbWVudHMsIHNob3VsZCBub3QgYW5pbWF0ZSAqLworICAgICNwYXRoMiB7CisgICAgICAgIC13
ZWJraXQtY2xpcC1wYXRoOiBwYXRoKCJNIDYwIDQwIGwgMjAgMCBsIDAgNjAgbCAyMCAwIGwgMCAt
MjAgbCAtNDAgMCBsIDAgLTIwIGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFoiKQorICAg
IH0KKyAgICAKKyAgICBib2R5LmZpbmFsICNwYXRoMiB7CisgICAgICAgIC13ZWJraXQtY2xpcC1w
YXRoOiBwYXRoKCJNIDEwMCA0MCBsIDIwIDAgbCAwIDYwIGwgMCAtMjAgbCAtNjAgMCBsIDAgLTIw
IGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgwIFoiKTsKKyAgICB9CisKKyAgICAvKiBOb25t
YXRjaGVkIHdpbmRpbmcgcnVsZSwgc2hvdWxkIG5vdCBhbmltYXRlICovCisgICAgI3BhdGgzIHsK
KyAgICAgICAgLXdlYmtpdC1jbGlwLXBhdGg6IHBhdGgoIk0gNjAgNDAgbCAyMCAwIGwgMCA2MCBs
IDIwIDAgbCAwIC0yMCBsIC00MCAwIGwgMCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02MCAwIGwgMCAt
ODAgWiIpCisgICAgfQorICAgIAorICAgIGJvZHkuZmluYWwgI3BhdGgzIHsKKyAgICAgICAgLXdl
YmtpdC1jbGlwLXBhdGg6IHBhdGgoZXZlbm9kZCwgIk0gMTAwIDQwIGwgMjAgMCBsIDAgNjAgbCAy
MCAwIGwgMCAtMjAgbCAtNjAgMCBsIDAgLTIwIGwgODAgMCBsIDAgNjAgbCAtNjAgMCBsIDAgLTgw
IFoiKTsKKyAgICB9CisgIDwvc3R5bGU+CisgIDxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvdHJhbnNp
dGlvbi10ZXN0LWhlbHBlcnMuanMiPjwvc2NyaXB0PgorICA8c2NyaXB0IHR5cGU9InRleHQvamF2
YXNjcmlwdCI+CisKKyAgICBjb25zdCBleHBlY3RlZFZhbHVlcyA9IFsKKyAgICAgIC8vIFt0aW1l
LCBlbGVtZW50LWlkLCBwcm9wZXJ0eSwgZXhwZWN0ZWQtdmFsdWUsIHRvbGVyYW5jZV0KKyAgICAg
IFsxLCAncGF0aDEnLCAnLXdlYmtpdC1jbGlwLXBhdGgnLCAncGF0aChcJ00gODAgNDAgbCAyMCAw
IGwgMCA2MCBsIDIwIDAgbCAwIC0yMCBsIC01MCAwIGwgMCAtMjAgbCA4MCAwIGwgMCA2MCBsIC02
MCAwIGwgMCAtODAgWlwnKScsIDJdLAorICAgICAgWzEsICdwYXRoMicsICctd2Via2l0LWNsaXAt
cGF0aCcsICdwYXRoKFwnTSAxMDAgNDAgbCAyMCAwIGwgMCA2MCBsIDAgLTIwIGwgLTYwIDAgbCAw
IC0yMCBsIDgwIDAgbCAwIDYwIGwgLTYwIDAgbCAwIC04MCBaXCcpJywgMl0sCisgICAgICBbMSwg
J3BhdGgzJywgJy13ZWJraXQtY2xpcC1wYXRoJywgJ3BhdGgoZXZlbm9kZCwgXCdNIDEwMCA0MCBs
IDIwIDAgbCAwIDYwIGwgMjAgMCBsIDAgLTIwIGwgLTYwIDAgbCAwIC0yMCBsIDgwIDAgbCAwIDYw
IGwgLTYwIDAgbCAwIC04MCBaXCcpJywgMl0sCisgICAgXTsKKyAgCisgICAgZnVuY3Rpb24gc2V0
dXBUZXN0KCkKKyAgICB7CisgICAgICAgIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LmFkZCgnZmlu
YWwnKTsKKyAgICB9CisgICAgCisgICAgcnVuVHJhbnNpdGlvblRlc3QoZXhwZWN0ZWRWYWx1ZXMs
IHNldHVwVGVzdCwgdXNlUGF1c2VBUEkpOworICA8L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
ICA8ZGl2IGlkPSJwYXRoMSIgY2xhc3M9ImJveCI+PC9kaXY+CisgIDxkaXYgaWQ9InBhdGgyIiBj
bGFzcz0iYm94Ij48L2Rpdj4KKyAgPGRpdiBpZD0icGF0aDMiIGNsYXNzPSJib3giPjwvZGl2Pgor
CisgIDxkaXYgaWQ9InJlc3VsdCI+PC9kaXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBl
cnMuanMgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0
LWhlbHBlcnMuanMKaW5kZXggZTBjZWYyMWUyMjY2ODA3M2ZkNzU3YmZjM2Q0YTRkZTQyOGFiNjY3
My4uNjEwMzMzYmIxNTY5MDNmN2Y1ZjlhMzY5MTNmODcyYzIxZTRlY2YwZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJz
LmpzCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRl
c3QtaGVscGVycy5qcwpAQCAtNjksMTcgKzY5LDM1IEBAIGZ1bmN0aW9uIHBhcnNlQ3Jvc3NGYWRl
KHMpCiAgICAgcmV0dXJuIHsiZnJvbSI6IG1hdGNoZXNbMV0sICJ0byI6IG1hdGNoZXNbMl0sICJw
ZXJjZW50IjogcGFyc2VGbG9hdChtYXRjaGVzWzNdKX0KIH0KIAorZnVuY3Rpb24gZXh0cmFjdFBh
dGhWYWx1ZXMocGF0aCkKK3sKKyAgICB2YXIgY29tcG9uZW50cyA9IHBhdGguc3BsaXQoJyAnKTsK
KyAgICB2YXIgcmVzdWx0ID0gW107CisgICAgZm9yIChjb21wb25lbnQgb2YgY29tcG9uZW50cykg
eworICAgICAgICB2YXIgY29tcE1hdGNoOworICAgICAgICBpZiAoY29tcE1hdGNoID0gY29tcG9u
ZW50Lm1hdGNoKC9bMC05Li1dKy8pKSB7CisgICAgICAgICAgICByZXN1bHQucHVzaChwYXJzZUZs
b2F0KGNvbXBvbmVudCkpCisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwogZnVuY3Rpb24gcGFyc2VDbGlwUGF0aChzKQogeworICAgIHZhciBwYXRoTWF0Y2g7CisgICAg
aWYgKHBhdGhNYXRjaCA9IHMubWF0Y2goL3BhdGhcKCgoZXZlbm9kZHxub256ZXJvKSwgPyk/XCco
LispXCdcKS8pKQorICAgICAgICByZXR1cm4gZXh0cmFjdFBhdGhWYWx1ZXMocGF0aE1hdGNoW3Bh
dGhNYXRjaC5sZW5ndGggLSAxXSk7CisgICAgCiAgICAgLy8gRklYTUU6IFRoaXMgb25seSBtYXRj
aGVzIGEgc3Vic2V0IG9mIHRoZSBzaGFwZSBzeW50YXgsIGFuZCB0aGUgcG9seWdvbiBleHBlY3Rz
IDQgcG9pbnRzLgogICAgIHZhciBwYXR0ZXJucyA9IFsKICAgICAgICAgL2luc2V0XCgoW1xkLl0r
KVx3KyAoW1xkLl0rKVx3K1wpLywKICAgICAgICAgL2NpcmNsZVwoKFtcZC5dKylcdysgYXQgKFtc
ZC5dKylcdysgKFtcZC5dKylcdytcKS8sCiAgICAgICAgIC9lbGxpcHNlXCgoW1xkLl0rKVx3KyAo
W1xkLl0rKVx3KyBhdCAoW1xkLl0rKVx3KyAoW1xkLl0rKVx3K1wpLywKLSAgICAgICAgL3BvbHln
b25cKChbXGQuXSspXHcqIChbXGQuXSspXHcqXCwgKFtcZC5dKylcdyogKFtcZC5dKylcdypcLCAo
W1xkLl0rKVx3KiAoW1xkLl0rKVx3KlwsIChbXGQuXSspXHcqIChbXGQuXSspXHcqXCkvCisgICAg
ICAgIC9wb2x5Z29uXCgoW1xkLl0rKVx3KiAoW1xkLl0rKVx3KlwsIChbXGQuXSspXHcqIChbXGQu
XSspXHcqXCwgKFtcZC5dKylcdyogKFtcZC5dKylcdypcLCAoW1xkLl0rKVx3KiAoW1xkLl0rKVx3
KlwpLywKICAgICBdOwogICAgIAogICAgIGZvciAocGF0dGVybiBvZiBwYXR0ZXJucykgeworICAg
ICAgICB2YXIgbWF0Y2hSZXN1bHQ7CiAgICAgICAgIGlmIChtYXRjaFJlc3VsdCA9IHMubWF0Y2go
cGF0dGVybikpIHsKICAgICAgICAgICAgIHZhciByZXN1bHQgPSBbXTsKICAgICAgICAgICAgIGZv
ciAodmFyIGkgPSAxOyBpIDwgbWF0Y2hSZXN1bHQubGVuZ3RoOyArK2kpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLWV4cGVjdGVkLnR4dAppbmRleCA5
MWY2ZTA1OGJiMzZiNGJjMTk2ZTI4ZTczNTI4OTJiZGI5MWU3YzRiLi41ODUwNWVhMmU4YjkzNjE2
ZWU4Y2Y0YmVkMDRhNGRlOWEwM2I2ZjdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9zdmctdHJhbnNpdGlvbnMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N2Zy10cmFuc2l0aW9ucy1leHBlY3RlZC50eHQKQEAgLTEsNCArMSw0IEBACi1DT05T
T0xFIE1FU1NBR0U6IGxpbmUgMjc1OiBGYWlsZWQgdG8gcGF1c2UgJ2ZpbGwnIHRyYW5zaXRpb24g
b24gZWxlbWVudCAncmVjdDcnCitDT05TT0xFIE1FU1NBR0U6IGxpbmUgMjkzOiBGYWlsZWQgdG8g
cGF1c2UgJ2ZpbGwnIHRyYW5zaXRpb24gb24gZWxlbWVudCAncmVjdDcnCiBFeGFtcGxlCiBQQVNT
IC0gImZpbGwtb3BhY2l0eSIgcHJvcGVydHkgZm9yICJyZWN0MSIgZWxlbWVudCBhdCAxcyBzYXcg
c29tZXRoaW5nIGNsb3NlIHRvOiAwLjYKIFBBU1MgLSAic3Ryb2tlLXdpZHRoIiBwcm9wZXJ0eSBm
b3IgInJlY3QxIiBlbGVtZW50IGF0IDFzIHNhdyBzb21ldGhpbmcgY2xvc2UgdG86IDMK
</data>
<flag name="review"
          id="289151"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="289154"
          type_id="3"
          status="-"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>