<?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>160524</bug_id>
          
          <creation_ts>2016-08-03 13:53:18 -0700</creation_ts>
          <short_desc>⛱: Implement Types for Constrainable Properties</short_desc>
          <delta_ts>2017-08-30 11:48:18 -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>Media</component>
          <version>WebKit Local Build</version>
          <rep_platform>Other</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>CONFIGURATION CHANGED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>160602</dependson>
    
    <dependson>160606</dependson>
          <blocked>160798</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="George Ruan">gruan</reporter>
          <assigned_to name="George Ruan">gruan</assigned_to>
          <cc>adam.bergkvist</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>jonlee</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1217150</commentid>
    <comment_count>0</comment_count>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-03 13:53:18 -0700</bug_when>
    <thetext>Currently, the class CapabilityValueOrRange only supports long and double types along with each type only supporting min, max, and exact values for Media Capabilities and Media Constraints.

According to https://w3c.github.io/mediacapture-main/#idl-def-constraindomstring, constrainable properties (and so also constraints) should be able to handle long, boolean, double, and String types along with having each type support a min, max, exact, and ideal member value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217156</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-08-03 13:56:51 -0700</bug_when>
    <thetext>&lt;rdar://problem/27685132&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217172</commentid>
    <comment_count>2</comment_count>
      <attachid>285269</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-03 14:08:01 -0700</bug_when>
    <thetext>Created attachment 285269
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217252</commentid>
    <comment_count>3</comment_count>
      <attachid>285286</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-03 16:05:27 -0700</bug_when>
    <thetext>Created attachment 285286
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217330</commentid>
    <comment_count>4</comment_count>
      <attachid>285286</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2016-08-03 22:39:47 -0700</bug_when>
    <thetext>Comment on attachment 285286
Patch

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

Can this be tested?

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:2
&gt; + * Copyright (C) 2012 Google Inc. All rights reserved.

probably not necessary.  It doesn&apos;t look like you moved this from anywhere.  It looks like you just copied the copyright after adding Apple to the other file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217377</commentid>
    <comment_count>5</comment_count>
      <attachid>285286</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-08-04 06:39:05 -0700</bug_when>
    <thetext>Comment on attachment 285286
Patch

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

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:42
&gt; +RefPtr&lt;BaseConstraint&gt; BaseConstraint::create(String name)

const String&amp; name

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:68
&gt; +Ref&lt;LongConstraint&gt; LongConstraint::create(String name)

const String&amp;

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:105
&gt; +            LOG(Media, &quot;LongConstraint::initializeWithDictionary(%p) - failed to get dictionary value for key&quot;, this);

Please log the key as well, e.g.: LOG(Media, &quot;LongConstraint::initializeWithDictionary(%p) - failed to get dictionary value for key &apos;%s&apos;&quot;, this, key.utf8().data());

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:120
&gt; +Ref&lt;DoubleConstraint&gt; DoubleConstraint::create(String name)

const String&amp;

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:157
&gt; +            LOG(Media, &quot;DoubleConstraint::initializeWithDictionary(%p) - failed to get dictionary value for key.&quot;, this);

Log the key.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:172
&gt; +Ref&lt;BooleanConstraint&gt; BooleanConstraint::create(String name)

const String&amp;

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:197
&gt; +            LOG(Media, &quot;BooleanConstraint::initializeWithDictionary(%p) - failed to get dictionary value for key.&quot;, this);

Log the name.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:208
&gt; +Ref&lt;StringConstraint&gt; StringConstraint::create(String name)

const String&amp;

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:231
&gt; +            LOG(Media, &quot;StringConstraint::initializeWithDictionary(%p) - failed to get dictionary value for key.&quot;, this);

Log the key.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:51
&gt; +    virtual ~BaseConstraint() { /* No-op */ };

Nit: the comment isn&apos;t necessary.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:54
&gt; +    virtual void initializeWithDictionary(const Dictionary&amp;) = 0;

Does this need to be public?

&gt; Source/WebCore/platform/mediastream/MediaConstraints.h:101
&gt; +    static Ref&lt;LongConstraint&gt; create(String name, const Dictionary&amp;);

I don&apos;t see this in the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217483</commentid>
    <comment_count>6</comment_count>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 10:57:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; Comment on attachment 285286 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=285286&amp;action=review
&gt; 
&gt; Can this be tested?

Not in its current state, since nothing is hooked up. It will be tested once parsing for constraints in getUserMedia is done!

&gt; 
&gt; &gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:2
&gt; &gt; + * Copyright (C) 2012 Google Inc. All rights reserved.
&gt; 
&gt; probably not necessary.  It doesn&apos;t look like you moved this from anywhere. 
&gt; It looks like you just copied the copyright after adding Apple to the other
&gt; file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217485</commentid>
    <comment_count>7</comment_count>
      <attachid>285338</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 11:01:09 -0700</bug_when>
    <thetext>Created attachment 285338
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217498</commentid>
    <comment_count>8</comment_count>
      <attachid>285341</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 11:44:02 -0700</bug_when>
    <thetext>Created attachment 285341
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217534</commentid>
    <comment_count>9</comment_count>
      <attachid>285341</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2016-08-04 12:49:33 -0700</bug_when>
    <thetext>Comment on attachment 285341
Patch

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        No new tests, no new functionality.

I would say something like: &quot;This isn&apos;t testable yet, but tests will be added in a future patch.&quot;

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:75
&gt; +RefPtr&lt;BaseConstraint&gt; BaseConstraint::createEmptyDerivedConstraint(const String&amp; name)
&gt; +{
&gt; +    const RealtimeMediaSourceSupportedConstraints&amp; supportedConstraints = RealtimeMediaSourceCenter::singleton().supportedConstraints();
&gt; +    MediaConstraintType constraintType = supportedConstraints.constraintFromName(name);
&gt; +
&gt; +    switch (constraintType) {
&gt; +    case MediaConstraintType::Width:
&gt; +    case MediaConstraintType::Height:
&gt; +    case MediaConstraintType::SampleRate:
&gt; +    case MediaConstraintType::SampleSize:
&gt; +        return LongConstraint::create(name);
&gt; +    case MediaConstraintType::AspectRatio:
&gt; +    case MediaConstraintType::FrameRate:
&gt; +    case MediaConstraintType::Volume:
&gt; +        return DoubleConstraint::create(name);
&gt; +    case MediaConstraintType::EchoCancellation:
&gt; +        return BooleanConstraint::create(name);
&gt; +    case MediaConstraintType::FacingMode:
&gt; +    case MediaConstraintType::DeviceId:
&gt; +    case MediaConstraintType::GroupId:
&gt; +        return StringConstraint::create(name);
&gt; +    case MediaConstraintType::Unknown:
&gt; +        return nullptr;
&gt; +    }
&gt; +}

Unless this will be used by other methods, I would put it inline in create.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:126
&gt; +            setIdeal(value);
&gt; +    }

Future engineers will thank you if you add something like:

    LOG(Media, &quot;LongConstraint::initializeWithDictionary(%p) - ignoring invalid key/value pair: &apos;%s&apos; : %f&quot;, this, key.utf8().data(), value);

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:178
&gt; +            setIdeal(value);
&gt; +    }

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:215
&gt; +    }
&gt; +}

Ditto.

&gt; Source/WebCore/platform/mediastream/MediaConstraints.cpp:248
&gt; +            setIdeal(value);
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217546</commentid>
    <comment_count>10</comment_count>
      <attachid>285351</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 13:06:38 -0700</bug_when>
    <thetext>Created attachment 285351
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217561</commentid>
    <comment_count>11</comment_count>
      <attachid>285357</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 13:24:23 -0700</bug_when>
    <thetext>Created attachment 285357
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217603</commentid>
    <comment_count>12</comment_count>
      <attachid>285365</attachid>
    <who name="George Ruan">gruan</who>
    <bug_when>2016-08-04 14:28:46 -0700</bug_when>
    <thetext>Created attachment 285365
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217622</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 15:16:30 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 285365:

The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217625</commentid>
    <comment_count>14</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 15:16:51 -0700</bug_when>
    <thetext>The commit-queue encountered the following flaky tests while processing attachment 285365:

editing/spelling/spellcheck-async.html bug 160571 (authors: g.czajkowski@samsung.com and mark.lam@apple.com)
The commit-queue is continuing to process your patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217631</commentid>
    <comment_count>15</comment_count>
      <attachid>285365</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 15:35:48 -0700</bug_when>
    <thetext>Comment on attachment 285365
Patch

Clearing flags on attachment: 285365

Committed r204147: &lt;http://trac.webkit.org/changeset/204147&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217632</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-04 15:35:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217740</commentid>
    <comment_count>17</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2016-08-04 18:05:18 -0700</bug_when>
    <thetext>This doesn&apos;t look right to me.  Rather than passing Dictionaries into c++ land, this conversion should be happening in the bindings.  And we certainly shouldn&apos;t be doing String -&gt; Number conversions like this. It should all happen at the JSValue level.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1217967</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-08-05 10:40:25 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 160602</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285269</attachid>
            <date>2016-08-03 14:08:01 -0700</date>
            <delta_ts>2016-08-03 15:33:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160803140638.patch</filename>
            <type>text/plain</type>
            <size>21401</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uMDU2YjhmNjEyM2JiYmZlMGVhM2IwOWNkYjFiM2E1
NDFlNDk5MDQxZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE2LTA4LTAzICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBGYWN0b3J5IGZvciBhbGwgZGVyaXZlZAor
ICAgICAgICBjb25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50Ojpj
cmVhdGUpOiBDcmVhdGVzIExvbmdDb25zdHJhaW50LgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0Nv
bnN0cmFpbnQ6OnNldE1pbik6IFNldHMgbWFuZGF0b3J5IG1pbiBjb25zdHJhaW50IHZhbHVlLgor
ICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6OnNldE1heCk6IFNldHMgbWFuZGF0b3J5
IG1heCBjb25zdHJhaW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6
OnNldEV4YWN0KTogU2V0cyBtYW5kYXRvcnkgZXhhY3QgY29uc3RyYWludAorICAgICAgICB2YWx1
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRJZGVhbCk6IFNldHMgb3B0
aW9uYWwgaWRlYWwgY29uc3RyYWludAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkxvbmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBQYXJzZXMgdXNlciBp
bnB1dAorICAgICAgICBhbmQgc2V0cyBtaW4sIG1heCwgZXhhY3QsIGlkZWFsIHZhbHVlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZSk6IENyZWF0ZXMgRG91Ymxl
Q29uc3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldE1pbik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0TWF4KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50OjpzZXRFeGFjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0SWRlYWwpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlv
bmFyeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0
ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OnNldEV4YWN0
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6c2V0SWRlYWwp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50Ojppbml0aWFsaXpl
V2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFp
bnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6
c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OnNl
dElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50Ojppbml0
aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6IEFkZCBhYnN0cmFjdCBjbGFzc2VzCisgICAgICAgIEJh
c2VDb25zdHJhaW50IGFuZCBOdW1lcmljQ29uc3RyYWludCwgYW5kIGZpbmFsIGNsYXNzZXMKKyAg
ICAgICAgRG91YmxlQ29uc3RyYWludCwgTG9uZ0NvbnN0cmFpbnQsIEJvb2xlYW5Db25zdHJhaW50
LCBhbmQKKyAgICAgICAgU3RyaW5nQ29uc3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VD
b25zdHJhaW50Ojp+QmFzZUNvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0
cmFpbnQ6Om5hbWUpOiBOYW1lIG9mIGNvbnN0cmFpbnQgYXNzb2NpYXRlZCB3aXRoLgorICAgICAg
ICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OkJhc2VDb25zdHJhaW50KToKKyAgICAgICAgKFdl
YkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNaW4pOiBTZXRzIG1pbiBjb25zdHJhaW50
IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc01heCk6
IFNldHMgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29u
c3RyYWludDo6c2V0SGFzRXhhY3QpOiBTZXRzIGV4YWN0IGNvbnN0cmFpbnQKKyAgICAgICAgdmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6c2V0SGFzSWRlYWwpOiBT
ZXRzIGlkZWFsIGNvbnN0cmFpbnQKKyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpO
dW1lcmljQ29uc3RyYWludDo6aGFzTWluKTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFpbnQK
KyAgICAgICAgaGFzIGEgbWluaW11bSB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWND
b25zdHJhaW50OjpoYXNNYXgpOiBEZXRlcm1pbmVzIHdoZXRoZXIgY29uc3RyYWludAorICAgICAg
ICBoYXMgYSBtYXhpbXVtIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFp
bnQ6Omhhc0V4YWN0KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFz
IGFuIGV4YWN0IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6Ok51
bWVyaWNDb25zdHJhaW50KToKKwogMjAxNi0wNy0yNyAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIEZpcnN0IHBhcmFtZXRlciB0byBIVE1MTWVkaWFFbGVtZW50LmNh
blBsYXlUeXBlKCkgc2hvdWxkIGJlIG1hbmRhdG9yeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNkNjk4OTc0NjkwY2Q2YzI1YzBi
MjQyNWNjNWYxZjgzNzc1MzY0MDQuLjdmZTQyZjUxODllYTUzZThmMjU1Y2YzZDE0ZTQ2M2E3YjRm
YzlkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTk4Nyw2ICs5ODcsNyBAQAogCQkxQUZFMTE5QTBDQkZGQ0M0MDAzMDE3RkEg
LyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRT
ZXRSb3dMaXN0LmggKi87IH07CiAJCTFCMTI0RDhEMUQzODBCNzAwMEVDREZCMCAvKiBNZWRpYVNh
bXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCAqLzsg
fTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5tbSBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhFMUQz
ODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gKi87IH07CisJCTFCRTVCRkMy
MUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZEOSAv
KiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMUJGOURCM0MxRDM5NzNBRDAwMjZBRUI3
IC8qIE1lZGlhU2FtcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBDRDY0MUVDNzE4MUVENjAxMDBFRTRDNDEgLyogTWVkaWFTYW1wbGUuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkxQzAxMDcwMDE5MjU5
NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDEwNkZFMTkyNTk0REYwMDhBNDIwMSAvKiBJ
bmxpbmVUZXh0Qm94U3R5bGUuY3BwICovOyB9OwogCQkxQzAxMDcwMTE5MjU5NERGMDA4QTQyMDEg
LyogSW5saW5lVGV4dEJveFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0
eWxlLmggKi87IH07CkBAIC04NTUxLDYgKzg1NTIsNyBAQAogCQkxQUZFMTE5ODBDQkZGQ0M0MDAz
MDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxQjEyNEQ4QzFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGlhU2FtcGxlQVZGT2JqQy5oOyBw
YXRoID0gLi4vTWVkaWFTYW1wbGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRpYVNhbXBsZUFWRk9iakMu
bW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZE
OSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IE1lZGlhQ29uc3RyYWludHMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRleHRCb3hTdHlsZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDEwNkZGMTkyNTk0REYwMDhBNDIwMSAv
KiBJbmxpbmVUZXh0Qm94U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SW5saW5lVGV4dEJveFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDkz
OUU4MUExM0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdGb250LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFNWR0ZvbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTU2ODgsNiArMTU2OTAsNyBAQAogCQkwNzIyMUI5MjE3Q0YwQUQ0MDA4
NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxk
cmVuID0gKAorCQkJCTFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRz
LmNwcCAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyogbWFjICovLAogCQkJCTA3
RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBBdWRpb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgg
Ki8sCiAJCQkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNhbmRpZGF0ZS5oICovLApA
QCAtMzIxNTEsNiArMzIxNTQsNyBAQAogCQkJCUIyMjI3QTQ2MEQwMEJGMjIwMDcxQjc4MiAvKiBT
VkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E0QTBEMDBCRjIyMDA3
MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyQTFG
MkIwMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTFCRTVCRkMyMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTREMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdN
UGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0EwQTJDRjA2QjAwRDU3
NjY0IC8qIFNWR05hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTUwMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hM2MyYjM4ZTVhNGQ4YTcyNzQzNDk1NTU5NTFlMmE1OTJlN2FlNDRmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFDb25zdHJhaW50cy5jcHAKQEAgLTAsMCArMSwyODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqICAgIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4K
KyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJ
UyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAq
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIk1lZGlhQ29uc3RyYWludHMuaCIKKworI2luY2x1ZGUgIkRpY3Rpb25h
cnkuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6Y3JlYXRl
KFN0cmluZyBuYW1lKQoreworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNlQ2Vu
dGVyOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpOworICAgIE1lZGlhQ29uc3Ry
YWludFR5cGUgY29uc3RyYWludFR5cGUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJhaW50
RnJvbU5hbWUobmFtZSk7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAgY2Fz
ZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6Cisg
ICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1cm4g
TG9uZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5
cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVSYXRl
OgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgICAgICByZXR1cm4g
RG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50
VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Db25zdHJhaW50
OjpjcmVhdGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdNb2Rl
OgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBNZWRp
YUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICByZXR1cm4gU3RyaW5nQ29uc3RyYWlu
dDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93bjoK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitSZWY8TG9uZ0NvbnN0cmFpbnQ+
IExvbmdDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgTG9uZ0NvbnN0cmFpbnQobmFtZSkpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50
OjpzZXRNaW4obG9uZyB2YWx1ZSkKK3sKKyAgICBtX21pbiA9IHZhbHVlOworICAgIHNldEhhc01p
bih0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3RyYWludDo6c2V0TWF4KGxvbmcgdmFsdWUpCit7
CisgICAgbV9tYXggPSB2YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9CisKK3ZvaWQgTG9u
Z0NvbnN0cmFpbnQ6OnNldEV4YWN0KGxvbmcgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZhbHVl
OworICAgIHNldEhhc0V4YWN0KHRydWUpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRJ
ZGVhbChsb25nIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJZGVh
bCh0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3RyYWludDo6c2V0RXhhY3QoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKK3sKKyAgICBzZXRFeGFjdCh2YWx1ZS50b0ludDY0KCkpOworfQorCit2b2lkIExv
bmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYg
ZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOwor
ICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsK
KworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBpZiAoa2V5ID09ICJtaW4i
KSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBpZiAoZGljdGlvbmFy
eUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkgJiYgIXZhbHVlLmlzTnVsbCgpICYmICF2
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2V0TWluKHZhbHVlLnRvSW50NjQoKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJtYXgiKSB7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CisgICAgICAgICAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5n
ZXQoa2V5LCB2YWx1ZSkgJiYgIXZhbHVlLmlzTnVsbCgpICYmICF2YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgc2V0TWF4KHZhbHVlLnRvSW50NjQoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoa2V5ID09ICJleGFjdCIpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAg
ICAgICAgICAgIGlmIChkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVlKSAm
JiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBz
ZXRFeGFjdCh2YWx1ZS50b0ludDY0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9
PSAiaWRlYWwiKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBpZiAo
ZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkgJiYgIXZhbHVlLmlzTnVs
bCgpICYmICF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUu
dG9JbnQ2NCgpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVmPERvdWJsZUNvbnN0cmFpbnQ+
IERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShTdHJpbmcgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEb3VibGVDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBEb3VibGVDb25z
dHJhaW50OjpzZXRNaW4oZG91YmxlIHZhbHVlKQoreworICAgIG1fbWluID0gdmFsdWU7CisgICAg
c2V0SGFzTWluKHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OnNldE1heChkb3Vi
bGUgdmFsdWUpCit7CisgICAgbV9tYXggPSB2YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9
CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0RXhhY3QoZG91YmxlIHZhbHVlKQoreworICAg
IG1fZXhhY3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNFeGFjdCh0cnVlKTsKK30KKwordm9pZCBEb3Vi
bGVDb25zdHJhaW50OjpzZXRJZGVhbChkb3VibGUgdmFsdWUpCit7CisgICAgbV9pZGVhbCA9IHZh
bHVlOworICAgIHNldEhhc0lkZWFsKHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6
OnNldEV4YWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgc2V0RXhhY3QodmFsdWUudG9E
b3VibGUoKSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0
aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdl
dE93blByb3BlcnR5TmFtZXMoa2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsK
KyAgICAgICAgaWYgKGtleSA9PSAibWluIikgeworICAgICAgICAgICAgU3RyaW5nIHZhbHVlOwor
ICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0KGtleSwgdmFsdWUp
ICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IHNldE1pbih2YWx1ZS50b0RvdWJsZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXkg
PT0gIm1heCIpIHsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChk
aWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVlKSAmJiAhdmFsdWUuaXNOdWxs
KCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRNYXgodmFsdWUudG9E
b3VibGUoKSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJleGFjdCIpIHsKKyAg
ICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChkaWN0aW9uYXJ5Q29uc3Ry
YWludFZhbHVlLmdldChrZXksIHZhbHVlKSAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRFeGFjdCh2YWx1ZS50b0RvdWJsZSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChrZXkgPT0gImlkZWFsIikgeworICAgICAgICAgICAgU3Ry
aW5nIHZhbHVlOworICAgICAgICAgICAgaWYgKGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0
KGtleSwgdmFsdWUpICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIHNldElkZWFsKHZhbHVlLnRvRG91YmxlKCkpOworICAgICAgICB9CisgICAg
fQorfQorCitSZWY8Qm9vbGVhbkNvbnN0cmFpbnQ+IEJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUo
U3RyaW5nIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQm9vbGVhbkNvbnN0cmFp
bnQobmFtZSkpOworfQorCit2b2lkIEJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdChib29sIHZh
bHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKKyAgICBtX2hhc0V4YWN0ID0gdHJ1ZTsKK30K
Kwordm9pZCBCb29sZWFuQ29uc3RyYWludDo6c2V0SWRlYWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBt
X2lkZWFsID0gdmFsdWU7CisgICAgbV9oYXNJZGVhbCA9IHRydWU7Cit9CisKK3ZvaWQgQm9vbGVh
bkNvbnN0cmFpbnQ6OnNldEV4YWN0KGNvbnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgaWYgKGVx
dWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVlLCAidHJ1ZSIpKQorICAgICAgICBzZXRF
eGFjdCh0cnVlKTsKKworICAgIGlmIChlcXVhbExldHRlcnNJZ25vcmluZ0FTQ0lJQ2FzZSh2YWx1
ZSwgImZhbHNlIikpCisgICAgICAgIHNldEV4YWN0KGZhbHNlKTsKK30KKwordm9pZCBCb29sZWFu
Q29uc3RyYWludDo6c2V0SWRlYWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAoZXF1
YWxMZXR0ZXJzSWdub3JpbmdBU0NJSUNhc2UodmFsdWUsICJ0cnVlIikpCisgICAgICAgIHNldElk
ZWFsKHRydWUpOworCisgICAgaWYgKGVxdWFsTGV0dGVyc0lnbm9yaW5nQVNDSUlDYXNlKHZhbHVl
LCAiZmFsc2UiKSkKKyAgICAgICAgc2V0SWRlYWwoZmFsc2UpOworfQorCit2b2lkIEJvb2xlYW5D
b25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGlj
dGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAg
IGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsKKwor
ICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBpZiAoa2V5ID09ICJleGFjdCIp
IHsKKyAgICAgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgICAgIGlmIChkaWN0aW9uYXJ5
Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVlKSAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZh
bHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAg
IH0KKworICAgICAgICBpZiAoa2V5ID09ICJpZGVhbCIpIHsKKyAgICAgICAgICAgIFN0cmluZyB2
YWx1ZTsKKyAgICAgICAgICAgIGlmIChkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXks
IHZhbHVlKSAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgICAgICBzZXRJZGVhbCh2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlZjxTdHJp
bmdDb25zdHJhaW50PiBTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nIG5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RyaW5nQ29uc3RyYWludChuYW1lKSk7Cit9CisKK3Zv
aWQgU3RyaW5nQ29uc3RyYWludDo6c2V0RXhhY3QoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAg
ICBtX2V4YWN0ID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RyaW5nQ29uc3RyYWludDo6c2V0SWRlYWwo
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7Cit9CisKK3ZvaWQg
U3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25h
cnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5
czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldE93blByb3BlcnR5TmFtZXMoa2V5
cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgaWYgKGtleSA9PSAi
ZXhhY3QiKSB7CisgICAgICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgICAgICBpZiAoZGlj
dGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkgJiYgIXZhbHVlLmlzTnVsbCgp
ICYmICF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSAiaWRlYWwiKSB7CisgICAgICAgICAgICBT
dHJpbmcgdmFsdWU7CisgICAgICAgICAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5n
ZXQoa2V5LCB2YWx1ZSkgJiYgIXZhbHVlLmlzTnVsbCgpICYmICF2YWx1ZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgICAgICB9CisgICAgfQorfQorCit9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNv
bnN0cmFpbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNv
bnN0cmFpbnRzLmgKaW5kZXggNTE0MWMyMjhkMGQ0OGY3OGRiNmU2NTdkOTg1ZTA2MzY5ZWJhZTY5
Yy4uMzI4OGM1Zjk2Y2RlZDc0ZDA4MWJhNjQxMThmYTRjYjJkMmEwNDBjZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
aApAQCAtMzgsNiArMzgsMTg3IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGlj
dGlvbmFyeTsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFyayAtIENvbnN0cmFpbnRUeXBl
cworCitjbGFzcyBCYXNlQ29uc3RyYWludCA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2VDb25zdHJh
aW50PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0cjxCYXNlQ29uc3RyYWludD4gY3JlYXRl
KFN0cmluZyBuYW1lKTsKKworICAgIHZpcnR1YWwgfkJhc2VDb25zdHJhaW50KCkgeyAvKiBOby1v
cCAqLyB9OworICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlh
bGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSA9IDA7CisKKyAgICB2aXJ0dWFs
IGJvb2wgaGFzSWRlYWwoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIHNldEV4YWN0KGNv
bnN0IFN0cmluZyYpID0gMDsKKworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9u
YW1lOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBCYXNlQ29uc3RyYWludChTdHJpbmcg
bmFtZSkKKyAgICAgICAgOiBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFN0cmluZyBtX25hbWU7Cit9OworCitjbGFzcyBOdW1lcmljQ29uc3RyYWludCA6IHB1Ymxp
YyBCYXNlQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgdm9pZCBzZXRIYXNNaW4oYm9vbCB2YWx1
ZSkgeyBtX2hhc01pbiA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRIYXNNYXgoYm9vbCB2YWx1ZSkg
eyBtX2hhc01heCA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRIYXNFeGFjdChib29sIHZhbHVlKSB7
IG1faGFzRXhhY3QgPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0SGFzSWRlYWwoYm9vbCB2YWx1ZSkg
eyBtX2hhc0lkZWFsID0gdmFsdWU7IH0KKworICAgIGJvb2wgaGFzTWluKCkgY29uc3QgeyByZXR1
cm4gbV9oYXNNaW47IH0KKyAgICBib29sIGhhc01heCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF4
OyB9CisgICAgYm9vbCBoYXNFeGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRXhhY3Q7IH0KKyAg
ICBib29sIGhhc0lkZWFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNJZGVhbDsgfQor
CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1faGFzTWluICYm
ICFtX2hhc01heCAmJiAhbV9oYXNFeGFjdCAmJiAhbV9oYXNJZGVhbDsgfQorICAgIGJvb2wgaXNN
YW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc01pbiB8fCBtX2hhc01heCB8
fCBtX2hhc0V4YWN0OyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBOdW1lcmljQ29uc3Ry
YWludChTdHJpbmcgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1lKQorICAgIHsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2hhc01pbiB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2hhc01heCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0V4YWN0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzSWRlYWwgeyBmYWxzZSB9OworfTsKKworY2xhc3MgTG9uZ0NvbnN0cmFpbnQg
ZmluYWwgOiBwdWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRpYyBS
ZWY8TG9uZ0NvbnN0cmFpbnQ+IGNyZWF0ZShTdHJpbmcgbmFtZSk7CisgICAgc3RhdGljIFJlZjxM
b25nQ29uc3RyYWludD4gY3JlYXRlKFN0cmluZyBuYW1lLCBjb25zdCBEaWN0aW9uYXJ5Jik7CisK
KyAgICB2b2lkIHNldE1pbihsb25nIHZhbHVlKTsKKyAgICB2b2lkIHNldE1heChsb25nIHZhbHVl
KTsKKyAgICB2b2lkIHNldEV4YWN0KGxvbmcgdmFsdWUpOworICAgIHZvaWQgc2V0SWRlYWwobG9u
ZyB2YWx1ZSk7CisKKyAgICB2b2lkIHNldEV4YWN0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOwor
CisgICAgbG9uZyBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGxvbmcgbWF4KCkg
Y29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKyAgICBsb25nIGV4YWN0KCkgY29uc3QgeyByZXR1cm4g
bV9leGFjdDsgfQorICAgIGxvbmcgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9CisK
KyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikgb3Zl
cnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExvbmdDb25zdHJhaW50KFN0cmlu
ZyBuYW1lKQorICAgICAgICA6IFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUpCisgICAg
eworICAgIH0KKworICAgIGxvbmcgbV9taW47CisgICAgbG9uZyBtX21heDsKKyAgICBsb25nIG1f
ZXhhY3Q7CisgICAgbG9uZyBtX2lkZWFsOworfTsKKworY2xhc3MgRG91YmxlQ29uc3RyYWludCBm
aW5hbCA6IHB1YmxpYyBOdW1lcmljQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxEb3VibGVDb25zdHJhaW50PiBjcmVhdGUoU3RyaW5nIG5hbWUpOworCisgICAgdm9pZCBzZXRN
aW4oZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldE1heChkb3VibGUgdmFsdWUpOworICAgIHZv
aWQgc2V0RXhhY3QoZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGRvdWJsZSB2YWx1
ZSk7CisKKyAgICB2b2lkIHNldEV4YWN0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworCisgICAg
ZG91YmxlIG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9CisgICAgZG91YmxlIG1heCgpIGNv
bnN0IHsgcmV0dXJuIG1fbWF4OyB9CisgICAgZG91YmxlIGV4YWN0KCkgY29uc3QgeyByZXR1cm4g
bV9leGFjdDsgfQorICAgIGRvdWJsZSBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0K
KworICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEb3VibGVDb25zdHJhaW50KFN0cmlu
ZyBuYW1lKQorICAgICAgICA6IFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUpCisgICAg
eworICAgIH0KKworICAgIGRvdWJsZSBtX21pbjsKKyAgICBkb3VibGUgbV9tYXg7CisgICAgZG91
YmxlIG1fZXhhY3Q7CisgICAgZG91YmxlIG1faWRlYWw7Cit9OworCitjbGFzcyBCb29sZWFuQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBCYXNlQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxCb29sZWFuQ29uc3RyYWludD4gY3JlYXRlKFN0cmluZyBuYW1lKTsKKworICAgIHZv
aWQgc2V0RXhhY3QoYm9vbCB2YWx1ZSk7CisgICAgdm9pZCBzZXRJZGVhbChib29sIHZhbHVlKTsK
KworICAgIHZvaWQgc2V0RXhhY3QoY29uc3QgU3RyaW5nJikgb3ZlcnJpZGU7CisgICAgdm9pZCBz
ZXRJZGVhbChjb25zdCBTdHJpbmcmKTsKKworICAgIGJvb2wgZXhhY3QoKSBjb25zdCB7IHJldHVy
biBtX2V4YWN0OyB9CisgICAgYm9vbCBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0K
KyAgICBib29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNFeGFjdDsgfQorICAgIGJv
b2wgaGFzSWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc0lkZWFsOyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9oYXNFeGFjdCAmJiAh
bV9oYXNJZGVhbDsgfTsKKyAgICBib29sIGlzTWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9oYXNFeGFjdDsgfQorCisgICAgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnko
Y29uc3QgRGljdGlvbmFyeSYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEJv
b2xlYW5Db25zdHJhaW50KFN0cmluZyBuYW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50KG5h
bWUpCisgICAgeworICAgIH0KKworICAgIGJvb2wgbV9leGFjdCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lkZWFsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzRXhhY3QgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9oYXNJZGVhbCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBTdHJpbmdDb25zdHJhaW50
IGZpbmFsIDogcHVibGljIEJhc2VDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFN0cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZShTdHJpbmcgbmFtZSk7CisKKyAgICB2b2lkIHNldEV4
YWN0KGNvbnN0IFN0cmluZyYpIG92ZXJyaWRlOworICAgIHZvaWQgc2V0SWRlYWwoY29uc3QgU3Ry
aW5nJik7CisKKyAgICBjb25zdCBTdHJpbmcmIGV4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9leGFj
dDsgfQorICAgIGNvbnN0IFN0cmluZyYgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9
CisKKyAgICBib29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gIW1fZXhhY3QuaXNFbXB0eSgp
OyB9CisgICAgYm9vbCBoYXNJZGVhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2lkZWFs
LmlzRW1wdHkoKTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9leGFjdC5pc0VtcHR5KCkgJiYgbV9pZGVhbC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGlz
TWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fZXhhY3QuaXNFbXB0eSgpOyB9
CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3RyaW5nQ29uc3RyYWludChTdHJp
bmcgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1lKQorICAgIHsKKyAgICB9CisK
KyAgICBTdHJpbmcgbV9leGFjdDsKKyAgICBTdHJpbmcgbV9pZGVhbDsKK307CisKKyNwcmFnbWEg
bWFyayAtCisjcHJhZ21hIG1hcmsgLSBNZWRpYUNvbnN0cmFpbnRzCisKIHN0cnVjdCBNZWRpYUNv
bnN0cmFpbnQgewogICAgIE1lZGlhQ29uc3RyYWludChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVl
KQogICAgICAgICA6IG1fbmFtZShuYW1lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285286</attachid>
            <date>2016-08-03 16:05:27 -0700</date>
            <delta_ts>2016-08-04 11:01:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160803160404.patch</filename>
            <type>text/plain</type>
            <size>20071</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uMTJmZTI4OGY0ZjcwYjNjMWQ3ODIwNDM1YTQ2MjBl
ZDVjMjVmMmRlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE2LTA4LTAzICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBGYWN0b3J5IGZvciBhbGwgZGVyaXZlZAor
ICAgICAgICBjb25zdHJhaW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50Ojpj
cmVhdGUpOiBDcmVhdGVzIExvbmdDb25zdHJhaW50LgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0Nv
bnN0cmFpbnQ6OnNldE1pbik6IFNldHMgbWFuZGF0b3J5IG1pbiBjb25zdHJhaW50IHZhbHVlLgor
ICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6OnNldE1heCk6IFNldHMgbWFuZGF0b3J5
IG1heCBjb25zdHJhaW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6
OnNldEV4YWN0KTogU2V0cyBtYW5kYXRvcnkgZXhhY3QgY29uc3RyYWludAorICAgICAgICB2YWx1
ZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRJZGVhbCk6IFNldHMgb3B0
aW9uYWwgaWRlYWwgY29uc3RyYWludAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6
OkxvbmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBQYXJzZXMgdXNlciBp
bnB1dAorICAgICAgICBhbmQgc2V0cyBtaW4sIG1heCwgZXhhY3QsIGlkZWFsIHZhbHVlcy4KKyAg
ICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0TWluKTogRGl0dG8uCisgICAgICAgIChX
ZWJDb3JlOjpEb3VibGVDb25zdHJhaW50OjpzZXRNYXgpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb3VibGVDb25zdHJhaW50OjpzZXRJZGVhbCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
RG91YmxlQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6Y3JlYXRlKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpzZXRJZGVhbCk6IERpdHRvLgorICAgICAgICAo
V2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6Y3JlYXRlKTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpzZXRFeGFjdCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6c2V0SWRlYWwpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFy
eSk6IERpdHRvLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWlu
dHMuaDogQWRkIGFic3RyYWN0IGNsYXNzZXMKKyAgICAgICAgQmFzZUNvbnN0cmFpbnQgYW5kIE51
bWVyaWNDb25zdHJhaW50LCBhbmQgZmluYWwgY2xhc3NlcworICAgICAgICBEb3VibGVDb25zdHJh
aW50LCBMb25nQ29uc3RyYWludCwgQm9vbGVhbkNvbnN0cmFpbnQsIGFuZAorICAgICAgICBTdHJp
bmdDb25zdHJhaW50LgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6On5CYXNlQ29u
c3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpCYXNlQ29uc3RyYWludDo6bmFtZSk6IE5hbWUg
b2YgY29uc3RyYWludCBhc3NvY2lhdGVkIHdpdGguCisgICAgICAgIChXZWJDb3JlOjpCYXNlQ29u
c3RyYWludDo6QmFzZUNvbnN0cmFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0
cmFpbnQ6OnNldEhhc01pbik6IFNldHMgbWluIGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChX
ZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6c2V0SGFzTWF4KTogU2V0cyBtYXggY29uc3RyYWlu
dCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNFeGFj
dCk6IFNldHMgZXhhY3QgY29uc3RyYWludAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgKFdlYkNv
cmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNJZGVhbCk6IFNldHMgaWRlYWwgY29uc3RyYWlu
dAorICAgICAgICB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50Ojpo
YXNNaW4pOiBEZXRlcm1pbmVzIHdoZXRoZXIgY29uc3RyYWludAorICAgICAgICBoYXMgYSBtaW5p
bXVtIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6Omhhc01heCk6
IERldGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhIG1heGltdW0gdmFs
dWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzRXhhY3QpOiBEZXRl
cm1pbmVzIHdoZXRoZXIgY29uc3RyYWludAorICAgICAgICBoYXMgYW4gZXhhY3QgdmFsdWUuCisg
ICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6TnVtZXJpY0NvbnN0cmFpbnQpOgor
CiAyMDE2LTA3LTI3ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAg
Rmlyc3QgcGFyYW1ldGVyIHRvIEhUTUxNZWRpYUVsZW1lbnQuY2FuUGxheVR5cGUoKSBzaG91bGQg
YmUgbWFuZGF0b3J5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggY2Q2OTg5NzQ2OTBjZDZjMjVjMGIyNDI1Y2M1ZjFmODM3NzUzNjQw
NC4uN2ZlNDJmNTE4OWVhNTNlOGYyNTVjZjNkMTRlNDYzYTdiNGZjOWQzMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTg3LDYg
Kzk4Nyw3IEBACiAJCTFBRkUxMTlBMENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJv
d0xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFB
RkUxMTk4MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3VsdFNldFJvd0xpc3QuaCAqLzsgfTsK
IAkJMUIxMjREOEQxRDM4MEI3MDAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUIxMjREOEMxRDM4MEI3
MDAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovOyB9OwogCQkxQjEyNEQ4RjFEMzgw
QkI2MDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUIxMjREOEUxRDM4MEJCNjAwRUNERkIwIC8qIE1l
ZGlhU2FtcGxlQVZGT2JqQy5tbSAqLzsgfTsKKwkJMUJFNUJGQzIxRDUxNTcxNTAwMTY2NkQ5IC8q
IE1lZGlhQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUJFNUJGQzExRDUxNTcxNTAwMTY2NkQ5IC8qIE1lZGlhQ29uc3RyYWludHMu
Y3BwICovOyB9OwogCQkxQkY5REIzQzFEMzk3M0FEMDAyNkFFQjcgLyogTWVkaWFTYW1wbGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IENENjQxRUM3MTgx
RUQ2MDEwMEVFNEM0MSAvKiBNZWRpYVNhbXBsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFDMDEwNzAwMTkyNTk0REYwMDhBNDIwMSAvKiBJbmxp
bmVUZXh0Qm94U3R5bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMUMwMTA2RkUxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5j
cHAgKi87IH07CiAJCTFDMDEwNzAxMTkyNTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDEw
NkZGMTkyNTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCAqLzsgfTsKQEAgLTg1
NTEsNiArODU1Miw3IEBACiAJCTFBRkUxMTk4MENCRkZDQzQwMDMwMTdGQSAvKiBKU1NRTFJlc3Vs
dFNldFJvd0xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNTUUxSZXN1
bHRTZXRSb3dMaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFCMTI0RDhDMUQz
ODBCNzAwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gTWVkaWFTYW1wbGVBVkZPYmpDLmg7IHBhdGggPSAuLi9NZWRpYVNhbXBs
ZUFWRk9iakMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEUxRDM4MEJC
NjAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLm9iamNwcDsgcGF0aCA9IE1lZGlhU2FtcGxlQVZGT2JqQy5tbTsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMUJFNUJGQzExRDUxNTcxNTAwMTY2NkQ5IC8qIE1lZGlhQ29uc3RyYWlu
dHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFDb25zdHJh
aW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDEwNkZFMTkyNTk0REYw
MDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gSW5saW5lVGV4dEJveFN0eWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMUMwMTA2RkYxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHls
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmxpbmVUZXh0Qm94U3R5bGUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwOTM5RTgxQTEzRTEyOTAwQjc4OEU1
IC8qIENhY2hlZFNWR0ZvbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ2FjaGVkU1ZHRm9udC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTY4
OCw2ICsxNTY5MCw3IEBACiAJCTA3MjIxQjkyMTdDRjBBRDQwMDg0OEU1MSAvKiBtZWRpYXN0cmVh
bSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJMUJFNUJG
QzExRDUxNTcxNTAwMTY2NkQ5IC8qIE1lZGlhQ29uc3RyYWludHMuY3BwICovLAogCQkJCTA3MjlC
MTREMTdDRkNDQTAwMDRGMUQ2MCAvKiBtYWMgKi8sCiAJCQkJMDdENkE0RjYxQkYyMzA3RDAwMTc0
MTQ2IC8qIEF1ZGlvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCAqLywKIAkJCQk1RUJCODkzMDFD
Nzc3N0UxMDBDNjVENDEgLyogSWNlQ2FuZGlkYXRlLmggKi8sCkBAIC0zMjE1MSw2ICszMjE1NCw3
IEBACiAJCQkJQjIyMjdBNDYwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01hc2tFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUIyMjI3QTRBMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdNZXRhZGF0
YUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjJBMUYyQjAwQ0VGMEFCRjAwNDQyRjZB
IC8qIFNWR01pc3NpbmdHbHlwaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMUJFNUJG
QzIxRDUxNTcxNTAwMTY2NkQ5IC8qIE1lZGlhQ29uc3RyYWludHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQjIyMjdBNEQwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01QYXRoRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBODMzQzdDQTBBMkNGMDZCMDBENTc2NjQgLyogU1ZHTmFtZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNTAwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR051bWJl
ckxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQyMjhm
MDBmN2U5YzYwMTU0NmQzYTZmYzJkMGUzMzBhNjhlZWI5ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmNwcApA
QCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUg
bmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAq
ICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTWVk
aWFDb25zdHJhaW50cy5oIgorCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUgIkxv
Z2dpbmcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6Y3Jl
YXRlKFN0cmluZyBuYW1lKQoreworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpOworICAgIE1lZGlhQ29u
c3RyYWludFR5cGUgY29uc3RyYWludFR5cGUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJh
aW50RnJvbU5hbWUobmFtZSk7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1
cm4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVS
YXRlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgICAgICByZXR1
cm4gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Db25zdHJh
aW50OjpjcmVhdGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICByZXR1cm4gU3RyaW5nQ29uc3Ry
YWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93
bjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitSZWY8TG9uZ0NvbnN0cmFp
bnQ+IExvbmdDb25zdHJhaW50OjpjcmVhdGUoU3RyaW5nIG5hbWUpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgTG9uZ0NvbnN0cmFpbnQobmFtZSkpOworfQorCit2b2lkIExvbmdDb25zdHJh
aW50OjpzZXRNaW4obG9uZyB2YWx1ZSkKK3sKKyAgICBtX21pbiA9IHZhbHVlOworICAgIHNldEhh
c01pbih0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3RyYWludDo6c2V0TWF4KGxvbmcgdmFsdWUp
Cit7CisgICAgbV9tYXggPSB2YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9CisKK3ZvaWQg
TG9uZ0NvbnN0cmFpbnQ6OnNldEV4YWN0KGxvbmcgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZh
bHVlOworICAgIHNldEhhc0V4YWN0KHRydWUpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50Ojpz
ZXRJZGVhbChsb25nIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJ
ZGVhbCh0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0
aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7Cisg
ICAgVmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdl
dE93blByb3BlcnR5TmFtZXMoa2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsK
KyAgICAgICAgbG9uZyB2YWx1ZTsKKyAgICAgICAgaWYgKCFkaWN0aW9uYXJ5Q29uc3RyYWludFZh
bHVlLmdldChrZXksIHZhbHVlKSkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiTG9uZ0NvbnN0
cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rp
b25hcnkgdmFsdWUgZm9yIGtleSIsIHRoaXMpOworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJtaW4iKQorICAgICAgICAgICAgc2V0TWluKHZh
bHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJtYXgiKQorICAgICAgICAgICAgc2V0TWF4
KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleGFjdCIpCisgICAgICAgICAgICBz
ZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWRlYWwiKQorICAgICAg
ICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgIH0KK30KKworUmVmPERvdWJsZUNvbnN0cmFpbnQ+
IERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShTdHJpbmcgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBEb3VibGVDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBEb3VibGVDb25z
dHJhaW50OjpzZXRNaW4oZG91YmxlIHZhbHVlKQoreworICAgIG1fbWluID0gdmFsdWU7CisgICAg
c2V0SGFzTWluKHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OnNldE1heChkb3Vi
bGUgdmFsdWUpCit7CisgICAgbV9tYXggPSB2YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9
CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0RXhhY3QoZG91YmxlIHZhbHVlKQoreworICAg
IG1fZXhhY3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNFeGFjdCh0cnVlKTsKK30KKwordm9pZCBEb3Vi
bGVDb25zdHJhaW50OjpzZXRJZGVhbChkb3VibGUgdmFsdWUpCit7CisgICAgbV9pZGVhbCA9IHZh
bHVlOworICAgIHNldEhhc0lkZWFsKHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6
OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29u
c3RyYWludFZhbHVlKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgZGljdGlvbmFy
eUNvbnN0cmFpbnRWYWx1ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtleXMpOworCisgICAgZm9yIChh
dXRvJiBrZXkgOiBrZXlzKSB7CisgICAgICAgIGRvdWJsZSB2YWx1ZTsKKyAgICAgICAgaWYgKCFk
aWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVlKSkgeworICAgICAgICAgICAg
TE9HKE1lZGlhLCAiRG91YmxlQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KCVw
KSAtIGZhaWxlZCB0byBnZXQgZGljdGlvbmFyeSB2YWx1ZSBmb3Iga2V5LiIsIHRoaXMpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJtaW4i
KQorICAgICAgICAgICAgc2V0TWluKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJt
YXgiKQorICAgICAgICAgICAgc2V0TWF4KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09
ICJleGFjdCIpCisgICAgICAgICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiaWRlYWwiKQorICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgIH0KK30K
KworUmVmPEJvb2xlYW5Db25zdHJhaW50PiBCb29sZWFuQ29uc3RyYWludDo6Y3JlYXRlKFN0cmlu
ZyBuYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5h
bWUpKTsKK30KKwordm9pZCBCb29sZWFuQ29uc3RyYWludDo6c2V0RXhhY3QoYm9vbCB2YWx1ZSkK
K3sKKyAgICBtX2V4YWN0ID0gdmFsdWU7CisgICAgbV9oYXNFeGFjdCA9IHRydWU7Cit9CisKK3Zv
aWQgQm9vbGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKGJvb2wgdmFsdWUpCit7CisgICAgbV9pZGVh
bCA9IHZhbHVlOworICAgIG1faGFzSWRlYWwgPSB0cnVlOworfQorCit2b2lkIEJvb2xlYW5Db25z
dHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlv
bmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIGRp
Y3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsKKworICAg
IGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBib29sIHZhbHVlOworICAgICAgICBp
ZiAoIWRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0KGtleSwgdmFsdWUpKSB7CisgICAgICAg
ICAgICBMT0coTWVkaWEsICJCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KCVwKSAtIGZhaWxlZCB0byBnZXQgZGljdGlvbmFyeSB2YWx1ZSBmb3Iga2V5LiIsIHRoaXMp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09
ICJleGFjdCIpCisgICAgICAgICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiaWRlYWwiKQorICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgIH0KK30K
KworUmVmPFN0cmluZ0NvbnN0cmFpbnQ+IFN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZShTdHJpbmcg
bmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJpbmdDb25zdHJhaW50KG5hbWUp
KTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50OjpzZXRFeGFjdChjb25zdCBTdHJpbmcmIHZh
bHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50
OjpzZXRJZGVhbChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsK
K30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29u
c3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8
U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVy
dHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBT
dHJpbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQo
a2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIlN0cmluZ0NvbnN0cmFpbnQ6
OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25hcnkg
dmFsdWUgZm9yIGtleS4iLCB0aGlzKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGtleSA9PSAiZXhhY3QiICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFs
dWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImlkZWFsIiAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMu
aAppbmRleCA1MTQxYzIyOGQwZDQ4Zjc4ZGI2ZTY1N2Q5ODVlMDYzNjllYmFlNjljLi5lYzZiMjQy
MjI4MWMwNTUyMDY4NDIxZGIzNjVjNWI0YWM1MmQzOTQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCkBAIC0xLDUg
KzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzksMTc5
IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRGljdGlvbmFyeTsKKworI3ByYWdt
YSBtYXJrIC0KKyNwcmFnbWEgbWFyayAtIENvbnN0cmFpbnRUeXBlcworCitjbGFzcyBCYXNlQ29u
c3RyYWludCA6IHB1YmxpYyBSZWZDb3VudGVkPEJhc2VDb25zdHJhaW50PiB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZlB0cjxCYXNlQ29uc3RyYWludD4gY3JlYXRlKFN0cmluZyBuYW1lKTsKKwor
ICAgIHZpcnR1YWwgfkJhc2VDb25zdHJhaW50KCkgeyAvKiBOby1vcCAqLyB9OworICAgIHZpcnR1
YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hbmRhdG9y
eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5
KGNvbnN0IERpY3Rpb25hcnkmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSWRlYWwoKSBj
b25zdCA9IDA7CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQmFzZUNvbnN0cmFpbnQoU3RyaW5nIG5hbWUpCisg
ICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdHJp
bmcgbV9uYW1lOworfTsKKworY2xhc3MgTnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgQmFzZUNv
bnN0cmFpbnQgeworcHVibGljOgorICAgIHZvaWQgc2V0SGFzTWluKGJvb2wgdmFsdWUpIHsgbV9o
YXNNaW4gPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0SGFzTWF4KGJvb2wgdmFsdWUpIHsgbV9oYXNN
YXggPSB2YWx1ZTsgfQorICAgIHZvaWQgc2V0SGFzRXhhY3QoYm9vbCB2YWx1ZSkgeyBtX2hhc0V4
YWN0ID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEhhc0lkZWFsKGJvb2wgdmFsdWUpIHsgbV9oYXNJ
ZGVhbCA9IHZhbHVlOyB9CisKKyAgICBib29sIGhhc01pbigpIGNvbnN0IHsgcmV0dXJuIG1faGFz
TWluOyB9CisgICAgYm9vbCBoYXNNYXgoKSBjb25zdCB7IHJldHVybiBtX2hhc01heDsgfQorICAg
IGJvb2wgaGFzRXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0V4YWN0OyB9CisgICAgYm9vbCBo
YXNJZGVhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzSWRlYWw7IH0KKworICAgIGJv
b2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2hhc01pbiAmJiAhbV9oYXNN
YXggJiYgIW1faGFzRXhhY3QgJiYgIW1faGFzSWRlYWw7IH0KKyAgICBib29sIGlzTWFuZGF0b3J5
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNNaW4gfHwgbV9oYXNNYXggfHwgbV9oYXNF
eGFjdDsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTnVtZXJpY0NvbnN0cmFpbnQoU3Ry
aW5nIG5hbWUpCisgICAgICAgIDogQmFzZUNvbnN0cmFpbnQobmFtZSkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIGJvb2wgbV9oYXNNaW4geyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNN
YXggeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNFeGFjdCB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2hhc0lkZWFsIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIExvbmdDb25zdHJhaW50IGZpbmFsIDog
cHVibGljIE51bWVyaWNDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExvbmdD
b25zdHJhaW50PiBjcmVhdGUoU3RyaW5nIG5hbWUpOworICAgIHN0YXRpYyBSZWY8TG9uZ0NvbnN0
cmFpbnQ+IGNyZWF0ZShTdHJpbmcgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYpOworCisgICAgdm9p
ZCBzZXRNaW4obG9uZyB2YWx1ZSk7CisgICAgdm9pZCBzZXRNYXgobG9uZyB2YWx1ZSk7CisgICAg
dm9pZCBzZXRFeGFjdChsb25nIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGxvbmcgdmFsdWUp
OworCisgICAgbG9uZyBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGxvbmcgbWF4
KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKyAgICBsb25nIGV4YWN0KCkgY29uc3QgeyByZXR1
cm4gbV9leGFjdDsgfQorICAgIGxvbmcgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9
CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikg
b3ZlcnJpZGU7CisgICAgCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExvbmdDb25zdHJhaW50KFN0
cmluZyBuYW1lKQorICAgICAgICA6IFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUpCisg
ICAgeworICAgIH0KKworICAgIGxvbmcgbV9taW47CisgICAgbG9uZyBtX21heDsKKyAgICBsb25n
IG1fZXhhY3Q7CisgICAgbG9uZyBtX2lkZWFsOworfTsKKworY2xhc3MgRG91YmxlQ29uc3RyYWlu
dCBmaW5hbCA6IHB1YmxpYyBOdW1lcmljQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxEb3VibGVDb25zdHJhaW50PiBjcmVhdGUoU3RyaW5nIG5hbWUpOworCisgICAgdm9pZCBz
ZXRNaW4oZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldE1heChkb3VibGUgdmFsdWUpOworICAg
IHZvaWQgc2V0RXhhY3QoZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGRvdWJsZSB2
YWx1ZSk7CisKKyAgICBkb3VibGUgbWluKCkgY29uc3QgeyByZXR1cm4gbV9taW47IH0KKyAgICBk
b3VibGUgbWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKyAgICBkb3VibGUgZXhhY3QoKSBj
b25zdCB7IHJldHVybiBtX2V4YWN0OyB9CisgICAgZG91YmxlIGlkZWFsKCkgY29uc3QgeyByZXR1
cm4gbV9pZGVhbDsgfQorCisgICAgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3Qg
RGljdGlvbmFyeSYpIG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERvdWJsZUNv
bnN0cmFpbnQoU3RyaW5nIG5hbWUpCisgICAgICAgIDogV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFp
bnQobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgZG91YmxlIG1fbWluOworICAgIGRvdWJsZSBt
X21heDsKKyAgICBkb3VibGUgbV9leGFjdDsKKyAgICBkb3VibGUgbV9pZGVhbDsKK307CisKK2Ns
YXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDogcHVibGljIEJhc2VDb25zdHJhaW50IHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGUoU3RyaW5nIG5h
bWUpOworCisgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFs
KGJvb2wgdmFsdWUpOworCisgICAgYm9vbCBleGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhhY3Q7
IH0KKyAgICBib29sIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9pZGVhbDsgfQorICAgIGJvb2wg
aGFzRXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0V4YWN0OyB9CisgICAgYm9vbCBoYXNJZGVh
bCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzSWRlYWw7IH0KKworICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2hhc0V4YWN0ICYmICFtX2hhc0lkZWFs
OyB9OworICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hh
c0V4YWN0OyB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0
aW9uYXJ5Jikgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQm9vbGVhbkNvbnN0
cmFpbnQoU3RyaW5nIG5hbWUpCisgICAgICAgIDogQmFzZUNvbnN0cmFpbnQobmFtZSkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBtX2V4YWN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faWRlYWwg
eyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNFeGFjdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hh
c0lkZWFsIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFN0cmluZ0NvbnN0cmFpbnQgZmluYWwgOiBw
dWJsaWMgQmFzZUNvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8U3RyaW5nQ29u
c3RyYWludD4gY3JlYXRlKFN0cmluZyBuYW1lKTsKKworICAgIHZvaWQgc2V0RXhhY3QoY29uc3Qg
U3RyaW5nJik7CisgICAgdm9pZCBzZXRJZGVhbChjb25zdCBTdHJpbmcmKTsKKworICAgIGNvbnN0
IFN0cmluZyYgZXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2V4YWN0OyB9CisgICAgY29uc3QgU3Ry
aW5nJiBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0KKworICAgIGJvb2wgaGFzRXhh
Y3QoKSBjb25zdCB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0lk
ZWFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1faWRlYWwuaXNFbXB0eSgpOyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2V4YWN0LmlzRW1wdHko
KSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5KCk7IH0KKworICAgIHZvaWQgaW5pdGlh
bGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBleHBsaWNpdCBTdHJpbmdDb25zdHJhaW50KFN0cmluZyBuYW1lKQorICAgICAgICA6
IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKworICAgIFN0cmluZyBtX2V4YWN0
OworICAgIFN0cmluZyBtX2lkZWFsOworfTsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFnbWEgbWFy
ayAtIE1lZGlhQ29uc3RyYWludHMKKwogc3RydWN0IE1lZGlhQ29uc3RyYWludCB7CiAgICAgTWVk
aWFDb25zdHJhaW50KFN0cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCiAgICAgICAgIDogbV9uYW1l
KG5hbWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285338</attachid>
            <date>2016-08-04 11:01:09 -0700</date>
            <delta_ts>2016-08-04 11:43:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160804105944.patch</filename>
            <type>text/plain</type>
            <size>20727</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uMjNmZTlhZjM0ZTM0MGNiNzgyMGVlY2I3M2UwNWZj
ZWU4NmIyZjc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA4LTA0ICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBJbml0aWFsaXplcyBtaW4sIG1heCwgZXhh
Y3QsIGlkZWFsCisgICAgICAgIHZhbHVlIG9mIGNvbnN0cmFpbnQgd2l0aCBkaWN0aW9uYXJ5Lgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0
cmFpbnQpOiBGYWN0b3J5IAorICAgICAgICBmb3IgYWxsIGRlcml2ZWQgY29uc3RyYWludHMuCisg
ICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6Y3JlYXRlKTogQ3JlYXRlcyBMb25nQ29u
c3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRNaW4pOiBTZXRz
IG1hbmRhdG9yeSBtaW4gY29uc3RyYWludCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdD
b25zdHJhaW50OjpzZXRNYXgpOiBTZXRzIG1hbmRhdG9yeSBtYXggY29uc3RyYWludCB2YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRFeGFjdCk6IFNldHMgbWFuZGF0
b3J5IGV4YWN0IGNvbnN0cmFpbnQKKyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpM
b25nQ29uc3RyYWludDo6c2V0SWRlYWwpOiBTZXRzIG9wdGlvbmFsIGlkZWFsIGNvbnN0cmFpbnQK
KyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6aW5pdGlh
bGl6ZVdpdGhEaWN0aW9uYXJ5KTogUGFyc2VzIHVzZXIgaW5wdXQKKyAgICAgICAgYW5kIHNldHMg
bWluLCBtYXgsIGV4YWN0LCBpZGVhbCB2YWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVD
b25zdHJhaW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0
cmFpbnQ6OnNldE1pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWlu
dDo6c2V0TWF4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50Ojpz
ZXRFeGFjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0
SWRlYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OmluaXRp
YWxpemVXaXRoRGljdGlvbmFyeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNv
bnN0cmFpbnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0
cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCb29sZWFuQ29uc3Ry
YWludDo6c2V0SWRlYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJh
aW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0NvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdD
b25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6IEFkZCBhYnN0cmFjdCBjbGFz
c2VzCisgICAgICAgIEJhc2VDb25zdHJhaW50IGFuZCBOdW1lcmljQ29uc3RyYWludCwgYW5kIGZp
bmFsIGNsYXNzZXMKKyAgICAgICAgRG91YmxlQ29uc3RyYWludCwgTG9uZ0NvbnN0cmFpbnQsIEJv
b2xlYW5Db25zdHJhaW50LCBhbmQKKyAgICAgICAgU3RyaW5nQ29uc3RyYWludC4KKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VDb25zdHJhaW50Ojp+QmFzZUNvbnN0cmFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmFzZUNvbnN0cmFpbnQ6Om5hbWUpOiBOYW1lIG9mIGNvbnN0cmFpbnQgYXNzb2NpYXRl
ZCB3aXRoLgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OkJhc2VDb25zdHJhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNaW4pOiBTZXRz
IG1pbiBjb25zdHJhaW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFp
bnQ6OnNldEhhc01heCk6IFNldHMgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJD
b3JlOjpOdW1lcmljQ29uc3RyYWludDo6c2V0SGFzRXhhY3QpOiBTZXRzIGV4YWN0IGNvbnN0cmFp
bnQKKyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6
c2V0SGFzSWRlYWwpOiBTZXRzIGlkZWFsIGNvbnN0cmFpbnQKKyAgICAgICAgdmFsdWUuCisgICAg
ICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzTWluKTogRGV0ZXJtaW5lcyB3aGV0
aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFzIGEgbWluaW11bSB2YWx1ZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpoYXNNYXgpOiBEZXRlcm1pbmVzIHdoZXRoZXIgY29u
c3RyYWludAorICAgICAgICBoYXMgYSBtYXhpbXVtIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6
TnVtZXJpY0NvbnN0cmFpbnQ6Omhhc0V4YWN0KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFp
bnQKKyAgICAgICAgaGFzIGFuIGV4YWN0IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJp
Y0NvbnN0cmFpbnQ6Ok51bWVyaWNDb25zdHJhaW50KToKKwogMjAxNi0wNy0yNyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpcnN0IHBhcmFtZXRlciB0byBIVE1M
TWVkaWFFbGVtZW50LmNhblBsYXlUeXBlKCkgc2hvdWxkIGJlIG1hbmRhdG9yeQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNkNjk4
OTc0NjkwY2Q2YzI1YzBiMjQyNWNjNWYxZjgzNzc1MzY0MDQuLjdmZTQyZjUxODllYTUzZThmMjU1
Y2YzZDE0ZTQ2M2E3YjRmYzlkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4Nyw2ICs5ODcsNyBAQAogCQkxQUZFMTE5QTBD
QkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEg
LyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CiAJCTFCMTI0RDhEMUQzODBCNzAwMEVD
REZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRpYVNhbXBs
ZUFWRk9iakMuaCAqLzsgfTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1lZGlhU2Ft
cGxlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gKi87
IH07CisJCTFCRTVCRkMyMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCRTVCRkMxMUQ1
MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMUJGOURCM0Mx
RDM5NzNBRDAwMjZBRUI3IC8qIE1lZGlhU2FtcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVDNzE4MUVENjAxMDBFRTRDNDEgLyogTWVkaWFT
YW1wbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQzAxMDcwMDE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDEwNkZFMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwICovOyB9OwogCQkxQzAxMDcwMTE5
MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyog
SW5saW5lVGV4dEJveFN0eWxlLmggKi87IH07CkBAIC04NTUxLDYgKzg1NTIsNyBAQAogCQkxQUZF
MTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4QzFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFT
YW1wbGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGlhU2Ft
cGxlQVZGT2JqQy5oOyBwYXRoID0gLi4vTWVkaWFTYW1wbGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBs
ZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRp
YVNhbXBsZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFCRTVCRkMx
MUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQ29uc3RyYWludHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJv
eFN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRl
eHRCb3hTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDEwNkZGMTky
NTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEJveFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDMDkzOUU4MUExM0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdGb250LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFNWR0ZvbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2ODgsNiArMTU2OTAsNyBAQAogCQkwNzIy
MUI5MjE3Q0YwQUQ0MDA4NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBN
ZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyog
bWFjICovLAogCQkJCTA3RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtLmggKi8sCiAJCQkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNh
bmRpZGF0ZS5oICovLApAQCAtMzIxNTEsNiArMzIxNTQsNyBAQAogCQkJCUIyMjI3QTQ2MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0E0QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyQTFGMkIwMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFCRTVCRkMyMUQ1MTU3MTUwMDE2NjZEOSAvKiBN
ZWRpYUNvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTREMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3
Q0EwQTJDRjA2QjAwRDU3NjY0IC8qIFNWR05hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QTUwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUNvbnN0cmFpbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmE5MThkODBmYjFmMzY1ZjNkZmNmODNlZjEz
ZWJlZWUxMzQxYjgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnN0cmFpbnRzLmgiCisKKyNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
U3VwcG9ydGVkQ29uc3RyYWludHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8
QmFzZUNvbnN0cmFpbnQ+IEJhc2VDb25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIFJlZlB0cjxCYXNlQ29uc3Ry
YWludD4gY29uc3RyYWludCA9IGNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQobmFtZSk7Cisg
ICAgaWYgKCFjb25zdHJhaW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvbnN0
cmFpbnQtPmluaXRpYWxpemVXaXRoRGljdGlvbmFyeShkaWN0aW9uYXJ5KTsKKyAgICByZXR1cm4g
Y29uc3RyYWludDsKK30KKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6
Y3JlYXRlRW1wdHlEZXJpdmVkQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBwb3J0ZWRD
b25zdHJhaW50cyA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnN1cHBv
cnRlZENvbnN0cmFpbnRzKCk7CisgICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlw
ZSA9IHN1cHBvcnRlZENvbnN0cmFpbnRzLmNvbnN0cmFpbnRGcm9tTmFtZShuYW1lKTsKKworICAg
IHN3aXRjaCAoY29uc3RyYWludFR5cGUpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OldpZHRoOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlNhbXBsZVNpemU6CisgICAgICAgIHJldHVybiBMb25nQ29uc3RyYWludDo6Y3JlYXRl
KG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6CisgICAgY2FzZSBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgICAgIHJldHVybiBEb3VibGVDb25zdHJhaW50OjpjcmVh
dGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2VsbGF0aW9u
OgorICAgICAgICByZXR1cm4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6CisgICAgY2FzZSBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3Vw
SWQ6CisgICAgICAgIHJldHVybiBTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUobmFtZSk7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpVbmtub3duOgorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9Cit9CisKK1JlZjxMb25nQ29uc3RyYWludD4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9uZ0Nv
bnN0cmFpbnQobmFtZSkpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRNaW4obG9uZyB2
YWx1ZSkKK3sKKyAgICBtX21pbiA9IHZhbHVlOworICAgIHNldEhhc01pbih0cnVlKTsKK30KKwor
dm9pZCBMb25nQ29uc3RyYWludDo6c2V0TWF4KGxvbmcgdmFsdWUpCit7CisgICAgbV9tYXggPSB2
YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OnNl
dEV4YWN0KGxvbmcgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZhbHVlOworICAgIHNldEhhc0V4
YWN0KHRydWUpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRJZGVhbChsb25nIHZhbHVl
KQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJZGVhbCh0cnVlKTsKK30KKwor
dm9pZCBMb25nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rp
b25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
a2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldE93blByb3BlcnR5TmFtZXMo
a2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgbG9uZyB2YWx1
ZTsKKyAgICAgICAgaWYgKCFkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVl
KSkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiTG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVX
aXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtl
eSAnJXMnIiwgdGhpcywga2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJtaW4iKQorICAgICAgICAgICAgc2V0
TWluKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJtYXgiKQorICAgICAgICAgICAg
c2V0TWF4KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleGFjdCIpCisgICAgICAg
ICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWRlYWwiKQor
ICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgIH0KK30KKworUmVmPERvdWJsZUNvbnN0
cmFpbnQ+IERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG91YmxlQ29uc3RyYWludChuYW1lKSk7Cit9CisKK3Zv
aWQgRG91YmxlQ29uc3RyYWludDo6c2V0TWluKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX21pbiA9
IHZhbHVlOworICAgIHNldEhhc01pbih0cnVlKTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50
OjpzZXRNYXgoZG91YmxlIHZhbHVlKQoreworICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFz
TWF4KHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OnNldEV4YWN0KGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICBtX2V4YWN0ID0gdmFsdWU7CisgICAgc2V0SGFzRXhhY3QodHJ1ZSk7Cit9
CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0SWRlYWwoZG91YmxlIHZhbHVlKQoreworICAg
IG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJZGVhbCh0cnVlKTsKK30KKwordm9pZCBEb3Vi
bGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYg
ZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOwor
ICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsK
KworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBkb3VibGUgdmFsdWU7Cisg
ICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsK
KyAgICAgICAgICAgIExPRyhNZWRpYSwgIkRvdWJsZUNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRo
RGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtleSAn
JXMnLiIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSAibWluIikKKyAgICAgICAgICAgIHNldE1p
bih2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAibWF4IikKKyAgICAgICAgICAgIHNl
dE1heCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhhY3QiKQorICAgICAgICAg
ICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlkZWFsIikKKyAg
ICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKyAgICB9Cit9CisKK1JlZjxCb29sZWFuQ29uc3Ry
YWludD4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQm9vbGVhbkNvbnN0cmFpbnQobmFtZSkpOworfQorCit2
b2lkIEJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdChib29sIHZhbHVlKQoreworICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKyAgICBtX2hhc0V4YWN0ID0gdHJ1ZTsKK30KKwordm9pZCBCb29sZWFuQ29u
c3RyYWludDo6c2V0SWRlYWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7Cisg
ICAgbV9oYXNJZGVhbCA9IHRydWU7Cit9CisKK3ZvaWQgQm9vbGVhbkNvbnN0cmFpbnQ6OmluaXRp
YWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWlu
dFZhbHVlKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgZGljdGlvbmFyeUNvbnN0
cmFpbnRWYWx1ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtleXMpOworCisgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFy
eUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRp
YSwgIkJvb2xlYW5Db25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFp
bGVkIHRvIGdldCBkaWN0aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJy4iLCB0aGlzLCBrZXkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChrZXkgPT0gImV4YWN0IikKKyAgICAgICAgICAgIHNldEV4YWN0KHZhbHVlKTsKKyAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJpZGVhbCIpCisgICAgICAgICAgICBzZXRJZGVhbCh2YWx1ZSk7
CisgICAgfQorfQorCitSZWY8U3RyaW5nQ29uc3RyYWludD4gU3RyaW5nQ29uc3RyYWludDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJp
bmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50OjpzZXRFeGFj
dChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKK30KKwordm9p
ZCBTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IG1faWRlYWwgPSB2YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50Ojppbml0aWFsaXpl
V2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1
ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50
VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDog
a2V5cykgeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNv
bnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwg
IlN0cmluZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQg
dG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtleSAnJXMnLiIsIHRoaXMsIGtleS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGtleSA9PSAiZXhhY3QiICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlk
ZWFsIiAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNldElkZWFsKHZhbHVlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAppbmRleCA1MTQxYzIy
OGQwZDQ4Zjc4ZGI2ZTY1N2Q5ODVlMDYzNjllYmFlNjljLi40MGYyMDQzYTk4MDkxNWY3NDIzMTE2
NzdkZTRiZGVlYWJhNmIxZWVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzksMTgxIEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRGljdGlvbmFyeTsKKworI3ByYWdtYSBtYXJrIC0KKyNwcmFn
bWEgbWFyayAtIENvbnN0cmFpbnRUeXBlcworCitjbGFzcyBCYXNlQ29uc3RyYWludCA6IHB1Ymxp
YyBSZWZDb3VudGVkPEJhc2VDb25zdHJhaW50PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZlB0
cjxCYXNlQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlv
bmFyeSYpOworCisgICAgdmlydHVhbCB+QmFzZUNvbnN0cmFpbnQoKSB7IH07CisgICAgdmlydHVh
bCBib29sIGlzRW1wdHkoKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBib29sIGlzTWFuZGF0b3J5
KCkgY29uc3QgPSAwOworCisgICAgdmlydHVhbCBib29sIGhhc0lkZWFsKCkgY29uc3QgPSAwOwor
CisgICAgU3RyaW5nIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworcHJvdGVjdGVk
OgorICAgIGV4cGxpY2l0IEJhc2VDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAg
ICAgOiBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBS
ZWZQdHI8QmFzZUNvbnN0cmFpbnQ+IGNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25h
cnkoY29uc3QgRGljdGlvbmFyeSYpID0gMDsKKworICAgIFN0cmluZyBtX25hbWU7Cit9OworCitj
bGFzcyBOdW1lcmljQ29uc3RyYWludCA6IHB1YmxpYyBCYXNlQ29uc3RyYWludCB7CitwdWJsaWM6
CisgICAgdm9pZCBzZXRIYXNNaW4oYm9vbCB2YWx1ZSkgeyBtX2hhc01pbiA9IHZhbHVlOyB9Cisg
ICAgdm9pZCBzZXRIYXNNYXgoYm9vbCB2YWx1ZSkgeyBtX2hhc01heCA9IHZhbHVlOyB9CisgICAg
dm9pZCBzZXRIYXNFeGFjdChib29sIHZhbHVlKSB7IG1faGFzRXhhY3QgPSB2YWx1ZTsgfQorICAg
IHZvaWQgc2V0SGFzSWRlYWwoYm9vbCB2YWx1ZSkgeyBtX2hhc0lkZWFsID0gdmFsdWU7IH0KKwor
ICAgIGJvb2wgaGFzTWluKCkgY29uc3QgeyByZXR1cm4gbV9oYXNNaW47IH0KKyAgICBib29sIGhh
c01heCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWF4OyB9CisgICAgYm9vbCBoYXNFeGFjdCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzRXhhY3Q7IH0KKyAgICBib29sIGhhc0lkZWFsKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9oYXNJZGVhbDsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qg
b3ZlcnJpZGUgeyByZXR1cm4gIW1faGFzTWluICYmICFtX2hhc01heCAmJiAhbV9oYXNFeGFjdCAm
JiAhbV9oYXNJZGVhbDsgfQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2hhc01pbiB8fCBtX2hhc01heCB8fCBtX2hhc0V4YWN0OyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBleHBsaWNpdCBOdW1lcmljQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCisg
ICAgICAgIDogQmFzZUNvbnN0cmFpbnQobmFtZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGJvb2wgbV9oYXNNaW4geyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNNYXggeyBmYWxzZSB9
OworICAgIGJvb2wgbV9oYXNFeGFjdCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0lkZWFsIHsg
ZmFsc2UgfTsKK307CisKK2NsYXNzIExvbmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIE51bWVy
aWNDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPExvbmdDb25zdHJhaW50PiBj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgc2V0TWluKGxvbmcgdmFsdWUp
OworICAgIHZvaWQgc2V0TWF4KGxvbmcgdmFsdWUpOworICAgIHZvaWQgc2V0RXhhY3QobG9uZyB2
YWx1ZSk7CisgICAgdm9pZCBzZXRJZGVhbChsb25nIHZhbHVlKTsKKworICAgIGxvbmcgbWluKCkg
Y29uc3QgeyByZXR1cm4gbV9taW47IH0KKyAgICBsb25nIG1heCgpIGNvbnN0IHsgcmV0dXJuIG1f
bWF4OyB9CisgICAgbG9uZyBleGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhhY3Q7IH0KKyAgICBs
b25nIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9pZGVhbDsgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBleHBsaWNpdCBMb25nQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDog
V2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYpIG92ZXJyaWRlOwor
CisgICAgbG9uZyBtX21pbjsKKyAgICBsb25nIG1fbWF4OworICAgIGxvbmcgbV9leGFjdDsKKyAg
ICBsb25nIG1faWRlYWw7Cit9OworCitjbGFzcyBEb3VibGVDb25zdHJhaW50IGZpbmFsIDogcHVi
bGljIE51bWVyaWNDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPERvdWJsZUNv
bnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBzZXRNaW4o
ZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldE1heChkb3VibGUgdmFsdWUpOworICAgIHZvaWQg
c2V0RXhhY3QoZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGRvdWJsZSB2YWx1ZSk7
CisKKyAgICBkb3VibGUgbWluKCkgY29uc3QgeyByZXR1cm4gbV9taW47IH0KKyAgICBkb3VibGUg
bWF4KCkgY29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKyAgICBkb3VibGUgZXhhY3QoKSBjb25zdCB7
IHJldHVybiBtX2V4YWN0OyB9CisgICAgZG91YmxlIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9p
ZGVhbDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IERvdWJsZUNvbnN0cmFpbnQoY29uc3Qg
U3RyaW5nJiBuYW1lKQorICAgICAgICA6IFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0
IERpY3Rpb25hcnkmKSBvdmVycmlkZTsKKworICAgIGRvdWJsZSBtX21pbjsKKyAgICBkb3VibGUg
bV9tYXg7CisgICAgZG91YmxlIG1fZXhhY3Q7CisgICAgZG91YmxlIG1faWRlYWw7Cit9OworCitj
bGFzcyBCb29sZWFuQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBCYXNlQ29uc3RyYWludCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxCb29sZWFuQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0
cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIHNldEV4YWN0KGJvb2wgdmFsdWUpOworICAgIHZvaWQg
c2V0SWRlYWwoYm9vbCB2YWx1ZSk7CisKKyAgICBib29sIGV4YWN0KCkgY29uc3QgeyByZXR1cm4g
bV9leGFjdDsgfQorICAgIGJvb2wgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9Cisg
ICAgYm9vbCBoYXNFeGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzRXhhY3Q7IH0KKyAgICBib29s
IGhhc0lkZWFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNJZGVhbDsgfQorCisgICAg
Ym9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1faGFzRXhhY3QgJiYgIW1f
aGFzSWRlYWw7IH07CisgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1faGFzRXhhY3Q7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBCb29sZWFuQ29uc3Ry
YWludChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDogQmFzZUNvbnN0cmFpbnQobmFtZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3Qg
RGljdGlvbmFyeSYpIG92ZXJyaWRlOworCisgICAgYm9vbCBtX2V4YWN0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faWRlYWwgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNFeGFjdCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2hhc0lkZWFsIHsgZmFsc2UgfTsKK307CisKK2NsYXNzIFN0cmluZ0NvbnN0
cmFpbnQgZmluYWwgOiBwdWJsaWMgQmFzZUNvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8U3RyaW5nQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAg
ICB2b2lkIHNldEV4YWN0KGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0SWRlYWwoY29uc3Qg
U3RyaW5nJik7CisKKyAgICBjb25zdCBTdHJpbmcmIGV4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9l
eGFjdDsgfQorICAgIGNvbnN0IFN0cmluZyYgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFs
OyB9CisKKyAgICBib29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gIW1fZXhhY3QuaXNFbXB0
eSgpOyB9CisgICAgYm9vbCBoYXNJZGVhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2lk
ZWFsLmlzRW1wdHkoKTsgfQorCisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9leGFjdC5pc0VtcHR5KCkgJiYgbV9pZGVhbC5pc0VtcHR5KCk7IH0KKyAgICBib29s
IGlzTWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1fZXhhY3QuaXNFbXB0eSgp
OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgU3RyaW5nQ29uc3RyYWludChjb25zdCBTdHJp
bmcmIG5hbWUpCisgICAgICAgIDogQmFzZUNvbnN0cmFpbnQobmFtZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYpIG92
ZXJyaWRlOworCisgICAgU3RyaW5nIG1fZXhhY3Q7CisgICAgU3RyaW5nIG1faWRlYWw7Cit9Owor
CisjcHJhZ21hIG1hcmsgLQorI3ByYWdtYSBtYXJrIC0gTWVkaWFDb25zdHJhaW50cworCiBzdHJ1
Y3QgTWVkaWFDb25zdHJhaW50IHsKICAgICBNZWRpYUNvbnN0cmFpbnQoU3RyaW5nIG5hbWUsIFN0
cmluZyB2YWx1ZSkKICAgICAgICAgOiBtX25hbWUobmFtZSkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285341</attachid>
            <date>2016-08-04 11:44:02 -0700</date>
            <delta_ts>2016-08-04 13:06:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160804114237.patch</filename>
            <type>text/plain</type>
            <size>20626</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uMjNmZTlhZjM0ZTM0MGNiNzgyMGVlY2I3M2UwNWZj
ZWU4NmIyZjc0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYzIEBACisyMDE2LTA4LTA0ICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMsIG5vIG5ldyBmdW5jdGlvbmFsaXR5LgorCisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBJbml0aWFsaXplcyBtaW4sIG1heCwgZXhh
Y3QsIGlkZWFsCisgICAgICAgIHZhbHVlIG9mIGNvbnN0cmFpbnQgd2l0aCBkaWN0aW9uYXJ5Lgor
ICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0
cmFpbnQpOiBGYWN0b3J5IAorICAgICAgICBmb3IgYWxsIGRlcml2ZWQgY29uc3RyYWludHMuCisg
ICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6Y3JlYXRlKTogQ3JlYXRlcyBMb25nQ29u
c3RyYWludC4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRNaW4pOiBTZXRz
IG1hbmRhdG9yeSBtaW4gY29uc3RyYWludCB2YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6OkxvbmdD
b25zdHJhaW50OjpzZXRNYXgpOiBTZXRzIG1hbmRhdG9yeSBtYXggY29uc3RyYWludCB2YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6OkxvbmdDb25zdHJhaW50OjpzZXRFeGFjdCk6IFNldHMgbWFuZGF0
b3J5IGV4YWN0IGNvbnN0cmFpbnQKKyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpM
b25nQ29uc3RyYWludDo6c2V0SWRlYWwpOiBTZXRzIG9wdGlvbmFsIGlkZWFsIGNvbnN0cmFpbnQK
KyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6aW5pdGlh
bGl6ZVdpdGhEaWN0aW9uYXJ5KTogUGFyc2VzIHVzZXIgaW5wdXQKKyAgICAgICAgYW5kIHNldHMg
bWluLCBtYXgsIGV4YWN0LCBpZGVhbCB2YWx1ZXMuCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVD
b25zdHJhaW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0
cmFpbnQ6OnNldE1pbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWlu
dDo6c2V0TWF4KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50Ojpz
ZXRFeGFjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0
SWRlYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OmluaXRp
YWxpemVXaXRoRGljdGlvbmFyeSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNv
bnN0cmFpbnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0
cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpCb29sZWFuQ29uc3Ry
YWludDo6c2V0SWRlYWwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJh
aW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6
OlN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U3Ry
aW5nQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmlu
Z0NvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdD
b25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmg6IEFkZCBhYnN0cmFjdCBjbGFz
c2VzCisgICAgICAgIEJhc2VDb25zdHJhaW50IGFuZCBOdW1lcmljQ29uc3RyYWludCwgYW5kIGZp
bmFsIGNsYXNzZXMKKyAgICAgICAgRG91YmxlQ29uc3RyYWludCwgTG9uZ0NvbnN0cmFpbnQsIEJv
b2xlYW5Db25zdHJhaW50LCBhbmQKKyAgICAgICAgU3RyaW5nQ29uc3RyYWludC4KKyAgICAgICAg
KFdlYkNvcmU6OkJhc2VDb25zdHJhaW50Ojp+QmFzZUNvbnN0cmFpbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6QmFzZUNvbnN0cmFpbnQ6Om5hbWUpOiBOYW1lIG9mIGNvbnN0cmFpbnQgYXNzb2NpYXRl
ZCB3aXRoLgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OkJhc2VDb25zdHJhaW50
KToKKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNaW4pOiBTZXRz
IG1pbiBjb25zdHJhaW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFp
bnQ6OnNldEhhc01heCk6IFNldHMgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJD
b3JlOjpOdW1lcmljQ29uc3RyYWludDo6c2V0SGFzRXhhY3QpOiBTZXRzIGV4YWN0IGNvbnN0cmFp
bnQKKyAgICAgICAgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6
c2V0SGFzSWRlYWwpOiBTZXRzIGlkZWFsIGNvbnN0cmFpbnQKKyAgICAgICAgdmFsdWUuCisgICAg
ICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzTWluKTogRGV0ZXJtaW5lcyB3aGV0
aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFzIGEgbWluaW11bSB2YWx1ZS4KKyAgICAgICAgKFdl
YkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpoYXNNYXgpOiBEZXRlcm1pbmVzIHdoZXRoZXIgY29u
c3RyYWludAorICAgICAgICBoYXMgYSBtYXhpbXVtIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6
TnVtZXJpY0NvbnN0cmFpbnQ6Omhhc0V4YWN0KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFp
bnQKKyAgICAgICAgaGFzIGFuIGV4YWN0IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJp
Y0NvbnN0cmFpbnQ6Ok51bWVyaWNDb25zdHJhaW50KToKKwogMjAxNi0wNy0yNyAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIEZpcnN0IHBhcmFtZXRlciB0byBIVE1M
TWVkaWFFbGVtZW50LmNhblBsYXlUeXBlKCkgc2hvdWxkIGJlIG1hbmRhdG9yeQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGNkNjk4
OTc0NjkwY2Q2YzI1YzBiMjQyNWNjNWYxZjgzNzc1MzY0MDQuLjdmZTQyZjUxODllYTUzZThmMjU1
Y2YzZDE0ZTQ2M2E3YjRmYzlkMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk4Nyw2ICs5ODcsNyBAQAogCQkxQUZFMTE5QTBD
QkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQUZFMTE5ODBDQkZGQ0M0MDAzMDE3RkEg
LyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi87IH07CiAJCTFCMTI0RDhEMUQzODBCNzAwMEVD
REZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDFCMTI0RDhDMUQzODBCNzAwMEVDREZCMCAvKiBNZWRpYVNhbXBs
ZUFWRk9iakMuaCAqLzsgfTsKIAkJMUIxMjREOEYxRDM4MEJCNjAwRUNERkIwIC8qIE1lZGlhU2Ft
cGxlQVZGT2JqQy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gKi87
IH07CisJCTFCRTVCRkMyMUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFCRTVCRkMxMUQ1
MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLzsgfTsKIAkJMUJGOURCM0Mx
RDM5NzNBRDAwMjZBRUI3IC8qIE1lZGlhU2FtcGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBDRDY0MUVDNzE4MUVENjAxMDBFRTRDNDEgLyogTWVkaWFT
YW1wbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owog
CQkxQzAxMDcwMDE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFDMDEwNkZFMTkyNTk0
REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwICovOyB9OwogCQkxQzAxMDcwMTE5
MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyog
SW5saW5lVGV4dEJveFN0eWxlLmggKi87IH07CkBAIC04NTUxLDYgKzg1NTIsNyBAQAogCQkxQUZF
MTE5ODBDQkZGQ0M0MDAzMDE3RkEgLyogSlNTUUxSZXN1bHRTZXRSb3dMaXN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4QzFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFT
YW1wbGVBVkZPYmpDLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IE1lZGlhU2Ft
cGxlQVZGT2JqQy5oOyBwYXRoID0gLi4vTWVkaWFTYW1wbGVBVkZPYmpDLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTFCMTI0RDhFMUQzODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBs
ZUFWRk9iakMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBNZWRp
YVNhbXBsZUFWRk9iakMubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTFCRTVCRkMx
MUQ1MTU3MTUwMDE2NjZEOSAvKiBNZWRpYUNvbnN0cmFpbnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhQ29uc3RyYWludHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJv
eFN0eWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElubGluZVRl
eHRCb3hTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTFDMDEwNkZGMTky
NTk0REYwMDhBNDIwMSAvKiBJbmxpbmVUZXh0Qm94U3R5bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5saW5lVGV4dEJveFN0eWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTFDMDkzOUU4MUExM0UxMjkwMEI3ODhFNSAvKiBDYWNoZWRTVkdGb250LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhY2hlZFNWR0ZvbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTU2ODgsNiArMTU2OTAsNyBAQAogCQkwNzIy
MUI5MjE3Q0YwQUQ0MDA4NDhFNTEgLyogbWVkaWFzdHJlYW0gKi8gPSB7CiAJCQlpc2EgPSBQQlhH
cm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTFCRTVCRkMxMUQ1MTU3MTUwMDE2NjZEOSAvKiBN
ZWRpYUNvbnN0cmFpbnRzLmNwcCAqLywKIAkJCQkwNzI5QjE0RDE3Q0ZDQ0EwMDA0RjFENjAgLyog
bWFjICovLAogCQkJCTA3RDZBNEY2MUJGMjMwN0QwMDE3NDE0NiAvKiBBdWRpb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtLmggKi8sCiAJCQkJNUVCQjg5MzAxQzc3NzdFMTAwQzY1RDQxIC8qIEljZUNh
bmRpZGF0ZS5oICovLApAQCAtMzIxNTEsNiArMzIxNTQsNyBAQAogCQkJCUIyMjI3QTQ2MEQwMEJG
MjIwMDcxQjc4MiAvKiBTVkdNYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIy
N0E0QTBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWV0YWRhdGFFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUIyQTFGMkIwMENFRjBBQkYwMDQ0MkY2QSAvKiBTVkdNaXNzaW5nR2x5cGhFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTFCRTVCRkMyMUQ1MTU3MTUwMDE2NjZEOSAvKiBN
ZWRpYUNvbnN0cmFpbnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTREMEQwMEJGMjIw
MDcxQjc4MiAvKiBTVkdNUGF0aEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3
Q0EwQTJDRjA2QjAwRDU3NjY0IC8qIFNWR05hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIy
MjI3QTUwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdOdW1iZXJMaXN0LmNwcCBpbiBTb3VyY2VzICov
LApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFD
b25zdHJhaW50cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YUNvbnN0cmFpbnRzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmE5MThkODBmYjFmMzY1ZjNkZmNmODNlZjEz
ZWJlZWUxMzQxYjgxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAKQEAgLTAsMCArMSwyNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiAgICBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAg
ICBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzCisgKiAgICBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJNZWRpYUNvbnN0cmFpbnRzLmgiCisKKyNp
bmNsdWRlICJEaWN0aW9uYXJ5LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2VDZW50ZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNl
U3VwcG9ydGVkQ29uc3RyYWludHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWZQdHI8
QmFzZUNvbnN0cmFpbnQ+IEJhc2VDb25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5KQoreworICAgIFJlZlB0cjxCYXNlQ29uc3Ry
YWludD4gY29uc3RyYWludCA9IGNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQobmFtZSk7Cisg
ICAgaWYgKCFjb25zdHJhaW50KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvbnN0
cmFpbnQtPmluaXRpYWxpemVXaXRoRGljdGlvbmFyeShkaWN0aW9uYXJ5KTsKKyAgICByZXR1cm4g
Y29uc3RyYWludDsKK30KKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6
Y3JlYXRlRW1wdHlEZXJpdmVkQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzJiBzdXBwb3J0ZWRD
b25zdHJhaW50cyA9IFJlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXI6OnNpbmdsZXRvbigpLnN1cHBv
cnRlZENvbnN0cmFpbnRzKCk7CisgICAgTWVkaWFDb25zdHJhaW50VHlwZSBjb25zdHJhaW50VHlw
ZSA9IHN1cHBvcnRlZENvbnN0cmFpbnRzLmNvbnN0cmFpbnRGcm9tTmFtZShuYW1lKTsKKworICAg
IHN3aXRjaCAoY29uc3RyYWludFR5cGUpIHsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6
OldpZHRoOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6SGVpZ2h0OgorICAgIGNhc2Ug
TWVkaWFDb25zdHJhaW50VHlwZTo6U2FtcGxlUmF0ZToKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OlNhbXBsZVNpemU6CisgICAgICAgIHJldHVybiBMb25nQ29uc3RyYWludDo6Y3JlYXRl
KG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6QXNwZWN0UmF0aW86CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGcmFtZVJhdGU6CisgICAgY2FzZSBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpWb2x1bWU6CisgICAgICAgIHJldHVybiBEb3VibGVDb25zdHJhaW50OjpjcmVh
dGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpFY2hvQ2FuY2VsbGF0aW9u
OgorICAgICAgICByZXR1cm4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBj
YXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OkZhY2luZ01vZGU6CisgICAgY2FzZSBNZWRpYUNvbnN0
cmFpbnRUeXBlOjpEZXZpY2VJZDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6Okdyb3Vw
SWQ6CisgICAgICAgIHJldHVybiBTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUobmFtZSk7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpVbmtub3duOgorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICB9Cit9CisKK1JlZjxMb25nQ29uc3RyYWludD4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0
ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgTG9uZ0Nv
bnN0cmFpbnQobmFtZSkpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRNaW4obG9uZyB2
YWx1ZSkKK3sKKyAgICBtX21pbiA9IHZhbHVlOworICAgIHNldEhhc01pbih0cnVlKTsKK30KKwor
dm9pZCBMb25nQ29uc3RyYWludDo6c2V0TWF4KGxvbmcgdmFsdWUpCit7CisgICAgbV9tYXggPSB2
YWx1ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OnNl
dEV4YWN0KGxvbmcgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZhbHVlOworICAgIHNldEhhc0V4
YWN0KHRydWUpOworfQorCit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRJZGVhbChsb25nIHZhbHVl
KQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJZGVhbCh0cnVlKTsKK30KKwor
dm9pZCBMb25nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rp
b25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7CisgICAgVmVjdG9yPFN0cmluZz4g
a2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldE93blByb3BlcnR5TmFtZXMo
a2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAgICAgbG9uZyB2YWx1
ZTsKKyAgICAgICAgaWYgKCFkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldChrZXksIHZhbHVl
KSkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiTG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVX
aXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtl
eSAnJXMnIiwgdGhpcywga2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJtaW4iKQorICAgICAgICAgICAgc2V0
TWluKHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJtYXgiKQorICAgICAgICAgICAg
c2V0TWF4KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleGFjdCIpCisgICAgICAg
ICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaWRlYWwiKQor
ICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworICAgIH0KK30KKworUmVmPERvdWJsZUNvbnN0
cmFpbnQ+IERvdWJsZUNvbnN0cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG91YmxlQ29uc3RyYWludChuYW1lKSk7Cit9CisKK3Zv
aWQgRG91YmxlQ29uc3RyYWludDo6c2V0TWluKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX21pbiA9
IHZhbHVlOworICAgIHNldEhhc01pbih0cnVlKTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50
OjpzZXRNYXgoZG91YmxlIHZhbHVlKQoreworICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFz
TWF4KHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OnNldEV4YWN0KGRvdWJsZSB2
YWx1ZSkKK3sKKyAgICBtX2V4YWN0ID0gdmFsdWU7CisgICAgc2V0SGFzRXhhY3QodHJ1ZSk7Cit9
CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0SWRlYWwoZG91YmxlIHZhbHVlKQoreworICAg
IG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRIYXNJZGVhbCh0cnVlKTsKK30KKwordm9pZCBEb3Vi
bGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYg
ZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOwor
ICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsK
KworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAgICBkb3VibGUgdmFsdWU7Cisg
ICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsK
KyAgICAgICAgICAgIExPRyhNZWRpYSwgIkRvdWJsZUNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRo
RGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtleSAn
JXMnLiIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSAibWluIikKKyAgICAgICAgICAgIHNldE1p
bih2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAibWF4IikKKyAgICAgICAgICAgIHNl
dE1heCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhhY3QiKQorICAgICAgICAg
ICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlkZWFsIikKKyAg
ICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKyAgICB9Cit9CisKK1JlZjxCb29sZWFuQ29uc3Ry
YWludD4gQm9vbGVhbkNvbnN0cmFpbnQ6OmNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQm9vbGVhbkNvbnN0cmFpbnQobmFtZSkpOworfQorCit2
b2lkIEJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdChib29sIHZhbHVlKQoreworICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKyAgICBtX2hhc0V4YWN0ID0gdHJ1ZTsKK30KKwordm9pZCBCb29sZWFuQ29u
c3RyYWludDo6c2V0SWRlYWwoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7Cisg
ICAgbV9oYXNJZGVhbCA9IHRydWU7Cit9CisKK3ZvaWQgQm9vbGVhbkNvbnN0cmFpbnQ6OmluaXRp
YWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWlu
dFZhbHVlKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgZGljdGlvbmFyeUNvbnN0
cmFpbnRWYWx1ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtleXMpOworCisgICAgZm9yIChhdXRvJiBr
ZXkgOiBrZXlzKSB7CisgICAgICAgIGJvb2wgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFy
eUNvbnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRp
YSwgIkJvb2xlYW5Db25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFp
bGVkIHRvIGdldCBkaWN0aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJy4iLCB0aGlzLCBrZXkudXRm
OCgpLmRhdGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmIChrZXkgPT0gImV4YWN0IikKKyAgICAgICAgICAgIHNldEV4YWN0KHZhbHVlKTsKKyAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJpZGVhbCIpCisgICAgICAgICAgICBzZXRJZGVhbCh2YWx1ZSk7
CisgICAgfQorfQorCitSZWY8U3RyaW5nQ29uc3RyYWludD4gU3RyaW5nQ29uc3RyYWludDo6Y3Jl
YXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJp
bmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50OjpzZXRFeGFj
dChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKK30KKwordm9p
ZCBTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAg
IG1faWRlYWwgPSB2YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50Ojppbml0aWFsaXpl
V2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1
ZSkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50
VmFsdWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDog
a2V5cykgeworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNv
bnN0cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwg
IlN0cmluZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQg
dG8gZ2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtleSAnJXMnLiIsIHRoaXMsIGtleS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGtleSA9PSAiZXhhY3QiICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlk
ZWFsIiAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNldElkZWFsKHZhbHVlKTsKKyAgICB9Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAppbmRleCA1MTQxYzIy
OGQwZDQ4Zjc4ZGI2ZTY1N2Q5ODVlMDYzNjllYmFlNjljLi41MDUyNmE4MDk0NjgwMTJlNzMyM2U5
YmJhODViNDkxNzNmNmNkMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzksMTc1IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAorY2xhc3MgRGljdGlvbmFyeTsKKworY2xhc3MgQmFzZUNvbnN0cmFpbnQg
OiBwdWJsaWMgUmVmQ291bnRlZDxCYXNlQ29uc3RyYWludD4geworcHVibGljOgorICAgIHN0YXRp
YyBSZWZQdHI8QmFzZUNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0
IERpY3Rpb25hcnkmKTsKKworICAgIHZpcnR1YWwgfkJhc2VDb25zdHJhaW50KCkgeyB9OworICAg
IHZpcnR1YWwgYm9vbCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01h
bmRhdG9yeSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNJZGVhbCgpIGNvbnN0
ID0gMDsKKworICAgIFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKK3By
b3RlY3RlZDoKKyAgICBleHBsaWNpdCBCYXNlQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUp
CisgICAgICAgIDogbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgUmVmUHRyPEJhc2VDb25zdHJhaW50PiBjcmVhdGVFbXB0eURlcml2ZWRDb25zdHJhaW50
KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVdpdGhE
aWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSA9IDA7CisKKyAgICBTdHJpbmcgbV9uYW1lOwor
fTsKKworY2xhc3MgTnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgQmFzZUNvbnN0cmFpbnQgewor
cHVibGljOgorICAgIHZvaWQgc2V0SGFzTWluKGJvb2wgdmFsdWUpIHsgbV9oYXNNaW4gPSB2YWx1
ZTsgfQorICAgIHZvaWQgc2V0SGFzTWF4KGJvb2wgdmFsdWUpIHsgbV9oYXNNYXggPSB2YWx1ZTsg
fQorICAgIHZvaWQgc2V0SGFzRXhhY3QoYm9vbCB2YWx1ZSkgeyBtX2hhc0V4YWN0ID0gdmFsdWU7
IH0KKyAgICB2b2lkIHNldEhhc0lkZWFsKGJvb2wgdmFsdWUpIHsgbV9oYXNJZGVhbCA9IHZhbHVl
OyB9CisKKyAgICBib29sIGhhc01pbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWluOyB9CisgICAg
Ym9vbCBoYXNNYXgoKSBjb25zdCB7IHJldHVybiBtX2hhc01heDsgfQorICAgIGJvb2wgaGFzRXhh
Y3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0V4YWN0OyB9CisgICAgYm9vbCBoYXNJZGVhbCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzSWRlYWw7IH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2hhc01pbiAmJiAhbV9oYXNNYXggJiYgIW1faGFz
RXhhY3QgJiYgIW1faGFzSWRlYWw7IH0KKyAgICBib29sIGlzTWFuZGF0b3J5KCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9oYXNNaW4gfHwgbV9oYXNNYXggfHwgbV9oYXNFeGFjdDsgfQorCitw
cm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgTnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBu
YW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICBib29sIG1faGFzTWluIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzTWF4IHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faGFzRXhhY3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNJ
ZGVhbCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBMb25nQ29uc3RyYWludCBmaW5hbCA6IHB1Ymxp
YyBOdW1lcmljQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMb25nQ29uc3Ry
YWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIHNldE1pbihsb25n
IHZhbHVlKTsKKyAgICB2b2lkIHNldE1heChsb25nIHZhbHVlKTsKKyAgICB2b2lkIHNldEV4YWN0
KGxvbmcgdmFsdWUpOworICAgIHZvaWQgc2V0SWRlYWwobG9uZyB2YWx1ZSk7CisKKyAgICBsb25n
IG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9CisgICAgbG9uZyBtYXgoKSBjb25zdCB7IHJl
dHVybiBtX21heDsgfQorICAgIGxvbmcgZXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2V4YWN0OyB9
CisgICAgbG9uZyBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0KKyAgICAKK3ByaXZh
dGU6CisgICAgZXhwbGljaXQgTG9uZ0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAg
ICAgICA6IFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSBvdmVy
cmlkZTsKKworICAgIGxvbmcgbV9taW47CisgICAgbG9uZyBtX21heDsKKyAgICBsb25nIG1fZXhh
Y3Q7CisgICAgbG9uZyBtX2lkZWFsOworfTsKKworY2xhc3MgRG91YmxlQ29uc3RyYWludCBmaW5h
bCA6IHB1YmxpYyBOdW1lcmljQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxE
b3VibGVDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQg
c2V0TWluKGRvdWJsZSB2YWx1ZSk7CisgICAgdm9pZCBzZXRNYXgoZG91YmxlIHZhbHVlKTsKKyAg
ICB2b2lkIHNldEV4YWN0KGRvdWJsZSB2YWx1ZSk7CisgICAgdm9pZCBzZXRJZGVhbChkb3VibGUg
dmFsdWUpOworCisgICAgZG91YmxlIG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9CisgICAg
ZG91YmxlIG1heCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4OyB9CisgICAgZG91YmxlIGV4YWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9leGFjdDsgfQorICAgIGRvdWJsZSBpZGVhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faWRlYWw7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEb3VibGVDb25zdHJhaW50
KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWlu
dChuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFy
eShjb25zdCBEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBkb3VibGUgbV9taW47CisgICAg
ZG91YmxlIG1fbWF4OworICAgIGRvdWJsZSBtX2V4YWN0OworICAgIGRvdWJsZSBtX2lkZWFsOwor
fTsKKworY2xhc3MgQm9vbGVhbkNvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgQmFzZUNvbnN0cmFp
bnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8Qm9vbGVhbkNvbnN0cmFpbnQ+IGNyZWF0ZShj
b25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVlKTsKKyAg
ICB2b2lkIHNldElkZWFsKGJvb2wgdmFsdWUpOworCisgICAgYm9vbCBleGFjdCgpIGNvbnN0IHsg
cmV0dXJuIG1fZXhhY3Q7IH0KKyAgICBib29sIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9pZGVh
bDsgfQorICAgIGJvb2wgaGFzRXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0V4YWN0OyB9Cisg
ICAgYm9vbCBoYXNJZGVhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzSWRlYWw7IH0K
KworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2hhc0V4YWN0
ICYmICFtX2hhc0lkZWFsOyB9OworICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2hhc0V4YWN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQm9vbGVh
bkNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50
KG5hbWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5
KGNvbnN0IERpY3Rpb25hcnkmKSBvdmVycmlkZTsKKworICAgIGJvb2wgbV9leGFjdCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lkZWFsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzRXhhY3QgeyBm
YWxzZSB9OworICAgIGJvb2wgbV9oYXNJZGVhbCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBTdHJp
bmdDb25zdHJhaW50IGZpbmFsIDogcHVibGljIEJhc2VDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFN0cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUp
OworCisgICAgdm9pZCBzZXRFeGFjdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldElkZWFs
KGNvbnN0IFN0cmluZyYpOworCisgICAgY29uc3QgU3RyaW5nJiBleGFjdCgpIGNvbnN0IHsgcmV0
dXJuIG1fZXhhY3Q7IH0KKyAgICBjb25zdCBTdHJpbmcmIGlkZWFsKCkgY29uc3QgeyByZXR1cm4g
bV9pZGVhbDsgfQorCisgICAgYm9vbCBoYXNFeGFjdCgpIGNvbnN0IHsgcmV0dXJuICFtX2V4YWN0
LmlzRW1wdHkoKTsgfQorICAgIGJvb2wgaGFzSWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biAhbV9pZGVhbC5pc0VtcHR5KCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuIG1fZXhhY3QuaXNFbXB0eSgpICYmIG1faWRlYWwuaXNFbXB0eSgpOyB9Cisg
ICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2V4YWN0Lmlz
RW1wdHkoKTsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IFN0cmluZ0NvbnN0cmFpbnQoY29u
c3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25h
cnkmKSBvdmVycmlkZTsKKworICAgIFN0cmluZyBtX2V4YWN0OworICAgIFN0cmluZyBtX2lkZWFs
OworfTsKKwogc3RydWN0IE1lZGlhQ29uc3RyYWludCB7CiAgICAgTWVkaWFDb25zdHJhaW50KFN0
cmluZyBuYW1lLCBTdHJpbmcgdmFsdWUpCiAgICAgICAgIDogbV9uYW1lKG5hbWUpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285351</attachid>
            <date>2016-08-04 13:06:38 -0700</date>
            <delta_ts>2016-08-04 13:19:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160804130513.patch</filename>
            <type>text/plain</type>
            <size>21419</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uODNiOGM4Y2Q0ZDYyNDUxMjUxOGYyM2ZkZGU4NWY4
ZTFmOWYzZDQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE2LTA4LTA0ICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoZSBjdXJyZW50IHBhdGNoIGlzIHVudGVzdGFi
bGUsIGJ1dCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdpbGwgYmUgdGVzdGVkIGluIGEgZnV0dXJl
IHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBJbml0aWFsaXpl
cyBtaW4sIG1heCwgZXhhY3QsIGlkZWFsCisgICAgICAgIHZhbHVlIG9mIGNvbnN0cmFpbnQgd2l0
aCBkaWN0aW9uYXJ5LgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVt
cHR5RGVyaXZlZENvbnN0cmFpbnQpOiBGYWN0b3J5IAorICAgICAgICBmb3IgYWxsIGRlcml2ZWQg
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6Y3JlYXRlKTog
Q3JlYXRlcyBMb25nQ29uc3RyYWludCB3aXRoIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpMb25n
Q29uc3RyYWludDo6c2V0TWluKTogU2V0cyBtYW5kYXRvcnkgbWluIGNvbnN0cmFpbnQgdmFsdWUu
CisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6c2V0TWF4KTogU2V0cyBtYW5kYXRv
cnkgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWlu
dDo6c2V0RXhhY3QpOiBTZXRzIG1hbmRhdG9yeSBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6OnNldElkZWFsKTogU2V0cyBv
cHRpb25hbCBpZGVhbCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29y
ZTo6TG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSk6IFBhcnNlcyB1c2Vy
IGlucHV0CisgICAgICAgIGFuZCBzZXRzIG1pbiwgbWF4LCBleGFjdCwgaWRlYWwgdmFsdWVzLgor
ICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50OjpzZXRNaW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldE1heCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJh
aW50cy5oOiBBZGQgYWJzdHJhY3QgY2xhc3NlcworICAgICAgICBCYXNlQ29uc3RyYWludCBhbmQg
TnVtZXJpY0NvbnN0cmFpbnQsIGFuZCBmaW5hbCBjbGFzc2VzCisgICAgICAgIERvdWJsZUNvbnN0
cmFpbnQsIExvbmdDb25zdHJhaW50LCBCb29sZWFuQ29uc3RyYWludCwgYW5kCisgICAgICAgIFN0
cmluZ0NvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjpCYXNlQ29uc3RyYWludDo6fkJhc2VD
b25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpuYW1lKTogTmFt
ZSBvZiBjb25zdHJhaW50IGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VD
b25zdHJhaW50OjpCYXNlQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29u
c3RyYWludDo6c2V0SGFzTWluKTogU2V0cyBtaW4gY29uc3RyYWludCB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNYXgpOiBTZXRzIG1heCBjb25zdHJh
aW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0V4
YWN0KTogU2V0cyBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0lkZWFsKTogU2V0cyBpZGVhbCBjb25zdHJh
aW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6
Omhhc01pbik6IERldGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhIG1p
bmltdW0gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzTWF4
KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFzIGEgbWF4aW11bSB2
YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpoYXNFeGFjdCk6IERl
dGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhbiBleGFjdCB2YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpOdW1lcmljQ29uc3RyYWludCk6
CisKIDIwMTYtMDctMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXJzdCBwYXJhbWV0ZXIgdG8gSFRNTE1lZGlhRWxlbWVudC5jYW5QbGF5VHlwZSgpIHNob3Vs
ZCBiZSBtYW5kYXRvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZDY5ODk3NDY5MGNkNmMyNWMwYjI0MjVjYzVmMWY4Mzc3NTM2
NDA0Li43ZmU0MmY1MTg5ZWE1M2U4ZjI1NWNmM2QxNGU0NjNhN2I0ZmM5ZDMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05ODcs
NiArOTg3LDcgQEAKIAkJMUFGRTExOUEwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oICovOyB9
OwogCQkxQjEyNEQ4RDFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4QzFEMzgw
QjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggKi87IH07CiAJCTFCMTI0RDhGMUQz
ODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAgLyog
TWVkaWFTYW1wbGVBVkZPYmpDLm1tICovOyB9OworCQkxQkU1QkZDMjFENTE1NzE1MDAxNjY2RDkg
LyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50
cy5jcHAgKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcx
ODFFRDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUMwMTA3MDAxOTI1OTRERjAwOEE0MjAxIC8qIElu
bGluZVRleHRCb3hTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxl
LmNwcCAqLzsgfTsKIAkJMUMwMTA3MDExOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hT
dHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMw
MTA2RkYxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovOyB9OwpAQCAt
ODU1MSw2ICs4NTUyLDcgQEAKIAkJMUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVz
dWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMx
RDM4MEI3MDAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2Ft
cGxlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgw
QkI2MDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJh
aW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnN0
cmFpbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwMTA2RkUxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0
eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVRleHRCb3hTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5MzlFODFBMTNFMTI5MDBCNzg4
RTUgLyogQ2FjaGVkU1ZHRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRTVkdGb250LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
Njg4LDYgKzE1NjkwLDcgQEAKIAkJMDcyMjFCOTIxN0NGMEFENDAwODQ4RTUxIC8qIG1lZGlhc3Ry
ZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQkU1
QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDcy
OUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKIAkJCQkwN0Q2QTRGNjFCRjIzMDdEMDAx
NzQxNDYgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oICovLAogCQkJCTVFQkI4OTMw
MUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLywKQEAgLTMyMTUxLDYgKzMyMTU0
LDcgQEAKIAkJCQlCMjIyN0E0NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01ldGFk
YXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkExRjJCMDBDRUYwQUJGMDA0NDJG
NkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQkU1
QkZDMjFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0E0RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MzNDN0NBMEEyQ0YwNkIwMEQ1NzY2NCAvKiBTVkdOYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1MDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTnVt
YmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGQx
NWEyNTk0NTFkM2ZiZTg1NTQ1YTkyNGM3MTc0OTM3YmJiYjNiNAotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3Bw
CkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TWVkaWFDb25zdHJhaW50cy5oIgorCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeSkK
K3sKKyAgICBSZWZQdHI8QmFzZUNvbnN0cmFpbnQ+IGNvbnN0cmFpbnQgPSBjcmVhdGVFbXB0eURl
cml2ZWRDb25zdHJhaW50KG5hbWUpOworICAgIGlmICghY29uc3RyYWludCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBjb25zdHJhaW50LT5pbml0aWFsaXplV2l0aERpY3Rpb25hcnko
ZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIGNvbnN0cmFpbnQ7Cit9CisKK1JlZlB0cjxCYXNlQ29u
c3RyYWludD4gQmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpOworICAgIE1lZGlhQ29u
c3RyYWludFR5cGUgY29uc3RyYWludFR5cGUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJh
aW50RnJvbU5hbWUobmFtZSk7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1
cm4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVS
YXRlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgICAgICByZXR1
cm4gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Db25zdHJh
aW50OjpjcmVhdGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICByZXR1cm4gU3RyaW5nQ29uc3Ry
YWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93
bjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitSZWY8TG9uZ0NvbnN0cmFp
bnQ+IExvbmdDb25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IExvbmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBMb25n
Q29uc3RyYWludDo6c2V0TWluKGxvbmcgdmFsdWUpCit7CisgICAgbV9taW4gPSB2YWx1ZTsKKyAg
ICBzZXRIYXNNaW4odHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OnNldE1heChsb25n
IHZhbHVlKQoreworICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFzTWF4KHRydWUpOworfQor
Cit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRFeGFjdChsb25nIHZhbHVlKQoreworICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNFeGFjdCh0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3Ry
YWludDo6c2V0SWRlYWwobG9uZyB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7CisgICAg
c2V0SGFzSWRlYWwodHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVX
aXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVl
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgZGljdGlvbmFyeUNvbnN0cmFpbnRW
YWx1ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtleXMpOworCisgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzKSB7CisgICAgICAgIGxvbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0
cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkxv
bmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFpbGVkIHRvIGdl
dCBkaWN0aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJyIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9
PSAibWluIikKKyAgICAgICAgICAgIHNldE1pbih2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAibWF4IikKKyAgICAgICAgICAgIHNldE1heCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZXhhY3QiKQorICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImlkZWFsIikKKyAgICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKwor
ICAgICAgICBMT0coTWVkaWEsICJMb25nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KCVwKSAtIGlnbm9yaW5nIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQga2V5L3ZhbHVlIGNvbnN0
cmFpbnQgcGFpcjogJyVzJyA6ICclZiciLCB0aGlzLCBrZXkudXRmOCgpLmRhdGEoKSwgdmFsdWUp
OworICAgIH0KK30KKworUmVmPERvdWJsZUNvbnN0cmFpbnQ+IERvdWJsZUNvbnN0cmFpbnQ6OmNy
ZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgRG91
YmxlQ29uc3RyYWludChuYW1lKSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0TWlu
KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX21pbiA9IHZhbHVlOworICAgIHNldEhhc01pbih0cnVl
KTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50OjpzZXRNYXgoZG91YmxlIHZhbHVlKQorewor
ICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFzTWF4KHRydWUpOworfQorCit2b2lkIERvdWJs
ZUNvbnN0cmFpbnQ6OnNldEV4YWN0KGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX2V4YWN0ID0gdmFs
dWU7CisgICAgc2V0SGFzRXhhY3QodHJ1ZSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6
c2V0SWRlYWwoZG91YmxlIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBzZXRI
YXNJZGVhbCh0cnVlKTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0
aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkK
K3sKKyAgICBWZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFs
dWUuZ2V0T3duUHJvcGVydHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDoga2V5
cykgeworICAgICAgICBkb3VibGUgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0
cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkRv
dWJsZUNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8g
Z2V0IGRpY3Rpb25hcnkgdmFsdWUgZm9yIGtleSAnJXMnLiIsIHRoaXMsIGtleS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtl
eSA9PSAibWluIikKKyAgICAgICAgICAgIHNldE1pbih2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYg
KGtleSA9PSAibWF4IikKKyAgICAgICAgICAgIHNldE1heCh2YWx1ZSk7CisgICAgICAgIGVsc2Ug
aWYgKGtleSA9PSAiZXhhY3QiKQorICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImlkZWFsIikKKyAgICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsK
KworICAgICAgICBMT0coTWVkaWEsICJEb3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERp
Y3Rpb25hcnkoJXApIC0gaWdub3JpbmcgaW52YWxpZCBvciB1bnN1cHBvcnRlZCBrZXkvdmFsdWUg
Y29uc3RyYWludCBwYWlyOiAnJXMnIDogJyVmJyIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpLCB2
YWx1ZSk7CisgICAgfQorfQorCitSZWY8Qm9vbGVhbkNvbnN0cmFpbnQ+IEJvb2xlYW5Db25zdHJh
aW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBCb29sZWFuQ29uc3RyYWlu
dDo6c2V0RXhhY3QoYm9vbCB2YWx1ZSkKK3sKKyAgICBtX2V4YWN0ID0gdmFsdWU7CisgICAgbV9o
YXNFeGFjdCA9IHRydWU7Cit9CisKK3ZvaWQgQm9vbGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKGJv
b2wgdmFsdWUpCit7CisgICAgbV9pZGVhbCA9IHZhbHVlOworICAgIG1faGFzSWRlYWwgPSB0cnVl
OworfQorCit2b2lkIEJvb2xlYW5Db25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnko
Y29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3duUHJv
cGVydHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAgICAg
ICBib29sIHZhbHVlOworICAgICAgICBpZiAoIWRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0
KGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJCb29sZWFuQ29uc3RyYWlu
dDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KCVwKSAtIGZhaWxlZCB0byBnZXQgZGljdGlvbmFy
eSB2YWx1ZSBmb3Iga2V5ICclcycuIiwgdGhpcywga2V5LnV0ZjgoKS5kYXRhKCkpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoa2V5ID09ICJleGFjdCIp
CisgICAgICAgICAgICBzZXRFeGFjdCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
aWRlYWwiKQorICAgICAgICAgICAgc2V0SWRlYWwodmFsdWUpOworCisgICAgICAgIExPRyhNZWRp
YSwgIkJvb2xlYW5Db25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gaWdu
b3JpbmcgaW52YWxpZCBvciB1bnN1cHBvcnRlZCBrZXkvdmFsdWUgY29uc3RyYWludCBwYWlyOiAn
JXMnIDogJyVkJyIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpLCB2YWx1ZSk7CisgICAgfQorfQor
CitSZWY8U3RyaW5nQ29uc3RyYWludD4gU3RyaW5nQ29uc3RyYWludDo6Y3JlYXRlKGNvbnN0IFN0
cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTdHJpbmdDb25zdHJhaW50
KG5hbWUpKTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50OjpzZXRFeGFjdChjb25zdCBTdHJp
bmcmIHZhbHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25z
dHJhaW50OjpzZXRJZGVhbChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2
YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25h
cnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiBrZXlzOworICAgIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0T3du
UHJvcGVydHlOYW1lcyhrZXlzKTsKKworICAgIGZvciAoYXV0byYga2V5IDoga2V5cykgeworICAg
ICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1
ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIlN0cmluZ0NvbnN0
cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rp
b25hcnkgdmFsdWUgZm9yIGtleSAnJXMnLiIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSAiZXhh
Y3QiICYmICF2YWx1ZS5pc051bGwoKSAmJiAhdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
c2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0gImlkZWFsIiAmJiAhdmFs
dWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHNldElkZWFsKHZh
bHVlKTsKKworICAgICAgICBMT0coTWVkaWEsICJTdHJpbmdDb25zdHJhaW50Ojppbml0aWFsaXpl
V2l0aERpY3Rpb25hcnkoJXApIC0gaWdub3JpbmcgaW52YWxpZCBvciB1bnN1cHBvcnRlZCBrZXkv
dmFsdWUgY29uc3RyYWludCBwYWlyOiAnJXMnIDogJyVmJyIsIHRoaXMsIGtleS51dGY4KCkuZGF0
YSgpLCB2YWx1ZSk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKaW5kZXggNTE0MWMyMjhkMGQ0
OGY3OGRiNmU2NTdkOTg1ZTA2MzY5ZWJhZTY5Yy4uNTA1MjZhODA5NDY4MDEyZTczMjNlOWJiYTg1
YjQ5MTczZjZjZDFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM5LDE3NSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKK2NsYXNzIERpY3Rpb25hcnk7CisKK2NsYXNzIEJhc2VDb25zdHJhaW50IDogcHVi
bGljIFJlZkNvdW50ZWQ8QmFzZUNvbnN0cmFpbnQ+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
UHRyPEJhc2VDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBEaWN0
aW9uYXJ5Jik7CisKKyAgICB2aXJ0dWFsIH5CYXNlQ29uc3RyYWludCgpIHsgfTsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNNYW5kYXRv
cnkoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSWRlYWwoKSBjb25zdCA9IDA7
CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgZXhwbGljaXQgQmFzZUNvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAg
ICAgICA6IG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IFJlZlB0cjxCYXNlQ29uc3RyYWludD4gY3JlYXRlRW1wdHlEZXJpdmVkQ29uc3RyYWludChjb25z
dCBTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlv
bmFyeShjb25zdCBEaWN0aW9uYXJ5JikgPSAwOworCisgICAgU3RyaW5nIG1fbmFtZTsKK307CisK
K2NsYXNzIE51bWVyaWNDb25zdHJhaW50IDogcHVibGljIEJhc2VDb25zdHJhaW50IHsKK3B1Ymxp
YzoKKyAgICB2b2lkIHNldEhhc01pbihib29sIHZhbHVlKSB7IG1faGFzTWluID0gdmFsdWU7IH0K
KyAgICB2b2lkIHNldEhhc01heChib29sIHZhbHVlKSB7IG1faGFzTWF4ID0gdmFsdWU7IH0KKyAg
ICB2b2lkIHNldEhhc0V4YWN0KGJvb2wgdmFsdWUpIHsgbV9oYXNFeGFjdCA9IHZhbHVlOyB9Cisg
ICAgdm9pZCBzZXRIYXNJZGVhbChib29sIHZhbHVlKSB7IG1faGFzSWRlYWwgPSB2YWx1ZTsgfQor
CisgICAgYm9vbCBoYXNNaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc01pbjsgfQorICAgIGJvb2wg
aGFzTWF4KCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXg7IH0KKyAgICBib29sIGhhc0V4YWN0KCkg
Y29uc3QgeyByZXR1cm4gbV9oYXNFeGFjdDsgfQorICAgIGJvb2wgaGFzSWRlYWwoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2hhc0lkZWFsOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiAhbV9oYXNNaW4gJiYgIW1faGFzTWF4ICYmICFtX2hhc0V4YWN0
ICYmICFtX2hhc0lkZWFsOyB9CisgICAgYm9vbCBpc01hbmRhdG9yeSgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1faGFzTWluIHx8IG1faGFzTWF4IHx8IG1faGFzRXhhY3Q7IH0KKworcHJvdGVj
dGVkOgorICAgIGV4cGxpY2l0IE51bWVyaWNDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkK
KyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1lKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgYm9vbCBtX2hhc01pbiB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc01heCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2hhc0V4YWN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzSWRlYWwg
eyBmYWxzZSB9OworfTsKKworY2xhc3MgTG9uZ0NvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgTnVt
ZXJpY0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8TG9uZ0NvbnN0cmFpbnQ+
IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBzZXRNaW4obG9uZyB2YWx1
ZSk7CisgICAgdm9pZCBzZXRNYXgobG9uZyB2YWx1ZSk7CisgICAgdm9pZCBzZXRFeGFjdChsb25n
IHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGxvbmcgdmFsdWUpOworCisgICAgbG9uZyBtaW4o
KSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGxvbmcgbWF4KCkgY29uc3QgeyByZXR1cm4g
bV9tYXg7IH0KKyAgICBsb25nIGV4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9leGFjdDsgfQorICAg
IGxvbmcgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9CisgICAgCitwcml2YXRlOgor
ICAgIGV4cGxpY2l0IExvbmdDb25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAg
OiBXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludChuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7
CisKKyAgICBsb25nIG1fbWluOworICAgIGxvbmcgbV9tYXg7CisgICAgbG9uZyBtX2V4YWN0Owor
ICAgIGxvbmcgbV9pZGVhbDsKK307CisKK2NsYXNzIERvdWJsZUNvbnN0cmFpbnQgZmluYWwgOiBw
dWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8RG91Ymxl
Q29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIHNldE1p
bihkb3VibGUgdmFsdWUpOworICAgIHZvaWQgc2V0TWF4KGRvdWJsZSB2YWx1ZSk7CisgICAgdm9p
ZCBzZXRFeGFjdChkb3VibGUgdmFsdWUpOworICAgIHZvaWQgc2V0SWRlYWwoZG91YmxlIHZhbHVl
KTsKKworICAgIGRvdWJsZSBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGRvdWJs
ZSBtYXgoKSBjb25zdCB7IHJldHVybiBtX21heDsgfQorICAgIGRvdWJsZSBleGFjdCgpIGNvbnN0
IHsgcmV0dXJuIG1fZXhhY3Q7IH0KKyAgICBkb3VibGUgaWRlYWwoKSBjb25zdCB7IHJldHVybiBt
X2lkZWFsOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRG91YmxlQ29uc3RyYWludChjb25z
dCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDogV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQobmFt
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29u
c3QgRGljdGlvbmFyeSYpIG92ZXJyaWRlOworCisgICAgZG91YmxlIG1fbWluOworICAgIGRvdWJs
ZSBtX21heDsKKyAgICBkb3VibGUgbV9leGFjdDsKKyAgICBkb3VibGUgbV9pZGVhbDsKK307CisK
K2NsYXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDogcHVibGljIEJhc2VDb25zdHJhaW50IHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJvb2xlYW5Db25zdHJhaW50PiBjcmVhdGUoY29uc3Qg
U3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgc2V0RXhhY3QoYm9vbCB2YWx1ZSk7CisgICAgdm9p
ZCBzZXRJZGVhbChib29sIHZhbHVlKTsKKworICAgIGJvb2wgZXhhY3QoKSBjb25zdCB7IHJldHVy
biBtX2V4YWN0OyB9CisgICAgYm9vbCBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0K
KyAgICBib29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNFeGFjdDsgfQorICAgIGJv
b2wgaGFzSWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc0lkZWFsOyB9CisKKyAg
ICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9oYXNFeGFjdCAmJiAh
bV9oYXNJZGVhbDsgfTsKKyAgICBib29sIGlzTWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gbV9oYXNFeGFjdDsgfQorCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEJvb2xlYW5Db25z
dHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1l
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25z
dCBEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBib29sIG1fZXhhY3QgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pZGVhbCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0V4YWN0IHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faGFzSWRlYWwgeyBmYWxzZSB9OworfTsKKworY2xhc3MgU3RyaW5nQ29u
c3RyYWludCBmaW5hbCA6IHB1YmxpYyBCYXNlQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxTdHJpbmdDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKwor
ICAgIHZvaWQgc2V0RXhhY3QoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXRJZGVhbChjb25z
dCBTdHJpbmcmKTsKKworICAgIGNvbnN0IFN0cmluZyYgZXhhY3QoKSBjb25zdCB7IHJldHVybiBt
X2V4YWN0OyB9CisgICAgY29uc3QgU3RyaW5nJiBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRl
YWw7IH0KKworICAgIGJvb2wgaGFzRXhhY3QoKSBjb25zdCB7IHJldHVybiAhbV9leGFjdC5pc0Vt
cHR5KCk7IH0KKyAgICBib29sIGhhc0lkZWFsKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gIW1f
aWRlYWwuaXNFbXB0eSgpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1wdHkoKTsgfQorICAgIGJv
b2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9leGFjdC5pc0VtcHR5
KCk7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTdHJpbmdDb25zdHJhaW50KGNvbnN0IFN0
cmluZyYgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1lKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikg
b3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgbV9leGFjdDsKKyAgICBTdHJpbmcgbV9pZGVhbDsKK307
CisKIHN0cnVjdCBNZWRpYUNvbnN0cmFpbnQgewogICAgIE1lZGlhQ29uc3RyYWludChTdHJpbmcg
bmFtZSwgU3RyaW5nIHZhbHVlKQogICAgICAgICA6IG1fbmFtZShuYW1lKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285357</attachid>
            <date>2016-08-04 13:24:23 -0700</date>
            <delta_ts>2016-08-04 14:28:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160804132258.patch</filename>
            <type>text/plain</type>
            <size>21434</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uODNiOGM4Y2Q0ZDYyNDUxMjUxOGYyM2ZkZGU4NWY4
ZTFmOWYzZDQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE2LTA4LTA0ICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoZSBjdXJyZW50IHBhdGNoIGlzIHVudGVzdGFi
bGUsIGJ1dCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdpbGwgYmUgdGVzdGVkIGluIGEgZnV0dXJl
IHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBJbml0aWFsaXpl
cyBtaW4sIG1heCwgZXhhY3QsIGlkZWFsCisgICAgICAgIHZhbHVlIG9mIGNvbnN0cmFpbnQgd2l0
aCBkaWN0aW9uYXJ5LgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVt
cHR5RGVyaXZlZENvbnN0cmFpbnQpOiBGYWN0b3J5IAorICAgICAgICBmb3IgYWxsIGRlcml2ZWQg
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6Y3JlYXRlKTog
Q3JlYXRlcyBMb25nQ29uc3RyYWludCB3aXRoIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpMb25n
Q29uc3RyYWludDo6c2V0TWluKTogU2V0cyBtYW5kYXRvcnkgbWluIGNvbnN0cmFpbnQgdmFsdWUu
CisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6c2V0TWF4KTogU2V0cyBtYW5kYXRv
cnkgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWlu
dDo6c2V0RXhhY3QpOiBTZXRzIG1hbmRhdG9yeSBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6OnNldElkZWFsKTogU2V0cyBv
cHRpb25hbCBpZGVhbCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29y
ZTo6TG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSk6IFBhcnNlcyB1c2Vy
IGlucHV0CisgICAgICAgIGFuZCBzZXRzIG1pbiwgbWF4LCBleGFjdCwgaWRlYWwgdmFsdWVzLgor
ICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50OjpzZXRNaW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldE1heCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJh
aW50cy5oOiBBZGQgYWJzdHJhY3QgY2xhc3NlcworICAgICAgICBCYXNlQ29uc3RyYWludCBhbmQg
TnVtZXJpY0NvbnN0cmFpbnQsIGFuZCBmaW5hbCBjbGFzc2VzCisgICAgICAgIERvdWJsZUNvbnN0
cmFpbnQsIExvbmdDb25zdHJhaW50LCBCb29sZWFuQ29uc3RyYWludCwgYW5kCisgICAgICAgIFN0
cmluZ0NvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjpCYXNlQ29uc3RyYWludDo6fkJhc2VD
b25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpuYW1lKTogTmFt
ZSBvZiBjb25zdHJhaW50IGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VD
b25zdHJhaW50OjpCYXNlQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29u
c3RyYWludDo6c2V0SGFzTWluKTogU2V0cyBtaW4gY29uc3RyYWludCB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNYXgpOiBTZXRzIG1heCBjb25zdHJh
aW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0V4
YWN0KTogU2V0cyBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0lkZWFsKTogU2V0cyBpZGVhbCBjb25zdHJh
aW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6
Omhhc01pbik6IERldGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhIG1p
bmltdW0gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzTWF4
KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFzIGEgbWF4aW11bSB2
YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpoYXNFeGFjdCk6IERl
dGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhbiBleGFjdCB2YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpOdW1lcmljQ29uc3RyYWludCk6
CisKIDIwMTYtMDctMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXJzdCBwYXJhbWV0ZXIgdG8gSFRNTE1lZGlhRWxlbWVudC5jYW5QbGF5VHlwZSgpIHNob3Vs
ZCBiZSBtYW5kYXRvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZDY5ODk3NDY5MGNkNmMyNWMwYjI0MjVjYzVmMWY4Mzc3NTM2
NDA0Li43ZmU0MmY1MTg5ZWE1M2U4ZjI1NWNmM2QxNGU0NjNhN2I0ZmM5ZDMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05ODcs
NiArOTg3LDcgQEAKIAkJMUFGRTExOUEwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oICovOyB9
OwogCQkxQjEyNEQ4RDFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4QzFEMzgw
QjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggKi87IH07CiAJCTFCMTI0RDhGMUQz
ODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAgLyog
TWVkaWFTYW1wbGVBVkZPYmpDLm1tICovOyB9OworCQkxQkU1QkZDMjFENTE1NzE1MDAxNjY2RDkg
LyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50
cy5jcHAgKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcx
ODFFRDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUMwMTA3MDAxOTI1OTRERjAwOEE0MjAxIC8qIElu
bGluZVRleHRCb3hTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxl
LmNwcCAqLzsgfTsKIAkJMUMwMTA3MDExOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hT
dHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMw
MTA2RkYxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovOyB9OwpAQCAt
ODU1MSw2ICs4NTUyLDcgQEAKIAkJMUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVz
dWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMx
RDM4MEI3MDAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2Ft
cGxlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgw
QkI2MDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJh
aW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnN0
cmFpbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwMTA2RkUxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0
eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVRleHRCb3hTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5MzlFODFBMTNFMTI5MDBCNzg4
RTUgLyogQ2FjaGVkU1ZHRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRTVkdGb250LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
Njg4LDYgKzE1NjkwLDcgQEAKIAkJMDcyMjFCOTIxN0NGMEFENDAwODQ4RTUxIC8qIG1lZGlhc3Ry
ZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQkU1
QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDcy
OUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKIAkJCQkwN0Q2QTRGNjFCRjIzMDdEMDAx
NzQxNDYgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oICovLAogCQkJCTVFQkI4OTMw
MUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLywKQEAgLTMyMTUxLDYgKzMyMTU0
LDcgQEAKIAkJCQlCMjIyN0E0NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01ldGFk
YXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkExRjJCMDBDRUYwQUJGMDA0NDJG
NkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQkU1
QkZDMjFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0E0RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MzNDN0NBMEEyQ0YwNkIwMEQ1NzY2NCAvKiBTVkdOYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1MDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTnVt
YmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjdk
ZThmYzk5ZGE5MWI2ZTkzMjA5ZjdhZmU2ZTAxZGIwOTZhOGYxZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3Bw
CkBAIC0wLDAgKzEsMjU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TWVkaWFDb25zdHJhaW50cy5oIgorCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeSkK
K3sKKyAgICBSZWZQdHI8QmFzZUNvbnN0cmFpbnQ+IGNvbnN0cmFpbnQgPSBjcmVhdGVFbXB0eURl
cml2ZWRDb25zdHJhaW50KG5hbWUpOworICAgIGlmICghY29uc3RyYWludCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBjb25zdHJhaW50LT5pbml0aWFsaXplV2l0aERpY3Rpb25hcnko
ZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIGNvbnN0cmFpbnQ7Cit9CisKK1JlZlB0cjxCYXNlQ29u
c3RyYWludD4gQmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpOworICAgIE1lZGlhQ29u
c3RyYWludFR5cGUgY29uc3RyYWludFR5cGUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJh
aW50RnJvbU5hbWUobmFtZSk7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1
cm4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVS
YXRlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgICAgICByZXR1
cm4gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Db25zdHJh
aW50OjpjcmVhdGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICByZXR1cm4gU3RyaW5nQ29uc3Ry
YWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93
bjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitSZWY8TG9uZ0NvbnN0cmFp
bnQ+IExvbmdDb25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IExvbmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBMb25n
Q29uc3RyYWludDo6c2V0TWluKGxvbmcgdmFsdWUpCit7CisgICAgbV9taW4gPSB2YWx1ZTsKKyAg
ICBzZXRIYXNNaW4odHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OnNldE1heChsb25n
IHZhbHVlKQoreworICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFzTWF4KHRydWUpOworfQor
Cit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRFeGFjdChsb25nIHZhbHVlKQoreworICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNFeGFjdCh0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3Ry
YWludDo6c2V0SWRlYWwobG9uZyB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7CisgICAg
c2V0SGFzSWRlYWwodHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVX
aXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVl
KQoreworICAgIFZlY3RvcjxTdHJpbmc+IGtleXM7CisgICAgZGljdGlvbmFyeUNvbnN0cmFpbnRW
YWx1ZS5nZXRPd25Qcm9wZXJ0eU5hbWVzKGtleXMpOworCisgICAgZm9yIChhdXRvJiBrZXkgOiBr
ZXlzKSB7CisgICAgICAgIGxvbmcgdmFsdWU7CisgICAgICAgIGlmICghZGljdGlvbmFyeUNvbnN0
cmFpbnRWYWx1ZS5nZXQoa2V5LCB2YWx1ZSkpIHsKKyAgICAgICAgICAgIExPRyhNZWRpYSwgIkxv
bmdDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFpbGVkIHRvIGdl
dCBkaWN0aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJyIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9
PSAibWluIikKKyAgICAgICAgICAgIHNldE1pbih2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYgKGtl
eSA9PSAibWF4IikKKyAgICAgICAgICAgIHNldE1heCh2YWx1ZSk7CisgICAgICAgIGVsc2UgaWYg
KGtleSA9PSAiZXhhY3QiKQorICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBl
bHNlIGlmIChrZXkgPT0gImlkZWFsIikKKyAgICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKwor
ICAgICAgICBMT0coTWVkaWEsICJMb25nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KCVwKSAtIGlnbm9yaW5nIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQga2V5L3ZhbHVlIGNvbnN0
cmFpbnQgcGFpcjogJyVzJyA6ICclbGQnIiwgdGhpcywga2V5LnV0ZjgoKS5kYXRhKCksIHZhbHVl
KTsKKyAgICB9Cit9CisKK1JlZjxEb3VibGVDb25zdHJhaW50PiBEb3VibGVDb25zdHJhaW50Ojpj
cmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IERv
dWJsZUNvbnN0cmFpbnQobmFtZSkpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OnNldE1p
bihkb3VibGUgdmFsdWUpCit7CisgICAgbV9taW4gPSB2YWx1ZTsKKyAgICBzZXRIYXNNaW4odHJ1
ZSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0TWF4KGRvdWJsZSB2YWx1ZSkKK3sK
KyAgICBtX21heCA9IHZhbHVlOworICAgIHNldEhhc01heCh0cnVlKTsKK30KKwordm9pZCBEb3Vi
bGVDb25zdHJhaW50OjpzZXRFeGFjdChkb3VibGUgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZh
bHVlOworICAgIHNldEhhc0V4YWN0KHRydWUpOworfQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6
OnNldElkZWFsKGRvdWJsZSB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7CisgICAgc2V0
SGFzSWRlYWwodHJ1ZSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdp
dGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUp
Cit7CisgICAgVmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZh
bHVlLmdldE93blByb3BlcnR5TmFtZXMoa2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtl
eXMpIHsKKyAgICAgICAgZG91YmxlIHZhbHVlOworICAgICAgICBpZiAoIWRpY3Rpb25hcnlDb25z
dHJhaW50VmFsdWUuZ2V0KGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJE
b3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFpbGVkIHRv
IGdldCBkaWN0aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJy4iLCB0aGlzLCBrZXkudXRmOCgpLmRh
dGEoKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChr
ZXkgPT0gIm1pbiIpCisgICAgICAgICAgICBzZXRNaW4odmFsdWUpOworICAgICAgICBlbHNlIGlm
IChrZXkgPT0gIm1heCIpCisgICAgICAgICAgICBzZXRNYXgodmFsdWUpOworICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImV4YWN0IikKKyAgICAgICAgICAgIHNldEV4YWN0KHZhbHVlKTsKKyAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJpZGVhbCIpCisgICAgICAgICAgICBzZXRJZGVhbCh2YWx1ZSk7
CisKKyAgICAgICAgTE9HKE1lZGlhLCAiRG91YmxlQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhE
aWN0aW9uYXJ5KCVwKSAtIGlnbm9yaW5nIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQga2V5L3ZhbHVl
IGNvbnN0cmFpbnQgcGFpcjogJyVzJyA6ICclZiciLCB0aGlzLCBrZXkudXRmOCgpLmRhdGEoKSwg
dmFsdWUpOworICAgIH0KK30KKworUmVmPEJvb2xlYW5Db25zdHJhaW50PiBCb29sZWFuQ29uc3Ry
YWludDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBCb29sZWFuQ29uc3RyYWludChuYW1lKSk7Cit9CisKK3ZvaWQgQm9vbGVhbkNvbnN0cmFp
bnQ6OnNldEV4YWN0KGJvb2wgdmFsdWUpCit7CisgICAgbV9leGFjdCA9IHZhbHVlOworICAgIG1f
aGFzRXhhY3QgPSB0cnVlOworfQorCit2b2lkIEJvb2xlYW5Db25zdHJhaW50OjpzZXRJZGVhbChi
b29sIHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKKyAgICBtX2hhc0lkZWFsID0gdHJ1
ZTsKK30KKwordm9pZCBCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5
KGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7CisgICAgVmVj
dG9yPFN0cmluZz4ga2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldE93blBy
b3BlcnR5TmFtZXMoa2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAgICAg
ICAgYm9vbCB2YWx1ZTsKKyAgICAgICAgaWYgKCFkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdl
dChrZXksIHZhbHVlKSkgeworICAgICAgICAgICAgTE9HKE1lZGlhLCAiQm9vbGVhbkNvbnN0cmFp
bnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBmYWlsZWQgdG8gZ2V0IGRpY3Rpb25h
cnkgdmFsdWUgZm9yIGtleSAnJXMnLiIsIHRoaXMsIGtleS51dGY4KCkuZGF0YSgpKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGtleSA9PSAiZXhhY3Qi
KQorICAgICAgICAgICAgc2V0RXhhY3QodmFsdWUpOworICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImlkZWFsIikKKyAgICAgICAgICAgIHNldElkZWFsKHZhbHVlKTsKKworICAgICAgICBMT0coTWVk
aWEsICJCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KCVwKSAtIGln
bm9yaW5nIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQga2V5L3ZhbHVlIGNvbnN0cmFpbnQgcGFpcjog
JyVzJyA6ICclZCciLCB0aGlzLCBrZXkudXRmOCgpLmRhdGEoKSwgdmFsdWUpOworICAgIH0KK30K
KworUmVmPFN0cmluZ0NvbnN0cmFpbnQ+IFN0cmluZ0NvbnN0cmFpbnQ6OmNyZWF0ZShjb25zdCBT
dHJpbmcmIG5hbWUpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RyaW5nQ29uc3RyYWlu
dChuYW1lKSk7Cit9CisKK3ZvaWQgU3RyaW5nQ29uc3RyYWludDo6c2V0RXhhY3QoY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBtX2V4YWN0ID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RyaW5nQ29u
c3RyYWludDo6c2V0SWRlYWwoY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0g
dmFsdWU7Cit9CisKK3ZvaWQgU3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KGNvbnN0IERpY3Rpb25hcnkmIGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUpCit7CisgICAg
VmVjdG9yPFN0cmluZz4ga2V5czsKKyAgICBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldE93
blByb3BlcnR5TmFtZXMoa2V5cyk7CisKKyAgICBmb3IgKGF1dG8mIGtleSA6IGtleXMpIHsKKyAg
ICAgICAgU3RyaW5nIHZhbHVlOworICAgICAgICBpZiAoIWRpY3Rpb25hcnlDb25zdHJhaW50VmFs
dWUuZ2V0KGtleSwgdmFsdWUpKSB7CisgICAgICAgICAgICBMT0coTWVkaWEsICJTdHJpbmdDb25z
dHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoJXApIC0gZmFpbGVkIHRvIGdldCBkaWN0
aW9uYXJ5IHZhbHVlIGZvciBrZXkgJyVzJy4iLCB0aGlzLCBrZXkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChrZXkgPT0gImV4
YWN0IiAmJiAhdmFsdWUuaXNOdWxsKCkgJiYgIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IHNldEV4YWN0KHZhbHVlKTsKKyAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpZGVhbCIgJiYgIXZh
bHVlLmlzTnVsbCgpICYmICF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgICAgICBzZXRJZGVhbCh2
YWx1ZSk7CisKKyAgICAgICAgTE9HKE1lZGlhLCAiU3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6
ZVdpdGhEaWN0aW9uYXJ5KCVwKSAtIGlnbm9yaW5nIGludmFsaWQgb3IgdW5zdXBwb3J0ZWQga2V5
L3ZhbHVlIGNvbnN0cmFpbnQgcGFpcjogJyVzJyA6ICclcyciLCB0aGlzLCBrZXkudXRmOCgpLmRh
dGEoKSwgdmFsdWUudXRmOCgpLmRhdGEoKSk7CisgICAgfQorfQorCit9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYUNvbnN0cmFpbnRzLmgKaW5k
ZXggNTE0MWMyMjhkMGQ0OGY3OGRiNmU2NTdkOTg1ZTA2MzY5ZWJhZTY5Yy4uNTA1MjZhODA5NDY4
MDEyZTczMjNlOWJiYTg1YjQ5MTczZjZjZDFmNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaApAQCAtMSw1ICsxLDYg
QEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM4LDYgKzM5LDE3NSBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIERpY3Rpb25hcnk7CisKK2NsYXNzIEJhc2VD
b25zdHJhaW50IDogcHVibGljIFJlZkNvdW50ZWQ8QmFzZUNvbnN0cmFpbnQ+IHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmUHRyPEJhc2VDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBEaWN0aW9uYXJ5Jik7CisKKyAgICB2aXJ0dWFsIH5CYXNlQ29uc3RyYWludCgp
IHsgfTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNFbXB0eSgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCA9IDA7CisKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSWRl
YWwoKSBjb25zdCA9IDA7CisKKyAgICBTdHJpbmcgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFt
ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQmFzZUNvbnN0cmFpbnQoY29uc3QgU3Ry
aW5nJiBuYW1lKQorICAgICAgICA6IG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgc3RhdGljIFJlZlB0cjxCYXNlQ29uc3RyYWludD4gY3JlYXRlRW1wdHlEZXJpdmVk
Q29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdmlydHVhbCB2b2lkIGluaXRp
YWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JikgPSAwOworCisgICAgU3RyaW5n
IG1fbmFtZTsKK307CisKK2NsYXNzIE51bWVyaWNDb25zdHJhaW50IDogcHVibGljIEJhc2VDb25z
dHJhaW50IHsKK3B1YmxpYzoKKyAgICB2b2lkIHNldEhhc01pbihib29sIHZhbHVlKSB7IG1faGFz
TWluID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEhhc01heChib29sIHZhbHVlKSB7IG1faGFzTWF4
ID0gdmFsdWU7IH0KKyAgICB2b2lkIHNldEhhc0V4YWN0KGJvb2wgdmFsdWUpIHsgbV9oYXNFeGFj
dCA9IHZhbHVlOyB9CisgICAgdm9pZCBzZXRIYXNJZGVhbChib29sIHZhbHVlKSB7IG1faGFzSWRl
YWwgPSB2YWx1ZTsgfQorCisgICAgYm9vbCBoYXNNaW4oKSBjb25zdCB7IHJldHVybiBtX2hhc01p
bjsgfQorICAgIGJvb2wgaGFzTWF4KCkgY29uc3QgeyByZXR1cm4gbV9oYXNNYXg7IH0KKyAgICBi
b29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNFeGFjdDsgfQorICAgIGJvb2wgaGFz
SWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hhc0lkZWFsOyB9CisKKyAgICBib29s
IGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9oYXNNaW4gJiYgIW1faGFzTWF4
ICYmICFtX2hhc0V4YWN0ICYmICFtX2hhc0lkZWFsOyB9CisgICAgYm9vbCBpc01hbmRhdG9yeSgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzTWluIHx8IG1faGFzTWF4IHx8IG1faGFzRXhh
Y3Q7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IE51bWVyaWNDb25zdHJhaW50KGNvbnN0
IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1lKQorICAgIHsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBtX2hhc01pbiB7IGZhbHNlIH07CisgICAgYm9vbCBt
X2hhc01heCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hhc0V4YWN0IHsgZmFsc2UgfTsKKyAgICBi
b29sIG1faGFzSWRlYWwgeyBmYWxzZSB9OworfTsKKworY2xhc3MgTG9uZ0NvbnN0cmFpbnQgZmlu
YWwgOiBwdWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
TG9uZ0NvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9pZCBz
ZXRNaW4obG9uZyB2YWx1ZSk7CisgICAgdm9pZCBzZXRNYXgobG9uZyB2YWx1ZSk7CisgICAgdm9p
ZCBzZXRFeGFjdChsb25nIHZhbHVlKTsKKyAgICB2b2lkIHNldElkZWFsKGxvbmcgdmFsdWUpOwor
CisgICAgbG9uZyBtaW4oKSBjb25zdCB7IHJldHVybiBtX21pbjsgfQorICAgIGxvbmcgbWF4KCkg
Y29uc3QgeyByZXR1cm4gbV9tYXg7IH0KKyAgICBsb25nIGV4YWN0KCkgY29uc3QgeyByZXR1cm4g
bV9leGFjdDsgfQorICAgIGxvbmcgaWRlYWwoKSBjb25zdCB7IHJldHVybiBtX2lkZWFsOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIGV4cGxpY2l0IExvbmdDb25zdHJhaW50KGNvbnN0IFN0cmluZyYg
bmFtZSkKKyAgICAgICAgOiBXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludChuYW1lKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9u
YXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBsb25nIG1fbWluOworICAgIGxvbmcgbV9tYXg7CisgICAg
bG9uZyBtX2V4YWN0OworICAgIGxvbmcgbV9pZGVhbDsKK307CisKK2NsYXNzIERvdWJsZUNvbnN0
cmFpbnQgZmluYWwgOiBwdWJsaWMgTnVtZXJpY0NvbnN0cmFpbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8RG91YmxlQ29uc3RyYWludD4gY3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisK
KyAgICB2b2lkIHNldE1pbihkb3VibGUgdmFsdWUpOworICAgIHZvaWQgc2V0TWF4KGRvdWJsZSB2
YWx1ZSk7CisgICAgdm9pZCBzZXRFeGFjdChkb3VibGUgdmFsdWUpOworICAgIHZvaWQgc2V0SWRl
YWwoZG91YmxlIHZhbHVlKTsKKworICAgIGRvdWJsZSBtaW4oKSBjb25zdCB7IHJldHVybiBtX21p
bjsgfQorICAgIGRvdWJsZSBtYXgoKSBjb25zdCB7IHJldHVybiBtX21heDsgfQorICAgIGRvdWJs
ZSBleGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhhY3Q7IH0KKyAgICBkb3VibGUgaWRlYWwoKSBj
b25zdCB7IHJldHVybiBtX2lkZWFsOyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgRG91Ymxl
Q29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDogV2ViQ29yZTo6TnVtZXJp
Y0NvbnN0cmFpbnQobmFtZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBpbml0aWFsaXplV2l0
aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYpIG92ZXJyaWRlOworCisgICAgZG91YmxlIG1f
bWluOworICAgIGRvdWJsZSBtX21heDsKKyAgICBkb3VibGUgbV9leGFjdDsKKyAgICBkb3VibGUg
bV9pZGVhbDsKK307CisKK2NsYXNzIEJvb2xlYW5Db25zdHJhaW50IGZpbmFsIDogcHVibGljIEJh
c2VDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEJvb2xlYW5Db25zdHJhaW50
PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgc2V0RXhhY3QoYm9vbCB2
YWx1ZSk7CisgICAgdm9pZCBzZXRJZGVhbChib29sIHZhbHVlKTsKKworICAgIGJvb2wgZXhhY3Qo
KSBjb25zdCB7IHJldHVybiBtX2V4YWN0OyB9CisgICAgYm9vbCBpZGVhbCgpIGNvbnN0IHsgcmV0
dXJuIG1faWRlYWw7IH0KKyAgICBib29sIGhhc0V4YWN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNF
eGFjdDsgfQorICAgIGJvb2wgaGFzSWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBtX2hh
c0lkZWFsOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAh
bV9oYXNFeGFjdCAmJiAhbV9oYXNJZGVhbDsgfTsKKyAgICBib29sIGlzTWFuZGF0b3J5KCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9oYXNFeGFjdDsgfQorCitwcml2YXRlOgorICAgIGV4cGxp
Y2l0IEJvb2xlYW5Db25zdHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBCYXNl
Q29uc3RyYWludChuYW1lKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRo
RGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBib29sIG1fZXhh
Y3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pZGVhbCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2hh
c0V4YWN0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzSWRlYWwgeyBmYWxzZSB9OworfTsKKwor
Y2xhc3MgU3RyaW5nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBCYXNlQ29uc3RyYWludCB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxTdHJpbmdDb25zdHJhaW50PiBjcmVhdGUoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKKworICAgIHZvaWQgc2V0RXhhY3QoY29uc3QgU3RyaW5nJik7CisgICAgdm9p
ZCBzZXRJZGVhbChjb25zdCBTdHJpbmcmKTsKKworICAgIGNvbnN0IFN0cmluZyYgZXhhY3QoKSBj
b25zdCB7IHJldHVybiBtX2V4YWN0OyB9CisgICAgY29uc3QgU3RyaW5nJiBpZGVhbCgpIGNvbnN0
IHsgcmV0dXJuIG1faWRlYWw7IH0KKworICAgIGJvb2wgaGFzRXhhY3QoKSBjb25zdCB7IHJldHVy
biAhbV9leGFjdC5pc0VtcHR5KCk7IH0KKyAgICBib29sIGhhc0lkZWFsKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gIW1faWRlYWwuaXNFbXB0eSgpOyB9CisKKyAgICBib29sIGlzRW1wdHkoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2V4YWN0LmlzRW1wdHkoKSAmJiBtX2lkZWFsLmlzRW1w
dHkoKTsgfQorICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAh
bV9leGFjdC5pc0VtcHR5KCk7IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBTdHJpbmdDb25z
dHJhaW50KGNvbnN0IFN0cmluZyYgbmFtZSkKKyAgICAgICAgOiBCYXNlQ29uc3RyYWludChuYW1l
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25z
dCBEaWN0aW9uYXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBTdHJpbmcgbV9leGFjdDsKKyAgICBTdHJp
bmcgbV9pZGVhbDsKK307CisKIHN0cnVjdCBNZWRpYUNvbnN0cmFpbnQgewogICAgIE1lZGlhQ29u
c3RyYWludChTdHJpbmcgbmFtZSwgU3RyaW5nIHZhbHVlKQogICAgICAgICA6IG1fbmFtZShuYW1l
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>285365</attachid>
            <date>2016-08-04 14:28:46 -0700</date>
            <delta_ts>2016-08-05 13:44:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160524-20160804142720.patch</filename>
            <type>text/plain</type>
            <size>20500</size>
            <attacher name="George Ruan">gruan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOThhYTUwYjA5NjM0OWQ3
Y2Q4Yjk4OTNkMTZkNTU3ZDNhZDJlMzU4OC4uODNiOGM4Y2Q0ZDYyNDUxMjUxOGYyM2ZkZGU4NWY4
ZTFmOWYzZDQ5NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDY0IEBACisyMDE2LTA4LTA0ICBHZW9y
Z2UgUnVhbiAgPGdydWFuQGFwcGxlLmNvbT4KKworICAgICAgICBBZGQgbG9uZywgYm9vbGVhbiwg
ZG91YmxlLCBhbmQgU3RyaW5nIE1lZGlhIENvbnN0cmFpbnQgY2xhc3NlcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTYwNTI0CisgICAgICAgIDxyZGFy
Oi8vcHJvYmxlbS8yNzY4NTEzMj4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBObyBuZXcgdGVzdHMuIFRoZSBjdXJyZW50IHBhdGNoIGlzIHVudGVzdGFi
bGUsIGJ1dCBmdW5jdGlvbmFsaXR5CisgICAgICAgIHdpbGwgYmUgdGVzdGVkIGluIGEgZnV0dXJl
IHBhdGNoLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpjcmVhdGUpOiBJbml0aWFsaXpl
cyBtaW4sIG1heCwgZXhhY3QsIGlkZWFsCisgICAgICAgIHZhbHVlIG9mIGNvbnN0cmFpbnQgd2l0
aCBkaWN0aW9uYXJ5LgorICAgICAgICAoV2ViQ29yZTo6QmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVt
cHR5RGVyaXZlZENvbnN0cmFpbnQpOiBGYWN0b3J5IAorICAgICAgICBmb3IgYWxsIGRlcml2ZWQg
Y29uc3RyYWludHMuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6Y3JlYXRlKTog
Q3JlYXRlcyBMb25nQ29uc3RyYWludCB3aXRoIG5hbWUuCisgICAgICAgIChXZWJDb3JlOjpMb25n
Q29uc3RyYWludDo6c2V0TWluKTogU2V0cyBtYW5kYXRvcnkgbWluIGNvbnN0cmFpbnQgdmFsdWUu
CisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWludDo6c2V0TWF4KTogU2V0cyBtYW5kYXRv
cnkgbWF4IGNvbnN0cmFpbnQgdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpMb25nQ29uc3RyYWlu
dDo6c2V0RXhhY3QpOiBTZXRzIG1hbmRhdG9yeSBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZh
bHVlLgorICAgICAgICAoV2ViQ29yZTo6TG9uZ0NvbnN0cmFpbnQ6OnNldElkZWFsKTogU2V0cyBv
cHRpb25hbCBpZGVhbCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29y
ZTo6TG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSk6IFBhcnNlcyB1c2Vy
IGlucHV0CisgICAgICAgIGFuZCBzZXRzIG1pbiwgbWF4LCBleGFjdCwgaWRlYWwgdmFsdWVzLgor
ICAgICAgICAoV2ViQ29yZTo6RG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpEb3VibGVDb25zdHJhaW50OjpzZXRNaW4pOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldE1heCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RG91YmxlQ29uc3RyYWludDo6c2V0RXhhY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkRvdWJsZUNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpEb3VibGVDb25zdHJhaW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkJvb2xlYW5Db25zdHJhaW50OjpzZXRFeGFjdCk6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6Qm9vbGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKTogRGl0dG8uCisgICAgICAg
IChXZWJDb3JlOjpCb29sZWFuQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpjcmVhdGUpOiBEaXR0
by4KKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0NvbnN0cmFpbnQ6OnNldEV4YWN0KTogRGl0dG8u
CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9u
YXJ5KTogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJh
aW50cy5oOiBBZGQgYWJzdHJhY3QgY2xhc3NlcworICAgICAgICBCYXNlQ29uc3RyYWludCBhbmQg
TnVtZXJpY0NvbnN0cmFpbnQsIGFuZCBmaW5hbCBjbGFzc2VzCisgICAgICAgIERvdWJsZUNvbnN0
cmFpbnQsIExvbmdDb25zdHJhaW50LCBCb29sZWFuQ29uc3RyYWludCwgYW5kCisgICAgICAgIFN0
cmluZ0NvbnN0cmFpbnQuCisgICAgICAgIChXZWJDb3JlOjpCYXNlQ29uc3RyYWludDo6fkJhc2VD
b25zdHJhaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkJhc2VDb25zdHJhaW50OjpuYW1lKTogTmFt
ZSBvZiBjb25zdHJhaW50IGFzc29jaWF0ZWQgd2l0aC4KKyAgICAgICAgKFdlYkNvcmU6OkJhc2VD
b25zdHJhaW50OjpCYXNlQ29uc3RyYWludCk6CisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29u
c3RyYWludDo6c2V0SGFzTWluKTogU2V0cyBtaW4gY29uc3RyYWludCB2YWx1ZS4KKyAgICAgICAg
KFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpzZXRIYXNNYXgpOiBTZXRzIG1heCBjb25zdHJh
aW50IHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0V4
YWN0KTogU2V0cyBleGFjdCBjb25zdHJhaW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2Vi
Q29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6OnNldEhhc0lkZWFsKTogU2V0cyBpZGVhbCBjb25zdHJh
aW50CisgICAgICAgIHZhbHVlLgorICAgICAgICAoV2ViQ29yZTo6TnVtZXJpY0NvbnN0cmFpbnQ6
Omhhc01pbik6IERldGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhIG1p
bmltdW0gdmFsdWUuCisgICAgICAgIChXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludDo6aGFzTWF4
KTogRGV0ZXJtaW5lcyB3aGV0aGVyIGNvbnN0cmFpbnQKKyAgICAgICAgaGFzIGEgbWF4aW11bSB2
YWx1ZS4KKyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpoYXNFeGFjdCk6IERl
dGVybWluZXMgd2hldGhlciBjb25zdHJhaW50CisgICAgICAgIGhhcyBhbiBleGFjdCB2YWx1ZS4K
KyAgICAgICAgKFdlYkNvcmU6Ok51bWVyaWNDb25zdHJhaW50OjpOdW1lcmljQ29uc3RyYWludCk6
CisKIDIwMTYtMDctMjcgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAg
ICBGaXJzdCBwYXJhbWV0ZXIgdG8gSFRNTE1lZGlhRWxlbWVudC5jYW5QbGF5VHlwZSgpIHNob3Vs
ZCBiZSBtYW5kYXRvcnkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBjZDY5ODk3NDY5MGNkNmMyNWMwYjI0MjVjYzVmMWY4Mzc3NTM2
NDA0Li43ZmU0MmY1MTg5ZWE1M2U4ZjI1NWNmM2QxNGU0NjNhN2I0ZmM5ZDMyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05ODcs
NiArOTg3LDcgQEAKIAkJMUFGRTExOUEwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0
Um93TGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVzdWx0U2V0Um93TGlzdC5oICovOyB9
OwogCQkxQjEyNEQ4RDFEMzgwQjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4QzFEMzgw
QjcwMDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLmggKi87IH07CiAJCTFCMTI0RDhGMUQz
ODBCQjYwMEVDREZCMCAvKiBNZWRpYVNhbXBsZUFWRk9iakMubW0gaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQjEyNEQ4RTFEMzgwQkI2MDBFQ0RGQjAgLyog
TWVkaWFTYW1wbGVBVkZPYmpDLm1tICovOyB9OworCQkxQkU1QkZDMjFENTE1NzE1MDAxNjY2RDkg
LyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50
cy5jcHAgKi87IH07CiAJCTFCRjlEQjNDMUQzOTczQUQwMDI2QUVCNyAvKiBNZWRpYVNhbXBsZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQ0Q2NDFFQzcx
ODFFRDYwMTAwRUU0QzQxIC8qIE1lZGlhU2FtcGxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUMwMTA3MDAxOTI1OTRERjAwOEE0MjAxIC8qIElu
bGluZVRleHRCb3hTdHlsZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAxQzAxMDZGRTE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0eWxl
LmNwcCAqLzsgfTsKIAkJMUMwMTA3MDExOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hT
dHlsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUMw
MTA2RkYxOTI1OTRERjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5oICovOyB9OwpAQCAt
ODU1MSw2ICs4NTUyLDcgQEAKIAkJMUFGRTExOTgwQ0JGRkNDNDAwMzAxN0ZBIC8qIEpTU1FMUmVz
dWx0U2V0Um93TGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1NRTFJl
c3VsdFNldFJvd0xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUIxMjREOEMx
RDM4MEI3MDAwRUNERkIwIC8qIE1lZGlhU2FtcGxlQVZGT2JqQy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBNZWRpYVNhbXBsZUFWRk9iakMuaDsgcGF0aCA9IC4uL01lZGlhU2Ft
cGxlQVZGT2JqQy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQjEyNEQ4RTFEMzgw
QkI2MDBFQ0RGQjAgLyogTWVkaWFTYW1wbGVBVkZPYmpDLm1tICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAub2JqY3BwOyBwYXRoID0gTWVkaWFTYW1wbGVBVkZPYmpDLm1tOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkxQkU1QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJh
aW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNZWRpYUNvbnN0
cmFpbnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMUMwMTA2RkUxOTI1OTRE
RjAwOEE0MjAxIC8qIElubGluZVRleHRCb3hTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJbmxpbmVUZXh0Qm94U3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkxQzAxMDZGRjE5MjU5NERGMDA4QTQyMDEgLyogSW5saW5lVGV4dEJveFN0
eWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElubGluZVRleHRCb3hTdHls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQzA5MzlFODFBMTNFMTI5MDBCNzg4
RTUgLyogQ2FjaGVkU1ZHRm9udC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDYWNoZWRTVkdGb250LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1
Njg4LDYgKzE1NjkwLDcgQEAKIAkJMDcyMjFCOTIxN0NGMEFENDAwODQ4RTUxIC8qIG1lZGlhc3Ry
ZWFtICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkxQkU1
QkZDMTFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgKi8sCiAJCQkJMDcy
OUIxNEQxN0NGQ0NBMDAwNEYxRDYwIC8qIG1hYyAqLywKIAkJCQkwN0Q2QTRGNjFCRjIzMDdEMDAx
NzQxNDYgLyogQXVkaW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oICovLAogCQkJCTVFQkI4OTMw
MUM3Nzc3RTEwMEM2NUQ0MSAvKiBJY2VDYW5kaWRhdGUuaCAqLywKQEAgLTMyMTUxLDYgKzMyMTU0
LDcgQEAKIAkJCQlCMjIyN0E0NjBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTWFza0VsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBNEEwRDAwQkYyMjAwNzFCNzgyIC8qIFNWR01ldGFk
YXRhRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMkExRjJCMDBDRUYwQUJGMDA0NDJG
NkEgLyogU1ZHTWlzc2luZ0dseXBoRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkxQkU1
QkZDMjFENTE1NzE1MDAxNjY2RDkgLyogTWVkaWFDb25zdHJhaW50cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlCMjIyN0E0RDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTVBhdGhFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE4MzNDN0NBMEEyQ0YwNkIwMEQ1NzY2NCAvKiBTVkdOYW1lcy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlCMjIyN0E1MDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHTnVt
YmVyTGlzdC5jcHAgaW4gU291cmNlcyAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFDb25zdHJhaW50cy5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWJl
NDQyMWM4MzE0NzhhYzdiN2RiOWRkYWY1ZGEwMTZhOTJhMDk3YgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuY3Bw
CkBAIC0wLDAgKzEsMjQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lcgorICogICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMK
KyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20gdGhpcworICogICAgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
TWVkaWFDb25zdHJhaW50cy5oIgorCisjaW5jbHVkZSAiRGljdGlvbmFyeS5oIgorI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlQ2VudGVyLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVmUHRyPEJhc2VDb25zdHJhaW50PiBCYXNlQ29uc3RyYWludDo6
Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeSkK
K3sKKyAgICBSZWZQdHI8QmFzZUNvbnN0cmFpbnQ+IGNvbnN0cmFpbnQgPSBjcmVhdGVFbXB0eURl
cml2ZWRDb25zdHJhaW50KG5hbWUpOworICAgIGlmICghY29uc3RyYWludCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICBjb25zdHJhaW50LT5pbml0aWFsaXplV2l0aERpY3Rpb25hcnko
ZGljdGlvbmFyeSk7CisgICAgcmV0dXJuIGNvbnN0cmFpbnQ7Cit9CisKK1JlZlB0cjxCYXNlQ29u
c3RyYWludD4gQmFzZUNvbnN0cmFpbnQ6OmNyZWF0ZUVtcHR5RGVyaXZlZENvbnN0cmFpbnQoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0
ZWRDb25zdHJhaW50cyYgc3VwcG9ydGVkQ29uc3RyYWludHMgPSBSZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyOjpzaW5nbGV0b24oKS5zdXBwb3J0ZWRDb25zdHJhaW50cygpOworICAgIE1lZGlhQ29u
c3RyYWludFR5cGUgY29uc3RyYWludFR5cGUgPSBzdXBwb3J0ZWRDb25zdHJhaW50cy5jb25zdHJh
aW50RnJvbU5hbWUobmFtZSk7CisKKyAgICBzd2l0Y2ggKGNvbnN0cmFpbnRUeXBlKSB7CisgICAg
Y2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpXaWR0aDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkhlaWdodDoKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWludFR5cGU6OlNhbXBsZVJhdGU6
CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpTYW1wbGVTaXplOgorICAgICAgICByZXR1
cm4gTG9uZ0NvbnN0cmFpbnQ6OmNyZWF0ZShuYW1lKTsKKyAgICBjYXNlIE1lZGlhQ29uc3RyYWlu
dFR5cGU6OkFzcGVjdFJhdGlvOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RnJhbWVS
YXRlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6Vm9sdW1lOgorICAgICAgICByZXR1
cm4gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJh
aW50VHlwZTo6RWNob0NhbmNlbGxhdGlvbjoKKyAgICAgICAgcmV0dXJuIEJvb2xlYW5Db25zdHJh
aW50OjpjcmVhdGUobmFtZSk7CisgICAgY2FzZSBNZWRpYUNvbnN0cmFpbnRUeXBlOjpGYWNpbmdN
b2RlOgorICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6RGV2aWNlSWQ6CisgICAgY2FzZSBN
ZWRpYUNvbnN0cmFpbnRUeXBlOjpHcm91cElkOgorICAgICAgICByZXR1cm4gU3RyaW5nQ29uc3Ry
YWludDo6Y3JlYXRlKG5hbWUpOworICAgIGNhc2UgTWVkaWFDb25zdHJhaW50VHlwZTo6VW5rbm93
bjoKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorfQorCitSZWY8TG9uZ0NvbnN0cmFp
bnQ+IExvbmdDb25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IExvbmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBMb25n
Q29uc3RyYWludDo6c2V0TWluKGxvbmcgdmFsdWUpCit7CisgICAgbV9taW4gPSB2YWx1ZTsKKyAg
ICBzZXRIYXNNaW4odHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OnNldE1heChsb25n
IHZhbHVlKQoreworICAgIG1fbWF4ID0gdmFsdWU7CisgICAgc2V0SGFzTWF4KHRydWUpOworfQor
Cit2b2lkIExvbmdDb25zdHJhaW50OjpzZXRFeGFjdChsb25nIHZhbHVlKQoreworICAgIG1fZXhh
Y3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNFeGFjdCh0cnVlKTsKK30KKwordm9pZCBMb25nQ29uc3Ry
YWludDo6c2V0SWRlYWwobG9uZyB2YWx1ZSkKK3sKKyAgICBtX2lkZWFsID0gdmFsdWU7CisgICAg
c2V0SGFzSWRlYWwodHJ1ZSk7Cit9CisKK3ZvaWQgTG9uZ0NvbnN0cmFpbnQ6OmluaXRpYWxpemVX
aXRoRGljdGlvbmFyeShjb25zdCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVl
KQoreworCisgICAgbG9uZyBtaW5WYWx1ZTsKKyAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRW
YWx1ZS5nZXQoIm1pbiIsIG1pblZhbHVlKSkKKyAgICAgICAgc2V0TWluKG1pblZhbHVlKTsKKwor
ICAgIGxvbmcgbWF4VmFsdWU7CisgICAgaWYgKGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0
KCJtYXgiLCBtYXhWYWx1ZSkpCisgICAgICAgIHNldE1heChtYXhWYWx1ZSk7CisKKyAgICBsb25n
IGV4YWN0VmFsdWU7CisgICAgaWYgKGRpY3Rpb25hcnlDb25zdHJhaW50VmFsdWUuZ2V0KCJleGFj
dCIsIGV4YWN0VmFsdWUpKQorICAgICAgICBzZXRFeGFjdChleGFjdFZhbHVlKTsKKworICAgIGxv
bmcgaWRlYWxWYWx1ZTsKKyAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoImlk
ZWFsIiwgaWRlYWxWYWx1ZSkpCisgICAgICAgIHNldElkZWFsKGlkZWFsVmFsdWUpOworCisgICAg
aWYgKGlzRW1wdHkoKSkKKyAgICAgICAgTE9HKE1lZGlhLCAiTG9uZ0NvbnN0cmFpbnQ6OmluaXRp
YWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBpZ25vcmluZyBjb25zdHJhaW50IHNpbmNlIGl0IGhh
cyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIHRoaXMpOworfQorCitS
ZWY8RG91YmxlQ29uc3RyYWludD4gRG91YmxlQ29uc3RyYWludDo6Y3JlYXRlKGNvbnN0IFN0cmlu
ZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBEb3VibGVDb25zdHJhaW50KG5h
bWUpKTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50OjpzZXRNaW4oZG91YmxlIHZhbHVlKQor
eworICAgIG1fbWluID0gdmFsdWU7CisgICAgc2V0SGFzTWluKHRydWUpOworfQorCit2b2lkIERv
dWJsZUNvbnN0cmFpbnQ6OnNldE1heChkb3VibGUgdmFsdWUpCit7CisgICAgbV9tYXggPSB2YWx1
ZTsKKyAgICBzZXRIYXNNYXgodHJ1ZSk7Cit9CisKK3ZvaWQgRG91YmxlQ29uc3RyYWludDo6c2V0
RXhhY3QoZG91YmxlIHZhbHVlKQoreworICAgIG1fZXhhY3QgPSB2YWx1ZTsKKyAgICBzZXRIYXNF
eGFjdCh0cnVlKTsKK30KKwordm9pZCBEb3VibGVDb25zdHJhaW50OjpzZXRJZGVhbChkb3VibGUg
dmFsdWUpCit7CisgICAgbV9pZGVhbCA9IHZhbHVlOworICAgIHNldEhhc0lkZWFsKHRydWUpOwor
fQorCit2b2lkIERvdWJsZUNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25z
dCBEaWN0aW9uYXJ5JiBkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlKQoreworICAgIGRvdWJsZSBt
aW5WYWx1ZTsKKyAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoIm1pbiIsIG1p
blZhbHVlKSkKKyAgICAgICAgc2V0TWluKG1pblZhbHVlKTsKKworICAgIGRvdWJsZSBtYXhWYWx1
ZTsKKyAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoIm1heCIsIG1heFZhbHVl
KSkKKyAgICAgICAgc2V0TWF4KG1heFZhbHVlKTsKKworICAgIGRvdWJsZSBleGFjdFZhbHVlOwor
ICAgIGlmIChkaWN0aW9uYXJ5Q29uc3RyYWludFZhbHVlLmdldCgiZXhhY3QiLCBleGFjdFZhbHVl
KSkKKyAgICAgICAgc2V0RXhhY3QoZXhhY3RWYWx1ZSk7CisKKyAgICBkb3VibGUgaWRlYWxWYWx1
ZTsKKyAgICBpZiAoZGljdGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoImlkZWFsIiwgaWRlYWxW
YWx1ZSkpCisgICAgICAgIHNldElkZWFsKGlkZWFsVmFsdWUpOworCisgICAgaWYgKGlzRW1wdHko
KSkKKyAgICAgICAgTE9HKE1lZGlhLCAiRG91YmxlQ29uc3RyYWludHM6OmluaXRpYWxpemVXaXRo
RGljdGlvbmFyeSglcCkgLSBpZ25vcmluZyBjb25zdHJhaW50IHNpbmNlIGl0IGhhcyBubyB2YWxp
ZCBvciBzdXBwb3J0ZWQga2V5L3ZhbHVlIHBhaXJzLiIsIHRoaXMpOworfQorCitSZWY8Qm9vbGVh
bkNvbnN0cmFpbnQ+IEJvb2xlYW5Db25zdHJhaW50OjpjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1l
KQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEJvb2xlYW5Db25zdHJhaW50KG5hbWUpKTsK
K30KKwordm9pZCBCb29sZWFuQ29uc3RyYWludDo6c2V0RXhhY3QoYm9vbCB2YWx1ZSkKK3sKKyAg
ICBtX2V4YWN0ID0gdmFsdWU7CisgICAgbV9oYXNFeGFjdCA9IHRydWU7Cit9CisKK3ZvaWQgQm9v
bGVhbkNvbnN0cmFpbnQ6OnNldElkZWFsKGJvb2wgdmFsdWUpCit7CisgICAgbV9pZGVhbCA9IHZh
bHVlOworICAgIG1faGFzSWRlYWwgPSB0cnVlOworfQorCit2b2lkIEJvb2xlYW5Db25zdHJhaW50
Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFyeUNv
bnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBib29sIGV4YWN0VmFsdWU7CisgICAgaWYgKGRpY3Rpb25h
cnlDb25zdHJhaW50VmFsdWUuZ2V0KCJleGFjdCIsIGV4YWN0VmFsdWUpKQorICAgICAgICBzZXRF
eGFjdChleGFjdFZhbHVlKTsKKworICAgIGJvb2wgaWRlYWxWYWx1ZTsKKyAgICBpZiAoZGljdGlv
bmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoImlkZWFsIiwgaWRlYWxWYWx1ZSkpCisgICAgICAgIHNl
dElkZWFsKGlkZWFsVmFsdWUpOworCisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgTE9HKE1l
ZGlhLCAiQm9vbGVhbkNvbnN0cmFpbnQ6OmluaXRpYWxpemVXaXRoRGljdGlvbmFyeSglcCkgLSBp
Z25vcmluZyBjb25zdHJhaW50IHNpbmNlIGl0IGhhcyBubyB2YWxpZCBvciBzdXBwb3J0ZWQga2V5
L3ZhbHVlIHBhaXJzLiIsIHRoaXMpOworfQorCitSZWY8U3RyaW5nQ29uc3RyYWludD4gU3RyaW5n
Q29uc3RyYWludDo6Y3JlYXRlKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTdHJpbmdDb25zdHJhaW50KG5hbWUpKTsKK30KKwordm9pZCBTdHJpbmdDb25z
dHJhaW50OjpzZXRFeGFjdChjb25zdCBTdHJpbmcmIHZhbHVlKQoreworICAgIG1fZXhhY3QgPSB2
YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJhaW50OjpzZXRJZGVhbChjb25zdCBTdHJpbmcm
IHZhbHVlKQoreworICAgIG1faWRlYWwgPSB2YWx1ZTsKK30KKwordm9pZCBTdHJpbmdDb25zdHJh
aW50Ojppbml0aWFsaXplV2l0aERpY3Rpb25hcnkoY29uc3QgRGljdGlvbmFyeSYgZGljdGlvbmFy
eUNvbnN0cmFpbnRWYWx1ZSkKK3sKKyAgICBTdHJpbmcgZXhhY3RWYWx1ZTsKKyAgICBpZiAoZGlj
dGlvbmFyeUNvbnN0cmFpbnRWYWx1ZS5nZXQoImV4YWN0IiwgZXhhY3RWYWx1ZSkgJiYgIWV4YWN0
VmFsdWUuaXNOdWxsKCkgJiYgIWV4YWN0VmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBzZXRFeGFj
dChleGFjdFZhbHVlKTsKKworICAgIFN0cmluZyBpZGVhbFZhbHVlOworICAgIGlmIChkaWN0aW9u
YXJ5Q29uc3RyYWludFZhbHVlLmdldCgiaWRlYWwiLCBpZGVhbFZhbHVlKSAmJiAhaWRlYWxWYWx1
ZS5pc051bGwoKSAmJiAhaWRlYWxWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIHNldElkZWFsKGlk
ZWFsVmFsdWUpOworCisgICAgaWYgKGlzRW1wdHkoKSkKKyAgICAgICAgTE9HKE1lZGlhLCAiU3Ry
aW5nQ29uc3RyYWludDo6aW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KCVwKSAtIGlnbm9yaW5nIGNv
bnN0cmFpbnQgc2luY2UgaXQgaGFzIG5vIHZhbGlkIG9yIHN1cHBvcnRlZCBrZXkvdmFsdWUgcGFp
cnMuIiwgdGhpcyk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL01lZGlhQ29uc3RyYWludHMuaAppbmRleCA1MTQxYzIyOGQwZDQ4Zjc4ZGI2
ZTY1N2Q5ODVlMDYzNjllYmFlNjljLi41MDUyNmE4MDk0NjgwMTJlNzMyM2U5YmJhODViNDkxNzNm
NmNkMWY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9N
ZWRpYUNvbnN0cmFpbnRzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vTWVkaWFDb25zdHJhaW50cy5oCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAo
QykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzgsNiArMzksMTc1IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorY2xhc3MgRGljdGlvbmFyeTsKKworY2xhc3MgQmFzZUNvbnN0cmFpbnQgOiBwdWJsaWMgUmVm
Q291bnRlZDxCYXNlQ29uc3RyYWludD4geworcHVibGljOgorICAgIHN0YXRpYyBSZWZQdHI8QmFz
ZUNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IERpY3Rpb25hcnkm
KTsKKworICAgIHZpcnR1YWwgfkJhc2VDb25zdHJhaW50KCkgeyB9OworICAgIHZpcnR1YWwgYm9v
bCBpc0VtcHR5KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc01hbmRhdG9yeSgpIGNv
bnN0ID0gMDsKKworICAgIHZpcnR1YWwgYm9vbCBoYXNJZGVhbCgpIGNvbnN0ID0gMDsKKworICAg
IFN0cmluZyBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBleHBsaWNpdCBCYXNlQ29uc3RyYWludChjb25zdCBTdHJpbmcmIG5hbWUpCisgICAgICAgIDog
bV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVmUHRy
PEJhc2VDb25zdHJhaW50PiBjcmVhdGVFbXB0eURlcml2ZWRDb25zdHJhaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNv
bnN0IERpY3Rpb25hcnkmKSA9IDA7CisKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworY2xhc3Mg
TnVtZXJpY0NvbnN0cmFpbnQgOiBwdWJsaWMgQmFzZUNvbnN0cmFpbnQgeworcHVibGljOgorICAg
IHZvaWQgc2V0SGFzTWluKGJvb2wgdmFsdWUpIHsgbV9oYXNNaW4gPSB2YWx1ZTsgfQorICAgIHZv
aWQgc2V0SGFzTWF4KGJvb2wgdmFsdWUpIHsgbV9oYXNNYXggPSB2YWx1ZTsgfQorICAgIHZvaWQg
c2V0SGFzRXhhY3QoYm9vbCB2YWx1ZSkgeyBtX2hhc0V4YWN0ID0gdmFsdWU7IH0KKyAgICB2b2lk
IHNldEhhc0lkZWFsKGJvb2wgdmFsdWUpIHsgbV9oYXNJZGVhbCA9IHZhbHVlOyB9CisKKyAgICBi
b29sIGhhc01pbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzTWluOyB9CisgICAgYm9vbCBoYXNNYXgo
KSBjb25zdCB7IHJldHVybiBtX2hhc01heDsgfQorICAgIGJvb2wgaGFzRXhhY3QoKSBjb25zdCB7
IHJldHVybiBtX2hhc0V4YWN0OyB9CisgICAgYm9vbCBoYXNJZGVhbCgpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIG1faGFzSWRlYWw7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICFtX2hhc01pbiAmJiAhbV9oYXNNYXggJiYgIW1faGFzRXhhY3QgJiYgIW1f
aGFzSWRlYWw7IH0KKyAgICBib29sIGlzTWFuZGF0b3J5KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9oYXNNaW4gfHwgbV9oYXNNYXggfHwgbV9oYXNFeGFjdDsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgZXhwbGljaXQgTnVtZXJpY0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAg
ICA6IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBi
b29sIG1faGFzTWluIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzTWF4IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faGFzRXhhY3QgeyBmYWxzZSB9OworICAgIGJvb2wgbV9oYXNJZGVhbCB7IGZhbHNl
IH07Cit9OworCitjbGFzcyBMb25nQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBOdW1lcmljQ29u
c3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxMb25nQ29uc3RyYWludD4gY3JlYXRl
KGNvbnN0IFN0cmluZyYgbmFtZSk7CisKKyAgICB2b2lkIHNldE1pbihsb25nIHZhbHVlKTsKKyAg
ICB2b2lkIHNldE1heChsb25nIHZhbHVlKTsKKyAgICB2b2lkIHNldEV4YWN0KGxvbmcgdmFsdWUp
OworICAgIHZvaWQgc2V0SWRlYWwobG9uZyB2YWx1ZSk7CisKKyAgICBsb25nIG1pbigpIGNvbnN0
IHsgcmV0dXJuIG1fbWluOyB9CisgICAgbG9uZyBtYXgoKSBjb25zdCB7IHJldHVybiBtX21heDsg
fQorICAgIGxvbmcgZXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2V4YWN0OyB9CisgICAgbG9uZyBp
ZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgZXhw
bGljaXQgTG9uZ0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IFdlYkNv
cmU6Ok51bWVyaWNDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgaW5p
dGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSBvdmVycmlkZTsKKworICAg
IGxvbmcgbV9taW47CisgICAgbG9uZyBtX21heDsKKyAgICBsb25nIG1fZXhhY3Q7CisgICAgbG9u
ZyBtX2lkZWFsOworfTsKKworY2xhc3MgRG91YmxlQ29uc3RyYWludCBmaW5hbCA6IHB1YmxpYyBO
dW1lcmljQ29uc3RyYWludCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxEb3VibGVDb25zdHJh
aW50PiBjcmVhdGUoY29uc3QgU3RyaW5nJiBuYW1lKTsKKworICAgIHZvaWQgc2V0TWluKGRvdWJs
ZSB2YWx1ZSk7CisgICAgdm9pZCBzZXRNYXgoZG91YmxlIHZhbHVlKTsKKyAgICB2b2lkIHNldEV4
YWN0KGRvdWJsZSB2YWx1ZSk7CisgICAgdm9pZCBzZXRJZGVhbChkb3VibGUgdmFsdWUpOworCisg
ICAgZG91YmxlIG1pbigpIGNvbnN0IHsgcmV0dXJuIG1fbWluOyB9CisgICAgZG91YmxlIG1heCgp
IGNvbnN0IHsgcmV0dXJuIG1fbWF4OyB9CisgICAgZG91YmxlIGV4YWN0KCkgY29uc3QgeyByZXR1
cm4gbV9leGFjdDsgfQorICAgIGRvdWJsZSBpZGVhbCgpIGNvbnN0IHsgcmV0dXJuIG1faWRlYWw7
IH0KKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBEb3VibGVDb25zdHJhaW50KGNvbnN0IFN0cmlu
ZyYgbmFtZSkKKyAgICAgICAgOiBXZWJDb3JlOjpOdW1lcmljQ29uc3RyYWludChuYW1lKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGluaXRpYWxpemVXaXRoRGljdGlvbmFyeShjb25zdCBEaWN0
aW9uYXJ5Jikgb3ZlcnJpZGU7CisKKyAgICBkb3VibGUgbV9taW47CisgICAgZG91YmxlIG1fbWF4
OworICAgIGRvdWJsZSBtX2V4YWN0OworICAgIGRvdWJsZSBtX2lkZWFsOworfTsKKworY2xhc3Mg
Qm9vbGVhbkNvbnN0cmFpbnQgZmluYWwgOiBwdWJsaWMgQmFzZUNvbnN0cmFpbnQgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8Qm9vbGVhbkNvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcm
IG5hbWUpOworCisgICAgdm9pZCBzZXRFeGFjdChib29sIHZhbHVlKTsKKyAgICB2b2lkIHNldElk
ZWFsKGJvb2wgdmFsdWUpOworCisgICAgYm9vbCBleGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhh
Y3Q7IH0KKyAgICBib29sIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9pZGVhbDsgfQorICAgIGJv
b2wgaGFzRXhhY3QoKSBjb25zdCB7IHJldHVybiBtX2hhc0V4YWN0OyB9CisgICAgYm9vbCBoYXNJ
ZGVhbCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1faGFzSWRlYWw7IH0KKworICAgIGJvb2wg
aXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2hhc0V4YWN0ICYmICFtX2hhc0lk
ZWFsOyB9OworICAgIGJvb2wgaXNNYW5kYXRvcnkoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X2hhc0V4YWN0OyB9CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgQm9vbGVhbkNvbnN0cmFpbnQo
Y29uc3QgU3RyaW5nJiBuYW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rp
b25hcnkmKSBvdmVycmlkZTsKKworICAgIGJvb2wgbV9leGFjdCB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lkZWFsIHsgZmFsc2UgfTsKKyAgICBib29sIG1faGFzRXhhY3QgeyBmYWxzZSB9OworICAg
IGJvb2wgbV9oYXNJZGVhbCB7IGZhbHNlIH07Cit9OworCitjbGFzcyBTdHJpbmdDb25zdHJhaW50
IGZpbmFsIDogcHVibGljIEJhc2VDb25zdHJhaW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFN0cmluZ0NvbnN0cmFpbnQ+IGNyZWF0ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCisgICAgdm9p
ZCBzZXRFeGFjdChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldElkZWFsKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgY29uc3QgU3RyaW5nJiBleGFjdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhhY3Q7
IH0KKyAgICBjb25zdCBTdHJpbmcmIGlkZWFsKCkgY29uc3QgeyByZXR1cm4gbV9pZGVhbDsgfQor
CisgICAgYm9vbCBoYXNFeGFjdCgpIGNvbnN0IHsgcmV0dXJuICFtX2V4YWN0LmlzRW1wdHkoKTsg
fQorICAgIGJvb2wgaGFzSWRlYWwoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAhbV9pZGVhbC5p
c0VtcHR5KCk7IH0KKworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fZXhhY3QuaXNFbXB0eSgpICYmIG1faWRlYWwuaXNFbXB0eSgpOyB9CisgICAgYm9vbCBpc01h
bmRhdG9yeSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICFtX2V4YWN0LmlzRW1wdHkoKTsgfQor
Citwcml2YXRlOgorICAgIGV4cGxpY2l0IFN0cmluZ0NvbnN0cmFpbnQoY29uc3QgU3RyaW5nJiBu
YW1lKQorICAgICAgICA6IEJhc2VDb25zdHJhaW50KG5hbWUpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgaW5pdGlhbGl6ZVdpdGhEaWN0aW9uYXJ5KGNvbnN0IERpY3Rpb25hcnkmKSBvdmVycmlk
ZTsKKworICAgIFN0cmluZyBtX2V4YWN0OworICAgIFN0cmluZyBtX2lkZWFsOworfTsKKwogc3Ry
dWN0IE1lZGlhQ29uc3RyYWludCB7CiAgICAgTWVkaWFDb25zdHJhaW50KFN0cmluZyBuYW1lLCBT
dHJpbmcgdmFsdWUpCiAgICAgICAgIDogbV9uYW1lKG5hbWUpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>