<?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>167639</bug_id>
          
          <creation_ts>2017-01-31 06:52:11 -0800</creation_ts>
          <short_desc>[Mac] Add an audio stream description class</short_desc>
          <delta_ts>2024-01-28 09:25:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>ASSIGNED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>268255</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>jer.noble</cc>
    
    <cc>thiago.lacerda</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>youennf</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1271690</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 06:52:11 -0800</bug_when>
    <thetext>Create a class to wrap a CA audio stream description.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271704</commentid>
    <comment_count>1</comment_count>
      <attachid>300219</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 07:25:37 -0800</bug_when>
    <thetext>Created attachment 300219
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271726</commentid>
    <comment_count>2</comment_count>
      <attachid>300219</attachid>
    <who name="youenn fablet">youennf</who>
    <bug_when>2017-01-31 08:26:29 -0800</bug_when>
    <thetext>Comment on attachment 300219
Proposed patch

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

&gt; Source/WebCore/platform/audio/AudioStreamDescription.h:39
&gt; +    } description;

Can we use Variant&lt;std::nullptr_t, const AudioStreamBasicDescription*&gt;?

&gt; Source/WebCore/platform/audio/AudioStreamDescription.h:49
&gt; +        Unknown,

Do we need Unknown and isPCM?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.cpp:115
&gt; +            return Unknown;

Why do we return Unknown here? Shouldn&apos;t we return m_format?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.cpp:125
&gt; +    return m_format;

Would it be clearer if we were returning early whenever we know the format.
Then at the end, we would return Unknown I guess?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:36
&gt; +class CAAudioStreamDescription : public AudioStreamDescription {

Can it be final?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:41
&gt; +    const PlatformDescription&amp; platformDescription() const final;

Make all of these private?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:47
&gt; +    bool isPCM() const final { return m_streamDescription.mFormatID == kAudioFormatLinearPCM; }

Do we need to override this one?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:64
&gt; +    bool operator!=(const AudioStreamBasicDescription&amp; other) { return !operator==(other); }

space around ==?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:66
&gt; +    bool operator!=(const AudioStreamDescription&amp; other) { return !operator==(other); }

Ditto?

&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:78
&gt; +CAAudioStreamDescription toCAAudioStreamDescription(const AudioStreamDescription&amp;);

Could be inlined maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271755</commentid>
    <comment_count>3</comment_count>
      <attachid>300219</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 09:42:04 -0800</bug_when>
    <thetext>Comment on attachment 300219
Proposed patch

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

&gt;&gt; Source/WebCore/platform/audio/AudioStreamDescription.h:39
&gt;&gt; +    } description;
&gt; 
&gt; Can we use Variant&lt;std::nullptr_t, const AudioStreamBasicDescription*&gt;?

Yes, done.

&gt;&gt; Source/WebCore/platform/audio/AudioStreamDescription.h:49
&gt;&gt; +        Unknown,
&gt; 
&gt; Do we need Unknown and isPCM?

&quot;None&quot; is probably better than &quot;Unknown&quot;

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.cpp:115
&gt;&gt; +            return Unknown;
&gt; 
&gt; Why do we return Unknown here? Shouldn&apos;t we return m_format?

Oops!

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.cpp:125
&gt;&gt; +    return m_format;
&gt; 
&gt; Would it be clearer if we were returning early whenever we know the format.
&gt; Then at the end, we would return Unknown I guess?

OK, fixed.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:36
&gt;&gt; +class CAAudioStreamDescription : public AudioStreamDescription {
&gt; 
&gt; Can it be final?

Yes.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:41
&gt;&gt; +    const PlatformDescription&amp; platformDescription() const final;
&gt; 
&gt; Make all of these private?

No, because we will use this class directly in a number of places.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:47
&gt;&gt; +    bool isPCM() const final { return m_streamDescription.mFormatID == kAudioFormatLinearPCM; }
&gt; 
&gt; Do we need to override this one?

No, fixed.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:64
&gt;&gt; +    bool operator!=(const AudioStreamBasicDescription&amp; other) { return !operator==(other); }
&gt; 
&gt; space around ==?

Fixed.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:66
&gt;&gt; +    bool operator!=(const AudioStreamDescription&amp; other) { return !operator==(other); }
&gt; 
&gt; Ditto?

Fixed.

&gt;&gt; Source/WebCore/platform/audio/mac/CAAudioStreamDescription.h:78
&gt;&gt; +CAAudioStreamDescription toCAAudioStreamDescription(const AudioStreamDescription&amp;);
&gt; 
&gt; Could be inlined maybe?

Good idea, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271756</commentid>
    <comment_count>4</comment_count>
      <attachid>300226</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2017-01-31 09:42:54 -0800</bug_when>
    <thetext>Created attachment 300226
Patch for landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1271771</commentid>
    <comment_count>5</comment_count>
      <attachid>300226</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-01-31 10:20:08 -0800</bug_when>
    <thetext>Comment on attachment 300226
Patch for landing.

Clearing flags on attachment: 300226

Committed r211437: &lt;http://trac.webkit.org/changeset/211437&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300219</attachid>
            <date>2017-01-31 07:25:37 -0800</date>
            <delta_ts>2017-02-02 09:50:07 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>castream_wrapper_patch_2.txt</filename>
            <type>text/plain</type>
            <size>18433</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTAxLTMxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBhbiBh
dWRpbyBzdHJlYW0gZGVzY3JpcHRpb24gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzYzOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cywgdGhlIG5ldyBjbGFzcyBpcyBub3Qg
dXNlZCB5ZXQuCisKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmlzUENNKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OkNBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb246OnBsYXRmb3JtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpmb3JtYXQpOgorICAgICAgICAoV2ViQ29yZTo6dG9DQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yPT0pOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OkNB
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Ynl0ZXNQZXJGcmFtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OmJ5dGVzUGVyUGFja2V0KToKKyAgICAgICAgKFdl
YkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Zm9ybWF0RmxhZ3MpOgorICAgICAgICAo
V2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246OnN0cmVhbURlc2NyaXB0aW9uKToK
KwogMjAxNy0wMS0zMSAgWmFuIERvYmVyc2VrICA8emRvYmVyc2VrQGlnYWxpYS5jb20+CiAKICAg
ICAgICAgW0VNRV0gSW5pdERhdGFSZWdpc3RyeSBzaG91bGQgdXNlIGJhc2U2NHVybCBlbmNvZGlu
ZyBhbmQgZGVjb2RpbmcgZm9yIGtleWlkcwpJbmRleDogU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMjExNDI5KQorKysgU291
cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC03MjE4LDYgKzcyMTgsOSBAQAogCQkwNzM3OTRGODE5RjU4NjRFMDBFNUEwNDUgLyog
UlRDTm90aWZpZXJzTW9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSVENO
b3RpZmllcnNNb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3Mzk0RUM3MUJB
QjJDQ0QwMEJFOTlDRCAvKiBNZWRpYURldmljZXNSZXF1ZXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwNzM5NEVDOTFCQUIyQ0Q3MDBCRTk5Q0QgLyogTWVkaWFEZXZp
Y2VzUmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRpYURldmlj
ZXNSZXF1ZXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3M0I4NzU2MUU0MERD
RTUwMDcxQzBFQyAvKiBBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMDczQjg3NTcxRTQwRENGRDAwNzFDMEVDIC8qIENBQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
NzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzNCRTMzRTE3RDE3RTAxMDAyQkQ0MzEg
LyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwNzNCRTMzRjE3RDE3RTAxMDAyQkQ0MzEgLyogSlNOYXZpZ2F0b3JVc2VyTWVkaWEu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3JVc2VyTWVkaWEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDc0NEVDRUIxRTBDNEFFNTAwMEQwOTQ0
IC8qIE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1vY2tSZWFsdGltZUF1ZGlvU291cmNlTWFjLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC0yNDc4NCw2ICsyNDc4Nyw3IEBACiAJCUZEMzE2MDQwMTJCMDI2QTMwMEMx
QTM1OSAvKiBhdWRpbyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CisJCQkJMDczQjg3NTYxRTQwRENFNTAwNzFDMEVDIC8qIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
aCAqLywKIAkJCQlDRDY2OUQ2NTFEMjMyREY0MDA0RDE4NjYgLyogY29jb2EgKi8sCiAJCQkJQ0Qw
RUVFMEQxNDc0M0U0ODAwM0VBRkEyIC8qIGlvcyAqLywKIAkJCQlGRDMxNjBCMDEyQjAyNzA3MDBD
MUEzNTkgLyogbWFjICovLApAQCAtMjQ4NzYsNiArMjQ4ODAsOCBAQAogCQlGRDMxNjBCMDEyQjAy
NzA3MDBDMUEzNTkgLyogbWFjICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uLmNwcCAqLywKKwkJCQkwNzNCODc1ODFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmggKi8sCiAJCQkJRkQzMTYwQjUxMkIwMjcyQTAwQzFBMzU5IC8qIEF1
ZGlvQnVzTWFjLm1tICovLAogCQkJCUZEMzE2MEI2MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRpb0Rl
c3RpbmF0aW9uTWFjLmNwcCAqLywKIAkJCQlGRDMxNjBCNzEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9EZXN0aW5hdGlvbk1hYy5oICovLApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVk
aW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkobm9uZXhpc3RlbnQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCit0eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24gQXVkaW9TdHJl
YW1CYXNpY0Rlc2NyaXB0aW9uOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQbGF0
Zm9ybURlc2NyaXB0aW9uIHsKKyAgICBlbnVtIHsKKyAgICAgICAgTm9uZSwKKyAgICAgICAgQ0FB
dWRpb1N0cmVhbUJhc2ljVHlwZSwKKyAgICB9IHR5cGU7CisgICAgdW5pb24geworICAgICAgICBj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qIGNhQXVkaW9TdHJlYW1CYXNpY0Rlc2Ny
aXB0aW9uOworICAgIH0gZGVzY3JpcHRpb247Cit9OworCitjbGFzcyBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkg
PSBkZWZhdWx0OworCisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0
Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QgPSAwOworCisgICAgZW51bSBQQ01Gb3JtYXQgeworICAg
ICAgICBVbmtub3duLAorICAgICAgICBJbnQxNiwKKyAgICAgICAgRmxvYXQzMiwKKyAgICAgICAg
RmxvYXQ2NAorICAgIH07CisgICAgdmlydHVhbCBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgPSAw
OworCisgICAgdmlydHVhbCBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0ID0gMDsKKworICAgIHZp
cnR1YWwgYm9vbCBpc1BDTSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdCgpICE9IFVua25vd247IH0K
KyAgICB2aXJ0dWFsIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNTaWduZWRJbnRlZ2VyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0Zs
b2F0KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUVuZGlhbigpIGNvbnN0
ID0gMDsKKworICAgIHZpcnR1YWwgdWludDMyX3QgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxz
KCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVsU3RyZWFt
cygpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbHMoKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB1aW50MzJfdCBzYW1wbGVXb3JkU2l6ZSgpIGNvbnN0ID0g
MDsKK307CisKK30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCShub25leGlzdGVu
dCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlv
biAmZGVzYykKKyAgICA6IG1fc3RyZWFtRGVzY3JpcHRpb24oZGVzYykKK3sKK30KKworQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91YmxlIHNhbXBs
ZVJhdGUsIFVJbnQzMiBudW1DaGFubmVscywgUENNRm9ybWF0IGZvcm1hdCwgYm9vbCBpc0ludGVy
bGVhdmVkKQoreworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEID0ga0F1ZGlvRm9y
bWF0TGluZWFyUENNOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJhdGUgPSBzYW1w
bGVSYXRlOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZyYW1lc1BlclBhY2tldCA9IDE7Cisg
ICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bUNoYW5uZWxzOwor
ICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSAwOworICAgIG1fc3RyZWFt
RGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0ID0gMDsKKyAgICBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRGbGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRW5kaWFuIHwga0F1ZGlvRm9y
bWF0RmxhZ0lzUGFja2VkOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVJlc2VydmVkID0gMDsK
KworICAgIGludCB3b3Jkc2l6ZTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRmxv
YXQzMjoKKyAgICAgICAgd29yZHNpemUgPSA0OworICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRGbGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBGbG9hdDY0OgorICAgICAgICB3b3Jkc2l6ZSA9IDg7CisgICAgICAgIG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEludDE2OgorICAgICAgICB3b3Jkc2l6ZSA9IDI7Cisg
ICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZs
YWdJc1NpZ25lZEludGVnZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVW5rbm93bjoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9zdHJlYW1EZXNjcmlw
dGlvbi5tQml0c1BlckNoYW5uZWwgPSB3b3Jkc2l6ZSAqIDg7CisgICAgaWYgKGlzSW50ZXJsZWF2
ZWQpCisgICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSBtX3N0cmVh
bURlc2NyaXB0aW9uLm1CeXRlc1BlclBhY2tldCA9IHdvcmRzaXplICogbnVtQ2hhbm5lbHM7Cisg
ICAgZWxzZSB7CisgICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtB
dWRpb0Zvcm1hdEZsYWdJc05vbkludGVybGVhdmVkOworICAgICAgICBtX3N0cmVhbURlc2NyaXB0
aW9uLm1CeXRlc1BlckZyYW1lID0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQYWNrZXQg
PSB3b3Jkc2l6ZTsKKyAgICB9Cit9CisKK2NvbnN0IFBsYXRmb3JtRGVzY3JpcHRpb24mIENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbjo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAg
bV9wbGF0Zm9ybURlc2NyaXB0aW9uID0geyBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3Ry
ZWFtQmFzaWNUeXBlLCB7IC5jYUF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiA9ICZtX3N0cmVh
bURlc2NyaXB0aW9uIH0gfTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURlc2NyaXB0aW9uOworfQor
CitBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpQQ01Gb3JtYXQgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uOjpmb3JtYXQoKSBjb25zdAoreworICAgIGlmIChtX2Zvcm1hdCAhPSBVbmtub3duKQorICAg
ICAgICByZXR1cm4gbV9mb3JtYXQ7CisKKyAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9y
bWF0SUQgIT0ga0F1ZGlvRm9ybWF0TGluZWFyUENNKQorICAgICAgICByZXR1cm4gVW5rbm93bjsK
KyAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRnJhbWVzUGVyUGFja2V0ICE9IDEpCisgICAg
ICAgIHJldHVybiBVbmtub3duOworICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
ckZyYW1lICE9IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyUGFja2V0KQorICAgICAgICBy
ZXR1cm4gVW5rbm93bjsKKyAgICBpZiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tQml0c1BlckNoYW5u
ZWwgLyBzaXplb2YoZG91YmxlKSA+IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUp
CisgICAgICAgIHJldHVybiBVbmtub3duOworICAgIGlmICghbV9zdHJlYW1EZXNjcmlwdGlvbi5t
Q2hhbm5lbHNQZXJGcmFtZSkKKyAgICAgICAgcmV0dXJuIFVua25vd247CisKKyAgICB1bnNpZ25l
ZCB3b3Jkc2l6ZSA9IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWU7CisgICAgaWYg
KGlzSW50ZXJsZWF2ZWQoKSkgeworICAgICAgICBpZiAod29yZHNpemUgJSBtX3N0cmVhbURlc2Ny
aXB0aW9uLm1DaGFubmVsc1BlckZyYW1lKQorICAgICAgICAgICAgcmV0dXJuIFVua25vd247CisK
KyAgICAgICAgd29yZHNpemUgLz0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFt
ZTsKKyAgICB9CisKKyAgICBpZiAoaXNOYXRpdmVFbmRpYW4oKSAmJiB3b3Jkc2l6ZSAqIHNpemVv
Zihkb3VibGUpID09IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJpdHNQZXJDaGFubmVsKSB7CisgICAg
ICAgIC8vIFBhY2tlZCBhbmQgbmF0aXZlIGVuZGlhbiwgZ29vZAorICAgICAgICBpZiAobV9zdHJl
YW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrTGluZWFyUENNRm9ybWF0RmxhZ0lzRmxvYXQp
IHsKKyAgICAgICAgICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIChr
TGluZWFyUENNRm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlciB8IGtMaW5lYXJQQ01Gb3JtYXRGbGFn
c1NhbXBsZUZyYWN0aW9uTWFzaykpCisgICAgICAgICAgICAgICAgcmV0dXJuIFVua25vd247CisK
KyAgICAgICAgICAgIGlmICh3b3Jkc2l6ZSA9PSBzaXplb2YoZmxvYXQpKQorICAgICAgICAgICAg
ICAgIG1fZm9ybWF0ID0gRmxvYXQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdvcmRzaXplID09
IHNpemVvZihkb3VibGUpKQorICAgICAgICAgICAgICAgIG1fZm9ybWF0ID0gRmxvYXQ2NDsKKwor
ICAgICAgICAgICAgcmV0dXJuIFVua25vd247CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9z
dHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrTGluZWFyUENNRm9ybWF0RmxhZ0lzU2ln
bmVkSW50ZWdlcikgeworICAgICAgICAgICAgdW5zaWduZWQgZnJhY3Rpb25CaXRzID0gKG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0xpbmVhclBDTUZvcm1hdEZsYWdzU2FtcGxl
RnJhY3Rpb25NYXNrKSA+PiBrTGluZWFyUENNRm9ybWF0RmxhZ3NTYW1wbGVGcmFjdGlvblNoaWZ0
OworICAgICAgICAgICAgaWYgKHdvcmRzaXplID09IDIgJiYgIWZyYWN0aW9uQml0cykKKyAgICAg
ICAgICAgICAgICBtX2Zvcm1hdCA9IEludDE2OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0
dXJuIG1fZm9ybWF0OworfQorCitDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Cit7CisgICAgQVNTRVJUKGRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlID09
IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVkaW9TdHJlYW1CYXNpY1R5cGUpOworICAgIHJldHVy
biBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oKmRlc2NyaXB0aW9uLnBsYXRmb3JtRGVzY3JpcHRp
b24oKS5kZXNjcmlwdGlvbi5jYUF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbik7Cit9CisKK2Jv
b2wgQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mIG90aGVyKQoreworICAgIGlmIChvdGhlci5wbGF0Zm9ybURlc2NyaXB0aW9u
KCkudHlwZSAhPSBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gb3BlcmF0b3I9PSgqb3RoZXIucGxh
dGZvcm1EZXNjcmlwdGlvbigpLmRlc2NyaXB0aW9uLmNhQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0
aW9uKTsKK30KKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiYgYSwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJl
dHVybiBhLm1TYW1wbGVSYXRlID09IGIubVNhbXBsZVJhdGUKKyAgICAgICAgJiYgYS5tRm9ybWF0
SUQgPT0gYi5tRm9ybWF0SUQKKyAgICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0
RmxhZ3MKKyAgICAgICAgJiYgYS5tQnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQK
KyAgICAgICAgJiYgYS5tRnJhbWVzUGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAorICAg
ICAgICAmJiBhLm1CeXRlc1BlckZyYW1lID09IGIubUJ5dGVzUGVyRnJhbWUKKyAgICAgICAgJiYg
YS5tQ2hhbm5lbHNQZXJGcmFtZSA9PSBiLm1DaGFubmVsc1BlckZyYW1lCisgICAgICAgICYmIGEu
bUJpdHNQZXJDaGFubmVsID09IGIubUJpdHNQZXJDaGFubmVsOworfQorCit9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5
cGVzLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiYpOworaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVz
Y3JpcHRpb24mIGEsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikgeyByZXR1
cm4gIShhID09IGIpOyB9CisKK2NsYXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiA6IHB1Ymxp
YyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsKK3B1YmxpYzoKKyAgICBDQUF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24oY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJik7CisgICAgQ0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uKGRvdWJsZSwgdWludDMyX3QsIFBDTUZvcm1hdCwgYm9vbCk7CisK
KyAgICBjb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29u
c3QgZmluYWw7CisKKyAgICBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgZmluYWw7CisKKyAgICBk
b3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRp
b24ubVNhbXBsZVJhdGU7IH0KKworICAgIGJvb2wgaXNQQ00oKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRJRCA9PSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ007
IH0KKyAgICBib29sIGlzSW50ZXJsZWF2ZWQoKSBjb25zdCBmaW5hbCB7IHJldHVybiAhKG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlvRm9ybWF0RmxhZ0lzTm9uSW50ZXJs
ZWF2ZWQpOyB9CisgICAgYm9vbCBpc1NpZ25lZEludGVnZXIoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtBdWRpb0Zv
cm1hdEZsYWdJc1NpZ25lZEludGVnZXIpOyB9CisgICAgYm9vbCBpc0Zsb2F0KCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3Mg
JiBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdCk7IH0KKyAgICBib29sIGlzTmF0aXZlRW5kaWFuKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gaXNQQ00oKSAmJiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tRm9y
bWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNCaWdFbmRpYW4pID09IGtBdWRpb0Zvcm1hdEZs
YWdzTmF0aXZlRW5kaWFuOyB9CisKKyAgICB1aW50MzJfdCBudW1iZXJPZkludGVybGVhdmVkQ2hh
bm5lbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkgPyBtX3N0cmVhbURl
c2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lIDogMTsgfQorICAgIHVpbnQzMl90IG51bWJlck9m
Q2hhbm5lbFN0cmVhbXMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBpc0ludGVybGVhdmVkKCkgPyAx
IDogbV9zdHJlYW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZTsgfQorICAgIHVpbnQzMl90
IG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0
aW9uLm1DaGFubmVsc1BlckZyYW1lOyB9CisgICAgdWludDMyX3Qgc2FtcGxlV29yZFNpemUoKSBj
b25zdCBmaW5hbCB7CisgICAgICAgIHJldHVybiAobV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQ
ZXJGcmFtZSA+IDAgJiYgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkpID8gbV9zdHJlYW1E
ZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSAvIG51bWJlck9mSW50ZXJsZWF2ZWRDaGFubmVscygp
IDogIDA7CisgICAgfQorICAgIHVpbnQzMl90IGJ5dGVzUGVyRnJhbWUoKSBjb25zdCB7IHJldHVy
biBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lOyB9CisgICAgdWludDMyX3QgYnl0
ZXNQZXJQYWNrZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
clBhY2tldDsgfQorICAgIHVpbnQzMl90IGZvcm1hdEZsYWdzKCkgY29uc3QgeyByZXR1cm4gbV9z
dHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3M7IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBtX3N0cmVh
bURlc2NyaXB0aW9uID09IG90aGVyOyB9CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvcj09KG90aGVy
KTsgfQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJik7
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVy
KSB7IHJldHVybiAhb3BlcmF0b3I9PShvdGhlcik7IH0KKworICAgIGNvbnN0IEF1ZGlvU3RyZWFt
QmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0cmVhbURl
c2NyaXB0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxjdWxhdGVGb3JtYXQoKTsKKwor
ICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX3N0cmVhbURlc2NyaXB0aW9uOworICAg
IG11dGFibGUgUGxhdGZvcm1EZXNjcmlwdGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247CisgICAg
bXV0YWJsZSBQQ01Gb3JtYXQgbV9mb3JtYXQgeyBVbmtub3duIH07Cit9OworCitDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24gdG9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbiYpOworCit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300226</attachid>
            <date>2017-01-31 09:42:54 -0800</date>
            <delta_ts>2017-01-31 10:20:08 -0800</delta_ts>
            <desc>Patch for landing.</desc>
            <filename>castream_wrapper_patch_4.txt</filename>
            <type>text/plain</type>
            <size>18236</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxMTQyOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE3LTAxLTMxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtNYWNdIEFkZCBhbiBh
dWRpbyBzdHJlYW0gZGVzY3JpcHRpb24gY2xhc3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NzYzOQorCisgICAgICAgIFJldmlld2VkIGJ5IFlvdWVu
biBGYWJsZXQuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzLCB0aGUgbmV3IGNsYXNzIGlzIG5vdCB1
c2VkIHlldC4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6aXNQQ00pOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRp
b1N0cmVhbURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6cGxhdGZvcm1EZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb246OmZvcm1hdCk6CisgICAgICAgIChXZWJDb3JlOjp0b0NBQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I9PSk6CisgICAg
ICAgICogcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV2ViQ29yZTo6Q0FB
dWRpb1N0cmVhbURlc2NyaXB0aW9uOjpieXRlc1BlckZyYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Ynl0ZXNQZXJQYWNrZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpmb3JtYXRGbGFncyk6CisgICAgICAgIChX
ZWJDb3JlOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9yPT0pOgorICAgICAgICAo
V2ViQ29yZTo6Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KFdlYkNvcmU6OkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6c3RyZWFtRGVzY3JpcHRpb24pOgor
CiAyMDE3LTAxLTMxICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbRU1FXSBJbml0RGF0YVJlZ2lzdHJ5IHNob3VsZCB1c2UgYmFzZTY0dXJsIGVuY29kaW5n
IGFuZCBkZWNvZGluZyBmb3Iga2V5aWRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvV2Vi
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAyMTE0MjkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTcyMTgsNiArNzIxOCw5IEBACiAJCTA3Mzc5NEY4MTlGNTg2NEUwMEU1QTA0NSAvKiBS
VENOb3RpZmllcnNNb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJUQ05v
dGlmaWVyc01vY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDczOTRFQzcxQkFC
MkNDRDAwQkU5OUNEIC8qIE1lZGlhRGV2aWNlc1JlcXVlc3QuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFEZXZpY2VzUmVxdWVzdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTA3Mzk0RUM5MUJBQjJDRDcwMEJFOTlDRCAvKiBNZWRpYURldmlj
ZXNSZXF1ZXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRGV2aWNl
c1JlcXVlc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMDczQjg3NTYxRTQwRENF
NTAwNzFDMEVDIC8qIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwNzNCODc1NzFFNDBEQ0ZEMDA3MUMwRUMgLyogQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENBQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTA3
M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTA3M0JFMzNFMTdEMTdFMDEwMDJCRDQzMSAv
KiBKU05hdmlnYXRvclVzZXJNZWRpYS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTA3M0JFMzNGMTdEMTdFMDEwMDJCRDQzMSAvKiBKU05hdmlnYXRvclVzZXJNZWRpYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05hdmlnYXRvclVzZXJNZWRpYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwNzQ0RUNFQjFFMEM0QUU1MDAwRDA5NDQg
LyogTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTW9ja1JlYWx0aW1lQXVkaW9Tb3VyY2VNYWMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTI0Nzg0LDYgKzI0Nzg3LDcgQEAKIAkJRkQzMTYwNDAxMkIwMjZBMzAwQzFB
MzU5IC8qIGF1ZGlvICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQkwNzNCODc1NjFFNDBEQ0U1MDA3MUMwRUMgLyogQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
ICovLAogCQkJCUNENjY5RDY1MUQyMzJERjQwMDREMTg2NiAvKiBjb2NvYSAqLywKIAkJCQlDRDBF
RUUwRDE0NzQzRTQ4MDAzRUFGQTIgLyogaW9zICovLAogCQkJCUZEMzE2MEIwMTJCMDI3MDcwMEMx
QTM1OSAvKiBtYWMgKi8sCkBAIC0yNDg3Niw2ICsyNDg4MCw4IEBACiAJCUZEMzE2MEIwMTJCMDI3
MDcwMEMxQTM1OSAvKiBtYWMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVu
ID0gKAorCQkJCTA3M0I4NzU3MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24uY3BwICovLAorCQkJCTA3M0I4NzU4MUU0MERDRkQwMDcxQzBFQyAvKiBDQUF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24uaCAqLywKIAkJCQlGRDMxNjBCNTEyQjAyNzJBMDBDMUEzNTkgLyogQXVk
aW9CdXNNYWMubW0gKi8sCiAJCQkJRkQzMTYwQjYxMkIwMjcyQTAwQzFBMzU5IC8qIEF1ZGlvRGVz
dGluYXRpb25NYWMuY3BwICovLAogCQkJCUZEMzE2MEI3MTJCMDI3MkEwMEMxQTM1OSAvKiBBdWRp
b0Rlc3RpbmF0aW9uTWFjLmggKi8sCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9BdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShub25leGlzdGVudCkKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL0F1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpbmNsdWRlIDx3dGYvVmFyaWFudC5oPgorCit0eXBlZGVmIHN0cnVjdCBBdWRpb1N0cmVh
bUJhc2ljRGVzY3JpcHRpb24gQXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uOworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0cnVjdCBQbGF0Zm9ybURlc2NyaXB0aW9uIHsKKyAgICBlbnVtIHsK
KyAgICAgICAgTm9uZSwKKyAgICAgICAgQ0FBdWRpb1N0cmVhbUJhc2ljVHlwZSwKKyAgICB9IHR5
cGU7CisgICAgVmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgY29uc3QgQXVkaW9TdHJlYW1CYXNpY0Rl
c2NyaXB0aW9uKj4gZGVzY3JpcHRpb247Cit9OworCitjbGFzcyBBdWRpb1N0cmVhbURlc2NyaXB0
aW9uIHsKK3B1YmxpYzoKKyAgICB2aXJ0dWFsIH5BdWRpb1N0cmVhbURlc2NyaXB0aW9uKCkgPSBk
ZWZhdWx0OworCisgICAgdmlydHVhbCBjb25zdCBQbGF0Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9y
bURlc2NyaXB0aW9uKCkgY29uc3QgPSAwOworCisgICAgZW51bSBQQ01Gb3JtYXQgeworICAgICAg
ICBOb25lLAorICAgICAgICBJbnQxNiwKKyAgICAgICAgRmxvYXQzMiwKKyAgICAgICAgRmxvYXQ2
NAorICAgIH07CisgICAgdmlydHVhbCBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgPSAwOworCisg
ICAgdmlydHVhbCBkb3VibGUgc2FtcGxlUmF0ZSgpIGNvbnN0ID0gMDsKKworICAgIHZpcnR1YWwg
Ym9vbCBpc1BDTSgpIGNvbnN0IHsgcmV0dXJuIGZvcm1hdCgpICE9IE5vbmU7IH0KKyAgICB2aXJ0
dWFsIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNT
aWduZWRJbnRlZ2VyKCkgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc0Zsb2F0KCkgY29u
c3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc05hdGl2ZUVuZGlhbigpIGNvbnN0ID0gMDsKKwor
ICAgIHZpcnR1YWwgdWludDMyX3QgbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxzKCkgY29uc3Qg
PSAwOworICAgIHZpcnR1YWwgdWludDMyX3QgbnVtYmVyT2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHVpbnQzMl90IG51bWJlck9mQ2hhbm5lbHMoKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB1aW50MzJfdCBzYW1wbGVXb3JkU2l6ZSgpIGNvbnN0ID0gMDsKK307CisK
K30KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uY3BwCShub25leGlzdGVudCkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbjo6Q0FBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiAmZGVzYykK
KyAgICA6IG1fc3RyZWFtRGVzY3JpcHRpb24oZGVzYykKK3sKK30KKworQ0FBdWRpb1N0cmVhbURl
c2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oZG91YmxlIHNhbXBsZVJhdGUsIFVJ
bnQzMiBudW1DaGFubmVscywgUENNRm9ybWF0IGZvcm1hdCwgYm9vbCBpc0ludGVybGVhdmVkKQor
eworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdElEID0ga0F1ZGlvRm9ybWF0TGluZWFy
UENNOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJhdGUgPSBzYW1wbGVSYXRlOwor
ICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZyYW1lc1BlclBhY2tldCA9IDE7CisgICAgbV9zdHJl
YW1EZXNjcmlwdGlvbi5tQ2hhbm5lbHNQZXJGcmFtZSA9IG51bUNoYW5uZWxzOworICAgIG1fc3Ry
ZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSAwOworICAgIG1fc3RyZWFtRGVzY3JpcHRp
b24ubUJ5dGVzUGVyUGFja2V0ID0gMDsKKyAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRG
bGFncyA9IGtBdWRpb0Zvcm1hdEZsYWdzTmF0aXZlRW5kaWFuIHwga0F1ZGlvRm9ybWF0RmxhZ0lz
UGFja2VkOworICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubVJlc2VydmVkID0gMDsKKworICAgIGlu
dCB3b3Jkc2l6ZTsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRmxvYXQzMjoKKyAg
ICAgICAgd29yZHNpemUgPSA0OworICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRG
bGFncyB8PSBrQXVkaW9Gb3JtYXRGbGFnSXNGbG9hdDsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBGbG9hdDY0OgorICAgICAgICB3b3Jkc2l6ZSA9IDg7CisgICAgICAgIG1fc3RyZWFtRGVzY3Jp
cHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0OworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEludDE2OgorICAgICAgICB3b3Jkc2l6ZSA9IDI7CisgICAgICAgIG1f
c3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZsYWdJc1NpZ25l
ZEludGVnZXI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTm9uZToKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgbV9zdHJlYW1EZXNjcmlwdGlvbi5tQml0c1Bl
ckNoYW5uZWwgPSB3b3Jkc2l6ZSAqIDg7CisgICAgaWYgKGlzSW50ZXJsZWF2ZWQpCisgICAgICAg
IG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWUgPSBtX3N0cmVhbURlc2NyaXB0aW9u
Lm1CeXRlc1BlclBhY2tldCA9IHdvcmRzaXplICogbnVtQ2hhbm5lbHM7CisgICAgZWxzZSB7Cisg
ICAgICAgIG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzIHw9IGtBdWRpb0Zvcm1hdEZs
YWdJc05vbkludGVybGVhdmVkOworICAgICAgICBtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRlc1Bl
ckZyYW1lID0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQYWNrZXQgPSB3b3Jkc2l6ZTsK
KyAgICB9Cit9CisKK2NvbnN0IFBsYXRmb3JtRGVzY3JpcHRpb24mIENBQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbjo6cGxhdGZvcm1EZXNjcmlwdGlvbigpIGNvbnN0Cit7CisgICAgbV9wbGF0Zm9ybURl
c2NyaXB0aW9uID0geyBQbGF0Zm9ybURlc2NyaXB0aW9uOjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBl
LCAmbV9zdHJlYW1EZXNjcmlwdGlvbiB9OworICAgIHJldHVybiBtX3BsYXRmb3JtRGVzY3JpcHRp
b247Cit9CisKK0F1ZGlvU3RyZWFtRGVzY3JpcHRpb246OlBDTUZvcm1hdCBDQUF1ZGlvU3RyZWFt
RGVzY3JpcHRpb246OmZvcm1hdCgpIGNvbnN0Cit7CisgICAgaWYgKG1fZm9ybWF0ICE9IE5vbmUp
CisgICAgICAgIHJldHVybiBtX2Zvcm1hdDsKKworICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRJRCAhPSBrQXVkaW9Gb3JtYXRMaW5lYXJQQ00pCisgICAgICAgIHJldHVybiBOb25l
OworICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1GcmFtZXNQZXJQYWNrZXQgIT0gMSkKKyAg
ICAgICAgcmV0dXJuIE5vbmU7CisgICAgaWYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVy
RnJhbWUgIT0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJQYWNrZXQpCisgICAgICAgIHJl
dHVybiBOb25lOworICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1CaXRzUGVyQ2hhbm5lbCAv
IHNpemVvZihkb3VibGUpID4gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZSkKKyAg
ICAgICAgcmV0dXJuIE5vbmU7CisgICAgaWYgKCFtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVs
c1BlckZyYW1lKQorICAgICAgICByZXR1cm4gTm9uZTsKKworICAgIHVuc2lnbmVkIHdvcmRzaXpl
ID0gbV9zdHJlYW1EZXNjcmlwdGlvbi5tQnl0ZXNQZXJGcmFtZTsKKyAgICBpZiAoaXNJbnRlcmxl
YXZlZCgpKSB7CisgICAgICAgIGlmICh3b3Jkc2l6ZSAlIG1fc3RyZWFtRGVzY3JpcHRpb24ubUNo
YW5uZWxzUGVyRnJhbWUpCisgICAgICAgICAgICByZXR1cm4gTm9uZTsKKworICAgICAgICB3b3Jk
c2l6ZSAvPSBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lOworICAgIH0KKwor
ICAgIGlmIChpc05hdGl2ZUVuZGlhbigpICYmIHdvcmRzaXplICogc2l6ZW9mKGRvdWJsZSkgPT0g
bV9zdHJlYW1EZXNjcmlwdGlvbi5tQml0c1BlckNoYW5uZWwpIHsKKyAgICAgICAgLy8gUGFja2Vk
IGFuZCBuYXRpdmUgZW5kaWFuLCBnb29kCisgICAgICAgIGlmIChtX3N0cmVhbURlc2NyaXB0aW9u
Lm1Gb3JtYXRGbGFncyAmIGtMaW5lYXJQQ01Gb3JtYXRGbGFnSXNGbG9hdCkgeworICAgICAgICAg
ICAgaWYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYgKGtMaW5lYXJQQ01Gb3Jt
YXRGbGFnSXNTaWduZWRJbnRlZ2VyIHwga0xpbmVhclBDTUZvcm1hdEZsYWdzU2FtcGxlRnJhY3Rp
b25NYXNrKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZTsKKworICAgICAgICAgICAgaWYg
KHdvcmRzaXplID09IHNpemVvZihmbG9hdCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1fZm9y
bWF0ID0gRmxvYXQzMjsKKyAgICAgICAgICAgIGVsc2UgaWYgKHdvcmRzaXplID09IHNpemVvZihk
b3VibGUpKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2Zvcm1hdCA9IEZsb2F0NjQ7CisKKyAg
ICAgICAgICAgIHJldHVybiBOb25lOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fc3RyZWFt
RGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0xpbmVhclBDTUZvcm1hdEZsYWdJc1NpZ25lZElu
dGVnZXIpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGZyYWN0aW9uQml0cyA9IChtX3N0cmVhbURl
c2NyaXB0aW9uLm1Gb3JtYXRGbGFncyAmIGtMaW5lYXJQQ01Gb3JtYXRGbGFnc1NhbXBsZUZyYWN0
aW9uTWFzaykgPj4ga0xpbmVhclBDTUZvcm1hdEZsYWdzU2FtcGxlRnJhY3Rpb25TaGlmdDsKKyAg
ICAgICAgICAgIGlmICh3b3Jkc2l6ZSA9PSAyICYmICFmcmFjdGlvbkJpdHMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fZm9ybWF0ID0gSW50MTY7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gTm9uZTsKK30KKworYm9vbCBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb246Om9wZXJhdG9y
PT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpCit7CisgICAgaWYgKG90aGVy
LnBsYXRmb3JtRGVzY3JpcHRpb24oKS50eXBlICE9IFBsYXRmb3JtRGVzY3JpcHRpb246OkNBQXVk
aW9TdHJlYW1CYXNpY1R5cGUpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBv
cGVyYXRvcj09KCpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihv
dGhlci5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKK30KKworYm9vbCBvcGVy
YXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYSwgY29uc3QgQXVkaW9T
dHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBiKQoreworICAgIHJldHVybiBhLm1TYW1wbGVSYXRlID09
IGIubVNhbXBsZVJhdGUKKyAgICAgICAgJiYgYS5tRm9ybWF0SUQgPT0gYi5tRm9ybWF0SUQKKyAg
ICAgICAgJiYgYS5tRm9ybWF0RmxhZ3MgPT0gYi5tRm9ybWF0RmxhZ3MKKyAgICAgICAgJiYgYS5t
Qnl0ZXNQZXJQYWNrZXQgPT0gYi5tQnl0ZXNQZXJQYWNrZXQKKyAgICAgICAgJiYgYS5tRnJhbWVz
UGVyUGFja2V0ID09IGIubUZyYW1lc1BlclBhY2tldAorICAgICAgICAmJiBhLm1CeXRlc1BlckZy
YW1lID09IGIubUJ5dGVzUGVyRnJhbWUKKyAgICAgICAgJiYgYS5tQ2hhbm5lbHNQZXJGcmFtZSA9
PSBiLm1DaGFubmVsc1BlckZyYW1lCisgICAgICAgICYmIGEubUJpdHNQZXJDaGFubmVsID09IGIu
bUJpdHNQZXJDaGFubmVsOworfQorCit9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9tYWMvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vbWFjL0NBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCShu
b25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL21hYy9DQUF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJBdWRpb1N0cmVhbURlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSA8Q29yZUF1ZGlvL0NvcmVBdWRpb1R5cGVzLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBvcGVyYXRvcj09KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlw
dGlvbiYsIGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYpOworaW5saW5lIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24mIGEsIGNvbnN0IEF1
ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgYikgeyByZXR1cm4gIShhID09IGIpOyB9CisKK2Ns
YXNzIENBQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBmaW5hbCA6IHB1YmxpYyBBdWRpb1N0cmVhbURl
c2NyaXB0aW9uIHsKK3B1YmxpYzoKKyAgICBDQUF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3Qg
QXVkaW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJik7CisgICAgQ0FBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGRvdWJsZSwgdWludDMyX3QsIFBDTUZvcm1hdCwgYm9vbCk7CisKKyAgICBjb25zdCBQbGF0
Zm9ybURlc2NyaXB0aW9uJiBwbGF0Zm9ybURlc2NyaXB0aW9uKCkgY29uc3QgZmluYWw7CisKKyAg
ICBQQ01Gb3JtYXQgZm9ybWF0KCkgY29uc3QgZmluYWw7CisKKyAgICBkb3VibGUgc2FtcGxlUmF0
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubVNhbXBsZVJhdGU7
IH0KKworICAgIGJvb2wgaXNJbnRlcmxlYXZlZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICEobV9z
dHJlYW1EZXNjcmlwdGlvbi5tRm9ybWF0RmxhZ3MgJiBrQXVkaW9Gb3JtYXRGbGFnSXNOb25JbnRl
cmxlYXZlZCk7IH0KKyAgICBib29sIGlzU2lnbmVkSW50ZWdlcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIGlzUENNKCkgJiYgKG1fc3RyZWFtRGVzY3JpcHRpb24ubUZvcm1hdEZsYWdzICYga0F1ZGlv
Rm9ybWF0RmxhZ0lzU2lnbmVkSW50ZWdlcik7IH0KKyAgICBib29sIGlzRmxvYXQoKSBjb25zdCBm
aW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFn
cyAmIGtBdWRpb0Zvcm1hdEZsYWdJc0Zsb2F0KTsgfQorICAgIGJvb2wgaXNOYXRpdmVFbmRpYW4o
KSBjb25zdCBmaW5hbCB7IHJldHVybiBpc1BDTSgpICYmIChtX3N0cmVhbURlc2NyaXB0aW9uLm1G
b3JtYXRGbGFncyAmIGtBdWRpb0Zvcm1hdEZsYWdJc0JpZ0VuZGlhbikgPT0ga0F1ZGlvRm9ybWF0
RmxhZ3NOYXRpdmVFbmRpYW47IH0KKworICAgIHVpbnQzMl90IG51bWJlck9mSW50ZXJsZWF2ZWRD
aGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/IG1fc3RyZWFt
RGVzY3JpcHRpb24ubUNoYW5uZWxzUGVyRnJhbWUgOiAxOyB9CisgICAgdWludDMyX3QgbnVtYmVy
T2ZDaGFubmVsU3RyZWFtcygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIGlzSW50ZXJsZWF2ZWQoKSA/
IDEgOiBtX3N0cmVhbURlc2NyaXB0aW9uLm1DaGFubmVsc1BlckZyYW1lOyB9CisgICAgdWludDMy
X3QgbnVtYmVyT2ZDaGFubmVscygpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc3RyZWFtRGVzY3Jp
cHRpb24ubUNoYW5uZWxzUGVyRnJhbWU7IH0KKyAgICB1aW50MzJfdCBzYW1wbGVXb3JkU2l6ZSgp
IGNvbnN0IGZpbmFsIHsKKyAgICAgICAgcmV0dXJuIChtX3N0cmVhbURlc2NyaXB0aW9uLm1CeXRl
c1BlckZyYW1lID4gMCAmJiBudW1iZXJPZkludGVybGVhdmVkQ2hhbm5lbHMoKSkgPyBtX3N0cmVh
bURlc2NyaXB0aW9uLm1CeXRlc1BlckZyYW1lIC8gbnVtYmVyT2ZJbnRlcmxlYXZlZENoYW5uZWxz
KCkgOiAgMDsKKyAgICB9CisgICAgdWludDMyX3QgYnl0ZXNQZXJGcmFtZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVzUGVyRnJhbWU7IH0KKyAgICB1aW50MzJfdCBi
eXRlc1BlclBhY2tldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RyZWFtRGVzY3JpcHRpb24ubUJ5dGVz
UGVyUGFja2V0OyB9CisgICAgdWludDMyX3QgZm9ybWF0RmxhZ3MoKSBjb25zdCB7IHJldHVybiBt
X3N0cmVhbURlc2NyaXB0aW9uLm1Gb3JtYXRGbGFnczsgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuIG1fc3Ry
ZWFtRGVzY3JpcHRpb24gPT0gb3RoZXI7IH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXVk
aW9TdHJlYW1CYXNpY0Rlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChv
dGhlcik7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biYpOworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBv
dGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KKworICAgIGNvbnN0IEF1ZGlv
U3RyZWFtQmFzaWNEZXNjcmlwdGlvbiYgc3RyZWFtRGVzY3JpcHRpb24oKSB7IHJldHVybiBtX3N0
cmVhbURlc2NyaXB0aW9uOyB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBjYWxjdWxhdGVGb3JtYXQo
KTsKKworICAgIEF1ZGlvU3RyZWFtQmFzaWNEZXNjcmlwdGlvbiBtX3N0cmVhbURlc2NyaXB0aW9u
OworICAgIG11dGFibGUgUGxhdGZvcm1EZXNjcmlwdGlvbiBtX3BsYXRmb3JtRGVzY3JpcHRpb247
CisgICAgbXV0YWJsZSBQQ01Gb3JtYXQgbV9mb3JtYXQgeyBOb25lIH07Cit9OworCitpbmxpbmUg
Q0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHRvQ0FBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0
IEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIEFTU0VSVChkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkudHlwZSA9PSBQbGF0Zm9ybURlc2NyaXB0aW9u
OjpDQUF1ZGlvU3RyZWFtQmFzaWNUeXBlKTsKKyAgICByZXR1cm4gQ0FBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uKCpXVEY6OmdldDxjb25zdCBBdWRpb1N0cmVhbUJhc2ljRGVzY3JpcHRpb24qPihkZXNj
cmlwdGlvbi5wbGF0Zm9ybURlc2NyaXB0aW9uKCkuZGVzY3JpcHRpb24pKTsKK30KKworfQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>