<?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>155695</bug_id>
          
          <creation_ts>2016-03-20 04:24:25 -0700</creation_ts>
          <short_desc>Purge PassRefPtr from CSSParser</short_desc>
          <delta_ts>2019-04-30 07:56:39 -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>WebCore Misc.</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>INVALID</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Joonghun Park">jh718.park</reporter>
          <assigned_to name="Joonghun Park">jh718.park</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1176572</commentid>
    <comment_count>0</comment_count>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-20 04:24:25 -0700</bug_when>
    <thetext>Purge PassRefPtr from CSSParser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176573</commentid>
    <comment_count>1</comment_count>
      <attachid>274536</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-20 04:26:44 -0700</bug_when>
    <thetext>Created attachment 274536
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176574</commentid>
    <comment_count>2</comment_count>
      <attachid>274537</attachid>
    <who name="Joonghun Park">jh718.park</who>
    <bug_when>2016-03-20 05:20:24 -0700</bug_when>
    <thetext>Created attachment 274537
Fix build break of Efl port</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1176591</commentid>
    <comment_count>3</comment_count>
      <attachid>274537</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-03-20 09:53:52 -0700</bug_when>
    <thetext>Comment on attachment 274537
Fix build break of Efl port

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

&gt; Source/WebCore/css/CSSParser.cpp:1488
&gt; +bool CSSParser::parseDeclaration(MutableStyleProperties* declaration, const String&amp; string, RefPtr&lt;CSSRuleSourceData&gt;&amp;&amp; aRuleSourceData, StyleSheetContents* contextStyleSheet)

The use of the &quot;a&quot; prefix here is peculiar and not WebKit coding style. Lets just call this ruleSourceData.

&gt; Source/WebCore/css/CSSParser.cpp:1495
&gt; +    CSSRuleSourceData* ruleSourceData = aRuleSourceData.get();

I suppose it’s OK to make this local copy to avoid reference count churn. It is a little dangerous, though, since we are counting on m_currentRuleDataStack to keep the object alive after this point. And tricky to figure out names for the two local variables (the one that is null because we moved out of it and the raw pointer that is not). An &quot;a&quot; prefix won’t do it.

&gt; Source/WebCore/css/CSSParser.cpp:1641
&gt; +    RefPtr&lt;CSSValue&gt; val = value.copyRef();
&gt; +    addProperty(propId, WTFMove(value), important, implicit);

Not the right way to do it. If we have to do the reference count churn here then we should just do:

    addProperty(propId, value.copyRef(), important, implicit);

Then we can use &quot;value&quot; below instead of &quot;val&quot;.

&gt; Source/WebCore/css/CSSParser.cpp:7865
&gt; +    void commitColor(Ref&lt;CSSPrimitiveValue&gt;&amp;&amp; val)

Since we are touching this it would be good to replace the abbreviation &quot;val&quot; with a word like &quot;value&quot; or multiple words like &quot;colorValue&quot;.

&gt; Source/WebCore/css/CSSParser.cpp:8153
&gt;          return createBorderImageValue(m_image, m_imageSlice, m_borderSlice, m_outset, m_repeat);

These should all be moving/releasing rather than copying for the same reason that commitBorderImage below should be.

&gt; Source/WebCore/css/CSSParser.cpp:8162
&gt; +        commitBorderImageProperty(CSSPropertyBorderImageSource, parser, m_image.copyRef(), important);
&gt; +        commitBorderImageProperty(CSSPropertyBorderImageSlice, parser, m_imageSlice.copyRef(), important);
&gt; +        commitBorderImageProperty(CSSPropertyBorderImageWidth, parser, m_borderSlice.copyRef(), important);
&gt; +        commitBorderImageProperty(CSSPropertyBorderImageOutset, parser, m_outset.copyRef(), important);
&gt; +        commitBorderImageProperty(CSSPropertyBorderImageRepeat, parser, m_repeat.copyRef(), important);

These should all be WTFMove rather than copyRef; this function is used just before destroying a BorderImageParseContext.

&gt; Source/WebCore/css/CSSParser.cpp:8667
&gt; +static Ref&lt;CSSPrimitiveValue&gt; parseDeprecatedGradientPoint(CSSParserValue&amp; value, bool horizontal)

This doesn’t seem right. There are lots of paths here that turn into nullptr.

&gt; Source/WebCore/css/CSSParser.cpp:8681
&gt; +    return result.releaseNonNull();

I see no guarantee that this is non-null.

&gt; Source/WebCore/css/CSSParser.cpp:12776
&gt; +RefPtr&lt;StyleRuleBase&gt; CSSParser::createMediaRule(RefPtr&lt;MediaQuerySet&gt;&amp;&amp; media, RuleList* rules)

I don’t see this using WTFMove when calling StyleRuleMedia::create. So the rvalue reference is doing us no good here. What’s the story?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274536</attachid>
            <date>2016-03-20 04:26:44 -0700</date>
            <delta_ts>2016-03-20 05:20:06 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-155695-20160320202353.patch</filename>
            <type>text/plain</type>
            <size>37063</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNhM2ZmYjA1OTBlN2Q5
Yjc2N2Y1YzYxZmExMmU5NDhjN2Y5ZDY4OS4uZWMyMGFlZjI5OTdlMDY3MWY4MjU1ZmZkOWFkODAz
NGJmMjRkZmFiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE2LTAzLTIwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBQdXJnZSBQYXNz
UmVmUHRyIGZyb20gQ1NTUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvdXJzLgorCisgICAgICAg
ICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
RGVjbGFyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRQcm9wZXJ0eVdp
dGhQcmVmaXhpbmdWYXJpYW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6YWRkUHJv
cGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5
Rm9yVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VDb2x1bW5zU2hvcnRoYW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmlkSXRlbVBvc2l0aW9uU2hvcnRoYW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VHcmlkQXJlYVNob3J0aGFuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYWRvd1BhcnNlQ29udGV4dDo6Y29tbWl0Q29sb3IpOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyk6CisgICAgICAgIChXZWJDb3JlOjpCb3Jk
ZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qm9y
ZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdEltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlcldpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OkJvcmRlckltYWdlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJPdXRzZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdFJlcGVhdCk6
CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0V2ViS2l0
Qm9yZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6
OmNvbW1pdEJvcmRlckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdlUGFyc2VD
b250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFn
ZVNsaWNlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZVNsaWNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dDo6c2V0VG9wKToKKyAgICAgICAgKFdl
YkNvcmU6OkJvcmRlckltYWdlUXVhZFBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVySW1hZ2VRdWFk
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6dmFsdWVGcm9tU2lkZUtleXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6YWRkVGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZUltcG9ydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVh
dGVNZWRpYVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGROZXdSdWxlVG9T
b3VyY2VUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cG9wUnVsZURhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVWaWV3cG9ydFJ1bGUpOgorICAgICAg
ICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAgKiBjc3MvQ1NTUHJvcGVydHkuaDoKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1Byb3BlcnR5OjpDU1NQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0
eWxlUHJvcGVydGllcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNdXRhYmxlU3R5bGVQcm9wZXJ0
aWVzOjpzZXRQcm9wZXJ0eSk6CisgICAgICAgICogY3NzL1N0eWxlUnVsZUltcG9ydC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVsZUltcG9ydCk6CisgICAgICAgICogY3NzL1N0
eWxlUnVsZUltcG9ydC5oOgorCiAyMDE2LTAzLTE5ICBKb29uZ2h1biBQYXJrICA8amg3MTgucGFy
a0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBQdXJnZSBQYXNzUmVmUHRyIGZyb20gV2ViQ29yZS9o
dG1sL3NoYWRvdwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCA0OTZmNGY5MDYzMTdjZGU5
MjYzNTgzNzY2NDZlNTg2MDYxYWM1NTk4Li41MzI1Y2FlNTFlZWI3ODJlOTk1YzgzNWZlYjdmNDM1
MDE0ZDQwY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAtMTQ3OSwyMyArMTQ3OSwy
MyBAQCBSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQYXJzZXI6OnBhcnNlRGVjbGFy
YXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsCiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKICAgICBt
X3J1bGUgPSBudWxscHRyOwogCi0gICAgUmVmPEltbXV0YWJsZVN0eWxlUHJvcGVydGllcz4gc3R5
bGUgPSBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKTsKKyAgICBhdXRvIHN0eWxlID0gY3JlYXRlU3R5
bGVQcm9wZXJ0aWVzKCk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7CiAgICAgcmV0dXJuIHN0eWxl
OwogfQogCiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0aW9uKE11dGFibGVTdHlsZVBy
b3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0cmluZywgUGFzc1JlZlB0cjxD
U1NSdWxlU291cmNlRGF0YT4gcHJwUnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250ZW50cyog
Y29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbihNdXRh
YmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiBhUnVsZVNvdXJjZURhdGEsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gTGVuZ3RoIG9mIHRoZSAiQC13ZWJr
aXQtZGVjbHN7IiBwcmVmaXguCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHByZWZpeExlbmd0
aCA9IDE1OwogCiAgICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5bGVTaGVldCk7CiAKLSAgICBS
ZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRhID0gcHJwUnVsZVNvdXJjZURh
dGE7CisgICAgQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVTb3VyY2VEYXRhID0gYVJ1bGVTb3VyY2VE
YXRhLmdldCgpOwogICAgIGlmIChydWxlU291cmNlRGF0YSkgewogICAgICAgICBtX2N1cnJlbnRS
dWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291cmNlRGF0YUxpc3Q+KCk7Ci0g
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChydWxlU291cmNlRGF0YSk7Cisg
ICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChXVEZNb3ZlKGFSdWxlU291cmNl
RGF0YSkpOwogICAgIH0KIAogICAgIHNldHVwUGFyc2VyKCJALXdlYmtpdC1kZWNsc3siLCBzdHJp
bmcsICJ9ICIpOwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRGVj
bGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFyYXRpb24sIGNvbnN0IFN0cmkK
ICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5yYW5nZS5lbmQgLT0gcHJlZml4TGVuZ3RoOwogICAg
ICAgICB9CiAKLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyhydWxlU291cmNlRGF0
YS5nZXQoKSk7CisgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlSYW5nZXMocnVsZVNvdXJjZURh
dGEpOwogICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJlc2V0KCk7CiAgICAgfQogCkBA
IC0xNjM1LDEwICsxNjM1LDEwIEBAIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IENTU1Bh
cnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkKICAgICByZXR1cm4gSW1tdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzOjpjcmVhdGUocmVzdWx0cy5kYXRhKCksIHJlc3VsdHMuc2l6ZSgpLCBtX2NvbnRl
eHQubW9kZSk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjphZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdW
YXJpYW50KENTU1Byb3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwg
Ym9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCit2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVy
dHlXaXRoUHJlZml4aW5nVmFyaWFudChDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1Zh
bHVlPiYmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBsaWNpdCkKIHsKLSAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbCA9IHZhbHVlLmdldCgpOwotICAgIGFkZFByb3BlcnR5KHByb3BJZCwg
dmFsdWUsIGltcG9ydGFudCwgaW1wbGljaXQpOworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsID0g
dmFsdWUuY29weVJlZigpOworICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSks
IGltcG9ydGFudCwgaW1wbGljaXQpOwogCiAgICAgQ1NTUHJvcGVydHlJRCBwcmVmaXhpbmdWYXJp
YW50ID0gcHJlZml4aW5nVmFyaWFudEZvclByb3BlcnR5SWQocHJvcElkKTsKICAgICBpZiAocHJl
Zml4aW5nVmFyaWFudCA9PSBwcm9wSWQpCkBAIC0xNjQ3LDI1ICsxNjQ3LDI1IEBAIHZvaWQgQ1NT
UGFyc2VyOjphZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQgcHJv
cElkLCBQYXNzUmVmUHRyCiAgICAgaWYgKG1fY3VycmVudFNob3J0aGFuZCkgewogICAgICAgICAv
LyBXZSBjYW4ndCB1c2UgU2hvcnRoYW5kU2NvcGUgaGVyZSBhcyB3ZSBjYW4gYWxyZWFkeSBiZSBp
bnNpZGUgb25lIChlLmcgd2UgYXJlIHBhcnNpbmcgQ1NTVHJhbnNpdGlvbikuCiAgICAgICAgIG1f
Y3VycmVudFNob3J0aGFuZCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQcm9wZXJ0eUlkKG1fY3VycmVu
dFNob3J0aGFuZCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByZWZpeGluZ1ZhcmlhbnQsIHZhbC5y
ZWxlYXNlKCksIGltcG9ydGFudCwgaW1wbGljaXQpOworICAgICAgICBhZGRQcm9wZXJ0eShwcmVm
aXhpbmdWYXJpYW50LCBXVEZNb3ZlKHZhbCksIGltcG9ydGFudCwgaW1wbGljaXQpOwogICAgICAg
ICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50Rm9yUHJvcGVydHlJZChtX2N1
cnJlbnRTaG9ydGhhbmQpOwogICAgIH0gZWxzZQotICAgICAgICBhZGRQcm9wZXJ0eShwcmVmaXhp
bmdWYXJpYW50LCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKKyAgICAgICAg
YWRkUHJvcGVydHkocHJlZml4aW5nVmFyaWFudCwgV1RGTW92ZSh2YWwpLCBpbXBvcnRhbnQsIGlt
cGxpY2l0KTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZFByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcElkLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wg
aW1wbGljaXQpCit2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGlj
aXQpCiB7CiAgICAgLy8gVGhpcyBwcm9wZXJ0eSBkb2Vzbid0IGJlbG9uZyB0byBhIHNob3J0aGFu
ZCBvciBpcyBhIENTUyB2YXJpYWJsZSAod2hpY2ggd2lsbCBiZSByZXNvbHZlZCBsYXRlcikuCiAg
ICAgaWYgKCFtX2N1cnJlbnRTaG9ydGhhbmQpIHsKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVz
LmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQ
cm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKKyAgICAg
ICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUo
dmFsdWUpLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRT
aG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIFZl
Y3RvcjxTdHlsZVByb3BlcnR5U2hvcnRoYW5kPiBzaG9ydGhhbmRzID0gbWF0Y2hpbmdTaG9ydGhh
bmRzRm9yTG9uZ2hhbmQocHJvcElkKTsKICAgICBpZiAoc2hvcnRoYW5kcy5zaXplKCkgPT0gMSkK
LSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIHZh
bHVlLCBpbXBvcnRhbnQsIHRydWUsIENTU1Byb3BlcnR5SW52YWxpZCwgbV9pbXBsaWNpdFNob3J0
aGFuZCB8fCBpbXBsaWNpdCkpOworICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENT
U1Byb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgdHJ1ZSwgQ1NTUHJv
cGVydHlJbnZhbGlkLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7CiAgICAgZWxz
ZQotICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJZCwg
dmFsdWUsIGltcG9ydGFudCwgdHJ1ZSwgaW5kZXhPZlNob3J0aGFuZEZvckxvbmdoYW5kKG1fY3Vy
cmVudFNob3J0aGFuZCwgc2hvcnRoYW5kcyksIG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGlj
aXQpKTsKKyAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9w
SWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIHRydWUsIGluZGV4T2ZTaG9ydGhhbmRGb3JM
b25naGFuZChtX2N1cnJlbnRTaG9ydGhhbmQsIHNob3J0aGFuZHMpLCBtX2ltcGxpY2l0U2hvcnRo
YW5kIHx8IGltcGxpY2l0KSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpyb2xsYmFja0xhc3RQcm9w
ZXJ0aWVzKGludCBudW0pCkBAIC0xODkxLDIwICsxODkxLDE5IEBAIGlubGluZSBSZWZQdHI8Q1NT
UHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWxpZFByaW1pdGl2ZShDU1NWYWx1ZUlE
IGlkZW50CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjphZGRFeHBh
bmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NT
VmFsdWU+IHBycFZhbHVlLCBib29sIGltcG9ydGFudCkKK3ZvaWQgQ1NTUGFyc2VyOjphZGRFeHBh
bmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1
ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNo
b3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcElkKTsKICAgICB1
bnNpZ25lZCBzaG9ydGhhbmRMZW5ndGggPSBzaG9ydGhhbmQubGVuZ3RoKCk7CiAgICAgaWYgKCFz
aG9ydGhhbmRMZW5ndGgpIHsKLSAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBwcnBWYWx1ZSwg
aW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHZhbHVlKSwg
aW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIFJlZlB0cjxDU1NWYWx1
ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBTaG9ydGhhbmRTY29wZSBzY29wZSh0aGlzLCBwcm9w
SWQpOwogICAgIGNvbnN0IENTU1Byb3BlcnR5SUQqIGxvbmdoYW5kcyA9IHNob3J0aGFuZC5wcm9w
ZXJ0aWVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNob3J0aGFuZExlbmd0aDsg
KytpKQotICAgICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0sIHZhbHVlLCBpbXBvcnRhbnQp
OworICAgICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0sIHZhbHVlLmNvcHlSZWYoKSwgaW1w
b3J0YW50KTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlVmFyaWFibGVE
ZXBlbmRlbnRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29uc3QgQ1NTVmFyaWFibGVEZXBl
bmRlbnRWYWx1ZSYgZGVwZW5kZW50VmFsdWUsIGNvbnN0IEN1c3RvbVByb3BlcnR5VmFsdWVNYXAm
IGN1c3RvbVByb3BlcnRpZXMpCkBAIC0yNDY2LDcgKzI0NjUsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZTogewogICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHJlc3VsdDsKICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2UocHJvcElkLCByZXN1bHQp
KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHJlc3VsdCwgaW1wb3J0YW50KTsK
KyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQpLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC0yNDc1LDcgKzI0NzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tCb3hJbWFnZU91dHNldDogewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IHJlc3VsdDsKICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VPdXRzZXQocmVzdWx0KSkgewot
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCByZXN1bHQsIGltcG9ydGFudCk7CisgICAg
ICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAt
MjQ4NCw3ICsyNDgzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJ
RCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNr
Qm94SW1hZ2VSZXBlYXQ6IHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiByZXN1bHQ7CiAgICAg
ICAgIGlmIChwYXJzZUJvcmRlckltYWdlUmVwZWF0KHJlc3VsdCkpIHsKLSAgICAgICAgICAgIGFk
ZFByb3BlcnR5KHByb3BJZCwgcmVzdWx0LCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJv
cGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTI0OTMsNyArMjQ5Miw3
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBib29s
IGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU2xpY2U6
IHsKICAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4gcmVzdWx0OwogICAg
ICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVNsaWNlKHByb3BJZCwgcmVzdWx0KSkgewotICAgICAg
ICAgICAgYWRkUHJvcGVydHkocHJvcElkLCByZXN1bHQsIGltcG9ydGFudCk7CisgICAgICAgICAg
ICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocmVzdWx0KSwgaW1wb3J0YW50KTsKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtMjUwMiw3
ICsyNTAxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1h
Z2VXaWR0aDogewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKICAg
ICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VXaWR0aChyZXN1bHQpKSB7Ci0gICAgICAgICAgICBh
ZGRQcm9wZXJ0eShwcm9wSWQsIHJlc3VsdCwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFBy
b3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yNjA4LDcgKzI2MDcs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IGN1cnJWYWx1ZTsKICAg
ICAgICAgICAgIGlmICghcGFyc2VGaWx0ZXIoKm1fdmFsdWVMaXN0LCBjdXJyVmFsdWUpKQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgY3VyclZhbHVlLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKGN1cnJWYWx1ZSksIGltcG9ydGFudCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTM5MDYsMTQgKzM5MDUsMTQgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uc1Nob3J0aGFuZChib29sIGltcG9ydGFudCkKIAogICAg
IC8vIEFueSB1bmFzc2lnbmVkIHByb3BlcnR5IGF0IHRoaXMgcG9pbnQgd2lsbCBiZWNvbWUgaW1w
bGljaXQgJ2F1dG8nLgogICAgIGlmIChjb2x1bW5XaWR0aCkKLSAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgY29sdW1uV2lkdGgsIGltcG9ydGFudCk7CisgICAgICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsIFdURk1vdmUoY29sdW1uV2lkdGgp
LCBpbXBvcnRhbnQpOwogICAgIGVsc2UgewogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUNvbHVtbldpZHRoLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigpLmNyZWF0ZUlkZW50aWZpZXJW
YWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5kaW5nRXhwbGljaXRBdXRvIC8q
IGltcGxpY2l0ICovKTsKICAgICAgICAgaGFzUGVuZGluZ0V4cGxpY2l0QXV0byA9IGZhbHNlOwog
ICAgIH0KIAogICAgIGlmIChjb2x1bW5Db3VudCkKLSAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJv
cGVydHlDb2x1bW5Db3VudCwgY29sdW1uQ291bnQsIGltcG9ydGFudCk7CisgICAgICAgIGFkZFBy
b3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIFdURk1vdmUoY29sdW1uQ291bnQpLCBpbXBv
cnRhbnQpOwogICAgIGVsc2UKICAgICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5D
b3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJZGVudGlmaWVyVmFsdWUoQ1NT
VmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxpY2l0QXV0byAvKiBpbXBsaWNp
dCAqLyk7CiAKQEAgLTU1MzMsOCArNTUzMiw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdyaWRJ
dGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBzaG9ydGhhbmRJZCwgYm9vbCBpCiAg
ICAgfSBlbHNlCiAgICAgICAgIGVuZFZhbHVlID0gZ3JpZE1pc3NpbmdHcmlkUG9zaXRpb25WYWx1
ZSgqc3RhcnRWYWx1ZSk7CiAKLSAgICBhZGRQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVydGllcygp
WzBdLCBzdGFydFZhbHVlLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KHNob3J0aGFuZC5w
cm9wZXJ0aWVzKClbMV0sIGVuZFZhbHVlLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5KHNo
b3J0aGFuZC5wcm9wZXJ0aWVzKClbMF0sIFdURk1vdmUoc3RhcnRWYWx1ZSksIGltcG9ydGFudCk7
CisgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVsxXSwgV1RGTW92ZShlbmRW
YWx1ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTU3ODksMTAgKzU3
ODgsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEFyZWFTaG9ydGhhbmQoYm9vbCBpbXBv
cnRhbnQpCiAgICAgaWYgKCFjb2x1bW5FbmRWYWx1ZSkKICAgICAgICAgY29sdW1uRW5kVmFsdWUg
PSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKCpjb2x1bW5TdGFydFZhbHVlKTsKIAotICAg
IGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd1N0YXJ0LCByb3dTdGFydFZhbHVl
LCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVt
blN0YXJ0LCBjb2x1bW5TdGFydFZhbHVlLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENT
U1Byb3BlcnR5V2Via2l0R3JpZFJvd0VuZCwgcm93RW5kVmFsdWUsIGltcG9ydGFudCk7Ci0gICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1uRW5kLCBjb2x1bW5FbmRWYWx1
ZSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRSb3dT
dGFydCwgV1RGTW92ZShyb3dTdGFydFZhbHVlKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5TdGFydCwgV1RGTW92ZShjb2x1bW5TdGFydFZh
bHVlKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRS
b3dFbmQsIFdURk1vdmUocm93RW5kVmFsdWUpLCBpbXBvcnRhbnQpOworICAgIGFkZFByb3BlcnR5
KENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbkVuZCwgV1RGTW92ZShjb2x1bW5FbmRWYWx1ZSks
IGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTY0MTMsNyArNjQxMiw3IEBA
IHN0YXRpYyB2b2lkIGNvbXBsZXRlQm9yZGVyUmFkaWkoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiByYWRpaVs0XSkKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIHJlZmFjdG9yZWQgd2l0aCBD
U1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzLgogLy8gQ1NTUGFyc2VyOjpwYXJzZUJvcmRlclJh
ZGl1cyBjb250YWlucyBzdXBwb3J0IGZvciBzb21lIGxlZ2FjeSByYWRpdXMgY29uc3RydWN0aW9u
LgotUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3Ju
ZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBzaGFwZSwgQ1NTUGFyc2VyVmFsdWVM
aXN0JiBhcmdzKQorUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFyc2VJbnNldFJv
dW5kZWRDb3JuZXJzKFJlZjxDU1NCYXNpY1NoYXBlSW5zZXQ+JiYgc2hhcGUsIENTU1BhcnNlclZh
bHVlTGlzdCYgYXJncykKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLm5l
eHQoKTsKIApAQCAtNjQ3NCwxMiArNjQ3MywxMiBAQCBSZWZQdHI8Q1NTQmFzaWNTaGFwZT4gQ1NT
UGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUGFzc1JlZlB0cjxDU1NCYXNpY1NoYQog
ICAgIHNoYXBlLT5zZXRCb3R0b21SaWdodFJhZGl1cyhjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIo
cmFkaWlbMF1bMl0ucmVsZWFzZSgpLCByYWRpaVsxXVsyXS5yZWxlYXNlKCkpKTsKICAgICBzaGFw
ZS0+c2V0Qm90dG9tTGVmdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVWYWx1ZVBhaXIocmFkaWlbMF1b
M10ucmVsZWFzZSgpLCByYWRpaVsxXVszXS5yZWxlYXNlKCkpKTsKIAotICAgIHJldHVybiBzaGFw
ZTsKKyAgICByZXR1cm4gV1RGTW92ZShzaGFwZSk7CiB9CiAKIFJlZlB0cjxDU1NCYXNpY1NoYXBl
PiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1BhcnNlclZhbHVlTGlzdCYgYXJn
cykKIHsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBzaGFwZSA9IENTU0Jhc2ljU2hh
cGVJbnNldDo6Y3JlYXRlKCk7CisgICAgYXV0byBzaGFwZSA9IENTU0Jhc2ljU2hhcGVJbnNldDo6
Y3JlYXRlKCk7CiAKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1lbnQgPSBhcmdzLmN1cnJlbnQo
KTsKICAgICBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiA+IHdpZHRoQXJndW1lbnRz
OwpAQCAtNjUyMSw4ICs2NTIwLDggQEAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6
cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQogICAgIH0KIAog
ICAgIGlmIChoYXNSb3VuZGVkSW5zZXQpCi0gICAgICAgIHJldHVybiBwYXJzZUluc2V0Um91bmRl
ZENvcm5lcnMoc2hhcGUsIGFyZ3MpOwotICAgIHJldHVybiBzaGFwZTsKKyAgICAgICAgcmV0dXJu
IHBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhXVEZNb3ZlKHNoYXBlKSwgYXJncyk7CisgICAgcmV0
dXJuIFdURk1vdmUoc2hhcGUpOwogfQogCiBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1Bh
cnNlcjo6cGFyc2VTaGFwZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCkBAIC03ODYzLDkg
Kzc4NjIsOSBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsKICAgICAgICAgfQogICAgIH0K
IAotICAgIHZvaWQgY29tbWl0Q29sb3IoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFs
KQorICAgIHZvaWQgY29tbWl0Q29sb3IoUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiYmIHZhbCkKICAg
ICB7Ci0gICAgICAgIGNvbG9yID0gdmFsOworICAgICAgICBjb2xvciA9IFdURk1vdmUodmFsKTsK
ICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwogICAgICAgICBpZiAoYWxsb3dYKSB7CiAgICAg
ICAgICAgICBhbGxvd1N0eWxlID0gZmFsc2U7CkBAIC03OTY0LDcgKzc5NjMsNyBAQCBSZWZQdHI8
Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENTU1BhcnNlclZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBDU1NQcgogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOyAvLyBUaGlz
IHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0aCBhbmQgaXMgaW52YWxpZCBvcgogICAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBh
bGxvd2VkIGF0IHRoaXMgcG9pbnQuCiAKLSAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3Io
cGFyc2VkQ29sb3IucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Q29sb3Io
cGFyc2VkQ29sb3IucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2YWx1
ZUxpc3QubmV4dCgpOwpAQCAtODA5MSwxOCArODA5MCwxOCBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQ
YXJzZUNvbnRleHQgewogICAgIGJvb2wgcmVxdWlyZVdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9y
ZXF1aXJlV2lkdGg7IH0KICAgICBib29sIHJlcXVpcmVPdXRzZXQoKSBjb25zdCB7IHJldHVybiBt
X3JlcXVpcmVPdXRzZXQ7IH0KIAotICAgIHZvaWQgY29tbWl0SW1hZ2UoUGFzc1JlZlB0cjxDU1NW
YWx1ZT4gaW1hZ2UpCisgICAgdm9pZCBjb21taXRJbWFnZShSZWY8Q1NTVmFsdWU+JiYgaW1hZ2Up
CiAgICAgewotICAgICAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAgICAgIG1faW1hZ2UgPSBXVEZN
b3ZlKGltYWdlKTsKICAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKICAgICAgICAgbV9hbGxv
d0NvbW1pdCA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dJbWFnZSA9IG1fYWxsb3dGb3J3YXJkU2xh
c2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7CiAg
ICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gIW1faW1hZ2VTbGljZTsKICAgICAgICAgbV9hbGxv
d1JlcGVhdCA9ICFtX3JlcGVhdDsKICAgICB9Ci0gICAgdm9pZCBjb21taXRJbWFnZVNsaWNlKFBh
c3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiBzbGljZSkKKyAgICB2b2lkIGNvbW1p
dEltYWdlU2xpY2UoUmVmPENTU0JvcmRlckltYWdlU2xpY2VWYWx1ZT4mJiBzbGljZSkKICAgICB7
Ci0gICAgICAgIG1faW1hZ2VTbGljZSA9IHNsaWNlOworICAgICAgICBtX2ltYWdlU2xpY2UgPSBX
VEZNb3ZlKHNsaWNlKTsKICAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKICAgICAgICAgbV9h
bGxvd0NvbW1pdCA9IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IHRydWU7CiAgICAgICAg
IG1fYWxsb3dJbWFnZVNsaWNlID0gbV9yZXF1aXJlV2lkdGggPSBtX3JlcXVpcmVPdXRzZXQgPSBm
YWxzZTsKQEAgLTgxMjEsMjcgKzgxMjAsMjcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250
ZXh0IHsKICAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gZmFsc2U7CiAgICAgICAgIH0KICAg
ICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJXaWR0aChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBzbGljZSkKKyAgICB2b2lkIGNvbW1pdEJvcmRlcldpZHRoKFJlZjxDU1NQcmltaXRpdmVW
YWx1ZT4mJiBzbGljZSkKICAgICB7Ci0gICAgICAgIG1fYm9yZGVyU2xpY2UgPSBzbGljZTsKKyAg
ICAgICAgbV9ib3JkZXJTbGljZSA9IFdURk1vdmUoc2xpY2UpOwogICAgICAgICBtX2NhbkFkdmFu
Y2UgPSB0cnVlOwogICAgICAgICBtX2FsbG93Q29tbWl0ID0gbV9hbGxvd0ZvcndhcmRTbGFzaE9w
ZXJhdG9yID0gdHJ1ZTsKICAgICAgICAgbV9hbGxvd0ltYWdlU2xpY2UgPSBtX3JlcXVpcmVXaWR0
aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwogICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9p
bWFnZTsKICAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKICAgICB9Ci0gICAgdm9p
ZCBjb21taXRCb3JkZXJPdXRzZXQoUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gb3V0c2V0
KQorICAgIHZvaWQgY29tbWl0Qm9yZGVyT3V0c2V0KFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiBv
dXRzZXQpCiAgICAgewotICAgICAgICBtX291dHNldCA9IG91dHNldDsKKyAgICAgICAgbV9vdXRz
ZXQgPSBXVEZNb3ZlKG91dHNldCk7CiAgICAgICAgIG1fY2FuQWR2YW5jZSA9IHRydWU7CiAgICAg
ICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwogICAgICAgICBtX2FsbG93SW1hZ2VTbGljZSA9IG1f
YWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJlT3V0
c2V0ID0gZmFsc2U7CiAgICAgICAgIG1fYWxsb3dJbWFnZSA9ICFtX2ltYWdlOwogICAgICAgICBt
X2FsbG93UmVwZWF0ID0gIW1fcmVwZWF0OwogICAgIH0KLSAgICB2b2lkIGNvbW1pdFJlcGVhdChQ
YXNzUmVmUHRyPENTU1ZhbHVlPiByZXBlYXQpCisgICAgdm9pZCBjb21taXRSZXBlYXQoUmVmPENT
U1ZhbHVlPiYmIHJlcGVhdCkKICAgICB7Ci0gICAgICAgIG1fcmVwZWF0ID0gcmVwZWF0OworICAg
ICAgICBtX3JlcGVhdCA9IFdURk1vdmUocmVwZWF0KTsKICAgICAgICAgbV9jYW5BZHZhbmNlID0g
dHJ1ZTsKICAgICAgICAgbV9hbGxvd0NvbW1pdCA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dSZXBl
YXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVx
dWlyZU91dHNldCA9IGZhbHNlOwpAQCAtODE0OSwyNCArODE0OCwyNCBAQCBzdHJ1Y3QgQm9yZGVy
SW1hZ2VQYXJzZUNvbnRleHQgewogICAgICAgICBtX2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsKICAg
ICB9CiAKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21taXRXZWJLaXRCb3JkZXJJbWFnZSgp
CisgICAgUmVmPENTU1ZhbHVlPiBjb21taXRXZWJLaXRCb3JkZXJJbWFnZSgpCiAgICAgewogICAg
ICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1hZ2VWYWx1ZShtX2ltYWdlLCBtX2ltYWdlU2xpY2Us
IG1fYm9yZGVyU2xpY2UsIG1fb3V0c2V0LCBtX3JlcGVhdCk7CiAgICAgfQogCiAgICAgdm9pZCBj
b21taXRCb3JkZXJJbWFnZShDU1NQYXJzZXImIHBhcnNlciwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
ewotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1h
Z2VTb3VyY2UsIHBhcnNlciwgbV9pbWFnZSwgaW1wb3J0YW50KTsKLSAgICAgICAgY29tbWl0Qm9y
ZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsIHBhcnNlciwgbV9p
bWFnZVNsaWNlLCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5
KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgcGFyc2VyLCBtX2JvcmRlclNsaWNlLCBpbXBv
cnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VPdXRzZXQsIHBhcnNlciwgbV9vdXRzZXQsIGltcG9ydGFudCk7Ci0gICAgICAgIGNv
bW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVJlcGVhdCwgcGFy
c2VyLCBtX3JlcGVhdCwgaW1wb3J0YW50KTsKKyAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBwYXJzZXIsIG1faW1hZ2UuY29weVJl
ZigpLCBpbXBvcnRhbnQpOworICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1By
b3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgcGFyc2VyLCBtX2ltYWdlU2xpY2UuY29weVJlZigpLCBp
bXBvcnRhbnQpOworICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VXaWR0aCwgcGFyc2VyLCBtX2JvcmRlclNsaWNlLmNvcHlSZWYoKSwgaW1wb3J0
YW50KTsKKyAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlT3V0c2V0LCBwYXJzZXIsIG1fb3V0c2V0LmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKKyAg
ICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlUmVw
ZWF0LCBwYXJzZXIsIG1fcmVwZWF0LmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKICAgICB9CiAKLSAg
ICB2b2lkIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIENT
U1BhcnNlciYgcGFyc2VyLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRh
bnQpCisgICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cElkLCBDU1NQYXJzZXImIHBhcnNlciwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGlt
cG9ydGFudCkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSkKLSAgICAgICAgICAgIHBhcnNlci5h
ZGRQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQpOworICAgICAgICAgICAgcGFyc2Vy
LmFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCk7CiAgICAgICAg
IGVsc2UKICAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQsIENTU1ZhbHVlUG9v
bDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFsdWUoKSwgaW1wb3J0YW50LCB0
cnVlKTsKICAgICB9CkBAIC04MjA2LDE0ICs4MjA1LDE0IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUJvcmRlckltYWdlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiByZXN1
bHQsCiAgICAgICAgICAgICBlbHNlIGlmIChpc0dlbmVyYXRlZEltYWdlVmFsdWUoKmN1cnJlbnRW
YWx1ZSkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlOwogICAgICAg
ICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3ZhbHVlTGlzdCwgdmFsdWUpKQot
ICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlKHZhbHVlLnJlbGVhc2UoKSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2UodmFsdWUucmVsZWFzZU5v
bk51bGwoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAgICAgICAgICAgICB9IGVsc2Ug
aWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVlLT5mdW5jdGlvbi0+bmFtZSwg
Ii13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsKICAgICAgICAgICAgICAgICBpZiAodmFsdWUpCi0g
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2UodmFsdWUucmVsZWFzZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFnZSh2YWx1ZS5yZWxlYXNlTm9u
TnVsbCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICNlbmRpZgpAQCAtODIyNCwyNSArODIyMywyNSBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VCb3JkZXJJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYg
cmVzdWx0LAogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQuYWxs
b3dJbWFnZVNsaWNlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNl
VmFsdWU+IGltYWdlU2xpY2U7CiAgICAgICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVNsaWNl
KHByb3BJZCwgaW1hZ2VTbGljZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFn
ZVNsaWNlKGltYWdlU2xpY2UucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0LmNv
bW1pdEltYWdlU2xpY2UoaW1hZ2VTbGljZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgfQog
CiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYgY29udGV4dC5hbGxvd1JlcGVh
dCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlcGVhdDsKICAgICAgICAgICAg
IGlmIChwYXJzZUJvcmRlckltYWdlUmVwZWF0KHJlcGVhdCkpCi0gICAgICAgICAgICAgICAgY29u
dGV4dC5jb21taXRSZXBlYXQocmVwZWF0LnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgY29u
dGV4dC5jb21taXRSZXBlYXQocmVwZWF0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAK
ICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBjb250ZXh0LnJlcXVpcmVXaWR0
aCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvcmRlclNsaWNl
OwogICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VXaWR0aChib3JkZXJTbGljZSkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJXaWR0aChib3JkZXJTbGljZS5yZWxl
YXNlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0Qm9yZGVyV2lkdGgoYm9yZGVy
U2xpY2UucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIWNvbnRl
eHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQucmVxdWlyZU91dHNldCgpKSB7CiAgICAgICAgICAg
ICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvcmRlck91dHNldDsKICAgICAgICAgICAgIGlm
IChwYXJzZUJvcmRlckltYWdlT3V0c2V0KGJvcmRlck91dHNldCkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC5jb21taXRCb3JkZXJPdXRzZXQoYm9yZGVyT3V0c2V0LnJlbGVhc2UoKSk7CisgICAg
ICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJPdXRzZXQoYm9yZGVyT3V0c2V0LnJlbGVh
c2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFu
Y2UoKSkKQEAgLTgzMzUsNyArODMzNCw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY29tbWl0Rmls
bCgpIHsgbV9maWxsID0gdHJ1ZTsgbV9hbGxvd0ZpbGwgPSBmYWxzZTsgbV9hbGxvd051bWJlciA9
ICFtX3RvcDsgfQogCi0gICAgUGFzc1JlZlB0cjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IGNv
bW1pdEJvcmRlckltYWdlU2xpY2UoKQorICAgIFJlZjxDU1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+
IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQogICAgIHsKICAgICAgICAgLy8gV2UgbmVlZCB0byBj
bG9uZSBhbmQgcmVwZWF0IHZhbHVlcyBmb3IgYW55IG9taXNzaW9ucy4KICAgICAgICAgQVNTRVJU
KG1fdG9wKTsKQEAgLTg0NTEsOSArODQ1MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lk
IHNldEFsbG93RmluYWxDb21taXQoKSB7IG1fYWxsb3dGaW5hbENvbW1pdCA9IHRydWU7IH0KLSAg
ICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWwpIHsgbV90b3Ag
PSB2YWw7IH0KKyAgICB2b2lkIHNldFRvcChSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+JiYgdmFsKSB7
IG1fdG9wID0gV1RGTW92ZSh2YWwpOyB9CiAKLSAgICBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiBjb21taXRCb3JkZXJJbWFnZVF1YWQoKQorICAgIFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4g
Y29tbWl0Qm9yZGVySW1hZ2VRdWFkKCkKICAgICB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gY2xv
bmUgYW5kIHJlcGVhdCB2YWx1ZXMgZm9yIGFueSBvbWlzc2lvbnMuCiAgICAgICAgIEFTU0VSVCht
X3RvcCk7CkBAIC04NjY1LDcgKzg2NjQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb3VudGVy
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVlLCBib29sIGltcG9ydAogfQog
CiAvLyBUaGlzIHNob3VsZCBnbyBhd2F5IG9uY2Ugd2UgZHJvcCBzdXBwb3J0IGZvciAtd2Via2l0
LWdyYWRpZW50Ci1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VEZXBy
ZWNhdGVkR3JhZGllbnRQb2ludChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGJvb2wgaG9yaXpvbnRh
bCkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50
UG9pbnQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBib29sIGhvcml6b250YWwpCiB7CiAgICAgUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7CiAgICAgaWYgKHZhbHVlLnVuaXQgPT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewpAQCAtODY3OSw3ICs4Njc4LDcgQEAgc3RhdGlj
IFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVwcmVjYXRlZEdyYWRpZW50UG9p
bnQoQ1NTUGFyc2VyVmFsdWUKICAgICAgICAgICAgIHJlc3VsdCA9IENTU1ZhbHVlUG9vbDo6c2lu
Z2xldG9uKCkuY3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BFUkNFTlRB
R0UpOwogICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X05VTUJFUiB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VOVEFH
RSkKICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVWYWx1
ZSh2YWx1ZS5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXM+
KHZhbHVlLnVuaXQpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZU5vbk51bGwoKTsKIH0KIAogc3RhdGljIGJvb2wgcGFyc2VEZXByZWNhdGVkR3JhZGllbnRD
b2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZhbHVlJiB2YWx1ZSwgQ1NTR3Jh
ZGllbnRDb2xvclN0b3AmIHN0b3ApCkBAIC04ODgzLDcgKzg4ODIsNyBAQCBib29sIENTU1BhcnNl
cjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFsdWVMaXN0JiB2YWx1ZUxpc3Qs
IFJlZlB0cjxDUwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmFsdWVGcm9tU2lkZUtleXdvcmQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVl
LCBib29sJiBpc0hvcml6b250YWwpCitzdGF0aWMgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2
YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsIGJvb2wmIGlzSG9yaXpv
bnRhbCkKIHsKICAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lE
RU5UKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg5MDMsNyArODkwMiw3IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQ
YXJzZXJWYWx1ZSYgdmFsdWUsCiAgICAgcmV0dXJuIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCku
Y3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JhZGllbnRDb2xvck9yS2V5d29yZChDU1NQYXJzZXIm
IHBhcnNlciwgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorc3RhdGljIFJlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENTU1BhcnNlciYgcGFyc2VyLCBD
U1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQ1NTVmFsdWVJRCBpZCA9IHZhbHVlLmlkOwog
ICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NTUGFyc2VyOjppc1ZhbGlkU3lz
dGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51IHx8IGlkID09IENTU1ZhbHVl
Q3VycmVudGNvbG9yKQpAQCAtMTAzMTEsNyArMTAzMTAsNyBAQCBib29sIENTU1BhcnNlcjo6cGFy
c2VQZXJzcGVjdGl2ZU9yaWdpbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgQ1NTUHJvcGVydHlJRCYg
cHJvcAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZFRleHREZWNv
cmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+
IHZhbHVlLCBib29sIGltcG9ydGFudCkKK3ZvaWQgQ1NTUGFyc2VyOjphZGRUZXh0RGVjb3JhdGlv
blByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8Q1NTVmFsdWU+JiYgdmFsdWUs
IGJvb2wgaW1wb3J0YW50KQogewogICAgIC8vIFRoZSB0ZXh0LWRlY29yYXRpb24tbGluZSBwcm9w
ZXJ0eSB0YWtlcyBwcmlvcml0eSBvdmVyIHRleHQtZGVjb3JhdGlvbiwgdW5sZXNzIHRoZSBsYXR0
ZXIgaGFzIGltcG9ydGFudCBwcmlvcml0eSBzZXQuCiAgICAgaWYgKHByb3BJZCA9PSBDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uICYmICFpbXBvcnRhbnQgJiYgIWluU2hvcnRoYW5kKCkpIHsKQEAg
LTEwMzIwLDcgKzEwMzE5LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmFkZFRleHREZWNvcmF0aW9uUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8Q1NTVmEKICAgICAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgYWRkUHJvcGVydHkocHJvcElkLCB2
YWx1ZSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUp
LCBpbXBvcnRhbnQpOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VUZXh0RGVjb3JhdGlvbihD
U1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCkBAIC0xMjc2MywxOCArMTI3NjIs
MTggQEAgcmVzdGFydEFmdGVyQ29tbWVudDoKICAgICByZXR1cm4gdG9rZW4oKTsKIH0KIAotUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZShjb25zdCBDU1NQ
YXJzZXJTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtZWRpYSkKK1JlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFy
c2VyU3RyaW5nJiB1cmwsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhKQogewogICAgIGlm
ICghbWVkaWEgfHwgIW1fYWxsb3dJbXBvcnRSdWxlcykgewogICAgICAgICBwb3BSdWxlRGF0YSgp
OwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAgUmVmUHRyPFN0eWxlUnVsZUlt
cG9ydD4gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKHVybCwgbWVkaWEpOworICAgIFJl
ZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZSh1cmws
IFdURk1vdmUobWVkaWEpKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlm
TmVlZGVkKCk7CiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKLVJlZlB0cjxTdHlsZVJ1bGVCYXNlPiBD
U1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZShQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlh
LCBSdWxlTGlzdCogcnVsZXMpCitSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVh
dGVNZWRpYVJ1bGUoUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYgbWVkaWEsIFJ1bGVMaXN0KiBydWxl
cykKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRp
b25zID0gZmFsc2U7CiAgICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlhPiBydWxlOwpAQCAtMTI4NTks
MTggKzEyODU4LDE4IEBAIHZvaWQgQ1NTUGFyc2VyOjpwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291
cmNlVHJlZUlmTmVlZGVkKCkKICAgICBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKHJ1bGUucmVsZWFz
ZSgpKTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUoUGFzc1Jl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSkKK3ZvaWQgQ1NTUGFyc2VyOjphZGROZXdSdWxl
VG9Tb3VyY2VUcmVlKFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiBydWxlKQogewogICAgIC8v
IFByZWNvbmRpdGlvbjogKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEoKSkuCiAgICAgaWYgKCFtX3J1
bGVTb3VyY2VEYXRhUmVzdWx0KQogICAgICAgICByZXR1cm47CiAgICAgaWYgKG1fY3VycmVudFJ1
bGVEYXRhU3RhY2stPmlzRW1wdHkoKSkKLSAgICAgICAgbV9ydWxlU291cmNlRGF0YVJlc3VsdC0+
YXBwZW5kKHJ1bGUpOworICAgICAgICBtX3J1bGVTb3VyY2VEYXRhUmVzdWx0LT5hcHBlbmQoV1RG
TW92ZShydWxlKSk7CiAgICAgZWxzZQotICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5s
YXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgICAgICBtX2N1cnJlbnRSdWxlRGF0
YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKFdURk1vdmUocnVsZSkpOwogfQogCi1Q
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBDU1NQYXJzZXI6OnBvcFJ1bGVEYXRhKCkKK1Jl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BSdWxlRGF0YSgpCiB7CiAgICAg
aWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAg
LTEzMzQ5LDE2ICsxMzM0OCwxNiBAQCB2b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJv
b2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFyc2VkKQogfQogCiAjaWYgRU5B
QkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLVBhc3NSZWZQdHI8U3R5bGVSdWxlQmFzZT4gQ1NT
UGFyc2VyOjpjcmVhdGVWaWV3cG9ydFJ1bGUoKQorUmVmPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNl
cjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2Fs
bG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAKLSAgICBSZWZQdHI8U3R5bGVSdWxl
Vmlld3BvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJv
cGVydGllcygpKTsKKyAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3JlYXRlKGNy
ZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKICAgICBjbGVhclByb3BlcnRpZXMoKTsKIAogICAgIHBy
b2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQoKTsKIAotICAgIHJldHVybiBy
dWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcnVsZTsKIH0KIAogYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmlld3BvcnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggOWEzZjVmODdmNGEwZGE0NWI0MTUzZDI1NjBmYzRk
M2EzOTg1YWEwMS4uN2VjOTk5Nzk3ZmE4YzNlMWM0MmY1NWY5YTY2NDcyNjMwOGVhNjM1MiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMTI4LDE1ICsxMjgsMTUgQEAgcHVibGljOgogICAgIHN0
YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNlVmFsdWUoY29uc3QgQXRvbWlj
U3RyaW5nJik7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZVZhbGlkUHJpbWl0
aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1bGF0aW9uJik7CiAKLSAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyos
IGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+LCBTdHlsZVNoZWV0
Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBh
cnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiwgU3R5bGVTaGVldENvbnRlbnRzKiBjb250ZXh0U3R5
bGVTaGVldCk7CiAgICAgc3RhdGljIFJlZjxJbW11dGFibGVTdHlsZVByb3BlcnRpZXM+IHBhcnNl
SW5saW5lU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBFbGVtZW50Kik7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVyeShjb25zdCBTdHJpbmcmKTsK
IAotICAgIHZvaWQgYWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFyaWFudChDU1NQcm9wZXJ0eUlE
LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBm
YWxzZSk7Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENT
U1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSk7CisgICAgdm9p
ZCBhZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQsIFJlZlB0cjxD
U1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSk7CisgICAg
dm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYsIGJvb2wg
aW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwogICAgIHZvaWQgcm9sbGJhY2tMYXN0
UHJvcGVydGllcyhpbnQgbnVtKTsKICAgICBib29sIGhhc1Byb3BlcnRpZXMoKSBjb25zdCB7IHJl
dHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQotICAgIHZvaWQgYWRkRXhwYW5k
ZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTU1Zh
bHVlPiwgYm9vbCk7CisgICAgdm9pZCBhZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCk7CiAKICAgICBib29sIHBh
cnNlVmFsdWUoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQpOwogICAgIGJvb2wgcGFyc2VT
aG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYsIGJv
b2wgaW1wb3J0YW50KTsKQEAgLTMzMSw3ICszMzEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJz
ZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KTsKICAgICBib29sIHBhcnNlVGV4dEVt
cGhhc2lzUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpOwogCi0gICAgdm9pZCBhZGRUZXh0RGVjb3Jh
dGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+LCBib29sIGlt
cG9ydGFudCk7CisgICAgdm9pZCBhZGRUZXh0RGVjb3JhdGlvblByb3BlcnR5KENTU1Byb3BlcnR5
SUQsIFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQpOwogICAgIGJvb2wgcGFyc2VU
ZXh0RGVjb3JhdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogICAg
IGJvb2wgcGFyc2VUZXh0RGVjb3JhdGlvblNraXAoYm9vbCBpbXBvcnRhbnQpOwogICAgIGJvb2wg
cGFyc2VUZXh0VW5kZXJsaW5lUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpOwpAQCAtMzYyLDEyICsz
NjIsMTIgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IGNyZWF0ZVNlbGVjdG9yVmVjdG9yKCk7CiAgICAgdm9p
ZCByZWN5Y2xlU2VsZWN0b3JWZWN0b3Ioc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4pOwogCi0gICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+
IGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgUGFzc1JlZlB0cjxNZWRp
YVF1ZXJ5U2V0Pik7CisgICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZUltcG9ydFJ1bGUo
Y29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYpOwogICAgIFJl
ZlB0cjxTdHlsZUtleWZyYW1lPiBjcmVhdGVLZXlmcmFtZShDU1NQYXJzZXJWYWx1ZUxpc3QmKTsK
ICAgICBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBjcmVhdGVLZXlmcmFtZXNSdWxlKGNvbnN0
IFN0cmluZyYsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRyPFN0eWxlS2V5ZnJhbWU+Pj4p
OwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiBSdWxlTGlzdDsK
LSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlTWVkaWFSdWxlKFBhc3NSZWZQdHI8TWVk
aWFRdWVyeVNldD4sIFJ1bGVMaXN0Kik7CisgICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0
ZU1lZGlhUnVsZShSZWZQdHI8TWVkaWFRdWVyeVNldD4mJiwgUnVsZUxpc3QqKTsKICAgICBSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlRW1wdHlNZWRpYVJ1bGUoUnVsZUxpc3QqKTsKICAgICBS
ZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piogc2VsZWN0b3JzKTsKICAgICBSZWZQdHI8U3R5bGVSdWxl
QmFzZT4gY3JlYXRlRm9udEZhY2VSdWxlKCk7CkBAIC00NDksOCArNDQ5LDggQEAgcHVibGljOgog
ICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICB2b2lkIG1hcmtQcm9wZXJ0eUVuZChi
b29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBhcnNlZCk7CiAgICAgdm9pZCBw
cm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7Ci0gICAgdm9pZCBhZGRO
ZXdSdWxlVG9Tb3VyY2VUcmVlKFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+KTsKLSAgICBQ
YXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBwb3BSdWxlRGF0YSgpOworICAgIHZvaWQgYWRk
TmV3UnVsZVRvU291cmNlVHJlZShSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+JiYpOworICAgIFJl
ZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcG9wUnVsZURhdGEoKTsKICAgICB2b2lkIHJlc2V0UHJv
cGVydHlSYW5nZSgpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0gbV9wcm9wZXJ0eVJhbmdlLmVu
ZCA9IFVJTlRfTUFYOyB9CiAgICAgYm9vbCBpc0V4dHJhY3RpbmdTb3VyY2VEYXRhKCkgY29uc3Qg
eyByZXR1cm4gISFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrOyB9CiAgICAgdm9pZCBzeW50YXhFcnJv
cihjb25zdCBMb2NhdGlvbiYsIFN5bnRheEVycm9yVHlwZSA9IEdlbmVyYWxTeW50YXhFcnJvcik7
CkBAIC00NjIsNyArNDYyLDcgQEAgcHVibGljOgogI2lmIEVOQUJMRShDU1NfREVWSUNFX0FEQVBU
QVRJT04pCiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxlQm9keVN0YXJ0KCkgeyBtX2luVmlld3Bv
cnQgPSB0cnVlOyB9CiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxlQm9keUVuZCgpIHsgbV9pblZp
ZXdwb3J0ID0gZmFsc2U7IH0KLSAgICBQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZVZp
ZXdwb3J0UnVsZSgpOworICAgIFJlZjxTdHlsZVJ1bGVCYXNlPiBjcmVhdGVWaWV3cG9ydFJ1bGUo
KTsKICNlbmRpZgogCiAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVlPiBjcmVhdGVQcmltaXRpdmVO
dW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKQEAgLTU3Myw3ICs1NzMsNyBAQCBw
cml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0YWJsZVN0eWxlUHJvcGVydGll
cyosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50LCBTdHlsZVNo
ZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBSZWY8SW1tdXRhYmxlU3R5bGVQ
cm9wZXJ0aWVzPiBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmluZyYsIFN0eWxlU2hlZXRDb250
ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCi0gICAgUmVmUHRyPENTU0Jhc2ljU2hhcGU+IHBh
cnNlSW5zZXRSb3VuZGVkQ29ybmVycyhQYXNzUmVmUHRyPENTU0Jhc2ljU2hhcGVJbnNldD4sIENT
U1BhcnNlclZhbHVlTGlzdCYpOworICAgIFJlZlB0cjxDU1NCYXNpY1NoYXBlPiBwYXJzZUluc2V0
Um91bmRlZENvcm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4mJiwgQ1NTUGFyc2VyVmFsdWVM
aXN0Jik7CiAKICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsKICAgICAgICAgTm9uZSwKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0eS5oIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU1Byb3BlcnR5LmgKaW5kZXggZDVjMzhhMDcxNzgzNGJiNTMwZDhmYzQxMmIyODNk
YzQ2Y2Y5N2MyMy4uNDU1YjlmMjJkMjg0YTZiYjdlNTZhMjI0OGNlZTEzYjI0MTAyZDE4ZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKKysrIGIvU291cmNlL1dl
YkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKQEAgLTY0LDkgKzY0LDkgQEAgc3RydWN0IFN0eWxlUHJv
cGVydHlNZXRhZGF0YSB7CiAKIGNsYXNzIENTU1Byb3BlcnR5IHsKIHB1YmxpYzoKLSAgICBDU1NQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHZh
bHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIGlzU2V0RnJvbVNob3J0aGFuZCA9IGZh
bHNlLCBpbnQgaW5kZXhJblNob3J0aGFuZHNWZWN0b3IgPSAwLCBib29sIGltcGxpY2l0ID0gZmFs
c2UpCisgICAgQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBSZWZQdHI8Q1NT
VmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2UsIGJvb2wgaXNTZXRGcm9tU2hv
cnRoYW5kID0gZmFsc2UsIGludCBpbmRleEluU2hvcnRoYW5kc1ZlY3RvciA9IDAsIGJvb2wgaW1w
bGljaXQgPSBmYWxzZSkKICAgICAgICAgOiBtX21ldGFkYXRhKHByb3BlcnR5SUQsIGlzU2V0RnJv
bVNob3J0aGFuZCwgaW5kZXhJblNob3J0aGFuZHNWZWN0b3IsIGltcG9ydGFudCwgaW1wbGljaXQs
IGlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAgICAgICwgbV92YWx1ZSh2YWx1
ZSkKKyAgICAgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQogICAgIHsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3BlcnRpZXMuY3BwIGIvU291cmNl
L1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKaW5kZXggMTBiYjI4NDlkMzNhMDc1M2Qw
OTM1ZTE3NWJhYjg2MzgxYjljZTIwYS4uOGJmY2ExNDMxNzI3OWZlMzFiZWZkY2EzOTM2ZDBkZjA3
Yzk2YTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKQEAgLTc3Nyw3
ICs3NzcsNyBAQCB2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDUwogCiAgICAgUmVmUHRyPENTU1ZhbHVl
PiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaG9ydGhh
bmQubGVuZ3RoKCk7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eVZlY3Rvci5hcHBlbmQoQ1NTUHJv
cGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgdmFsdWUsIGltcG9ydGFudCkpOworICAg
ICAgICBtX3Byb3BlcnR5VmVjdG9yLmFwcGVuZChDU1NQcm9wZXJ0eShzaG9ydGhhbmQucHJvcGVy
dGllcygpW2ldLCB2YWx1ZS5jb3B5UmVmKCksIGltcG9ydGFudCkpOwogfQogCiBib29sIE11dGFi
bGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KGNvbnN0IENTU1Byb3BlcnR5JiBwcm9wZXJ0
eSwgQ1NTUHJvcGVydHkqIHNsb3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5
bGVSdWxlSW1wb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3Bw
CmluZGV4IGY1Njc5NTYwMTgxZjllZmFmZTVhOWYxMzJhMWIwOTE0NDBmYzUwMTMuLmU3ZWM5ODA0
M2ZiYjM1NGUzNjRhMmRhODg2NjA0NGFiODkyMjdkOTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGVJbXBvcnQuY3BwCkBAIC0zNCwxNyArMzQsMTcgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCi1SZWY8U3R5bGVSdWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCitSZWY8U3R5bGVS
dWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYsIFJl
ZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0eWxlUnVsZUltcG9ydChocmVmLCBtZWRpYSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFN0eWxlUnVsZUltcG9ydChocmVmLCBXVEZNb3ZlKG1lZGlhKSkpOwogfQogCi1TdHlsZVJ1bGVJ
bXBvcnQ6OlN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVk
aWFRdWVyeVNldD4gbWVkaWEpCitTdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVsZUltcG9ydChjb25z
dCBTdHJpbmcmIGhyZWYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhKQogICAgIDogU3R5
bGVSdWxlQmFzZShJbXBvcnQsIDApCiAgICAgLCBtX3BhcmVudFN0eWxlU2hlZXQoMCkKICAgICAs
IG1fc3R5bGVTaGVldENsaWVudCh0aGlzKQogICAgICwgbV9zdHJIcmVmKGhyZWYpCi0gICAgLCBt
X21lZGlhUXVlcmllcyhtZWRpYSkKKyAgICAsIG1fbWVkaWFRdWVyaWVzKFdURk1vdmUobWVkaWEp
KQogICAgICwgbV9jYWNoZWRTaGVldCgwKQogICAgICwgbV9sb2FkaW5nKGZhbHNlKQogewpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5oIGIvU291cmNlL1dl
YkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5oCmluZGV4IGJhMGIyYTczMWU5ZmU1YTU1NWZhNjM3
MWE0NzE2NGE3MjA3ZjI2NTYuLjJiYmZlNzE4ZTNjYjNiMGFlMDQwMTEyYjg4ZTNjMzRjM2Y5NDI0
M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmgKQEAgLTM2LDcgKzM2LDcgQEAg
Y2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVSdWxlSW1wb3J0IDogcHVibGlj
IFN0eWxlUnVsZUJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBocmVm
LCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+KTsKKyAgICBzdGF0aWMgUmVmPFN0eWxlUnVsZUlt
cG9ydD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaHJlZiwgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYp
OwogCiAgICAgflN0eWxlUnVsZUltcG9ydCgpOwogICAgIApAQCAtNzAsNyArNzAsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBTdHJpbmcmIGhyZWYsIGNvbnN0
IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBjb25zdCBDYWNoZWRDU1NTdHls
ZVNoZWV0Kik7CiAgICAgZnJpZW5kIGNsYXNzIEltcG9ydGVkU3R5bGVTaGVldENsaWVudDsKIAot
ICAgIFN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFR
dWVyeVNldD4pOworICAgIFN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFJlZlB0
cjxNZWRpYVF1ZXJ5U2V0PiYmKTsKIAogICAgIFN0eWxlU2hlZXRDb250ZW50cyogbV9wYXJlbnRT
dHlsZVNoZWV0OwogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>274537</attachid>
            <date>2016-03-20 05:20:24 -0700</date>
            <delta_ts>2016-03-20 09:53:52 -0700</delta_ts>
            <desc>Fix build break of Efl port</desc>
            <filename>bug-155695-20160320212016.patch</filename>
            <type>text/plain</type>
            <size>37822</size>
            <attacher name="Joonghun Park">jh718.park</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTk4NDczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzNhM2ZmYjA1OTBlN2Q5
Yjc2N2Y1YzYxZmExMmU5NDhjN2Y5ZDY4OS4uZGY3OTMyZmMxYTQ1ZmY0ZDJhNWMwZGI1MGMwYWE1
MmY3OGVkMDdiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU3IEBACisyMDE2LTAzLTIwICBKb29u
Z2h1biBQYXJrICA8amg3MTgucGFya0BzYW1zdW5nLmNvbT4KKworICAgICAgICBQdXJnZSBQYXNz
UmVmUHRyIGZyb20gQ1NTUGFyc2VyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTU2OTUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBiZWhhdmlvdXJzLgorCisgICAgICAg
ICogY3NzL0NTU0dyYW1tYXIueS5pbjoKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VEZWNsYXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OmFkZFByb3BlcnR5V2l0aFByZWZpeGluZ1ZhcmlhbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmFkZEV4cGFuZGVkUHJvcGVydHlGb3JWYWx1ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZUNvbHVtbnNTaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZUdyaWRJdGVtUG9zaXRpb25TaG9ydGhhbmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpwYXJzZUdyaWRBcmVhU2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNl
cjo6cGFyc2VCYXNpY1NoYXBlSW5zZXQpOgorICAgICAgICAoV2ViQ29yZTo6U2hhZG93UGFyc2VD
b250ZXh0Ojpjb21taXRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
U2hhZG93KToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdlUGFyc2VDb250ZXh0Ojpjb21t
aXRJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29t
bWl0SW1hZ2VTbGljZSk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4
dDo6Y29tbWl0Qm9yZGVyV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VQYXJz
ZUNvbnRleHQ6OmNvbW1pdEJvcmRlck91dHNldCk6CisgICAgICAgIChXZWJDb3JlOjpCb3JkZXJJ
bWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0UmVwZWF0KToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRl
ckltYWdlUGFyc2VDb250ZXh0Ojpjb21taXRXZWJLaXRCb3JkZXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpCb3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0Qm9yZGVySW1hZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VQYXJzZUNvbnRleHQ6OmNvbW1pdEJvcmRlckltYWdl
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkJvcmRlckltYWdlU2xpY2VQYXJzZUNvbnRleHQ6OmNvbW1p
dEJvcmRlckltYWdlU2xpY2UpOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFy
c2VDb250ZXh0OjpzZXRUb3ApOgorICAgICAgICAoV2ViQ29yZTo6Qm9yZGVySW1hZ2VRdWFkUGFy
c2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZVF1YWQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VEZXByZWNhdGVkR3JhZGllbnRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjp2YWx1ZUZyb21T
aWRlS2V5d29yZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUdyYWRpZW50Q29sb3JPcktleXdv
cmQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjphZGRUZXh0RGVjb3JhdGlvblByb3Bl
cnR5KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlSW1wb3J0UnVsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OmFkZE5ld1J1bGVUb1NvdXJjZVRyZWUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjpwb3BSdWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZVZpZXdwb3J0UnVsZSk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5oOgorICAg
ICAgICAqIGNzcy9DU1NQcm9wZXJ0eS5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUHJvcGVydHk6
OkNTU1Byb3BlcnR5KToKKyAgICAgICAgKiBjc3MvU3R5bGVQcm9wZXJ0aWVzLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KToKKyAgICAg
ICAgKiBjc3MvU3R5bGVSdWxlSW1wb3J0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVs
ZUltcG9ydDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUnVsZUltcG9ydDo6U3R5
bGVSdWxlSW1wb3J0KToKKyAgICAgICAgKiBjc3MvU3R5bGVSdWxlSW1wb3J0Lmg6CisKIDIwMTYt
MDMtMTkgIEpvb25naHVuIFBhcmsgIDxqaDcxOC5wYXJrQHNhbXN1bmcuY29tPgogCiAgICAgICAg
IFB1cmdlIFBhc3NSZWZQdHIgZnJvbSBXZWJDb3JlL2h0bWwvc2hhZG93CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluIGIvU291cmNlL1dlYkNvcmUvY3NzL0NT
U0dyYW1tYXIueS5pbgppbmRleCBhNzIzZGZlZDIyMDFhYWExZGY5YjUyZjhjNzAxOWRiY2Q5OWNi
Zjk1Li4zMTI3OWQ0ZTUwNWZkNTQ1MTFlYTE4ZWJmOGU3ZmI0NDQwNTZjNmRjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55LmluCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkuaW4KQEAgLTEwMDAsNyArMTAwMCw3IEBAIGJlZm9yZV92aWV3cG9y
dF9ydWxlOgogdmlld3BvcnQ6CiAgICAgYmVmb3JlX3ZpZXdwb3J0X3J1bGUgV0VCS0lUX1ZJRVdQ
T1JUX1JVTEVfU1lNIGF0X3J1bGVfaGVhZGVyX2VuZF9tYXliZV9zcGFjZQogICAgICd7JyBhdF9y
dWxlX2JvZHlfc3RhcnQgbWF5YmVfc3BhY2VfYmVmb3JlX2RlY2xhcmF0aW9uIGRlY2xhcmF0aW9u
X2xpc3QgY2xvc2luZ19icmFjZSB7Ci0gICAgICAgICQkID0gcGFyc2VyLT5jcmVhdGVWaWV3cG9y
dFJ1bGUoKS5sZWFrUmVmKCk7CisgICAgICAgICQkID0gJnBhcnNlci0+Y3JlYXRlVmlld3BvcnRS
dWxlKCkubGVha1JlZigpOwogICAgICAgICBwYXJzZXItPm1hcmtWaWV3cG9ydFJ1bGVCb2R5RW5k
KCk7CiAgICAgfQogICAgIHwgYmVmb3JlX3ZpZXdwb3J0X3J1bGUgV0VCS0lUX1ZJRVdQT1JUX1JV
TEVfU1lNIGVycm9yIGludmFsaWRfYmxvY2sgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRl
eCA0OTZmNGY5MDYzMTdjZGU5MjYzNTgzNzY2NDZlNTg2MDYxYWM1NTk4Li41MzI1Y2FlNTFlZWI3
ODJlOTk1YzgzNWZlYjdmNDM1MDE0ZDQwY2NhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApA
QCAtMTQ3OSwyMyArMTQ3OSwyMyBAQCBSZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBDU1NQ
YXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oY29uc3QgU3RyaW5nJiBzdHJpbmcsCiAgICAgY3NzeXlw
YXJzZSh0aGlzKTsKICAgICBtX3J1bGUgPSBudWxscHRyOwogCi0gICAgUmVmPEltbXV0YWJsZVN0
eWxlUHJvcGVydGllcz4gc3R5bGUgPSBjcmVhdGVTdHlsZVByb3BlcnRpZXMoKTsKKyAgICBhdXRv
IHN0eWxlID0gY3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCk7CiAgICAgY2xlYXJQcm9wZXJ0aWVzKCk7
CiAgICAgcmV0dXJuIHN0eWxlOwogfQogCiAKLWJvb2wgQ1NTUGFyc2VyOjpwYXJzZURlY2xhcmF0
aW9uKE11dGFibGVTdHlsZVByb3BlcnRpZXMqIGRlY2xhcmF0aW9uLCBjb25zdCBTdHJpbmcmIHN0
cmluZywgUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcHJwUnVsZVNvdXJjZURhdGEsIFN0
eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCitib29sIENTU1BhcnNlcjo6cGFy
c2VEZWNsYXJhdGlvbihNdXRhYmxlU3R5bGVQcm9wZXJ0aWVzKiBkZWNsYXJhdGlvbiwgY29uc3Qg
U3RyaW5nJiBzdHJpbmcsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiBhUnVsZVNvdXJjZURh
dGEsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpCiB7CiAgICAgLy8gTGVu
Z3RoIG9mIHRoZSAiQC13ZWJraXQtZGVjbHN7IiBwcmVmaXguCiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIHByZWZpeExlbmd0aCA9IDE1OwogCiAgICAgc2V0U3R5bGVTaGVldChjb250ZXh0U3R5
bGVTaGVldCk7CiAKLSAgICBSZWZQdHI8Q1NTUnVsZVNvdXJjZURhdGE+IHJ1bGVTb3VyY2VEYXRh
ID0gcHJwUnVsZVNvdXJjZURhdGE7CisgICAgQ1NTUnVsZVNvdXJjZURhdGEqIHJ1bGVTb3VyY2VE
YXRhID0gYVJ1bGVTb3VyY2VEYXRhLmdldCgpOwogICAgIGlmIChydWxlU291cmNlRGF0YSkgewog
ICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrID0gc3RkOjptYWtlX3VuaXF1ZTxSdWxlU291
cmNlRGF0YUxpc3Q+KCk7Ci0gICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChy
dWxlU291cmNlRGF0YSk7CisgICAgICAgIG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmFwcGVuZChX
VEZNb3ZlKGFSdWxlU291cmNlRGF0YSkpOwogICAgIH0KIAogICAgIHNldHVwUGFyc2VyKCJALXdl
YmtpdC1kZWNsc3siLCBzdHJpbmcsICJ9ICIpOwpAQCAtMTUxOSw3ICsxNTE5LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyogZGVjbGFy
YXRpb24sIGNvbnN0IFN0cmkKICAgICAgICAgICAgIHByb3BlcnR5RGF0YS5yYW5nZS5lbmQgLT0g
cHJlZml4TGVuZ3RoOwogICAgICAgICB9CiAKLSAgICAgICAgZml4VW5wYXJzZWRQcm9wZXJ0eVJh
bmdlcyhydWxlU291cmNlRGF0YS5nZXQoKSk7CisgICAgICAgIGZpeFVucGFyc2VkUHJvcGVydHlS
YW5nZXMocnVsZVNvdXJjZURhdGEpOwogICAgICAgICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLnJl
c2V0KCk7CiAgICAgfQogCkBAIC0xNjM1LDEwICsxNjM1LDEwIEBAIFJlZjxJbW11dGFibGVTdHls
ZVByb3BlcnRpZXM+IENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVQcm9wZXJ0aWVzKCkKICAgICByZXR1
cm4gSW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzOjpjcmVhdGUocmVzdWx0cy5kYXRhKCksIHJlc3Vs
dHMuc2l6ZSgpLCBtX2NvbnRleHQubW9kZSk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjphZGRQcm9w
ZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1Byb3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRy
PENTU1ZhbHVlPiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCit2b2lkIENT
U1BhcnNlcjo6YWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFyaWFudChDU1NQcm9wZXJ0eUlEIHBy
b3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYmIHZhbHVlLCBib29sIGltcG9ydGFudCwgYm9vbCBpbXBs
aWNpdCkKIHsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHZhbCA9IHZhbHVlLmdldCgpOwotICAgIGFk
ZFByb3BlcnR5KHByb3BJZCwgdmFsdWUsIGltcG9ydGFudCwgaW1wbGljaXQpOworICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsID0gdmFsdWUuY29weVJlZigpOworICAgIGFkZFByb3BlcnR5KHByb3BJ
ZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9ydGFudCwgaW1wbGljaXQpOwogCiAgICAgQ1NTUHJvcGVy
dHlJRCBwcmVmaXhpbmdWYXJpYW50ID0gcHJlZml4aW5nVmFyaWFudEZvclByb3BlcnR5SWQocHJv
cElkKTsKICAgICBpZiAocHJlZml4aW5nVmFyaWFudCA9PSBwcm9wSWQpCkBAIC0xNjQ3LDI1ICsx
NjQ3LDI1IEBAIHZvaWQgQ1NTUGFyc2VyOjphZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyCiAgICAgaWYgKG1fY3VycmVudFNob3J0
aGFuZCkgewogICAgICAgICAvLyBXZSBjYW4ndCB1c2UgU2hvcnRoYW5kU2NvcGUgaGVyZSBhcyB3
ZSBjYW4gYWxyZWFkeSBiZSBpbnNpZGUgb25lIChlLmcgd2UgYXJlIHBhcnNpbmcgQ1NTVHJhbnNp
dGlvbikuCiAgICAgICAgIG1fY3VycmVudFNob3J0aGFuZCA9IHByZWZpeGluZ1ZhcmlhbnRGb3JQ
cm9wZXJ0eUlkKG1fY3VycmVudFNob3J0aGFuZCk7Ci0gICAgICAgIGFkZFByb3BlcnR5KHByZWZp
eGluZ1ZhcmlhbnQsIHZhbC5yZWxlYXNlKCksIGltcG9ydGFudCwgaW1wbGljaXQpOworICAgICAg
ICBhZGRQcm9wZXJ0eShwcmVmaXhpbmdWYXJpYW50LCBXVEZNb3ZlKHZhbCksIGltcG9ydGFudCwg
aW1wbGljaXQpOwogICAgICAgICBtX2N1cnJlbnRTaG9ydGhhbmQgPSBwcmVmaXhpbmdWYXJpYW50
Rm9yUHJvcGVydHlJZChtX2N1cnJlbnRTaG9ydGhhbmQpOwogICAgIH0gZWxzZQotICAgICAgICBh
ZGRQcm9wZXJ0eShwcmVmaXhpbmdWYXJpYW50LCB2YWwucmVsZWFzZSgpLCBpbXBvcnRhbnQsIGlt
cGxpY2l0KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJlZml4aW5nVmFyaWFudCwgV1RGTW92ZSh2
YWwpLCBpbXBvcnRhbnQsIGltcGxpY2l0KTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZFByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSwgYm9v
bCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQpCit2b2lkIENTU1BhcnNlcjo6YWRkUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBv
cnRhbnQsIGJvb2wgaW1wbGljaXQpCiB7CiAgICAgLy8gVGhpcyBwcm9wZXJ0eSBkb2Vzbid0IGJl
bG9uZyB0byBhIHNob3J0aGFuZCBvciBpcyBhIENTUyB2YXJpYWJsZSAod2hpY2ggd2lsbCBiZSBy
ZXNvbHZlZCBsYXRlcikuCiAgICAgaWYgKCFtX2N1cnJlbnRTaG9ydGhhbmQpIHsKLSAgICAgICAg
bV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBv
cnRhbnQsIGZhbHNlLCBDU1NQcm9wZXJ0eUludmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwg
aW1wbGljaXQpKTsKKyAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQcm9wZXJ0
eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIGZhbHNlLCBDU1NQcm9wZXJ0eUlu
dmFsaWQsIG1faW1wbGljaXRTaG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KIAogICAgIFZlY3RvcjxTdHlsZVByb3BlcnR5U2hvcnRoYW5kPiBzaG9ydGhhbmRz
ID0gbWF0Y2hpbmdTaG9ydGhhbmRzRm9yTG9uZ2hhbmQocHJvcElkKTsKICAgICBpZiAoc2hvcnRo
YW5kcy5zaXplKCkgPT0gMSkKLSAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVuZChDU1NQ
cm9wZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQsIHRydWUsIENTU1Byb3BlcnR5SW52YWxp
ZCwgbV9pbXBsaWNpdFNob3J0aGFuZCB8fCBpbXBsaWNpdCkpOworICAgICAgICBtX3BhcnNlZFBy
b3BlcnRpZXMuYXBwZW5kKENTU1Byb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGltcG9y
dGFudCwgdHJ1ZSwgQ1NTUHJvcGVydHlJbnZhbGlkLCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGlt
cGxpY2l0KSk7CiAgICAgZWxzZQotICAgICAgICBtX3BhcnNlZFByb3BlcnRpZXMuYXBwZW5kKENT
U1Byb3BlcnR5KHByb3BJZCwgdmFsdWUsIGltcG9ydGFudCwgdHJ1ZSwgaW5kZXhPZlNob3J0aGFu
ZEZvckxvbmdoYW5kKG1fY3VycmVudFNob3J0aGFuZCwgc2hvcnRoYW5kcyksIG1faW1wbGljaXRT
aG9ydGhhbmQgfHwgaW1wbGljaXQpKTsKKyAgICAgICAgbV9wYXJzZWRQcm9wZXJ0aWVzLmFwcGVu
ZChDU1NQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQsIHRydWUsIGlu
ZGV4T2ZTaG9ydGhhbmRGb3JMb25naGFuZChtX2N1cnJlbnRTaG9ydGhhbmQsIHNob3J0aGFuZHMp
LCBtX2ltcGxpY2l0U2hvcnRoYW5kIHx8IGltcGxpY2l0KSk7CiB9CiAKIHZvaWQgQ1NTUGFyc2Vy
Ojpyb2xsYmFja0xhc3RQcm9wZXJ0aWVzKGludCBudW0pCkBAIC0xODkxLDIwICsxODkxLDE5IEBA
IGlubGluZSBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VWYWxpZFBy
aW1pdGl2ZShDU1NWYWx1ZUlEIGlkZW50CiAgICAgcmV0dXJuIG51bGxwdHI7CiB9CiAKLXZvaWQg
Q1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IHBycFZhbHVlLCBib29sIGltcG9ydGFudCkKK3ZvaWQg
Q1NTUGFyc2VyOjphZGRFeHBhbmRlZFByb3BlcnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9w
SWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiB2YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNob3J0aGFuZCYgc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVy
dHkocHJvcElkKTsKICAgICB1bnNpZ25lZCBzaG9ydGhhbmRMZW5ndGggPSBzaG9ydGhhbmQubGVu
Z3RoKCk7CiAgICAgaWYgKCFzaG9ydGhhbmRMZW5ndGgpIHsKLSAgICAgICAgYWRkUHJvcGVydHko
cHJvcElkLCBwcnBWYWx1ZSwgaW1wb3J0YW50KTsKKyAgICAgICAgYWRkUHJvcGVydHkocHJvcElk
LCBXVEZNb3ZlKHZhbHVlKSwgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWUgPSBwcnBWYWx1ZTsKICAgICBTaG9ydGhhbmRTY29w
ZSBzY29wZSh0aGlzLCBwcm9wSWQpOwogICAgIGNvbnN0IENTU1Byb3BlcnR5SUQqIGxvbmdoYW5k
cyA9IHNob3J0aGFuZC5wcm9wZXJ0aWVzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHNob3J0aGFuZExlbmd0aDsgKytpKQotICAgICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0s
IHZhbHVlLCBpbXBvcnRhbnQpOworICAgICAgICBhZGRQcm9wZXJ0eShsb25naGFuZHNbaV0sIHZh
bHVlLmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKIH0KIAogUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJz
ZXI6OnBhcnNlVmFyaWFibGVEZXBlbmRlbnRWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJRCwgY29u
c3QgQ1NTVmFyaWFibGVEZXBlbmRlbnRWYWx1ZSYgZGVwZW5kZW50VmFsdWUsIGNvbnN0IEN1c3Rv
bVByb3BlcnR5VmFsdWVNYXAmIGN1c3RvbVByb3BlcnRpZXMpCkBAIC0yNDY2LDcgKzI0NjUsNyBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBp
bXBvcnRhbnQpCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZTogewogICAg
ICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJlc3VsdDsKICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1h
Z2UocHJvcElkLCByZXN1bHQpKSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHJl
c3VsdCwgaW1wb3J0YW50KTsKKyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92
ZShyZXN1bHQpLCBpbXBvcnRhbnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CkBAIC0yNDc1LDcgKzI0NzQsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VWYWx1ZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZU91dHNldDogewogICAgICAgICBSZWZQdHI8
Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3VsdDsKICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VP
dXRzZXQocmVzdWx0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCByZXN1bHQs
IGltcG9ydGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocmVz
dWx0KSwgaW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwpAQCAtMjQ4NCw3ICsyNDgzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
VmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VSZXBlYXQ6IHsKICAgICAgICAgUmVmUHRyPENTU1Zh
bHVlPiByZXN1bHQ7CiAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlUmVwZWF0KHJlc3VsdCkp
IHsKLSAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgcmVzdWx0LCBpbXBvcnRhbnQpOwor
ICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKHJlc3VsdCksIGltcG9ydGFu
dCk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsK
QEAgLTI0OTMsNyArMjQ5Miw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVZhbHVlKENTU1Byb3Bl
cnR5SUQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza0JveEltYWdlU2xpY2U6IHsKICAgICAgICAgUmVmUHRyPENTU0JvcmRlckltYWdlU2xpY2VW
YWx1ZT4gcmVzdWx0OwogICAgICAgICBpZiAocGFyc2VCb3JkZXJJbWFnZVNsaWNlKHByb3BJZCwg
cmVzdWx0KSkgewotICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcElkLCByZXN1bHQsIGltcG9y
dGFudCk7CisgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIFdURk1vdmUocmVzdWx0KSwg
aW1wb3J0YW50KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAg
IGJyZWFrOwpAQCAtMjUwMiw3ICsyNTAxLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
Q1NTUHJvcGVydHlJRCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrQm94SW1hZ2VXaWR0aDogewogICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IHJlc3VsdDsKICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VXaWR0aChyZXN1bHQp
KSB7Ci0gICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHJlc3VsdCwgaW1wb3J0YW50KTsK
KyAgICAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZShyZXN1bHQpLCBpbXBvcnRh
bnQpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CkBAIC0yNjA4LDcgKzI2MDcsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShDU1NQcm9w
ZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IGN1cnJWYWx1ZTsKICAgICAgICAgICAgIGlmICghcGFyc2VGaWx0ZXIoKm1fdmFsdWVMaXN0
LCBjdXJyVmFsdWUpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAg
IGFkZFByb3BlcnR5KHByb3BJZCwgY3VyclZhbHVlLCBpbXBvcnRhbnQpOworICAgICAgICAgICAg
YWRkUHJvcGVydHkocHJvcElkLCBXVEZNb3ZlKGN1cnJWYWx1ZSksIGltcG9ydGFudCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTM5MDYs
MTQgKzM5MDUsMTQgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sdW1uc1Nob3J0aGFuZChib29s
IGltcG9ydGFudCkKIAogICAgIC8vIEFueSB1bmFzc2lnbmVkIHByb3BlcnR5IGF0IHRoaXMgcG9p
bnQgd2lsbCBiZWNvbWUgaW1wbGljaXQgJ2F1dG8nLgogICAgIGlmIChjb2x1bW5XaWR0aCkKLSAg
ICAgICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgY29sdW1uV2lkdGgsIGlt
cG9ydGFudCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsIFdU
Rk1vdmUoY29sdW1uV2lkdGgpLCBpbXBvcnRhbnQpOwogICAgIGVsc2UgewogICAgICAgICBhZGRQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCBDU1NWYWx1ZVBvb2w6OnNpbmdsZXRvbigp
LmNyZWF0ZUlkZW50aWZpZXJWYWx1ZShDU1NWYWx1ZUF1dG8pLCBpbXBvcnRhbnQsICFoYXNQZW5k
aW5nRXhwbGljaXRBdXRvIC8qIGltcGxpY2l0ICovKTsKICAgICAgICAgaGFzUGVuZGluZ0V4cGxp
Y2l0QXV0byA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmIChjb2x1bW5Db3VudCkKLSAgICAgICAg
YWRkUHJvcGVydHkoQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgY29sdW1uQ291bnQsIGltcG9ydGFu
dCk7CisgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsIFdURk1vdmUo
Y29sdW1uQ291bnQpLCBpbXBvcnRhbnQpOwogICAgIGVsc2UKICAgICAgICAgYWRkUHJvcGVydHko
Q1NTUHJvcGVydHlDb2x1bW5Db3VudCwgQ1NTVmFsdWVQb29sOjpzaW5nbGV0b24oKS5jcmVhdGVJ
ZGVudGlmaWVyVmFsdWUoQ1NTVmFsdWVBdXRvKSwgaW1wb3J0YW50LCAhaGFzUGVuZGluZ0V4cGxp
Y2l0QXV0byAvKiBpbXBsaWNpdCAqLyk7CiAKQEAgLTU1MzMsOCArNTUzMiw4IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZUdyaWRJdGVtUG9zaXRpb25TaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCBzaG9y
dGhhbmRJZCwgYm9vbCBpCiAgICAgfSBlbHNlCiAgICAgICAgIGVuZFZhbHVlID0gZ3JpZE1pc3Np
bmdHcmlkUG9zaXRpb25WYWx1ZSgqc3RhcnRWYWx1ZSk7CiAKLSAgICBhZGRQcm9wZXJ0eShzaG9y
dGhhbmQucHJvcGVydGllcygpWzBdLCBzdGFydFZhbHVlLCBpbXBvcnRhbnQpOwotICAgIGFkZFBy
b3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMV0sIGVuZFZhbHVlLCBpbXBvcnRhbnQpOwor
ICAgIGFkZFByb3BlcnR5KHNob3J0aGFuZC5wcm9wZXJ0aWVzKClbMF0sIFdURk1vdmUoc3RhcnRW
YWx1ZSksIGltcG9ydGFudCk7CisgICAgYWRkUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMo
KVsxXSwgV1RGTW92ZShlbmRWYWx1ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKQEAgLTU3ODksMTAgKzU3ODgsMTAgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JpZEFyZWFT
aG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAgICAgaWYgKCFjb2x1bW5FbmRWYWx1ZSkKICAgICAg
ICAgY29sdW1uRW5kVmFsdWUgPSBncmlkTWlzc2luZ0dyaWRQb3NpdGlvblZhbHVlKCpjb2x1bW5T
dGFydFZhbHVlKTsKIAotICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd1N0
YXJ0LCByb3dTdGFydFZhbHVlLCBpbXBvcnRhbnQpOwotICAgIGFkZFByb3BlcnR5KENTU1Byb3Bl
cnR5V2Via2l0R3JpZENvbHVtblN0YXJ0LCBjb2x1bW5TdGFydFZhbHVlLCBpbXBvcnRhbnQpOwot
ICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZFJvd0VuZCwgcm93RW5kVmFsdWUs
IGltcG9ydGFudCk7Ci0gICAgYWRkUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRHcmlkQ29sdW1u
RW5kLCBjb2x1bW5FbmRWYWx1ZSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVdlYmtpdEdyaWRSb3dTdGFydCwgV1RGTW92ZShyb3dTdGFydFZhbHVlKSwgaW1wb3J0YW50
KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEdyaWRDb2x1bW5TdGFydCwgV1RG
TW92ZShjb2x1bW5TdGFydFZhbHVlKSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVdlYmtpdEdyaWRSb3dFbmQsIFdURk1vdmUocm93RW5kVmFsdWUpLCBpbXBvcnRhbnQp
OworICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0R3JpZENvbHVtbkVuZCwgV1RGTW92
ZShjb2x1bW5FbmRWYWx1ZSksIGltcG9ydGFudCk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAg
LTY0MTMsNyArNjQxMiw3IEBAIHN0YXRpYyB2b2lkIGNvbXBsZXRlQm9yZGVyUmFkaWkoUmVmUHRy
PENTU1ByaW1pdGl2ZVZhbHVlPiByYWRpaVs0XSkKIAogLy8gRklYTUU6IFRoaXMgc2hvdWxkIGJl
IHJlZmFjdG9yZWQgd2l0aCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVyUmFkaXVzLgogLy8gQ1NTUGFy
c2VyOjpwYXJzZUJvcmRlclJhZGl1cyBjb250YWlucyBzdXBwb3J0IGZvciBzb21lIGxlZ2FjeSBy
YWRpdXMgY29uc3RydWN0aW9uLgotUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1BhcnNlcjo6cGFy
c2VJbnNldFJvdW5kZWRDb3JuZXJzKFBhc3NSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBzaGFw
ZSwgQ1NTUGFyc2VyVmFsdWVMaXN0JiBhcmdzKQorUmVmUHRyPENTU0Jhc2ljU2hhcGU+IENTU1Bh
cnNlcjo6cGFyc2VJbnNldFJvdW5kZWRDb3JuZXJzKFJlZjxDU1NCYXNpY1NoYXBlSW5zZXQ+JiYg
c2hhcGUsIENTU1BhcnNlclZhbHVlTGlzdCYgYXJncykKIHsKICAgICBDU1NQYXJzZXJWYWx1ZSog
YXJndW1lbnQgPSBhcmdzLm5leHQoKTsKIApAQCAtNjQ3NCwxMiArNjQ3MywxMiBAQCBSZWZQdHI8
Q1NTQmFzaWNTaGFwZT4gQ1NTUGFyc2VyOjpwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUGFzc1Jl
ZlB0cjxDU1NCYXNpY1NoYQogICAgIHNoYXBlLT5zZXRCb3R0b21SaWdodFJhZGl1cyhjcmVhdGVQ
cmltaXRpdmVWYWx1ZVBhaXIocmFkaWlbMF1bMl0ucmVsZWFzZSgpLCByYWRpaVsxXVsyXS5yZWxl
YXNlKCkpKTsKICAgICBzaGFwZS0+c2V0Qm90dG9tTGVmdFJhZGl1cyhjcmVhdGVQcmltaXRpdmVW
YWx1ZVBhaXIocmFkaWlbMF1bM10ucmVsZWFzZSgpLCByYWRpaVsxXVszXS5yZWxlYXNlKCkpKTsK
IAotICAgIHJldHVybiBzaGFwZTsKKyAgICByZXR1cm4gV1RGTW92ZShzaGFwZSk7CiB9CiAKIFJl
ZlB0cjxDU1NCYXNpY1NoYXBlPiBDU1NQYXJzZXI6OnBhcnNlQmFzaWNTaGFwZUluc2V0KENTU1Bh
cnNlclZhbHVlTGlzdCYgYXJncykKIHsKLSAgICBSZWZQdHI8Q1NTQmFzaWNTaGFwZUluc2V0PiBz
aGFwZSA9IENTU0Jhc2ljU2hhcGVJbnNldDo6Y3JlYXRlKCk7CisgICAgYXV0byBzaGFwZSA9IENT
U0Jhc2ljU2hhcGVJbnNldDo6Y3JlYXRlKCk7CiAKICAgICBDU1NQYXJzZXJWYWx1ZSogYXJndW1l
bnQgPSBhcmdzLmN1cnJlbnQoKTsKICAgICBWZWN0b3I8UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiA+IHdpZHRoQXJndW1lbnRzOwpAQCAtNjUyMSw4ICs2NTIwLDggQEAgUmVmUHRyPENTU0Jhc2lj
U2hhcGU+IENTU1BhcnNlcjo6cGFyc2VCYXNpY1NoYXBlSW5zZXQoQ1NTUGFyc2VyVmFsdWVMaXN0
JiBhcmdzKQogICAgIH0KIAogICAgIGlmIChoYXNSb3VuZGVkSW5zZXQpCi0gICAgICAgIHJldHVy
biBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoc2hhcGUsIGFyZ3MpOwotICAgIHJldHVybiBzaGFw
ZTsKKyAgICAgICAgcmV0dXJuIHBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhXVEZNb3ZlKHNoYXBl
KSwgYXJncyk7CisgICAgcmV0dXJuIFdURk1vdmUoc2hhcGUpOwogfQogCiBSZWZQdHI8Q1NTUHJp
bWl0aXZlVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VTaGFwZVJhZGl1cyhDU1NQYXJzZXJWYWx1ZSYg
dmFsdWUpCkBAIC03ODYzLDkgKzc4NjIsOSBAQCBzdHJ1Y3QgU2hhZG93UGFyc2VDb250ZXh0IHsK
ICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgY29tbWl0Q29sb3IoUGFzc1JlZlB0cjxDU1NQ
cmltaXRpdmVWYWx1ZT4gdmFsKQorICAgIHZvaWQgY29tbWl0Q29sb3IoUmVmPENTU1ByaW1pdGl2
ZVZhbHVlPiYmIHZhbCkKICAgICB7Ci0gICAgICAgIGNvbG9yID0gdmFsOworICAgICAgICBjb2xv
ciA9IFdURk1vdmUodmFsKTsKICAgICAgICAgYWxsb3dDb2xvciA9IGZhbHNlOwogICAgICAgICBp
ZiAoYWxsb3dYKSB7CiAgICAgICAgICAgICBhbGxvd1N0eWxlID0gZmFsc2U7CkBAIC03OTY0LDcg
Kzc5NjMsNyBAQCBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlU2hhZG93KENT
U1BhcnNlclZhbHVlTGlzdCYgdmFsdWVMaXN0LCBDU1NQcgogICAgICAgICAgICAgICAgIHJldHVy
biBudWxscHRyOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCBhIGNvbG9yIG9yIGxlbmd0aCBhbmQgaXMg
aW52YWxpZCBvcgogICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpdCBpcyBhIGNvbG9yLCBi
dXQgYSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCiAKLSAgICAgICAgICAgIGNv
bnRleHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGNv
bnRleHQuY29tbWl0Q29sb3IocGFyc2VkQ29sb3IucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAg
IH0KIAogICAgICAgICB2YWx1ZUxpc3QubmV4dCgpOwpAQCAtODA5MSwxOCArODA5MCwxOCBAQCBz
dHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgIGJvb2wgcmVxdWlyZVdpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9yZXF1aXJlV2lkdGg7IH0KICAgICBib29sIHJlcXVpcmVPdXRzZXQo
KSBjb25zdCB7IHJldHVybiBtX3JlcXVpcmVPdXRzZXQ7IH0KIAotICAgIHZvaWQgY29tbWl0SW1h
Z2UoUGFzc1JlZlB0cjxDU1NWYWx1ZT4gaW1hZ2UpCisgICAgdm9pZCBjb21taXRJbWFnZShSZWY8
Q1NTVmFsdWU+JiYgaW1hZ2UpCiAgICAgewotICAgICAgICBtX2ltYWdlID0gaW1hZ2U7CisgICAg
ICAgIG1faW1hZ2UgPSBXVEZNb3ZlKGltYWdlKTsKICAgICAgICAgbV9jYW5BZHZhbmNlID0gdHJ1
ZTsKICAgICAgICAgbV9hbGxvd0NvbW1pdCA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dJbWFnZSA9
IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdpZHRoID0gbV9yZXF1aXJl
T3V0c2V0ID0gZmFsc2U7CiAgICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gIW1faW1hZ2VTbGlj
ZTsKICAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVhdDsKICAgICB9Ci0gICAgdm9pZCBj
b21taXRJbWFnZVNsaWNlKFBhc3NSZWZQdHI8Q1NTQm9yZGVySW1hZ2VTbGljZVZhbHVlPiBzbGlj
ZSkKKyAgICB2b2lkIGNvbW1pdEltYWdlU2xpY2UoUmVmPENTU0JvcmRlckltYWdlU2xpY2VWYWx1
ZT4mJiBzbGljZSkKICAgICB7Ci0gICAgICAgIG1faW1hZ2VTbGljZSA9IHNsaWNlOworICAgICAg
ICBtX2ltYWdlU2xpY2UgPSBXVEZNb3ZlKHNsaWNlKTsKICAgICAgICAgbV9jYW5BZHZhbmNlID0g
dHJ1ZTsKICAgICAgICAgbV9hbGxvd0NvbW1pdCA9IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRv
ciA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dJbWFnZVNsaWNlID0gbV9yZXF1aXJlV2lkdGggPSBt
X3JlcXVpcmVPdXRzZXQgPSBmYWxzZTsKQEAgLTgxMjEsMjcgKzgxMjAsMjcgQEAgc3RydWN0IEJv
cmRlckltYWdlUGFyc2VDb250ZXh0IHsKICAgICAgICAgICAgIG1fcmVxdWlyZVdpZHRoID0gZmFs
c2U7CiAgICAgICAgIH0KICAgICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJXaWR0aChQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBzbGljZSkKKyAgICB2b2lkIGNvbW1pdEJvcmRlcldpZHRo
KFJlZjxDU1NQcmltaXRpdmVWYWx1ZT4mJiBzbGljZSkKICAgICB7Ci0gICAgICAgIG1fYm9yZGVy
U2xpY2UgPSBzbGljZTsKKyAgICAgICAgbV9ib3JkZXJTbGljZSA9IFdURk1vdmUoc2xpY2UpOwog
ICAgICAgICBtX2NhbkFkdmFuY2UgPSB0cnVlOwogICAgICAgICBtX2FsbG93Q29tbWl0ID0gbV9h
bGxvd0ZvcndhcmRTbGFzaE9wZXJhdG9yID0gdHJ1ZTsKICAgICAgICAgbV9hbGxvd0ltYWdlU2xp
Y2UgPSBtX3JlcXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwogICAgICAgICBt
X2FsbG93SW1hZ2UgPSAhbV9pbWFnZTsKICAgICAgICAgbV9hbGxvd1JlcGVhdCA9ICFtX3JlcGVh
dDsKICAgICB9Ci0gICAgdm9pZCBjb21taXRCb3JkZXJPdXRzZXQoUGFzc1JlZlB0cjxDU1NQcmlt
aXRpdmVWYWx1ZT4gb3V0c2V0KQorICAgIHZvaWQgY29tbWl0Qm9yZGVyT3V0c2V0KFJlZjxDU1NQ
cmltaXRpdmVWYWx1ZT4mJiBvdXRzZXQpCiAgICAgewotICAgICAgICBtX291dHNldCA9IG91dHNl
dDsKKyAgICAgICAgbV9vdXRzZXQgPSBXVEZNb3ZlKG91dHNldCk7CiAgICAgICAgIG1fY2FuQWR2
YW5jZSA9IHRydWU7CiAgICAgICAgIG1fYWxsb3dDb21taXQgPSB0cnVlOwogICAgICAgICBtX2Fs
bG93SW1hZ2VTbGljZSA9IG1fYWxsb3dGb3J3YXJkU2xhc2hPcGVyYXRvciA9IG1fcmVxdWlyZVdp
ZHRoID0gbV9yZXF1aXJlT3V0c2V0ID0gZmFsc2U7CiAgICAgICAgIG1fYWxsb3dJbWFnZSA9ICFt
X2ltYWdlOwogICAgICAgICBtX2FsbG93UmVwZWF0ID0gIW1fcmVwZWF0OwogICAgIH0KLSAgICB2
b2lkIGNvbW1pdFJlcGVhdChQYXNzUmVmUHRyPENTU1ZhbHVlPiByZXBlYXQpCisgICAgdm9pZCBj
b21taXRSZXBlYXQoUmVmPENTU1ZhbHVlPiYmIHJlcGVhdCkKICAgICB7Ci0gICAgICAgIG1fcmVw
ZWF0ID0gcmVwZWF0OworICAgICAgICBtX3JlcGVhdCA9IFdURk1vdmUocmVwZWF0KTsKICAgICAg
ICAgbV9jYW5BZHZhbmNlID0gdHJ1ZTsKICAgICAgICAgbV9hbGxvd0NvbW1pdCA9IHRydWU7CiAg
ICAgICAgIG1fYWxsb3dSZXBlYXQgPSBtX2FsbG93Rm9yd2FyZFNsYXNoT3BlcmF0b3IgPSBtX3Jl
cXVpcmVXaWR0aCA9IG1fcmVxdWlyZU91dHNldCA9IGZhbHNlOwpAQCAtODE0OSwyNCArODE0OCwy
NCBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQgewogICAgICAgICBtX2FsbG93SW1h
Z2UgPSAhbV9pbWFnZTsKICAgICB9CiAKLSAgICBQYXNzUmVmUHRyPENTU1ZhbHVlPiBjb21taXRX
ZWJLaXRCb3JkZXJJbWFnZSgpCisgICAgUmVmPENTU1ZhbHVlPiBjb21taXRXZWJLaXRCb3JkZXJJ
bWFnZSgpCiAgICAgewogICAgICAgICByZXR1cm4gY3JlYXRlQm9yZGVySW1hZ2VWYWx1ZShtX2lt
YWdlLCBtX2ltYWdlU2xpY2UsIG1fYm9yZGVyU2xpY2UsIG1fb3V0c2V0LCBtX3JlcGVhdCk7CiAg
ICAgfQogCiAgICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZShDU1NQYXJzZXImIHBhcnNlciwgYm9v
bCBpbXBvcnRhbnQpCiAgICAgewotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5KENT
U1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsIHBhcnNlciwgbV9pbWFnZSwgaW1wb3J0YW50KTsK
LSAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdl
U2xpY2UsIHBhcnNlciwgbV9pbWFnZVNsaWNlLCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRC
b3JkZXJJbWFnZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgcGFyc2VyLCBt
X2JvcmRlclNsaWNlLCBpbXBvcnRhbnQpOwotICAgICAgICBjb21taXRCb3JkZXJJbWFnZVByb3Bl
cnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQsIHBhcnNlciwgbV9vdXRzZXQsIGltcG9y
dGFudCk7Ci0gICAgICAgIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZVJlcGVhdCwgcGFyc2VyLCBtX3JlcGVhdCwgaW1wb3J0YW50KTsKKyAgICAgICAgY29t
bWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCBwYXJz
ZXIsIG1faW1hZ2UuY29weVJlZigpLCBpbXBvcnRhbnQpOworICAgICAgICBjb21taXRCb3JkZXJJ
bWFnZVByb3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgcGFyc2VyLCBtX2ltYWdl
U2xpY2UuY29weVJlZigpLCBpbXBvcnRhbnQpOworICAgICAgICBjb21taXRCb3JkZXJJbWFnZVBy
b3BlcnR5KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgcGFyc2VyLCBtX2JvcmRlclNsaWNl
LmNvcHlSZWYoKSwgaW1wb3J0YW50KTsKKyAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0
eShDU1NQcm9wZXJ0eUJvcmRlckltYWdlT3V0c2V0LCBwYXJzZXIsIG1fb3V0c2V0LmNvcHlSZWYo
KSwgaW1wb3J0YW50KTsKKyAgICAgICAgY29tbWl0Qm9yZGVySW1hZ2VQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUJvcmRlckltYWdlUmVwZWF0LCBwYXJzZXIsIG1fcmVwZWF0LmNvcHlSZWYoKSwgaW1wb3J0
YW50KTsKICAgICB9CiAKLSAgICB2b2lkIGNvbW1pdEJvcmRlckltYWdlUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCBwcm9wSWQsIENTU1BhcnNlciYgcGFyc2VyLCBQYXNzUmVmUHRyPENTU1ZhbHVlPiB2
YWx1ZSwgYm9vbCBpbXBvcnRhbnQpCisgICAgdm9pZCBjb21taXRCb3JkZXJJbWFnZVByb3BlcnR5
KENTU1Byb3BlcnR5SUQgcHJvcElkLCBDU1NQYXJzZXImIHBhcnNlciwgUmVmUHRyPENTU1ZhbHVl
PiYmIHZhbHVlLCBib29sIGltcG9ydGFudCkKICAgICB7CiAgICAgICAgIGlmICh2YWx1ZSkKLSAg
ICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShwcm9wSWQsIHZhbHVlLCBpbXBvcnRhbnQpOwor
ICAgICAgICAgICAgcGFyc2VyLmFkZFByb3BlcnR5KHByb3BJZCwgV1RGTW92ZSh2YWx1ZSksIGlt
cG9ydGFudCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHBhcnNlci5hZGRQcm9wZXJ0eShw
cm9wSWQsIENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSW1wbGljaXRJbml0aWFsVmFs
dWUoKSwgaW1wb3J0YW50LCB0cnVlKTsKICAgICB9CkBAIC04MjA2LDE0ICs4MjA1LDE0IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQ
dHI8Q1NTVmFsdWU+JiByZXN1bHQsCiAgICAgICAgICAgICBlbHNlIGlmIChpc0dlbmVyYXRlZElt
YWdlVmFsdWUoKmN1cnJlbnRWYWx1ZSkpIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFs
dWU+IHZhbHVlOwogICAgICAgICAgICAgICAgIGlmIChwYXJzZUdlbmVyYXRlZEltYWdlKCptX3Zh
bHVlTGlzdCwgdmFsdWUpKQotICAgICAgICAgICAgICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdl
KHZhbHVlLnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1h
Z2UodmFsdWUucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAjaWYgRU5BQkxFKENTU19JTUFHRV9TRVQpCiAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnRWYWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1
ZTo6RnVuY3Rpb24gJiYgZXF1YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UoY3VycmVudFZhbHVl
LT5mdW5jdGlvbi0+bmFtZSwgIi13ZWJraXQtaW1hZ2Utc2V0KCIpKSB7CiAgICAgICAgICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHBhcnNlSW1hZ2VTZXQoKTsKICAgICAgICAgICAg
ICAgICBpZiAodmFsdWUpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0SW1hZ2Uo
dmFsdWUucmVsZWFzZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRJbWFn
ZSh2YWx1ZS5yZWxlYXNlTm9uTnVsbCgpKTsKICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICNlbmRpZgpAQCAtODIyNCwyNSArODIyMywyNSBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VCb3JkZXJJbWFnZShDU1NQcm9wZXJ0eUlEIHByb3BJZCwg
UmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0LAogICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5j
ZSgpICYmIGNvbnRleHQuYWxsb3dJbWFnZVNsaWNlKCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxD
U1NCb3JkZXJJbWFnZVNsaWNlVmFsdWU+IGltYWdlU2xpY2U7CiAgICAgICAgICAgICBpZiAocGFy
c2VCb3JkZXJJbWFnZVNsaWNlKHByb3BJZCwgaW1hZ2VTbGljZSkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dC5jb21taXRJbWFnZVNsaWNlKGltYWdlU2xpY2UucmVsZWFzZSgpKTsKKyAgICAgICAg
ICAgICAgICBjb250ZXh0LmNvbW1pdEltYWdlU2xpY2UoaW1hZ2VTbGljZS5yZWxlYXNlTm9uTnVs
bCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIGlmICghY29udGV4dC5jYW5BZHZhbmNlKCkgJiYg
Y29udGV4dC5hbGxvd1JlcGVhdCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHJl
cGVhdDsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlUmVwZWF0KHJlcGVhdCkpCi0g
ICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRSZXBlYXQocmVwZWF0LnJlbGVhc2UoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRSZXBlYXQocmVwZWF0LnJlbGVhc2VOb25OdWxs
KCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFjb250ZXh0LmNhbkFkdmFuY2UoKSAmJiBj
b250ZXh0LnJlcXVpcmVXaWR0aCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZl
VmFsdWU+IGJvcmRlclNsaWNlOwogICAgICAgICAgICAgaWYgKHBhcnNlQm9yZGVySW1hZ2VXaWR0
aChib3JkZXJTbGljZSkpCi0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJXaWR0
aChib3JkZXJTbGljZS5yZWxlYXNlKCkpOworICAgICAgICAgICAgICAgIGNvbnRleHQuY29tbWl0
Qm9yZGVyV2lkdGgoYm9yZGVyU2xpY2UucmVsZWFzZU5vbk51bGwoKSk7CiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoIWNvbnRleHQuY2FuQWR2YW5jZSgpICYmIGNvbnRleHQucmVxdWlyZU91dHNl
dCgpKSB7CiAgICAgICAgICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IGJvcmRlck91dHNl
dDsKICAgICAgICAgICAgIGlmIChwYXJzZUJvcmRlckltYWdlT3V0c2V0KGJvcmRlck91dHNldCkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJPdXRzZXQoYm9yZGVyT3V0c2V0
LnJlbGVhc2UoKSk7CisgICAgICAgICAgICAgICAgY29udGV4dC5jb21taXRCb3JkZXJPdXRzZXQo
Ym9yZGVyT3V0c2V0LnJlbGVhc2VOb25OdWxsKCkpOwogICAgICAgICB9CiAKICAgICAgICAgaWYg
KCFjb250ZXh0LmNhbkFkdmFuY2UoKSkKQEAgLTgzMzUsNyArODMzNCw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgY29tbWl0RmlsbCgpIHsgbV9maWxsID0gdHJ1ZTsgbV9hbGxvd0ZpbGwgPSBmYWxz
ZTsgbV9hbGxvd051bWJlciA9ICFtX3RvcDsgfQogCi0gICAgUGFzc1JlZlB0cjxDU1NCb3JkZXJJ
bWFnZVNsaWNlVmFsdWU+IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQorICAgIFJlZjxDU1NCb3Jk
ZXJJbWFnZVNsaWNlVmFsdWU+IGNvbW1pdEJvcmRlckltYWdlU2xpY2UoKQogICAgIHsKICAgICAg
ICAgLy8gV2UgbmVlZCB0byBjbG9uZSBhbmQgcmVwZWF0IHZhbHVlcyBmb3IgYW55IG9taXNzaW9u
cy4KICAgICAgICAgQVNTRVJUKG1fdG9wKTsKQEAgLTg0NTEsOSArODQ1MCw5IEBAIHB1YmxpYzoK
ICAgICB9CiAKICAgICB2b2lkIHNldEFsbG93RmluYWxDb21taXQoKSB7IG1fYWxsb3dGaW5hbENv
bW1pdCA9IHRydWU7IH0KLSAgICB2b2lkIHNldFRvcChQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZh
bHVlPiB2YWwpIHsgbV90b3AgPSB2YWw7IH0KKyAgICB2b2lkIHNldFRvcChSZWY8Q1NTUHJpbWl0
aXZlVmFsdWU+JiYgdmFsKSB7IG1fdG9wID0gV1RGTW92ZSh2YWwpOyB9CiAKLSAgICBQYXNzUmVm
UHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBjb21taXRCb3JkZXJJbWFnZVF1YWQoKQorICAgIFJlZjxD
U1NQcmltaXRpdmVWYWx1ZT4gY29tbWl0Qm9yZGVySW1hZ2VRdWFkKCkKICAgICB7CiAgICAgICAg
IC8vIFdlIG5lZWQgdG8gY2xvbmUgYW5kIHJlcGVhdCB2YWx1ZXMgZm9yIGFueSBvbWlzc2lvbnMu
CiAgICAgICAgIEFTU0VSVChtX3RvcCk7CkBAIC04NjY1LDcgKzg2NjQsNyBAQCBib29sIENTU1Bh
cnNlcjo6cGFyc2VDb3VudGVyKENTU1Byb3BlcnR5SUQgcHJvcElkLCBpbnQgZGVmYXVsdFZhbHVl
LCBib29sIGltcG9ydAogfQogCiAvLyBUaGlzIHNob3VsZCBnbyBhd2F5IG9uY2Ugd2UgZHJvcCBz
dXBwb3J0IGZvciAtd2Via2l0LWdyYWRpZW50Ci1zdGF0aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRp
dmVWYWx1ZT4gcGFyc2VEZXByZWNhdGVkR3JhZGllbnRQb2ludChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIGJvb2wgaG9yaXpvbnRhbCkKK3N0YXRpYyBSZWY8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNl
RGVwcmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFyc2VyVmFsdWUmIHZhbHVlLCBib29sIGhvcml6
b250YWwpCiB7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiByZXN1bHQ7CiAgICAgaWYg
KHZhbHVlLnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkgewpAQCAtODY3OSw3
ICs4Njc4LDcgQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlRGVw
cmVjYXRlZEdyYWRpZW50UG9pbnQoQ1NTUGFyc2VyVmFsdWUKICAgICAgICAgICAgIHJlc3VsdCA9
IENTU1ZhbHVlUG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlVmFsdWUoNTAuLCBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BFUkNFTlRBR0UpOwogICAgIH0gZWxzZSBpZiAodmFsdWUudW5pdCA9PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX05VTUJFUiB8fCB2YWx1ZS51bml0ID09IENTU1ByaW1pdGl2ZVZh
bHVlOjpDU1NfUEVSQ0VOVEFHRSkKICAgICAgICAgcmVzdWx0ID0gQ1NTVmFsdWVQb29sOjpzaW5n
bGV0b24oKS5jcmVhdGVWYWx1ZSh2YWx1ZS5mVmFsdWUsIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2
ZVZhbHVlOjpVbml0VHlwZXM+KHZhbHVlLnVuaXQpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAg
IHJldHVybiByZXN1bHQucmVsZWFzZU5vbk51bGwoKTsKIH0KIAogc3RhdGljIGJvb2wgcGFyc2VE
ZXByZWNhdGVkR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyJiBwYXJzZXIsIENTU1BhcnNlclZh
bHVlJiB2YWx1ZSwgQ1NTR3JhZGllbnRDb2xvclN0b3AmIHN0b3ApCkBAIC04ODgzLDcgKzg4ODIs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoQ1NTUGFyc2VyVmFs
dWVMaXN0JiB2YWx1ZUxpc3QsIFJlZlB0cjxDUwogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0
aWMgUGFzc1JlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gdmFsdWVGcm9tU2lkZUtleXdvcmQoQ1NT
UGFyc2VyVmFsdWUmIHZhbHVlLCBib29sJiBpc0hvcml6b250YWwpCitzdGF0aWMgUmVmUHRyPENT
U1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZyb21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSYgdmFs
dWUsIGJvb2wmIGlzSG9yaXpvbnRhbCkKIHsKICAgICBpZiAodmFsdWUudW5pdCAhPSBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0lERU5UKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTg5MDMs
NyArODkwMiw3IEBAIHN0YXRpYyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiB2YWx1ZUZy
b21TaWRlS2V5d29yZChDU1NQYXJzZXJWYWx1ZSYgdmFsdWUsCiAgICAgcmV0dXJuIENTU1ZhbHVl
UG9vbDo6c2luZ2xldG9uKCkuY3JlYXRlSWRlbnRpZmllclZhbHVlKHZhbHVlLmlkKTsKIH0KIAot
c3RhdGljIFBhc3NSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHBhcnNlR3JhZGllbnRDb2xvck9y
S2V5d29yZChDU1NQYXJzZXImIHBhcnNlciwgQ1NTUGFyc2VyVmFsdWUmIHZhbHVlKQorc3RhdGlj
IFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gcGFyc2VHcmFkaWVudENvbG9yT3JLZXl3b3JkKENT
U1BhcnNlciYgcGFyc2VyLCBDU1NQYXJzZXJWYWx1ZSYgdmFsdWUpCiB7CiAgICAgQ1NTVmFsdWVJ
RCBpZCA9IHZhbHVlLmlkOwogICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgQ1NT
UGFyc2VyOjppc1ZhbGlkU3lzdGVtQ29sb3JWYWx1ZShpZCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51
IHx8IGlkID09IENTU1ZhbHVlQ3VycmVudGNvbG9yKQpAQCAtMTAzMTEsNyArMTAzMTAsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VQZXJzcGVjdGl2ZU9yaWdpbihDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgQ1NTUHJvcGVydHlJRCYgcHJvcAogICAgIHJldHVybiB2YWx1ZTsKIH0KIAotdm9pZCBDU1NQ
YXJzZXI6OmFkZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBh
c3NSZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCkKK3ZvaWQgQ1NTUGFyc2Vy
OjphZGRUZXh0RGVjb3JhdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcElkLCBSZWZQdHI8
Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50KQogewogICAgIC8vIFRoZSB0ZXh0LWRl
Y29yYXRpb24tbGluZSBwcm9wZXJ0eSB0YWtlcyBwcmlvcml0eSBvdmVyIHRleHQtZGVjb3JhdGlv
biwgdW5sZXNzIHRoZSBsYXR0ZXIgaGFzIGltcG9ydGFudCBwcmlvcml0eSBzZXQuCiAgICAgaWYg
KHByb3BJZCA9PSBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uICYmICFpbXBvcnRhbnQgJiYgIWlu
U2hvcnRoYW5kKCkpIHsKQEAgLTEwMzIwLDcgKzEwMzE5LDcgQEAgdm9pZCBDU1NQYXJzZXI6OmFk
ZFRleHREZWNvcmF0aW9uUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFBhc3NSZWZQdHI8
Q1NTVmEKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICB9Ci0gICAgYWRk
UHJvcGVydHkocHJvcElkLCB2YWx1ZSwgaW1wb3J0YW50KTsKKyAgICBhZGRQcm9wZXJ0eShwcm9w
SWQsIFdURk1vdmUodmFsdWUpLCBpbXBvcnRhbnQpOwogfQogCiBib29sIENTU1BhcnNlcjo6cGFy
c2VUZXh0RGVjb3JhdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCkBA
IC0xMjc2MywxOCArMTI3NjIsMTggQEAgcmVzdGFydEFmdGVyQ29tbWVudDoKICAgICByZXR1cm4g
dG9rZW4oKTsKIH0KIAotUmVmUHRyPFN0eWxlUnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlSW1w
b3J0UnVsZShjb25zdCBDU1NQYXJzZXJTdHJpbmcmIHVybCwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5
U2V0PiBtZWRpYSkKK1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZUltcG9y
dFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiB1cmwsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYm
IG1lZGlhKQogewogICAgIGlmICghbWVkaWEgfHwgIW1fYWxsb3dJbXBvcnRSdWxlcykgewogICAg
ICAgICBwb3BSdWxlRGF0YSgpOwogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICB9Ci0gICAg
UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gcnVsZSA9IFN0eWxlUnVsZUltcG9ydDo6Y3JlYXRlKHVy
bCwgbWVkaWEpOworICAgIFJlZlB0cjxTdHlsZVJ1bGVJbXBvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVJ
bXBvcnQ6OmNyZWF0ZSh1cmwsIFdURk1vdmUobWVkaWEpKTsKICAgICBwcm9jZXNzQW5kQWRkTmV3
UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCk7CiAgICAgcmV0dXJuIHJ1bGU7CiB9CiAKLVJlZlB0
cjxTdHlsZVJ1bGVCYXNlPiBDU1NQYXJzZXI6OmNyZWF0ZU1lZGlhUnVsZShQYXNzUmVmUHRyPE1l
ZGlhUXVlcnlTZXQ+IG1lZGlhLCBSdWxlTGlzdCogcnVsZXMpCitSZWZQdHI8U3R5bGVSdWxlQmFz
ZT4gQ1NTUGFyc2VyOjpjcmVhdGVNZWRpYVJ1bGUoUmVmUHRyPE1lZGlhUXVlcnlTZXQ+JiYgbWVk
aWEsIFJ1bGVMaXN0KiBydWxlcykKIHsKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2FsbG93
TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAgICAgUmVmUHRyPFN0eWxlUnVsZU1lZGlh
PiBydWxlOwpAQCAtMTI4NTksMTggKzEyODU4LDE4IEBAIHZvaWQgQ1NTUGFyc2VyOjpwcm9jZXNz
QW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVkKCkKICAgICBhZGROZXdSdWxlVG9Tb3Vy
Y2VUcmVlKHJ1bGUucmVsZWFzZSgpKTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OmFkZE5ld1J1bGVU
b1NvdXJjZVRyZWUoUGFzc1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcnVsZSkKK3ZvaWQgQ1NT
UGFyc2VyOjphZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4m
JiBydWxlKQogewogICAgIC8vIFByZWNvbmRpdGlvbjogKGlzRXh0cmFjdGluZ1NvdXJjZURhdGEo
KSkuCiAgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQogICAgICAgICByZXR1cm47CiAg
ICAgaWYgKG1fY3VycmVudFJ1bGVEYXRhU3RhY2stPmlzRW1wdHkoKSkKLSAgICAgICAgbV9ydWxl
U291cmNlRGF0YVJlc3VsdC0+YXBwZW5kKHJ1bGUpOworICAgICAgICBtX3J1bGVTb3VyY2VEYXRh
UmVzdWx0LT5hcHBlbmQoV1RGTW92ZShydWxlKSk7CiAgICAgZWxzZQotICAgICAgICBtX2N1cnJl
bnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOworICAgICAg
ICBtX2N1cnJlbnRSdWxlRGF0YVN0YWNrLT5sYXN0KCktPmNoaWxkUnVsZXMuYXBwZW5kKFdURk1v
dmUocnVsZSkpOwogfQogCi1QYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBDU1NQYXJzZXI6
OnBvcFJ1bGVEYXRhKCkKK1JlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gQ1NTUGFyc2VyOjpwb3BS
dWxlRGF0YSgpCiB7CiAgICAgaWYgKCFtX3J1bGVTb3VyY2VEYXRhUmVzdWx0KQogICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKQEAgLTEzMzQ5LDE2ICsxMzM0OCwxNiBAQCB2b2lkIENTU1BhcnNlcjo6
bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJbXBvcnRhbnRGb3VuZCwgYm9vbCBpc1Byb3BlcnR5UGFy
c2VkKQogfQogCiAjaWYgRU5BQkxFKENTU19ERVZJQ0VfQURBUFRBVElPTikKLVBhc3NSZWZQdHI8
U3R5bGVSdWxlQmFzZT4gQ1NTUGFyc2VyOjpjcmVhdGVWaWV3cG9ydFJ1bGUoKQorUmVmPFN0eWxl
UnVsZUJhc2U+IENTU1BhcnNlcjo6Y3JlYXRlVmlld3BvcnRSdWxlKCkKIHsKICAgICBtX2FsbG93
SW1wb3J0UnVsZXMgPSBtX2FsbG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gZmFsc2U7CiAKLSAg
ICBSZWZQdHI8U3R5bGVSdWxlVmlld3BvcnQ+IHJ1bGUgPSBTdHlsZVJ1bGVWaWV3cG9ydDo6Y3Jl
YXRlKGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKKyAgICBhdXRvIHJ1bGUgPSBTdHlsZVJ1bGVW
aWV3cG9ydDo6Y3JlYXRlKGNyZWF0ZVN0eWxlUHJvcGVydGllcygpKTsKICAgICBjbGVhclByb3Bl
cnRpZXMoKTsKIAogICAgIHByb2Nlc3NBbmRBZGROZXdSdWxlVG9Tb3VyY2VUcmVlSWZOZWVkZWQo
KTsKIAotICAgIHJldHVybiBydWxlLnJlbGVhc2UoKTsKKyAgICByZXR1cm4gcnVsZTsKIH0KIAog
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVmlld3BvcnRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKaW5kZXggOWEzZjVmODdmNGEw
ZGE0NWI0MTUzZDI1NjBmYzRkM2EzOTg1YWEwMS4uN2VjOTk5Nzk3ZmE4YzNlMWM0MmY1NWY5YTY2
NDcyNjMwOGVhNjM1MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMTI4LDE1ICsxMjgsMTUg
QEAgcHVibGljOgogICAgIHN0YXRpYyBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBwYXJzZUZvbnRGYWNl
VmFsdWUoY29uc3QgQXRvbWljU3RyaW5nJik7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBwYXJzZVZhbGlkUHJpbWl0aXZlKENTU1ZhbHVlSUQgaWRlbnQsIFZhbHVlV2l0aENhbGN1bGF0
aW9uJik7CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJs
ZVN0eWxlUHJvcGVydGllcyosIGNvbnN0IFN0cmluZyYsIFBhc3NSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKKyAgICBXRUJD
T1JFX0VYUE9SVCBib29sIHBhcnNlRGVjbGFyYXRpb24oTXV0YWJsZVN0eWxlUHJvcGVydGllcyos
IGNvbnN0IFN0cmluZyYsIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4mJiwgU3R5bGVTaGVldENv
bnRlbnRzKiBjb250ZXh0U3R5bGVTaGVldCk7CiAgICAgc3RhdGljIFJlZjxJbW11dGFibGVTdHls
ZVByb3BlcnRpZXM+IHBhcnNlSW5saW5lU3R5bGVEZWNsYXJhdGlvbihjb25zdCBTdHJpbmcmLCBF
bGVtZW50Kik7CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1lZGlhUXVlcnk+IHBhcnNlTWVkaWFRdWVy
eShjb25zdCBTdHJpbmcmKTsKIAotICAgIHZvaWQgYWRkUHJvcGVydHlXaXRoUHJlZml4aW5nVmFy
aWFudChDU1NQcm9wZXJ0eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQs
IGJvb2wgaW1wbGljaXQgPSBmYWxzZSk7Ci0gICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlELCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGljaXQg
PSBmYWxzZSk7CisgICAgdm9pZCBhZGRQcm9wZXJ0eVdpdGhQcmVmaXhpbmdWYXJpYW50KENTU1By
b3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQsIGJvb2wgaW1wbGlj
aXQgPSBmYWxzZSk7CisgICAgdm9pZCBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBSZWZQdHI8
Q1NTVmFsdWU+JiYsIGJvb2wgaW1wb3J0YW50LCBib29sIGltcGxpY2l0ID0gZmFsc2UpOwogICAg
IHZvaWQgcm9sbGJhY2tMYXN0UHJvcGVydGllcyhpbnQgbnVtKTsKICAgICBib29sIGhhc1Byb3Bl
cnRpZXMoKSBjb25zdCB7IHJldHVybiAhbV9wYXJzZWRQcm9wZXJ0aWVzLmlzRW1wdHkoKTsgfQot
ICAgIHZvaWQgYWRkRXhwYW5kZWRQcm9wZXJ0eUZvclZhbHVlKENTU1Byb3BlcnR5SUQgcHJvcElk
LCBQYXNzUmVmUHRyPENTU1ZhbHVlPiwgYm9vbCk7CisgICAgdm9pZCBhZGRFeHBhbmRlZFByb3Bl
cnR5Rm9yVmFsdWUoQ1NTUHJvcGVydHlJRCBwcm9wSWQsIFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9v
bCk7CiAKICAgICBib29sIHBhcnNlVmFsdWUoQ1NTUHJvcGVydHlJRCwgYm9vbCBpbXBvcnRhbnQp
OwogICAgIGJvb2wgcGFyc2VTaG9ydGhhbmQoQ1NTUHJvcGVydHlJRCwgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNob3J0aGFuZCYsIGJvb2wgaW1wb3J0YW50KTsKQEAgLTMzMSw3ICszMzEsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBwYXJzZVRleHRFbXBoYXNpc1N0eWxlKGJvb2wgaW1wb3J0YW50KTsKICAg
ICBib29sIHBhcnNlVGV4dEVtcGhhc2lzUG9zaXRpb24oYm9vbCBpbXBvcnRhbnQpOwogCi0gICAg
dm9pZCBhZGRUZXh0RGVjb3JhdGlvblByb3BlcnR5KENTU1Byb3BlcnR5SUQsIFBhc3NSZWZQdHI8
Q1NTVmFsdWU+LCBib29sIGltcG9ydGFudCk7CisgICAgdm9pZCBhZGRUZXh0RGVjb3JhdGlvblBy
b3BlcnR5KENTU1Byb3BlcnR5SUQsIFJlZlB0cjxDU1NWYWx1ZT4mJiwgYm9vbCBpbXBvcnRhbnQp
OwogICAgIGJvb2wgcGFyc2VUZXh0RGVjb3JhdGlvbihDU1NQcm9wZXJ0eUlEIHByb3BJZCwgYm9v
bCBpbXBvcnRhbnQpOwogICAgIGJvb2wgcGFyc2VUZXh0RGVjb3JhdGlvblNraXAoYm9vbCBpbXBv
cnRhbnQpOwogICAgIGJvb2wgcGFyc2VUZXh0VW5kZXJsaW5lUG9zaXRpb24oYm9vbCBpbXBvcnRh
bnQpOwpAQCAtMzYyLDEyICszNjIsMTIgQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4+IGNyZWF0ZVNlbGVjdG9y
VmVjdG9yKCk7CiAgICAgdm9pZCByZWN5Y2xlU2VsZWN0b3JWZWN0b3Ioc3RkOjp1bmlxdWVfcHRy
PFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Pj4pOwogCi0gICAgUmVm
UHRyPFN0eWxlUnVsZUJhc2U+IGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5n
JiwgUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CisgICAgUmVmUHRyPFN0eWxlUnVsZUJhc2U+
IGNyZWF0ZUltcG9ydFJ1bGUoY29uc3QgQ1NTUGFyc2VyU3RyaW5nJiwgUmVmUHRyPE1lZGlhUXVl
cnlTZXQ+JiYpOwogICAgIFJlZlB0cjxTdHlsZUtleWZyYW1lPiBjcmVhdGVLZXlmcmFtZShDU1NQ
YXJzZXJWYWx1ZUxpc3QmKTsKICAgICBSZWZQdHI8U3R5bGVSdWxlS2V5ZnJhbWVzPiBjcmVhdGVL
ZXlmcmFtZXNSdWxlKGNvbnN0IFN0cmluZyYsIHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8UmVmUHRy
PFN0eWxlS2V5ZnJhbWU+Pj4pOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRyPFN0eWxlUnVs
ZUJhc2U+PiBSdWxlTGlzdDsKLSAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlTWVkaWFS
dWxlKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4sIFJ1bGVMaXN0Kik7CisgICAgUmVmUHRyPFN0
eWxlUnVsZUJhc2U+IGNyZWF0ZU1lZGlhUnVsZShSZWZQdHI8TWVkaWFRdWVyeVNldD4mJiwgUnVs
ZUxpc3QqKTsKICAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlRW1wdHlNZWRpYVJ1bGUo
UnVsZUxpc3QqKTsKICAgICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlU3R5bGVSdWxlKFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+Piogc2VsZWN0b3JzKTsKICAg
ICBSZWZQdHI8U3R5bGVSdWxlQmFzZT4gY3JlYXRlRm9udEZhY2VSdWxlKCk7CkBAIC00NDksOCAr
NDQ5LDggQEAgcHVibGljOgogICAgIHZvaWQgbWFya1Byb3BlcnR5U3RhcnQoKTsKICAgICB2b2lk
IG1hcmtQcm9wZXJ0eUVuZChib29sIGlzSW1wb3J0YW50Rm91bmQsIGJvb2wgaXNQcm9wZXJ0eVBh
cnNlZCk7CiAgICAgdm9pZCBwcm9jZXNzQW5kQWRkTmV3UnVsZVRvU291cmNlVHJlZUlmTmVlZGVk
KCk7Ci0gICAgdm9pZCBhZGROZXdSdWxlVG9Tb3VyY2VUcmVlKFBhc3NSZWZQdHI8Q1NTUnVsZVNv
dXJjZURhdGE+KTsKLSAgICBQYXNzUmVmUHRyPENTU1J1bGVTb3VyY2VEYXRhPiBwb3BSdWxlRGF0
YSgpOworICAgIHZvaWQgYWRkTmV3UnVsZVRvU291cmNlVHJlZShSZWZQdHI8Q1NTUnVsZVNvdXJj
ZURhdGE+JiYpOworICAgIFJlZlB0cjxDU1NSdWxlU291cmNlRGF0YT4gcG9wUnVsZURhdGEoKTsK
ICAgICB2b2lkIHJlc2V0UHJvcGVydHlSYW5nZSgpIHsgbV9wcm9wZXJ0eVJhbmdlLnN0YXJ0ID0g
bV9wcm9wZXJ0eVJhbmdlLmVuZCA9IFVJTlRfTUFYOyB9CiAgICAgYm9vbCBpc0V4dHJhY3RpbmdT
b3VyY2VEYXRhKCkgY29uc3QgeyByZXR1cm4gISFtX2N1cnJlbnRSdWxlRGF0YVN0YWNrOyB9CiAg
ICAgdm9pZCBzeW50YXhFcnJvcihjb25zdCBMb2NhdGlvbiYsIFN5bnRheEVycm9yVHlwZSA9IEdl
bmVyYWxTeW50YXhFcnJvcik7CkBAIC00NjIsNyArNDYyLDcgQEAgcHVibGljOgogI2lmIEVOQUJM
RShDU1NfREVWSUNFX0FEQVBUQVRJT04pCiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxlQm9keVN0
YXJ0KCkgeyBtX2luVmlld3BvcnQgPSB0cnVlOyB9CiAgICAgdm9pZCBtYXJrVmlld3BvcnRSdWxl
Qm9keUVuZCgpIHsgbV9pblZpZXdwb3J0ID0gZmFsc2U7IH0KLSAgICBQYXNzUmVmUHRyPFN0eWxl
UnVsZUJhc2U+IGNyZWF0ZVZpZXdwb3J0UnVsZSgpOworICAgIFJlZjxTdHlsZVJ1bGVCYXNlPiBj
cmVhdGVWaWV3cG9ydFJ1bGUoKTsKICNlbmRpZgogCiAgICAgUmVmPENTU1ByaW1pdGl2ZVZhbHVl
PiBjcmVhdGVQcmltaXRpdmVOdW1lcmljVmFsdWUoVmFsdWVXaXRoQ2FsY3VsYXRpb24mKTsKQEAg
LTU3Myw3ICs1NzMsNyBAQCBwcml2YXRlOgogICAgIFBhcnNlUmVzdWx0IHBhcnNlVmFsdWUoTXV0
YWJsZVN0eWxlUHJvcGVydGllcyosIENTU1Byb3BlcnR5SUQsIGNvbnN0IFN0cmluZyYsIGJvb2wg
aW1wb3J0YW50LCBTdHlsZVNoZWV0Q29udGVudHMqIGNvbnRleHRTdHlsZVNoZWV0KTsKICAgICBS
ZWY8SW1tdXRhYmxlU3R5bGVQcm9wZXJ0aWVzPiBwYXJzZURlY2xhcmF0aW9uKGNvbnN0IFN0cmlu
ZyYsIFN0eWxlU2hlZXRDb250ZW50cyogY29udGV4dFN0eWxlU2hlZXQpOwogCi0gICAgUmVmUHRy
PENTU0Jhc2ljU2hhcGU+IHBhcnNlSW5zZXRSb3VuZGVkQ29ybmVycyhQYXNzUmVmUHRyPENTU0Jh
c2ljU2hhcGVJbnNldD4sIENTU1BhcnNlclZhbHVlTGlzdCYpOworICAgIFJlZlB0cjxDU1NCYXNp
Y1NoYXBlPiBwYXJzZUluc2V0Um91bmRlZENvcm5lcnMoUmVmPENTU0Jhc2ljU2hhcGVJbnNldD4m
JiwgQ1NTUGFyc2VyVmFsdWVMaXN0Jik7CiAKICAgICBlbnVtIFNpemVQYXJhbWV0ZXJUeXBlIHsK
ICAgICAgICAgTm9uZSwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQcm9wZXJ0
eS5oIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKaW5kZXggZDVjMzhhMDcxNzgz
NGJiNTMwZDhmYzQxMmIyODNkYzQ2Y2Y5N2MyMy4uNDU1YjlmMjJkMjg0YTZiYjdlNTZhMjI0OGNl
ZTEzYjI0MTAyZDE4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU1Byb3BlcnR5LmgKQEAgLTY0LDkgKzY0LDkg
QEAgc3RydWN0IFN0eWxlUHJvcGVydHlNZXRhZGF0YSB7CiAKIGNsYXNzIENTU1Byb3BlcnR5IHsK
IHB1YmxpYzoKLSAgICBDU1NQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IHZhbHVlLCBib29sIGltcG9ydGFudCA9IGZhbHNlLCBib29sIGlzU2V0
RnJvbVNob3J0aGFuZCA9IGZhbHNlLCBpbnQgaW5kZXhJblNob3J0aGFuZHNWZWN0b3IgPSAwLCBi
b29sIGltcGxpY2l0ID0gZmFsc2UpCisgICAgQ1NTUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlELCBSZWZQdHI8Q1NTVmFsdWU+JiYgdmFsdWUsIGJvb2wgaW1wb3J0YW50ID0gZmFsc2Us
IGJvb2wgaXNTZXRGcm9tU2hvcnRoYW5kID0gZmFsc2UsIGludCBpbmRleEluU2hvcnRoYW5kc1Zl
Y3RvciA9IDAsIGJvb2wgaW1wbGljaXQgPSBmYWxzZSkKICAgICAgICAgOiBtX21ldGFkYXRhKHBy
b3BlcnR5SUQsIGlzU2V0RnJvbVNob3J0aGFuZCwgaW5kZXhJblNob3J0aGFuZHNWZWN0b3IsIGlt
cG9ydGFudCwgaW1wbGljaXQsIGlzSW5oZXJpdGVkUHJvcGVydHkocHJvcGVydHlJRCkpCi0gICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICAgICAgLCBtX3ZhbHVlKFdURk1vdmUodmFsdWUpKQog
ICAgIHsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVByb3Bl
cnRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVydGllcy5jcHAKaW5kZXgg
MTBiYjI4NDlkMzNhMDc1M2QwOTM1ZTE3NWJhYjg2MzgxYjljZTIwYS4uOGJmY2ExNDMxNzI3OWZl
MzFiZWZkY2EzOTM2ZDBkZjA3Yzk2YTZiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUHJvcGVydGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUHJvcGVy
dGllcy5jcHAKQEAgLTc3Nyw3ICs3NzcsNyBAQCB2b2lkIE11dGFibGVTdHlsZVByb3BlcnRpZXM6
OnNldFByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgUGFzc1JlZlB0cjxDUwogCiAg
ICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9IHBycFZhbHVlOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBzaG9ydGhhbmQubGVuZ3RoKCk7ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eVZl
Y3Rvci5hcHBlbmQoQ1NTUHJvcGVydHkoc2hvcnRoYW5kLnByb3BlcnRpZXMoKVtpXSwgdmFsdWUs
IGltcG9ydGFudCkpOworICAgICAgICBtX3Byb3BlcnR5VmVjdG9yLmFwcGVuZChDU1NQcm9wZXJ0
eShzaG9ydGhhbmQucHJvcGVydGllcygpW2ldLCB2YWx1ZS5jb3B5UmVmKCksIGltcG9ydGFudCkp
OwogfQogCiBib29sIE11dGFibGVTdHlsZVByb3BlcnRpZXM6OnNldFByb3BlcnR5KGNvbnN0IENT
U1Byb3BlcnR5JiBwcm9wZXJ0eSwgQ1NTUHJvcGVydHkqIHNsb3QpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJ1bGVJbXBvcnQuY3BwCmluZGV4IGY1Njc5NTYwMTgxZjllZmFmZTVhOWYxMzJhMWIwOTE0
NDBmYzUwMTMuLmU3ZWM5ODA0M2ZiYjM1NGUzNjRhMmRhODg2NjA0NGFiODkyMjdkOTcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2Nzcy9TdHlsZVJ1bGVJbXBvcnQuY3BwCkBAIC0zNCwxNyArMzQsMTcgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZWY8U3R5bGVSdWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBv
cnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIGhyZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4g
bWVkaWEpCitSZWY8U3R5bGVSdWxlSW1wb3J0PiBTdHlsZVJ1bGVJbXBvcnQ6OmNyZWF0ZShjb25z
dCBTdHJpbmcmIGhyZWYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmIG1lZGlhKQogewotICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZUltcG9ydChocmVmLCBtZWRpYSkpOworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFN0eWxlUnVsZUltcG9ydChocmVmLCBXVEZNb3ZlKG1lZGlhKSkp
OwogfQogCi1TdHlsZVJ1bGVJbXBvcnQ6OlN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhy
ZWYsIFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWEpCitTdHlsZVJ1bGVJbXBvcnQ6OlN0
eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYm
IG1lZGlhKQogICAgIDogU3R5bGVSdWxlQmFzZShJbXBvcnQsIDApCiAgICAgLCBtX3BhcmVudFN0
eWxlU2hlZXQoMCkKICAgICAsIG1fc3R5bGVTaGVldENsaWVudCh0aGlzKQogICAgICwgbV9zdHJI
cmVmKGhyZWYpCi0gICAgLCBtX21lZGlhUXVlcmllcyhtZWRpYSkKKyAgICAsIG1fbWVkaWFRdWVy
aWVzKFdURk1vdmUobWVkaWEpKQogICAgICwgbV9jYWNoZWRTaGVldCgwKQogICAgICwgbV9sb2Fk
aW5nKGZhbHNlKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUlt
cG9ydC5oIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUnVsZUltcG9ydC5oCmluZGV4IGJhMGIy
YTczMWU5ZmU1YTU1NWZhNjM3MWE0NzE2NGE3MjA3ZjI2NTYuLjJiYmZlNzE4ZTNjYjNiMGFlMDQw
MTEyYjg4ZTNjMzRjM2Y5NDI0M2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHls
ZVJ1bGVJbXBvcnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSdWxlSW1wb3J0LmgK
QEAgLTM2LDcgKzM2LDcgQEAgY2xhc3MgU3R5bGVTaGVldENvbnRlbnRzOwogY2xhc3MgU3R5bGVS
dWxlSW1wb3J0IDogcHVibGljIFN0eWxlUnVsZUJhc2UgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgotICAgIHN0YXRpYyBSZWY8U3R5bGVSdWxlSW1wb3J0PiBjcmVhdGUo
Y29uc3QgU3RyaW5nJiBocmVmLCBQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+KTsKKyAgICBzdGF0
aWMgUmVmPFN0eWxlUnVsZUltcG9ydD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgaHJlZiwgUmVmUHRy
PE1lZGlhUXVlcnlTZXQ+JiYpOwogCiAgICAgflN0eWxlUnVsZUltcG9ydCgpOwogICAgIApAQCAt
NzAsNyArNzAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0Q1NTU3R5bGVTaGVldChjb25zdCBT
dHJpbmcmIGhyZWYsIGNvbnN0IFVSTCYgYmFzZVVSTCwgY29uc3QgU3RyaW5nJiBjaGFyc2V0LCBj
b25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgZnJpZW5kIGNsYXNzIEltcG9ydGVkU3R5
bGVTaGVldENsaWVudDsKIAotICAgIFN0eWxlUnVsZUltcG9ydChjb25zdCBTdHJpbmcmIGhyZWYs
IFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4pOworICAgIFN0eWxlUnVsZUltcG9ydChjb25zdCBT
dHJpbmcmIGhyZWYsIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiYmKTsKIAogICAgIFN0eWxlU2hlZXRD
b250ZW50cyogbV9wYXJlbnRTdHlsZVNoZWV0OwogCg==
</data>
<flag name="review"
          id="298969"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>