<?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>200512</bug_id>
          
          <creation_ts>2019-08-07 11:49:36 -0700</creation_ts>
          <short_desc>[WHLSL] Metal code generation takes a long time uniquing UnnamedTypes</short_desc>
          <delta_ts>2022-02-28 03:30:44 -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>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1559224</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-07 11:49:36 -0700</bug_when>
    <thetext>[WHLSL] Metal code generation takes a long time uniquing UnnamedTypes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559230</commentid>
    <comment_count>1</comment_count>
      <attachid>375728</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-07 11:59:36 -0700</bug_when>
    <thetext>Created attachment 375728
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559324</commentid>
    <comment_count>2</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-07 14:40:09 -0700</bug_when>
    <thetext>This is about a ~1ms improvement (10%) on the metal codegen phase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559367</commentid>
    <comment_count>3</comment_count>
      <attachid>375728</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-07 16:27:17 -0700</bug_when>
    <thetext>Comment on attachment 375728
Patch

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

Nice. r=me

&gt; Source/WebCore/ChangeLog:13
&gt; +        the UnnamedType subtree, we should probably do it for the entire AST in a future
&gt; +        change.

Yeah I think this will be a huge speedup. Walking the entire AST on compute_boids is like ~1ms. I think it will be much faster once we remove virtual function calls for AST node type checks.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLPrepare.cpp:66
&gt; +static constexpr bool dumpPhaseTimes = true;

please revert

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:70
&gt; +    Kind kind() const { return m_kind; }
&gt; +    bool isTypeReference() const { return m_kind == Kind::TypeReference; }
&gt; +    bool isPointerType() const { return m_kind == Kind::PointerType; }
&gt; +    bool isArrayReferenceType() const { return m_kind == Kind::ArrayReferenceType; }
&gt; +    bool isArrayType() const { return m_kind == Kind::ArrayType; }
&gt; +    bool isReferenceType() const { return isPointerType() || isArrayReferenceType(); }

nice

&gt; Source/WebCore/Modules/webgpu/WHLSL/AST/WHLSLUnnamedType.h:76
&gt; +    unsigned hash() const;
&gt; +    bool operator==(const UnnamedType&amp;) const;

It is worth defining these in an inline file somewhere since they&apos;re super small functions? Maybe we could do this in a follow up</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559368</commentid>
    <comment_count>4</comment_count>
      <attachid>375728</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-08-07 16:28:42 -0700</bug_when>
    <thetext>Comment on attachment 375728
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:13
&gt;&gt; +        change.
&gt; 
&gt; Yeah I think this will be a huge speedup. Walking the entire AST on compute_boids is like ~1ms. I think it will be much faster once we remove virtual function calls for AST node type checks.

We should also consider uniquing types right after name resolution runs. Then we make type checking faster too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559380</commentid>
    <comment_count>5</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2019-08-07 16:47:51 -0700</bug_when>
    <thetext>Committed r248395: &lt;https://trac.webkit.org/changeset/248395&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1559381</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-08-07 16:48:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/54056881&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>375728</attachid>
            <date>2019-08-07 11:59:36 -0700</date>
            <delta_ts>2022-02-28 03:30:44 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-200512-20190807115935.patch</filename>
            <type>text/plain</type>
            <size>47162</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0ODM3OSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBACisyMDE5LTA4LTA3ICBTYW0gV2Vp
bmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xdIE1ldGFsIGNvZGUgZ2Vu
ZXJhdGlvbiB0YWtlcyBhIGxvbmcgdGltZSB1bmlxdWluZyBVbm5hbWVkVHlwZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIwMDUxMgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluc3RlYWQgb2YgdXNpbmcg
YSB0cmllIGZvciB1bm5hbWVkIHR5cGUgdW5pcXVpbmcsIHVzZSB0aGUgc2FtZSB0ZWNobmlxdWUg
dXNlZAorICAgICAgICBpbiBTeW50aGVzaXplQ29uc3RydWN0b3JzIGFuZCB1c2UgYSBIYXNoTWFw
IG9mIFVubmFtZWRUeXBlS2V5cy4gVG8gbWFrZSB0aGlzCisgICAgICAgIHByb2ZpdGFibGUsIHdl
IGFsc28gbmVlZCB0byBkZXZpcnR1YWxpemUgdGhlIGhhc2ggYW5kIGVxdWFsaXR5IGZ1bmN0aW9u
cyBvbgorICAgICAgICBVbm5hbWVkVHlwZSwgaW5zdGVhZCB1c2luZyBhbiBlbnVtICsgc3dpdGNo
LiBXaGlsZSB0aGlzIGNoYW5nZSBvbmx5IGRldmlydHVhbGl6ZXMKKyAgICAgICAgdGhlIFVubmFt
ZWRUeXBlIHN1YnRyZWUsIHdlIHNob3VsZCBwcm9iYWJseSBkbyBpdCBmb3IgdGhlIGVudGlyZSBB
U1QgaW4gYSBmdXR1cmUKKyAgICAgICAgY2hhbmdlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJn
cHUvV0hMU0wvQVNUL1dITFNMQXJyYXlSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgICogTW9kdWxl
cy93ZWJncHUvV0hMU0wvQVNUL1dITFNMQXJyYXlUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dl
YmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmg6CisgICAgICAgICogTW9kdWxlcy93
ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oOgorICAgICAgICAqIE1vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpVbm5hbWVkVHlwZTo6aGFzaCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpXSExTTDo6QVNUOjpVbm5hbWVkVHlwZTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAg
ICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmg6CisgICAg
ICAgIERldmlydHVhbGl6ZSBoYXNoLCBvcGVyYXRvcj09IGFuZCB0eXBlIHByZWRpY2F0ZXMuCisK
KyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZUhhc2gu
aDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6VW5uYW1lZFR5cGVLZXk6OlVubmFt
ZWRUeXBlS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFN5bnRoZXNp
emVDb25zdHJ1Y3RvcnMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlVubmFtZWRUeXBl
S2V5OjpVbm5hbWVkVHlwZUtleSk6IERlbGV0ZWQuCisgICAgICAgIE1vdmVkIFVubmFtZWRUeXBl
S2V5IGludG8gaXQncyBvd24gaGVhZGVyIGZyb20gV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3Jz
LmNwcAorICAgICAgICAKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TFR5cGVOYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkJhc2VUeXBl
TmFtZU5vZGU6OkJhc2VUeXBlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpCYXNlVHlwZU5hbWVOb2RlOjpraW5kKToKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpN
ZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNSZWZlcmVuY2VUeXBlTmFtZU5vZGUgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpCYXNlVHlwZU5hbWVOb2RlOjppc1BvaW50
ZXJUeXBlTmFtZU5vZGUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpC
YXNlVHlwZU5hbWVOb2RlOjppc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6QmFzZVR5cGVOYW1lTm9kZTo6aXNBcnJheVR5
cGVOYW1lTm9kZSBjb25zdCk6CisgICAgICAgIERldmlydHVhbGl6ZSBCYXNlVHlwZU5hbWVOb2Rl
IGFzIHdlbGwuIEluIGEgZnV0dXJlIGNoYW5nZSwgd2Ugc2hvdWxkIGNvbnNpZGVyIHJlbW92aW5n
CisgICAgICAgIHRoaXMgY2xhc3MgZW50aXJlbHkgYW5kIGluc3RlYWQgbWFwcGluZyBkaXJlY3Rs
eSB0byBhIHBhcmVudC9tYW5nbGVkIG5hbWUgcGFpci4KKyAKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpNZXRhbDo6VHlwZU5hbWVyOjp2aXNpdCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
TWV0YWw6OlR5cGVOYW1lcjo6ZmluZCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1l
dGFsOjpwYXJlbnQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6
Omluc2VydCk6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OlR5cGVOYW1lcjo6ZW1p
dFVubmFtZWRUeXBlRGVmaW5pdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6
OlR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURlZmluaXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpmaW5kSW5WZWN0b3IpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpmaW5kKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OldITFNMOjpNZXRhbDo6VHlwZU5hbWVyOjplbWl0QWxsVW5uYW1lZFR5cGVEZWZpbml0aW9ucyk6
IERlbGV0ZWQuCisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBl
TmFtZXIuaDoKKyAgICAgICAgU3dpdGNoIGZyb20gYSBWZWN0b3IgYmFzZWQgdHJpZSB0byBhIEhh
c2hNYXAgZm9yIFVubmFtZWRUeXBlIHVuaXF1aW5nLiBBbHNvCisgICAgICAgIHVzZSBVbm5hbWVk
VHlwZTo6S2luZCB3aGVyZSBwb3NzaWJsZSB3aXRoIHN3aXRjaCBzdGF0ZW1lbnRzIHRvIGNsYXJp
ZnkgY29kZS4KKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoK
KyAgICAgICAgQWRkIG5ldyBmaWxlcy4KKwogMjAxOS0wOC0wNyAgU2FhbSBCYXJhdGkgIDxzYmFy
YXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBbV0hMU0xdIGNhY2hlIHJlc3VsdHMgb2YgYXJndW1l
bnRUeXBlRm9yQW5kT3ZlcmxvYWQgaW5zaWRlIENoZWNrZXIKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJlcGFyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQcmVwYXJlLmNwcAkocmV2aXNp
b24gMjQ4MzM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
cmVwYXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCBzdGF0aWMgY29uc3Rl
eHByIGJvb2wgZHVtcEFTVEFmdGVyUGFyc2luCiBzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcEFT
VEF0RW5kID0gZmFsc2U7CiBzdGF0aWMgY29uc3RleHByIGJvb2wgYWx3YXlzRHVtcFBhc3NGYWls
dXJlcyA9IGZhbHNlOwogc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQYXNzRmFpbHVyZSA9IGR1
bXBBU1RCZWZvcmVFYWNoUGFzcyB8fCBkdW1wQVNUQWZ0ZXJQYXJzaW5nIHx8IGR1bXBBU1RBdEVu
ZCB8fCBhbHdheXNEdW1wUGFzc0ZhaWx1cmVzOwotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBQ
aGFzZVRpbWVzID0gZmFsc2U7CitzdGF0aWMgY29uc3RleHByIGJvb2wgZHVtcFBoYXNlVGltZXMg
PSB0cnVlOwogCiBzdGF0aWMgY29uc3RleHByIGJvb2wgcGFyc2VGdWxsU3RhbmRhcmRMaWJyYXJ5
ID0gZmFsc2U7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMU3ludGhlc2l6ZUNvbnN0cnVjdG9ycy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAko
cmV2aXNpb24gMjQ4MzM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
V0hMU0xTeW50aGVzaXplQ29uc3RydWN0b3JzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiAr
MzgsNyBAQAogI2luY2x1ZGUgIldITFNMUHJvZ3JhbS5oIgogI2luY2x1ZGUgIldITFNMU3RydWN0
dXJlRGVmaW5pdGlvbi5oIgogI2luY2x1ZGUgIldITFNMVHlwZVJlZmVyZW5jZS5oIgorI2luY2x1
ZGUgIldITFNMVW5uYW1lZFR5cGVIYXNoLmgiCiAjaW5jbHVkZSAiV0hMU0xWYXJpYWJsZURlY2xh
cmF0aW9uLmgiCiAjaW5jbHVkZSAiV0hMU0xWaXNpdG9yLmgiCiAKQEAgLTQ1LDQxICs0Niw2IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogbmFtZXNwYWNlIFdITFNMIHsKIAotY2xhc3MgVW5uYW1l
ZFR5cGVLZXkgewotcHVibGljOgotICAgIFVubmFtZWRUeXBlS2V5KCkgPSBkZWZhdWx0OwotICAg
IFVubmFtZWRUeXBlS2V5KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKLSAgICB7Ci0g
ICAgICAgIG1fdHlwZSA9IGJpdHdpc2VfY2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nh
c3Q8dWludHB0cl90PigxKSk7Ci0gICAgfQotCi0gICAgVW5uYW1lZFR5cGVLZXkoQVNUOjpVbm5h
bWVkVHlwZSYgdHlwZSkKLSAgICAgICAgOiBtX3R5cGUoJnR5cGUpCi0gICAgeyB9Ci0KLSAgICBi
b29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuICFtX3R5cGU7IH0KLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IGJpdHdpc2Vf
Y2FzdDxBU1Q6OlVubmFtZWRUeXBlKj4oc3RhdGljX2Nhc3Q8dWludHB0cl90PigxKSk7IH0KLQot
ICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3R5cGUtPmhhc2goKTsgfQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBVbm5hbWVkVHlwZUtleSYgb3RoZXIpIGNvbnN0IHsgcmV0
dXJuICptX3R5cGUgPT0gKm90aGVyLm1fdHlwZTsgfQotICAgIEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlKCkgY29uc3QgeyByZXR1cm4gKm1fdHlwZTsgfQotCi0gICAgc3RydWN0IEhhc2gg
ewotICAgICAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBVbm5hbWVkVHlwZUtleSYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Ci0gICAgICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFVubmFtZWRUeXBlS2V5JiBhLCBjb25zdCBVbm5hbWVkVHlwZUtleSYgYikgeyByZXR1cm4gYSA9
PSBiOyB9Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gZmFsc2U7Ci0gICAgICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1pl
cm8gPSB0cnVlOwotICAgIH07Ci0KLSAgICBzdHJ1Y3QgVHJhaXRzIDogcHVibGljIFdURjo6U2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPFVubmFtZWRUeXBlS2V5PiB7Ci0gICAgICAgIHN0YXRpYyBjb25z
dCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNFbXB0eVZhbHVlKGNvbnN0IFVubmFtZWRUeXBlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5p
c0VtcHR5VmFsdWUoKTsgfQotICAgIH07Ci0KLXByaXZhdGU6Ci0gICAgQVNUOjpVbm5hbWVkVHlw
ZSogbV90eXBlIHsgbnVsbHB0ciB9OwotfTsKLQogY2xhc3MgRmluZEFsbFR5cGVzIDogcHVibGlj
IFZpc2l0b3IgewogcHVibGljOgogICAgIHZpcnR1YWwgfkZpbmRBbGxUeXBlcygpID0gZGVmYXVs
dDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTEFy
cmF5UmVmZXJlbmNlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML0FTVC9XSExTTEFycmF5UmVmZXJlbmNlVHlwZS5oCShyZXZpc2lvbiAyNDgz
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJh
eVJlZmVyZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsMTMgKzQwLDEzIEBAIG5hbWVz
cGFjZSBXSExTTCB7CiAKIG5hbWVzcGFjZSBBU1QgewogCi1jbGFzcyBBcnJheVJlZmVyZW5jZVR5
cGUgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CitjbGFzcyBBcnJheVJlZmVyZW5jZVR5cGUgZmlu
YWwgOiBwdWJsaWMgUmVmZXJlbmNlVHlwZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlSZWZlcmVuY2VUeXBlKTsKICAgICB1c2lu
ZyBCYXNlID0gUmVmZXJlbmNlVHlwZTsKIAogICAgIEFycmF5UmVmZXJlbmNlVHlwZShDb2RlTG9j
YXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBhZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlw
ZT4gZWxlbWVudFR5cGUpCi0gICAgICAgIDogQmFzZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBX
VEZNb3ZlKGVsZW1lbnRUeXBlKSkKKyAgICAgICAgOiBCYXNlKGxvY2F0aW9uLCBhZGRyZXNzU3Bh
Y2UsIFdURk1vdmUoZWxlbWVudFR5cGUpLCBLaW5kOjpBcnJheVJlZmVyZW5jZVR5cGUpCiAgICAg
ewogICAgIH0KIHB1YmxpYzoKQEAgLTU3LDI4ICs1NywyMCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0
dWFsIH5BcnJheVJlZmVyZW5jZVR5cGUoKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIGlzQXJyYXlS
ZWZlcmVuY2VUeXBlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAg
ICAgewogICAgICAgICByZXR1cm4gdGhpcy0+QmFzZTo6aGFzaCgpIF4gU3RyaW5nSGFzaGVyOjpj
b21wdXRlTGl0ZXJhbEhhc2goImFycmF5Iik7CiAgICAgfQogCi0gICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFVubmFtZWRUeXBlJiBvdGhlcikgY29uc3Qgb3ZlcnJpZGUKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgQXJyYXlSZWZlcmVuY2VUeXBlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAg
ICAgIGlmICghaXM8QXJyYXlSZWZlcmVuY2VUeXBlPihvdGhlcikpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGFkZHJlc3NTcGFjZSgpID09IGRvd25jYXN0PEFy
cmF5UmVmZXJlbmNlVHlwZT4ob3RoZXIpLmFkZHJlc3NTcGFjZSgpCi0gICAgICAgICAgICAmJiBl
bGVtZW50VHlwZSgpID09IGRvd25jYXN0PEFycmF5UmVmZXJlbmNlVHlwZT4ob3RoZXIpLmVsZW1l
bnRUeXBlKCk7CisgICAgICAgIHJldHVybiBhZGRyZXNzU3BhY2UoKSA9PSBvdGhlci5hZGRyZXNz
U3BhY2UoKSAmJiBlbGVtZW50VHlwZSgpID09IG90aGVyLmVsZW1lbnRUeXBlKCk7CiAgICAgfQog
CiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKICAgICB7CiAgICAgICAgIHJl
dHVybiBtYWtlU3RyaW5nKGVsZW1lbnRUeXBlKCkudG9TdHJpbmcoKSwgIltdIik7CiAgICAgfQot
Ci1wcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgQVNUCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xBcnJheVR5cGUu
aAkocmV2aXNpb24gMjQ4MzM2KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMQXJyYXlUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAK
ICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9VbmlxdWVSZWYuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdD
b25jYXRlbmF0ZU51bWJlcnMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDUsNyArNDYsNyBAQCBjbGFzcyBBcnJheVR5cGUgZmlu
YWwgOiBwdWJsaWMgVW5uYW1lZFR5CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQXJyYXlUeXBlKTsKICAgICBBcnJheVR5cGUoQ29kZUxvY2F0
aW9uIGxvY2F0aW9uLCBSZWY8VW5uYW1lZFR5cGU+IGVsZW1lbnRUeXBlLCB1bnNpZ25lZCBudW1F
bGVtZW50cykKLSAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKKyAgICAgICAgOiBVbm5h
bWVkVHlwZShsb2NhdGlvbiwgS2luZDo6QXJyYXlUeXBlKQogICAgICAgICAsIG1fZWxlbWVudFR5
cGUoV1RGTW92ZShlbGVtZW50VHlwZSkpCiAgICAgICAgICwgbV9udW1FbGVtZW50cyhudW1FbGVt
ZW50cykKICAgICB7CkBAIC01OSwyNCArNjAsMTggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB+
QXJyYXlUeXBlKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQogICAgIGNvbnN0IFVubmFtZWRUeXBlJiB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9lbGVtZW50VHlwZTsgfQogICAgIFVubmFtZWRUeXBlJiB0eXBlKCkg
eyByZXR1cm4gbV9lbGVtZW50VHlwZTsgfQogICAgIHVuc2lnbmVkIG51bUVsZW1lbnRzKCkgY29u
c3QgeyByZXR1cm4gbV9udW1FbGVtZW50czsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
IG92ZXJyaWRlCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1
cm4gV1RGOjpJbnRIYXNoPHVuc2lnbmVkPjo6aGFzaChtX251bUVsZW1lbnRzKSBeIG1fZWxlbWVu
dFR5cGUtPmhhc2goKTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1l
ZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBB
cnJheVR5cGUmIG90aGVyKSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFpczxBcnJheVR5cGU+
KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gbnVt
RWxlbWVudHMoKSA9PSBkb3duY2FzdDxBcnJheVR5cGU+KG90aGVyKS5udW1FbGVtZW50cygpCi0g
ICAgICAgICAgICAmJiB0eXBlKCkgPT0gZG93bmNhc3Q8QXJyYXlUeXBlPihvdGhlcikudHlwZSgp
OworICAgICAgICByZXR1cm4gbnVtRWxlbWVudHMoKSA9PSBvdGhlci5udW1FbGVtZW50cygpICYm
IHR5cGUoKSA9PSBvdGhlci50eXBlKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkg
Y29uc3Qgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTFBvaW50ZXJUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRlclR5cGUuaAkocmV2aXNpb24gMjQ4MzM2
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMUG9pbnRl
clR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBQb2ludGVyVHlw
ZSBmaW5hbCA6IHB1YmxpYyBSZWZlcmVuCiAgICAgdXNpbmcgQmFzZSA9IFJlZmVyZW5jZVR5cGU7
CiAKICAgICBQb2ludGVyVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24sIEFkZHJlc3NTcGFjZSBh
ZGRyZXNzU3BhY2UsIFJlZjxVbm5hbWVkVHlwZT4gZWxlbWVudFR5cGUpCi0gICAgICAgIDogQmFz
ZShsb2NhdGlvbiwgYWRkcmVzc1NwYWNlLCBXVEZNb3ZlKGVsZW1lbnRUeXBlKSkKKyAgICAgICAg
OiBCYXNlKGxvY2F0aW9uLCBhZGRyZXNzU3BhY2UsIFdURk1vdmUoZWxlbWVudFR5cGUpLCBLaW5k
OjpQb2ludGVyVHlwZSkKICAgICB7CiAgICAgfQogCkBAIC01OCwyMCArNTgsMTQgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCB+UG9pbnRlclR5cGUoKSA9IGRlZmF1bHQ7CiAKLSAgICBib29sIGlz
UG9pbnRlclR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAg
ICB7CiAgICAgICAgIHJldHVybiB0aGlzLT5CYXNlOjpoYXNoKCkgXiBTdHJpbmdIYXNoZXI6OmNv
bXB1dGVMaXRlcmFsSGFzaCgicG9pbnRlciIpOwogICAgIH0KIAotICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBVbm5hbWVkVHlwZSYgb3RoZXIpIGNvbnN0IG92ZXJyaWRlCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFBvaW50ZXJUeXBlJiBvdGhlcikgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
ICghaXM8UG9pbnRlclR5cGU+KG90aGVyKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICByZXR1cm4gYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8UG9pbnRlclR5cGU+KG90
aGVyKS5hZGRyZXNzU3BhY2UoKQotICAgICAgICAgICAgJiYgZWxlbWVudFR5cGUoKSA9PSBkb3du
Y2FzdDxQb2ludGVyVHlwZT4ob3RoZXIpLmVsZW1lbnRUeXBlKCk7CisgICAgICAgIHJldHVybiBh
ZGRyZXNzU3BhY2UoKSA9PSBvdGhlci5hZGRyZXNzU3BhY2UoKSAmJiBlbGVtZW50VHlwZSgpID09
IG90aGVyLmVsZW1lbnRUeXBlKCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHRvU3RyaW5nKCkgY29u
c3Qgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FT
VC9XSExTTFJlZmVyZW5jZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xSZWZlcmVuY2VUeXBlLmgJKHJldmlzaW9uIDI0ODMz
NikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFJlZmVy
ZW5jZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDQsMjMgKzQ0LDIwIEBAIGNsYXNzIFJlZmVy
ZW5jZVR5cGUgOiBwdWJsaWMgVW5uYW1lZFR5cGUKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShSZWZlcmVuY2VUeXBlKTsKIHByb3RlY3RlZDoK
LSAgICBSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgQWRkcmVzc1NwYWNlIGFk
ZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlwZSkKLSAgICAgICAgOiBVbm5h
bWVkVHlwZShsb2NhdGlvbikKKyAgICBSZWZlcmVuY2VUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlv
biwgQWRkcmVzc1NwYWNlIGFkZHJlc3NTcGFjZSwgUmVmPFVubmFtZWRUeXBlPiBlbGVtZW50VHlw
ZSwgS2luZCBraW5kKQorICAgICAgICA6IFVubmFtZWRUeXBlKGxvY2F0aW9uLCBraW5kKQogICAg
ICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICAgICAgLCBtX2VsZW1lbnRU
eXBlKFdURk1vdmUoZWxlbWVudFR5cGUpKQogICAgIHsKICAgICB9CiBwdWJsaWM6Ci0KICAgICB2
aXJ0dWFsIH5SZWZlcmVuY2VUeXBlKCkgPSBkZWZhdWx0OwogCi0gICAgYm9vbCBpc1JlZmVyZW5j
ZVR5cGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KICAgICBBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KICAgICBj
b25zdCBVbm5hbWVkVHlwZSYgZWxlbWVudFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2VsZW1lbnRU
eXBlOyB9CiAgICAgVW5uYW1lZFR5cGUmIGVsZW1lbnRUeXBlKCkgeyByZXR1cm4gbV9lbGVtZW50
VHlwZTsgfQogCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IG92ZXJyaWRlCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gfm1fZWxlbWVudFR5cGUtPmhh
c2goKTsKICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9B
U1QvV0hMU0xUeXBlUmVmZXJlbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMVHlwZVJlZmVyZW5jZS5oCShyZXZpc2lvbiAyNDgz
MzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xUeXBl
UmVmZXJlbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgY2xhc3MgVHlwZVJl
ZmVyZW5jZSBmaW5hbCA6IHB1YmxpYyBVbm5hbQogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFR5cGVSZWZlcmVuY2UpOwogICAgIFR5cGVSZWZl
cmVuY2UoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJpbmcmJiBuYW1lLCBUeXBlQXJndW1lbnRz
JiYgdHlwZUFyZ3VtZW50cykKLSAgICAgICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbikKKyAgICAg
ICAgOiBVbm5hbWVkVHlwZShsb2NhdGlvbiwgS2luZDo6VHlwZVJlZmVyZW5jZSkKICAgICAgICAg
LCBtX25hbWUoV1RGTW92ZShuYW1lKSkKICAgICAgICAgLCBtX3R5cGVBcmd1bWVudHMoV1RGTW92
ZSh0eXBlQXJndW1lbnRzKSkKICAgICB7CkBAIC02Myw4ICs2Myw2IEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBSZWY8VHlwZVJlZmVyZW5jZT4gd3JhcChDb2RlTG9jYXRpb24sIE5hbWVkVHlwZSYg
cmVzb2x2ZWRUeXBlKTsKIAotICAgIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQotCiAgICAgU3RyaW5nJiBuYW1lKCkgeyByZXR1cm4gbV9uYW1l
OyB9CiAgICAgVHlwZUFyZ3VtZW50cyYgdHlwZUFyZ3VtZW50cygpIHsgcmV0dXJuIG1fdHlwZUFy
Z3VtZW50czsgfQogICAgIE5hbWVkVHlwZSogbWF5YmVSZXNvbHZlZFR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3Jlc29sdmVkVHlwZTsgfQpAQCAtOTEsNyArODksNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fcmVzb2x2ZWRUeXBlID0gJnJlc29sdmVkVHlwZTsKICAgICB9CiAKLSAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIC8vIEN1cnJlbnRseSwgd2Ugb25seSB1c2UgdGhpcyBmdW5jdGlvbiBhZnRlciB0aGUg
bmFtZSByZXNvbHZlciBydW5zLgogICAgICAgICAvLyBSZWx5aW5nIG9uIGhhdmluZyBhIHJlc29s
dmVkIHR5cGUgc2ltcGxpZmllcyB0aGlzIGltcGxlbWVudGF0aW9uLgpAQCAtOTksMTMgKzk3LDEw
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIFdURjo6UHRySGFzaDxjb25zdCBUeXBlKj46Omhh
c2goJnVuaWZ5Tm9kZSgpKTsKICAgICB9CiAKLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5u
YW1lZFR5cGUmIG90aGVyKSBjb25zdCBvdmVycmlkZQorICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUeXBlUmVmZXJlbmNlJiBvdGhlcikgY29uc3QKICAgICB7CiAgICAgICAgIEFTU0VSVChtX3Jl
c29sdmVkVHlwZSk7Ci0gICAgICAgIGlmICghaXM8VHlwZVJlZmVyZW5jZT4ob3RoZXIpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiAmdW5pZnlOb2RlKCkgPT0g
JmRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KG90aGVyKS51bmlmeU5vZGUoKTsKKyAgICAgICAgcmV0
dXJuICZ1bmlmeU5vZGUoKSA9PSAmb3RoZXIudW5pZnlOb2RlKCk7CiAgICAgfQogCiAgICAgU3Ry
aW5nIHRvU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5j
cHAJKG5vbmV4aXN0ZW50KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
QVNUL1dITFNMVW5uYW1lZFR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV0hMU0xVbm5hbWVk
VHlwZS5oIgorCisjaWYgRU5BQkxFKFdFQkdQVSkKKworI2luY2x1ZGUgIldITFNMQXJyYXlSZWZl
cmVuY2VUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xBcnJheVR5cGUuaCIKKyNpbmNsdWRlICJXSExT
TFBvaW50ZXJUeXBlLmgiCisjaW5jbHVkZSAiV0hMU0xUeXBlUmVmZXJlbmNlLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworbmFtZXNwYWNlIFdITFNMIHsKKworbmFtZXNwYWNlIEFTVCB7CisK
K3Vuc2lnbmVkIFVubmFtZWRUeXBlOjpoYXNoKCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgS2luZDo6VHlwZVJlZmVyZW5jZToKKyAgICAgICAgcmV0dXJuIGRvd25j
YXN0PFR5cGVSZWZlcmVuY2U+KCp0aGlzKS5oYXNoKCk7CisgICAgY2FzZSBLaW5kOjpQb2ludGVy
VHlwZToKKyAgICAgICAgcmV0dXJuIGRvd25jYXN0PFBvaW50ZXJUeXBlPigqdGhpcykuaGFzaCgp
OworICAgIGNhc2UgS2luZDo6QXJyYXlSZWZlcmVuY2VUeXBlOgorICAgICAgICByZXR1cm4gZG93
bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlPigqdGhpcykuaGFzaCgpOworICAgIGNhc2UgS2luZDo6
QXJyYXlUeXBlOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8QXJyYXlUeXBlPigqdGhpcykuaGFz
aCgpOworICAgIH0KK30KKworYm9vbCBVbm5hbWVkVHlwZTo6b3BlcmF0b3I9PShjb25zdCBVbm5h
bWVkVHlwZSYgb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG90aGVyLm1fa2luZCAhPSBtX2tpbmQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2Fz
ZSBLaW5kOjpUeXBlUmVmZXJlbmNlOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8VHlwZVJlZmVy
ZW5jZT4oKnRoaXMpID09IGRvd25jYXN0PFR5cGVSZWZlcmVuY2U+KG90aGVyKTsKKyAgICBjYXNl
IEtpbmQ6OlBvaW50ZXJUeXBlOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8UG9pbnRlclR5cGU+
KCp0aGlzKSA9PSBkb3duY2FzdDxQb2ludGVyVHlwZT4ob3RoZXIpOworICAgIGNhc2UgS2luZDo6
QXJyYXlSZWZlcmVuY2VUeXBlOgorICAgICAgICByZXR1cm4gZG93bmNhc3Q8QXJyYXlSZWZlcmVu
Y2VUeXBlPigqdGhpcykgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVuY2VUeXBlPihvdGhlcik7Cisg
ICAgY2FzZSBLaW5kOjpBcnJheVR5cGU6CisgICAgICAgIHJldHVybiBkb3duY2FzdDxBcnJheVR5
cGU+KCp0aGlzKSA9PSBkb3duY2FzdDxBcnJheVR5cGU+KG90aGVyKTsKKyAgICB9Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEFTVAorCit9IC8vIG5hbWVzcGFjZSBXSExTTAorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvQVNUL1dITFNMVW5uYW1lZFR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xVbm5hbWVkVHlwZS5oCShyZXZpc2lvbiAy
NDgzMzYpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xV
bm5hbWVkVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSwyNSArNDUsMzUgQEAgY2xhc3MgVW5u
YW1lZFR5cGUgOiBwdWJsaWMgVHlwZSwgcHVibGljIAogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFVubmFtZWRUeXBlKTsKIHB1YmxpYzoKLSAg
ICBVbm5hbWVkVHlwZShDb2RlTG9jYXRpb24gbG9jYXRpb24pCisgICAgZW51bSBjbGFzcyBLaW5k
IHsKKyAgICAgICAgVHlwZVJlZmVyZW5jZSwKKyAgICAgICAgUG9pbnRlclR5cGUsCisgICAgICAg
IEFycmF5UmVmZXJlbmNlVHlwZSwKKyAgICAgICAgQXJyYXlUeXBlCisgICAgfTsKKworICAgIFVu
bmFtZWRUeXBlKENvZGVMb2NhdGlvbiBsb2NhdGlvbiwgS2luZCBraW5kKQogICAgICAgICA6IG1f
Y29kZUxvY2F0aW9uKGxvY2F0aW9uKQorICAgICAgICAsIG1fa2luZChraW5kKQogICAgIHsKICAg
ICB9CiAKICAgICB2aXJ0dWFsIH5Vbm5hbWVkVHlwZSgpID0gZGVmYXVsdDsKIAogICAgIGJvb2wg
aXNVbm5hbWVkVHlwZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLSAgICB2aXJ0
dWFsIGJvb2wgaXNUeXBlUmVmZXJlbmNlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2
aXJ0dWFsIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAg
dmlydHVhbCBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNBcnJheVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgYm9vbCBpc1JlZmVyZW5jZVR5cGUoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgYm9v
bCBpc1R5cGVSZWZlcmVuY2UoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gS2luZDo6VHlwZVJl
ZmVyZW5jZTsgfQorICAgIGJvb2wgaXNQb2ludGVyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZCA9PSBLaW5kOjpQb2ludGVyVHlwZTsgfQorICAgIGJvb2wgaXNBcnJheVJlZmVyZW5jZVR5cGUo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gS2luZDo6QXJyYXlSZWZlcmVuY2VUeXBlOyB9Cisg
ICAgYm9vbCBpc0FycmF5VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBLaW5kOjpBcnJh
eVR5cGU7IH0KKyAgICBib29sIGlzUmVmZXJlbmNlVHlwZSgpIGNvbnN0IHsgcmV0dXJuIGlzUG9p
bnRlclR5cGUoKSB8fCBpc0FycmF5UmVmZXJlbmNlVHlwZSgpOyB9CiAKICAgICB2aXJ0dWFsIGNv
bnN0IFR5cGUmIHVuaWZ5Tm9kZSgpIGNvbnN0IHsgcmV0dXJuICp0aGlzOyB9CiAgICAgdmlydHVh
bCBUeXBlJiB1bmlmeU5vZGUoKSB7IHJldHVybiAqdGhpczsgfQogCi0gICAgdmlydHVhbCB1bnNp
Z25lZCBoYXNoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IFVubmFtZWRUeXBlJikgY29uc3QgPSAwOworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdDsKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5cGUmKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgPSAwOwogCkBAIC03MSw2ICs4MSw3IEBAIHB1Ymxp
YzoKIAogcHJpdmF0ZToKICAgICBDb2RlTG9jYXRpb24gbV9jb2RlTG9jYXRpb247CisgICAgS2lu
ZCBtX2tpbmQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBBU1QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML0FTVC9XSExTTFVubmFt
ZWRUeXBlSGFzaC5oCShub25leGlzdGVudCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML0FTVC9XSExTTFVubmFtZWRUeXBlSGFzaC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAqIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAqIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJH
UFUpCisKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hU
cmFpdHMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCituYW1lc3BhY2UgV0hMU0wgeworCitj
bGFzcyBVbm5hbWVkVHlwZUtleSB7CitwdWJsaWM6CisgICAgVW5uYW1lZFR5cGVLZXkoKSA9IGRl
ZmF1bHQ7CisgICAgVW5uYW1lZFR5cGVLZXkoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgICAgICA6IG1fdHlwZShiaXR3aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRp
Y19jYXN0PHVpbnRwdHJfdD4oMSkpKQorICAgIHsKKyAgICB9CisKKyAgICBVbm5hbWVkVHlwZUtl
eShBU1Q6OlVubmFtZWRUeXBlJiB0eXBlKQorICAgICAgICA6IG1fdHlwZSgmdHlwZSkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7IHJldHVybiAhbV90eXBl
OyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
dHlwZSA9PSBiaXR3aXNlX2Nhc3Q8QVNUOjpVbm5hbWVkVHlwZSo+KHN0YXRpY19jYXN0PHVpbnRw
dHJfdD4oMSkpOyB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
LT5oYXNoKCk7IH0KKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVW5uYW1lZFR5cGVLZXkmIG90
aGVyKSBjb25zdCB7IHJldHVybiAqbV90eXBlID09ICpvdGhlci5tX3R5cGU7IH0KKyAgICBBU1Q6
OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSgpIGNvbnN0IHsgcmV0dXJuICptX3R5cGU7IH0KKwor
ICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVW5u
YW1lZFR5cGVLZXkmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgICAgICBzdGF0aWMg
Ym9vbCBlcXVhbChjb25zdCBVbm5hbWVkVHlwZUtleSYgYSwgY29uc3QgVW5uYW1lZFR5cGVLZXkm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgICAgICBzdGF0aWMgY29uc3QgYm9v
bCBlbXB0eVZhbHVlSXNaZXJvID0gdHJ1ZTsKKyAgICB9OworCisgICAgc3RydWN0IFRyYWl0cyA6
IHB1YmxpYyBXVEY6OlNpbXBsZUNsYXNzSGFzaFRyYWl0czxVbm5hbWVkVHlwZUtleT4geworICAg
ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzRW1wdHlWYWx1ZShjb25zdCBVbm5hbWVkVHlwZUtleSYga2V5
KSB7IHJldHVybiBrZXkuaXNFbXB0eVZhbHVlKCk7IH0KKyAgICB9OworCitwcml2YXRlOgorICAg
IEFTVDo6VW5uYW1lZFR5cGUqIG1fdHlwZSB7IG51bGxwdHIgfTsKK307CisKK30KKworfQorCisj
ZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dI
TFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHJldmlzaW9uIDI0ODMzNikKKysr
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsOTEgKzU4LDg3IEBAIG5hbWVzcGFjZSBXSExTTCB7
CiAKIG5hbWVzcGFjZSBNZXRhbCB7CiAKKy8vIEZJWE1FOiBMb29rIGludG8gcmVwbGFjaW5nIEJh
c2VUeXBlTmFtZU5vZGUgd2l0aCBhIHNpbXBsZSBzdHJ1Y3QgeyBSZWZQdHI8VW5uYW1lZFR5cGU+
IHBhcmVudDsgTWFuZ2xlZFR5cGVOYW1lOyB9IHRoYXQgVW5uYW1lZFR5cGVLZXlzIG1hcCB0by4K
IGNsYXNzIEJhc2VUeXBlTmFtZU5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwog
cHVibGljOgotICAgIEJhc2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBN
YW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSkKKyAgICBCYXNlVHlwZU5hbWVOb2RlKEJhc2VU
eXBlTmFtZU5vZGUqIHBhcmVudCwgTWFuZ2xlZFR5cGVOYW1lJiYgbWFuZ2xlZE5hbWUsIEFTVDo6
VW5uYW1lZFR5cGU6OktpbmQga2luZCkKICAgICAgICAgOiBtX3BhcmVudChwYXJlbnQpCiAgICAg
ICAgICwgbV9tYW5nbGVkTmFtZShtYW5nbGVkTmFtZSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkK
ICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgfkJhc2VUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7
Ci0gICAgdmlydHVhbCBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBm
YWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBpc0FycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludGVyVHlwZU5h
bWVOb2RlKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgaXNSZWZl
cmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIFZlY3RvcjxV
bmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRy
ZW47IH0KLSAgICB2b2lkIGFwcGVuZChVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4mJiBjaGls
ZCkKLSAgICB7Ci0gICAgICAgIG1fY2hpbGRyZW4uYXBwZW5kKFdURk1vdmUoY2hpbGQpKTsKLSAg
ICB9CisgICAgCisgICAgQVNUOjpVbm5hbWVkVHlwZTo6S2luZCBraW5kKCkgeyByZXR1cm4gbV9r
aW5kOyB9CisgICAgYm9vbCBpc1JlZmVyZW5jZVR5cGVOYW1lTm9kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZCA9PSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOyB9CisgICAg
Ym9vbCBpc1BvaW50ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQVNU
OjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlclR5cGU7IH0KKyAgICBib29sIGlzQXJyYXlSZWZl
cmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gQVNUOjpVbm5hbWVk
VHlwZTo6S2luZDo6QXJyYXlSZWZlcmVuY2VUeXBlOyB9CisgICAgYm9vbCBpc0FycmF5VHlwZU5h
bWVOb2RlKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6
OkFycmF5VHlwZTsgfQorCiAgICAgQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50KCkgeyByZXR1cm4g
bV9wYXJlbnQ7IH0KICAgICBNYW5nbGVkVHlwZU5hbWUgbWFuZ2xlZE5hbWUoKSBjb25zdCB7IHJl
dHVybiBtX21hbmdsZWROYW1lOyB9CiAKIHByaXZhdGU6Ci0gICAgVmVjdG9yPFVuaXF1ZVJlZjxC
YXNlVHlwZU5hbWVOb2RlPj4gbV9jaGlsZHJlbjsKICAgICBCYXNlVHlwZU5hbWVOb2RlKiBtX3Bh
cmVudDsKICAgICBNYW5nbGVkVHlwZU5hbWUgbV9tYW5nbGVkTmFtZTsKKyAgICBBU1Q6OlVubmFt
ZWRUeXBlOjpLaW5kIG1fa2luZDsKIH07CiAKLWNsYXNzIEFycmF5VHlwZU5hbWVOb2RlIDogcHVi
bGljIEJhc2VUeXBlTmFtZU5vZGUgeworY2xhc3MgQXJyYXlUeXBlTmFtZU5vZGUgZmluYWwgOiBw
dWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBw
dWJsaWM6CiAgICAgQXJyYXlUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBN
YW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgdW5zaWduZWQgbnVtRWxlbWVudHMpCi0gICAg
ICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpKQorICAg
ICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZNb3ZlKG1hbmdsZWROYW1lKSwgQVNU
OjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlUeXBlKQogICAgICAgICAsIG1fbnVtRWxlbWVudHMo
bnVtRWxlbWVudHMpCiAgICAgewogICAgIH0KICAgICB2aXJ0dWFsIH5BcnJheVR5cGVOYW1lTm9k
ZSgpID0gZGVmYXVsdDsKLSAgICBib29sIGlzQXJyYXlUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAgdW5zaWduZWQgbnVtRWxlbWVudHMoKSBjb25zdCB7
IHJldHVybiBtX251bUVsZW1lbnRzOyB9CiAKIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9udW1F
bGVtZW50czsKIH07CiAKLWNsYXNzIEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlIDogcHVibGlj
IEJhc2VUeXBlTmFtZU5vZGUgeworY2xhc3MgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUgZmlu
YWwgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiBwdWJsaWM6CiAgICAgQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1l
Tm9kZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRyZXNz
U3BhY2UgYWRkcmVzc1NwYWNlKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBX
VEZNb3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwg
V1RGTW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5UmVmZXJl
bmNlVHlwZSkKICAgICAgICAgLCBtX2FkZHJlc3NTcGFjZShhZGRyZXNzU3BhY2UpCiAgICAgewog
ICAgIH0KICAgICB2aXJ0dWFsIH5BcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZSgpID0gZGVmYXVs
dDsKLSAgICBib29sIGlzQXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiB0cnVlOyB9CiAgICAgQVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkg
Y29uc3QgeyByZXR1cm4gbV9hZGRyZXNzU3BhY2U7IH0KIAogcHJpdmF0ZToKICAgICBBU1Q6OkFk
ZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFjZTsKIH07CiAKLWNsYXNzIFBvaW50ZXJUeXBlTmFtZU5v
ZGUgOiBwdWJsaWMgQmFzZVR5cGVOYW1lTm9kZSB7CitjbGFzcyBQb2ludGVyVHlwZU5hbWVOb2Rl
IGZpbmFsIDogcHVibGljIEJhc2VUeXBlTmFtZU5vZGUgewogICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgogICAgIFBvaW50ZXJUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9k
ZSogcGFyZW50LCBNYW5nbGVkVHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgQVNUOjpBZGRyZXNzU3Bh
Y2UgYWRkcmVzc1NwYWNlKQotICAgICAgICA6IEJhc2VUeXBlTmFtZU5vZGUocGFyZW50LCBXVEZN
b3ZlKG1hbmdsZWROYW1lKSkKKyAgICAgICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RG
TW92ZShtYW5nbGVkTmFtZSksIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OlBvaW50ZXJUeXBlKQog
ICAgICAgICAsIG1fYWRkcmVzc1NwYWNlKGFkZHJlc3NTcGFjZSkKICAgICB7CiAgICAgfQogICAg
IHZpcnR1YWwgflBvaW50ZXJUeXBlTmFtZU5vZGUoKSA9IGRlZmF1bHQ7Ci0gICAgYm9vbCBpc1Bv
aW50ZXJUeXBlTmFtZU5vZGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CiAgICAg
QVNUOjpBZGRyZXNzU3BhY2UgYWRkcmVzc1NwYWNlKCkgY29uc3QgeyByZXR1cm4gbV9hZGRyZXNz
U3BhY2U7IH0KIAogcHJpdmF0ZToKICAgICBBU1Q6OkFkZHJlc3NTcGFjZSBtX2FkZHJlc3NTcGFj
ZTsKIH07CiAKLWNsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSA6IHB1YmxpYyBCYXNlVHlwZU5h
bWVOb2RlIHsKK2NsYXNzIFJlZmVyZW5jZVR5cGVOYW1lTm9kZSBmaW5hbCA6IHB1YmxpYyBCYXNl
VHlwZU5hbWVOb2RlIHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKICAg
ICBSZWZlcmVuY2VUeXBlTmFtZU5vZGUoQmFzZVR5cGVOYW1lTm9kZSogcGFyZW50LCBNYW5nbGVk
VHlwZU5hbWUmJiBtYW5nbGVkTmFtZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLSAgICAg
ICAgOiBCYXNlVHlwZU5hbWVOb2RlKHBhcmVudCwgV1RGTW92ZShtYW5nbGVkTmFtZSkpCisgICAg
ICAgIDogQmFzZVR5cGVOYW1lTm9kZShwYXJlbnQsIFdURk1vdmUobWFuZ2xlZE5hbWUpLCBBU1Q6
OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlKQogICAgICAgICAsIG1fbmFtZWRUeXBl
KG5hbWVkVHlwZSkKICAgICB7CiAgICAgfQogICAgIHZpcnR1YWwgflJlZmVyZW5jZVR5cGVOYW1l
Tm9kZSgpID0gZGVmYXVsdDsKLSAgICBib29sIGlzUmVmZXJlbmNlVHlwZU5hbWVOb2RlKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogICAgIEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5
cGUoKSB7IHJldHVybiBtX25hbWVkVHlwZTsgfQogCiBwcml2YXRlOgpAQCAtMTgxLDQyICsxNzcs
OSBAQCBUeXBlTmFtZXI6OlR5cGVOYW1lcihQcm9ncmFtJiBwcm9ncmFtKQogCiBUeXBlTmFtZXI6
On5UeXBlTmFtZXIoKSA9IGRlZmF1bHQ7CiAKLXN0YXRpYyBWZWN0b3I8VW5pcXVlUmVmPEJhc2VU
eXBlTmFtZU5vZGU+Pjo6aXRlcmF0b3IgZmluZEluVmVjdG9yKEFTVDo6VW5uYW1lZFR5cGUmIHVu
bmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCi17
Ci0gICAgcmV0dXJuIHN0ZDo6ZmluZF9pZih0eXBlcy5iZWdpbigpLCB0eXBlcy5lbmQoKSwgWyZd
KEJhc2VUeXBlTmFtZU5vZGUmIGJhc2VUeXBlTmFtZU5vZGUpIC0+IGJvb2wgewotICAgICAgICBp
ZiAoaXM8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkgJiYgaXM8UmVmZXJlbmNlVHlw
ZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKSkgewotICAgICAgICAgICAgYXV0byYgcmVzb2x2
ZWRUeXBlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkucmVzb2x2
ZWRUeXBlKCk7Ci0gICAgICAgICAgICByZXR1cm4gJnJlc29sdmVkVHlwZSA9PSAmZG93bmNhc3Q8
UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5uYW1lZFR5cGUoKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpICYm
IGlzPFBvaW50ZXJUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpKQotICAgICAgICAgICAg
cmV0dXJuIGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKS5hZGRyZXNzU3Bh
Y2UoKSA9PSBkb3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5h
ZGRyZXNzU3BhY2UoKTsKLSAgICAgICAgaWYgKGlzPEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1
bm5hbWVkVHlwZSkgJiYgaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFt
ZU5vZGUpKQotICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VU
eXBlPih1bm5hbWVkVHlwZSkuYWRkcmVzc1NwYWNlKCkgPT0gZG93bmNhc3Q8QXJyYXlSZWZlcmVu
Y2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUpLmFkZHJlc3NTcGFjZSgpOwotICAgICAg
ICBpZiAoaXM8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKSAmJiBpczxBcnJheVR5cGVOYW1l
Tm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpCi0gICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8QVNU
OjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKS5udW1FbGVtZW50cygpID09IGRvd25jYXN0PEFycmF5
VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKS5udW1FbGVtZW50cygpOwotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgfSk7Ci19Ci0KLXN0YXRpYyBCYXNlVHlwZU5hbWVOb2RlJiBmaW5k
KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBl
TmFtZU5vZGU+PiYgdHlwZXMpCi17Ci0gICAgYXV0byYgdmVjdG9yVG9TZWFyY2ggPSAoWyZdKCkg
LT4gVmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4mIHsKLSAgICAgICAgaWYgKGlz
PEFTVDo6VHlwZVJlZmVyZW5jZT4odW5uYW1lZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHR5
cGVzOwotICAgICAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKQotICAg
ICAgICAgICAgcmV0dXJuIGZpbmQoZG93bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5
cGUpLmVsZW1lbnRUeXBlKCksIHR5cGVzKS5jaGlsZHJlbigpOwotICAgICAgICBpZiAoaXM8QVNU
OjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkKLSAgICAgICAgICAgIHJldHVybiBm
aW5kKGRvd25jYXN0PEFTVDo6QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVu
dFR5cGUoKSwgdHlwZXMpLmNoaWxkcmVuKCk7Ci0gICAgICAgIHJldHVybiBmaW5kKGRvd25jYXN0
PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSkudHlwZSgpLCB0eXBlcykuY2hpbGRyZW4oKTsK
LSAgICB9KSgpOwotICAgIGF1dG8gaXRlcmF0b3IgPSBmaW5kSW5WZWN0b3IodW5uYW1lZFR5cGUs
IHZlY3RvclRvU2VhcmNoKTsKLSAgICBBU1NFUlQoaXRlcmF0b3IgIT0gdHlwZXMuZW5kKCkpOwot
ICAgIHJldHVybiAqaXRlcmF0b3I7Ci19Ci0KIHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlVu
bmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkKIHsKLSAgICBpbnNlcnQodW5uYW1lZFR5cGUsIG1fdHJp
ZSk7CisgICAgaW5zZXJ0KHVubmFtZWRUeXBlKTsKIH0KIAogdm9pZCBUeXBlTmFtZXI6OnZpc2l0
KEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uJiBlbnVtZXJhdGlvbkRlZmluaXRpb24pCkBAIC0y
MzQsNyArMTk3LDcgQEAgdm9pZCBUeXBlTmFtZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZQog
ICAgIFZpc2l0b3I6OnZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbik7CiAKICAgICB7Ci0gICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPEJhc2VUeXBlTmFtZU5vZGU+PiBuZWln
aGJvcnMgPSB7IGZpbmQoZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKSwgbV90cmllKSB9Owor
ICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxCYXNlVHlwZU5hbWVOb2RlPj4g
bmVpZ2hib3JzID0geyBmaW5kKGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpIH07CiAgICAg
ICAgIGF1dG8gYWRkUmVzdWx0ID0gbV9kZXBlbmRlbmN5R3JhcGguYWRkKCZlbnVtZXJhdGlvbkRl
ZmluaXRpb24sIFdURk1vdmUobmVpZ2hib3JzKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRk
UmVzdWx0LCBhZGRSZXN1bHQuaXNOZXdFbnRyeSk7CiAgICAgfQpAQCAtMjU5LDcgKzIyMiw3IEBA
IHZvaWQgVHlwZU5hbWVyOjp2aXNpdChBU1Q6OlN0cnVjdHVyZURlZmkKICAgICAgICAgZm9yIChh
dXRvJiBzdHJ1Y3R1cmVFbGVtZW50IDogc3RydWN0dXJlRGVmaW5pdGlvbi5zdHJ1Y3R1cmVFbGVt
ZW50cygpKSB7CiAgICAgICAgICAgICBhdXRvIGFkZFJlc3VsdCA9IG1fc3RydWN0dXJlRWxlbWVu
dE1hcHBpbmcuYWRkKCZzdHJ1Y3R1cmVFbGVtZW50LCBnZW5lcmF0ZU5leHRTdHJ1Y3R1cmVFbGVt
ZW50TmFtZSgpKTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBhZGRSZXN1
bHQuaXNOZXdFbnRyeSk7Ci0gICAgICAgICAgICBuZWlnaGJvcnMuYXBwZW5kKGZpbmQoc3RydWN0
dXJlRWxlbWVudC50eXBlKCksIG1fdHJpZSkpOworICAgICAgICAgICAgbmVpZ2hib3JzLmFwcGVu
ZChmaW5kKHN0cnVjdHVyZUVsZW1lbnQudHlwZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAgYXV0
byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnN0cnVjdHVyZURlZmluaXRpb24s
IFdURk1vdmUobmVpZ2hib3JzKSk7CiAgICAgICAgIEFTU0VSVF9VTlVTRUQoYWRkUmVzdWx0LCBh
ZGRSZXN1bHQuaXNOZXdFbnRyeSk7CkBAIC0yNzQsNyArMjM3LDcgQEAgdm9pZCBUeXBlTmFtZXI6
OnZpc2l0KEFTVDo6VHlwZURlZmluaXRpbwogICAgIH0KICAgICBWaXNpdG9yOjp2aXNpdCh0eXBl
RGVmaW5pdGlvbik7CiAgICAgewotICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBl
cjxCYXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5
cGUoKSwgbV90cmllKSB9OworICAgICAgICBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxC
YXNlVHlwZU5hbWVOb2RlPj4gbmVpZ2hib3JzID0geyBmaW5kKHR5cGVEZWZpbml0aW9uLnR5cGUo
KSkgfTsKICAgICAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2RlcGVuZGVuY3lHcmFwaC5hZGQoJnR5
cGVEZWZpbml0aW9uLCBXVEZNb3ZlKG5laWdoYm9ycykpOwogICAgICAgICBBU1NFUlRfVU5VU0VE
KGFkZFJlc3VsdCwgYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogICAgIH0KQEAgLTI4Miw3ICsyNDUs
NyBAQCB2b2lkIFR5cGVOYW1lcjo6dmlzaXQoQVNUOjpUeXBlRGVmaW5pdGlvCiAKIHZvaWQgVHlw
ZU5hbWVyOjp2aXNpdChBU1Q6OkV4cHJlc3Npb24mIGV4cHJlc3Npb24pCiB7Ci0gICAgaW5zZXJ0
KGV4cHJlc3Npb24ucmVzb2x2ZWRUeXBlKCksIG1fdHJpZSk7CisgICAgaW5zZXJ0KGV4cHJlc3Np
b24ucmVzb2x2ZWRUeXBlKCkpOwogICAgIFZpc2l0b3I6OnZpc2l0KGV4cHJlc3Npb24pOwogfQog
CkBAIC0yOTcsNTggKzI2MCw2MyBAQCBTdHJpbmcgVHlwZU5hbWVyOjptYW5nbGVkTmFtZUZvclR5
cGUoQVNUCiAgICAgcmV0dXJuIHdyaXRlTmF0aXZlVHlwZShuYXRpdmVUeXBlRGVjbGFyYXRpb24p
OwogfQogCi1VbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4gVHlwZU5hbWVyOjpjcmVhdGVOYW1l
Tm9kZShBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSwgQmFzZVR5cGVOYW1lTm9kZSogcGFy
ZW50KQorQmFzZVR5cGVOYW1lTm9kZSYgVHlwZU5hbWVyOjpmaW5kKEFTVDo6VW5uYW1lZFR5cGUm
IHVubmFtZWRUeXBlKQogewotICAgIGlmIChpczxBU1Q6OlR5cGVSZWZlcmVuY2U+KHVubmFtZWRU
eXBlKSkgeworICAgIGF1dG8gaXRlcmF0b3IgPSBtX3VubmFtZWRUeXBlc1VuaXF1aW5nTWFwLmZp
bmQodW5uYW1lZFR5cGUpOworICAgIEFTU0VSVChpdGVyYXRvciAhPSBtX3VubmFtZWRUeXBlc1Vu
aXF1aW5nTWFwLmVuZCgpKTsKKyAgICByZXR1cm4gKml0ZXJhdG9yLT52YWx1ZTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+IFR5cGVOYW1lcjo6Y3JlYXRlTmFtZU5vZGUo
QVNUOjpVbm5hbWVkVHlwZSYgdW5uYW1lZFR5cGUsIEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCkK
K3sKKyAgICBzd2l0Y2ggKHVubmFtZWRUeXBlLmtpbmQoKSkgeworICAgIGNhc2UgQVNUOjpVbm5h
bWVkVHlwZTo6S2luZDo6VHlwZVJlZmVyZW5jZTogewogICAgICAgICBhdXRvJiB0eXBlUmVmZXJl
bmNlID0gZG93bmNhc3Q8QVNUOjpUeXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5l
cmF0ZU5leHRUeXBlTmFtZSgpLCB0eXBlUmVmZXJlbmNlLnJlc29sdmVkVHlwZSgpKTsKKyAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQs
IGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIHR5cGVSZWZlcmVuY2UucmVzb2x2ZWRUeXBlKCkpOwog
ICAgIH0KLSAgICBpZiAoaXM8QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7CisgICAg
Y2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpQb2ludGVyVHlwZTogewogICAgICAgICBhdXRv
JiBwb2ludGVyVHlwZSA9IGRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KHVubmFtZWRUeXBlKTsK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8UG9pbnRlclR5cGVOYW1lTm9kZT4ocGFyZW50
LCBnZW5lcmF0ZU5leHRUeXBlTmFtZSgpLCBwb2ludGVyVHlwZS5hZGRyZXNzU3BhY2UoKSk7Cisg
ICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBvaW50ZXJUeXBlTmFtZU5vZGU+KHBhcmVu
dCwgZ2VuZXJhdGVOZXh0VHlwZU5hbWUoKSwgcG9pbnRlclR5cGUuYWRkcmVzc1NwYWNlKCkpOwog
ICAgIH0KLSAgICBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBlKSkg
eworICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlSZWZlcmVuY2VUeXBlOiB7
CiAgICAgICAgIGF1dG8mIGFycmF5UmVmZXJlbmNlVHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlS
ZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSk7Ci0gICAgICAgIHJldHVybiBtYWtlVW5pcXVlUmVm
PEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1l
KCksIGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSk7CisgICAgICAgIHJldHVybiBz
dGQ6Om1ha2VfdW5pcXVlPEFycmF5UmVmZXJlbmNlVHlwZU5hbWVOb2RlPihwYXJlbnQsIGdlbmVy
YXRlTmV4dFR5cGVOYW1lKCksIGFycmF5UmVmZXJlbmNlVHlwZS5hZGRyZXNzU3BhY2UoKSk7Cisg
ICAgfQorICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6QXJyYXlUeXBlOiB7CisgICAg
ICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlw
ZSk7CisgICAgICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPEFycmF5VHlwZU5hbWVOb2RlPihw
YXJlbnQsIGdlbmVyYXRlTmV4dFR5cGVOYW1lKCksIGFycmF5VHlwZS5udW1FbGVtZW50cygpKTsK
KyAgICB9CisgICAgfQorfQorCitzdGF0aWMgQVNUOjpVbm5hbWVkVHlwZSogcGFyZW50KEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQoreworICAgIHN3aXRjaCAodW5uYW1lZFR5cGUua2lu
ZCgpKSB7CisgICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOgor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6
OlBvaW50ZXJUeXBlOgorICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+
KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpOworICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6
S2luZDo6QXJyYXlSZWZlcmVuY2VUeXBlOgorICAgICAgICByZXR1cm4gJmRvd25jYXN0PEFTVDo6
QXJyYXlSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKTsKKyAgICBjYXNl
IEFTVDo6VW5uYW1lZFR5cGU6OktpbmQ6OkFycmF5VHlwZToKKyAgICAgICAgcmV0dXJuICZkb3du
Y2FzdDxBU1Q6OkFycmF5VHlwZT4odW5uYW1lZFR5cGUpLnR5cGUoKTsKICAgICB9Ci0gICAgYXV0
byYgYXJyYXlUeXBlID0gZG93bmNhc3Q8QVNUOjpBcnJheVR5cGU+KHVubmFtZWRUeXBlKTsKLSAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxBcnJheVR5cGVOYW1lTm9kZT4ocGFyZW50LCBnZW5lcmF0
ZU5leHRUeXBlTmFtZSgpLCBhcnJheVR5cGUubnVtRWxlbWVudHMoKSk7CiB9CiAKLUJhc2VUeXBl
TmFtZU5vZGUqIFR5cGVOYW1lcjo6aW5zZXJ0KEFTVDo6VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBl
LCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgdHlwZXMpCitCYXNlVHlwZU5h
bWVOb2RlKiBUeXBlTmFtZXI6Omluc2VydChBU1Q6OlVubmFtZWRUeXBlJiB1bm5hbWVkVHlwZSkK
IHsKICAgICBpZiAoYXV0byogcmVzdWx0ID0gbV91bm5hbWVkVHlwZU1hcHBpbmcuZ2V0KCZ1bm5h
bWVkVHlwZSkpCiAgICAgICAgIHJldHVybiByZXN1bHQ7CiAKLSAgICBWZWN0b3I8VW5pcXVlUmVm
PEJhc2VUeXBlTmFtZU5vZGU+PiogdmVjdG9yVG9JbnNlcnRJbnRvIHsgbnVsbHB0ciB9OwotICAg
IEJhc2VUeXBlTmFtZU5vZGUqIHBhcmVudCB7IG51bGxwdHIgfTsKLSAgICBpZiAoaXM8QVNUOjpU
eXBlUmVmZXJlbmNlPih1bm5hbWVkVHlwZSkpIHsKLSAgICAgICAgdmVjdG9yVG9JbnNlcnRJbnRv
ID0gJnR5cGVzOwotICAgICAgICBwYXJlbnQgPSBudWxscHRyOwotICAgIH0gZWxzZSBpZiAoaXM8
QVNUOjpQb2ludGVyVHlwZT4odW5uYW1lZFR5cGUpKSB7Ci0gICAgICAgIHBhcmVudCA9IGluc2Vy
dChkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSwg
dHlwZXMpOwotICAgICAgICB2ZWN0b3JUb0luc2VydEludG8gPSAmcGFyZW50LT5jaGlsZHJlbigp
OwotICAgIH0gZWxzZSBpZiAoaXM8QVNUOjpBcnJheVJlZmVyZW5jZVR5cGU+KHVubmFtZWRUeXBl
KSkgewotICAgICAgICBwYXJlbnQgPSBpbnNlcnQoZG93bmNhc3Q8QVNUOjpBcnJheVJlZmVyZW5j
ZVR5cGU+KHVubmFtZWRUeXBlKS5lbGVtZW50VHlwZSgpLCB0eXBlcyk7Ci0gICAgICAgIHZlY3Rv
clRvSW5zZXJ0SW50byA9ICZwYXJlbnQtPmNoaWxkcmVuKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgcGFyZW50ID0gaW5zZXJ0KGRvd25jYXN0PEFTVDo6QXJyYXlUeXBlPih1bm5hbWVkVHlwZSku
dHlwZSgpLCB0eXBlcyk7Ci0gICAgICAgIHZlY3RvclRvSW5zZXJ0SW50byA9ICZwYXJlbnQtPmNo
aWxkcmVuKCk7Ci0gICAgfQotICAgIEFTU0VSVCh2ZWN0b3JUb0luc2VydEludG8pOworICAgIGF1
dG8qIHBhcmVudFVubmFtZWRUeXBlID0gcGFyZW50KHVubmFtZWRUeXBlKTsKKyAgICBCYXNlVHlw
ZU5hbWVOb2RlKiBwYXJlbnROb2RlID0gcGFyZW50VW5uYW1lZFR5cGUgPyBpbnNlcnQoKnBhcmVu
dFVubmFtZWRUeXBlKSA6IG51bGxwdHI7CiAKLSAgICBhdXRvIGl0ZXJhdG9yID0gZmluZEluVmVj
dG9yKHVubmFtZWRUeXBlLCAqdmVjdG9yVG9JbnNlcnRJbnRvKTsKLSAgICBpZiAoaXRlcmF0b3Ig
PT0gdmVjdG9yVG9JbnNlcnRJbnRvLT5lbmQoKSkgewotICAgICAgICBhdXRvIHJlc3VsdCA9IGNy
ZWF0ZU5hbWVOb2RlKHVubmFtZWRUeXBlLCBwYXJlbnQpOwotICAgICAgICB7Ci0gICAgICAgICAg
ICBhdXRvIGFkZFJlc3VsdCA9IG1fdW5uYW1lZFR5cGVNYXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUs
ICZyZXN1bHQpOwotICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChhZGRSZXN1bHQsIGFkZFJlc3Vs
dC5pc05ld0VudHJ5KTsKLSAgICAgICAgfQotICAgICAgICB2ZWN0b3JUb0luc2VydEludG8tPmFw
cGVuZChXVEZNb3ZlKHJlc3VsdCkpOwotICAgICAgICByZXR1cm4gJnZlY3RvclRvSW5zZXJ0SW50
by0+bGFzdCgpLmdldCgpOwotICAgIH0KLSAgICBtX3VubmFtZWRUeXBlTWFwcGluZy5hZGQoJnVu
bmFtZWRUeXBlLCAmKml0ZXJhdG9yKTsKLSAgICByZXR1cm4gJippdGVyYXRvcjsKKyAgICBhdXRv
IGFkZFJlc3VsdCA9IG1fdW5uYW1lZFR5cGVzVW5pcXVpbmdNYXAuZW5zdXJlKFVubmFtZWRUeXBl
S2V5IHsgdW5uYW1lZFR5cGUgfSwgWyZdIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZU5hbWVOb2Rl
KHVubmFtZWRUeXBlLCBwYXJlbnROb2RlKTsKKyAgICB9KTsKKworICAgIG1fdW5uYW1lZFR5cGVN
YXBwaW5nLmFkZCgmdW5uYW1lZFR5cGUsIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUuZ2V0KCkp
OworICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiBjbGFz
cyBNZXRhbFR5cGVEZWNsYXJhdGlvbldyaXRlciBmaW5hbCA6IHB1YmxpYyBWaXNpdG9yIHsKQEAg
LTM4MiwxNyArMzUwLDI0IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0
aW8KIHsKICAgICBpZiAoZW1pdHRlZFVubmFtZWRUeXBlcy5jb250YWlucygmYmFzZVR5cGVOYW1l
Tm9kZSkpCiAgICAgICAgIHJldHVybjsKKwogICAgIGlmIChiYXNlVHlwZU5hbWVOb2RlLnBhcmVu
dCgpKQogICAgICAgICBlbWl0VW5uYW1lZFR5cGVEZWZpbml0aW9uKHN0cmluZ0J1aWxkZXIsICpi
YXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpLCBlbWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFt
ZWRUeXBlcyk7Ci0gICAgaWYgKGlzPFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1l
Tm9kZSkpIHsKKyAgICAKKyAgICBzd2l0Y2ggKGJhc2VUeXBlTmFtZU5vZGUua2luZCgpKSB7Cisg
ICAgY2FzZSBBU1Q6OlVubmFtZWRUeXBlOjpLaW5kOjpUeXBlUmVmZXJlbmNlOiB7CiAgICAgICAg
IGF1dG8mIG5hbWVkVHlwZSA9IGRvd25jYXN0PFJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5
cGVOYW1lTm9kZSkubmFtZWRUeXBlKCk7CiAgICAgICAgIGVtaXROYW1lZFR5cGVEZWZpbml0aW9u
KHN0cmluZ0J1aWxkZXIsIG5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5h
bWVkVHlwZXMpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0eXBlZGVm
ICIsIG1hbmdsZWROYW1lRm9yVHlwZShuYW1lZFR5cGUpLCAnICcsIGJhc2VUeXBlTmFtZU5vZGUu
bWFuZ2xlZE5hbWUoKSwgIjtcbiIpOwotICAgIH0gZWxzZSBpZiAoaXM8UG9pbnRlclR5cGVOYW1l
Tm9kZT4oYmFzZVR5cGVOYW1lTm9kZSkpIHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgQVNUOjpVbm5hbWVkVHlwZTo6S2luZDo6UG9pbnRlclR5cGU6IHsKICAgICAgICAgYXV0byYg
cG9pbnRlclR5cGUgPSBkb3duY2FzdDxQb2ludGVyVHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVO
b2RlKTsKICAgICAgICAgQVNTRVJUKGJhc2VUeXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAg
ICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBwZW5kKCJ0eXBlZGVmICIsIHRvU3RyaW5nKHBvaW50
ZXJUeXBlLmFkZHJlc3NTcGFjZSgpKSwgJyAnLCBwb2ludGVyVHlwZS5wYXJlbnQoKS0+bWFuZ2xl
ZE5hbWUoKSwgIiogIiwgcG9pbnRlclR5cGUubWFuZ2xlZE5hbWUoKSwgIjtcbiIpOwotICAgIH0g
ZWxzZSBpZiAoaXM8QXJyYXlSZWZlcmVuY2VUeXBlTmFtZU5vZGU+KGJhc2VUeXBlTmFtZU5vZGUp
KSB7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEFTVDo6VW5uYW1lZFR5cGU6Oktp
bmQ6OkFycmF5UmVmZXJlbmNlVHlwZTogewogICAgICAgICBhdXRvJiBhcnJheVJlZmVyZW5jZVR5
cGUgPSBkb3duY2FzdDxBcnJheVJlZmVyZW5jZVR5cGVOYW1lTm9kZT4oYmFzZVR5cGVOYW1lTm9k
ZSk7CiAgICAgICAgIEFTU0VSVChiYXNlVHlwZU5hbWVOb2RlLnBhcmVudCgpKTsKICAgICAgICAg
c3RyaW5nQnVpbGRlci5mbGV4aWJsZUFwcGVuZCgKQEAgLTQwMSwxMSArMzc2LDE2IEBAIHZvaWQg
VHlwZU5hbWVyOjplbWl0VW5uYW1lZFR5cGVEZWZpbml0aW8KICAgICAgICAgICAgICIgICAgdWlu
dDMyX3QgbGVuZ3RoO1xuIgogICAgICAgICAgICAgIn07XG4iCiAgICAgICAgICk7Ci0gICAgfSBl
bHNlIHsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgQVNUOjpVbm5hbWVkVHlwZTo6
S2luZDo6QXJyYXlUeXBlOiB7CiAgICAgICAgIGF1dG8mIGFycmF5VHlwZSA9IGRvd25jYXN0PEFy
cmF5VHlwZU5hbWVOb2RlPihiYXNlVHlwZU5hbWVOb2RlKTsKICAgICAgICAgQVNTRVJUKGJhc2VU
eXBlTmFtZU5vZGUucGFyZW50KCkpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmZsZXhpYmxlQXBw
ZW5kKCJ0eXBlZGVmIGFycmF5PCIsIGFycmF5VHlwZS5wYXJlbnQoKS0+bWFuZ2xlZE5hbWUoKSwg
IiwgIiwgYXJyYXlUeXBlLm51bUVsZW1lbnRzKCksICI+ICIsIGFycmF5VHlwZS5tYW5nbGVkTmFt
ZSgpLCAiO1xuIik7CisgICAgICAgIGJyZWFrOwogICAgIH0KKyAgICB9CisKICAgICBlbWl0dGVk
VW5uYW1lZFR5cGVzLmFkZCgmYmFzZVR5cGVOYW1lTm9kZSk7CiB9CiAKQEAgLTQzOSwyNiArNDE5
LDE5IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbigKICAgICBlbWl0
dGVkTmFtZWRUeXBlcy5hZGQoJm5hbWVkVHlwZSk7CiB9CiAKLXZvaWQgVHlwZU5hbWVyOjplbWl0
QWxsVW5uYW1lZFR5cGVEZWZpbml0aW9ucyhTdHJpbmdCdWlsZGVyJiBzdHJpbmdCdWlsZGVyLCBW
ZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBlTmFtZU5vZGU+PiYgbm9kZXMsIEhhc2hTZXQ8QVNUOjpO
YW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+
JiBlbWl0dGVkVW5uYW1lZFR5cGVzKQotewotICAgIGZvciAoYXV0byYgbm9kZSA6IG5vZGVzKSB7
Ci0gICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgbm9kZSwg
ZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwotICAgICAgICBlbWl0QWxs
VW5uYW1lZFR5cGVEZWZpbml0aW9ucyhzdHJpbmdCdWlsZGVyLCBub2RlLT5jaGlsZHJlbigpLCBl
bWl0dGVkTmFtZWRUeXBlcywgZW1pdHRlZFVubmFtZWRUeXBlcyk7Ci0gICAgfQotfQotCiB2b2lk
IFR5cGVOYW1lcjo6ZW1pdE1ldGFsVHlwZURlZmluaXRpb25zKFN0cmluZ0J1aWxkZXImIHN0cmlu
Z0J1aWxkZXIpCiB7CiAgICAgSGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+IGVtaXR0ZWROYW1lZFR5
cGVzOwogICAgIEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+IGVtaXR0ZWRVbm5hbWVkVHlwZXM7
Ci0gICAgZm9yIChhdXRvJiBrZXlWYWx1ZVBhaXIgOiBtX2RlcGVuZGVuY3lHcmFwaCkKLSAgICAg
ICAgZW1pdE5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5nQnVpbGRlciwgKmtleVZhbHVlUGFpci5r
ZXksIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKLSAgICBlbWl0QWxs
VW5uYW1lZFR5cGVEZWZpbml0aW9ucyhzdHJpbmdCdWlsZGVyLCBtX3RyaWUsIGVtaXR0ZWROYW1l
ZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKKyAgICBmb3IgKGF1dG8mIG5hbWVkVHlwZSA6
IG1fZGVwZW5kZW5jeUdyYXBoLmtleXMoKSkKKyAgICAgICAgZW1pdE5hbWVkVHlwZURlZmluaXRp
b24oc3RyaW5nQnVpbGRlciwgKm5hbWVkVHlwZSwgZW1pdHRlZE5hbWVkVHlwZXMsIGVtaXR0ZWRV
bm5hbWVkVHlwZXMpOworICAgIGZvciAoYXV0byYgbm9kZSA6IG1fdW5uYW1lZFR5cGVzVW5pcXVp
bmdNYXAudmFsdWVzKCkpCisgICAgICAgIGVtaXRVbm5hbWVkVHlwZURlZmluaXRpb24oc3RyaW5n
QnVpbGRlciwgKm5vZGUsIGVtaXR0ZWROYW1lZFR5cGVzLCBlbWl0dGVkVW5uYW1lZFR5cGVzKTsK
IH0KIAogTWFuZ2xlZFR5cGVOYW1lIFR5cGVOYW1lcjo6bWFuZ2xlZE5hbWVGb3JUeXBlKEFTVDo6
VW5uYW1lZFR5cGUmIHVubmFtZWRUeXBlKQogewotICAgIHJldHVybiBmaW5kKHVubmFtZWRUeXBl
LCBtX3RyaWUpLm1hbmdsZWROYW1lKCk7CisgICAgcmV0dXJuIGZpbmQodW5uYW1lZFR5cGUpLm1h
bmdsZWROYW1lKCk7CiB9CiAKIE1hbmdsZWRPck5hdGl2ZVR5cGVOYW1lIFR5cGVOYW1lcjo6bWFu
Z2xlZE5hbWVGb3JUeXBlKEFTVDo6TmFtZWRUeXBlJiBuYW1lZFR5cGUpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNM
VHlwZU5hbWVyLmgJKHJldmlzaW9uIDI0ODMzNikKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMv
d2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4
LDYgKzI4LDcgQEAKICNpZiBFTkFCTEUoV0VCR1BVKQogCiAjaW5jbHVkZSAiV0hMU0xNYW5nbGVk
TmFtZXMuaCIKKyNpbmNsdWRlICJXSExTTFVubmFtZWRUeXBlSGFzaC5oIgogI2luY2x1ZGUgIldI
TFNMVmlzaXRvci5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL3Rl
eHQvV1RGU3RyaW5nLmg+CkBAIC04NCwxNSArODUsMTUgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQg
ZW1pdE5hbWVkVHlwZURlZmluaXRpb24oU3RyaW5nQnVpbGRlciYsIEFTVDo6TmFtZWRUeXBlJiwg
SGFzaFNldDxBU1Q6Ok5hbWVkVHlwZSo+JiBlbWl0dGVkTmFtZWRUeXBlcywgSGFzaFNldDxCYXNl
VHlwZU5hbWVOb2RlKj4mIGVtaXR0ZWRVbm5hbWVkVHlwZXMpOwogICAgIHZvaWQgZW1pdFVubmFt
ZWRUeXBlRGVmaW5pdGlvbihTdHJpbmdCdWlsZGVyJiwgQmFzZVR5cGVOYW1lTm9kZSYsIEhhc2hT
ZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMsIEhhc2hTZXQ8QmFzZVR5cGVO
YW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKLSAgICB2b2lkIGVtaXRBbGxVbm5hbWVk
VHlwZURlZmluaXRpb25zKFN0cmluZ0J1aWxkZXImLCBWZWN0b3I8VW5pcXVlUmVmPEJhc2VUeXBl
TmFtZU5vZGU+PiYsIEhhc2hTZXQ8QVNUOjpOYW1lZFR5cGUqPiYgZW1pdHRlZE5hbWVkVHlwZXMs
IEhhc2hTZXQ8QmFzZVR5cGVOYW1lTm9kZSo+JiBlbWl0dGVkVW5uYW1lZFR5cGVzKTsKICAgICB2
b2lkIGVtaXRNZXRhbFR5cGVEZWNsYXJhdGlvbnMoU3RyaW5nQnVpbGRlciYpOwogICAgIHZvaWQg
ZW1pdE1ldGFsVHlwZURlZmluaXRpb25zKFN0cmluZ0J1aWxkZXImKTsKIAotICAgIFVuaXF1ZVJl
ZjxCYXNlVHlwZU5hbWVOb2RlPiBjcmVhdGVOYW1lTm9kZShBU1Q6OlVubmFtZWRUeXBlJiwgQmFz
ZVR5cGVOYW1lTm9kZSogcGFyZW50KTsKLSAgICBCYXNlVHlwZU5hbWVOb2RlKiBpbnNlcnQoQVNU
OjpVbm5hbWVkVHlwZSYsIFZlY3RvcjxVbmlxdWVSZWY8QmFzZVR5cGVOYW1lTm9kZT4+Jik7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhc2VUeXBlTmFtZU5vZGU+IGNyZWF0ZU5hbWVOb2RlKEFTVDo6
VW5uYW1lZFR5cGUmLCBCYXNlVHlwZU5hbWVOb2RlKiBwYXJlbnQpOworICAgIEJhc2VUeXBlTmFt
ZU5vZGUqIGluc2VydChBU1Q6OlVubmFtZWRUeXBlJik7CisgICAgQmFzZVR5cGVOYW1lTm9kZSYg
ZmluZChBU1Q6OlVubmFtZWRUeXBlJik7CiAKICAgICBQcm9ncmFtJiBtX3Byb2dyYW07Ci0gICAg
VmVjdG9yPFVuaXF1ZVJlZjxCYXNlVHlwZU5hbWVOb2RlPj4gbV90cmllOworICAgIEhhc2hNYXA8
VW5uYW1lZFR5cGVLZXksIHN0ZDo6dW5pcXVlX3B0cjxCYXNlVHlwZU5hbWVOb2RlPiwgVW5uYW1l
ZFR5cGVLZXk6Okhhc2gsIFVubmFtZWRUeXBlS2V5OjpUcmFpdHM+IG1fdW5uYW1lZFR5cGVzVW5p
cXVpbmdNYXA7CiAgICAgSGFzaE1hcDxBU1Q6OlVubmFtZWRUeXBlKiwgQmFzZVR5cGVOYW1lTm9k
ZSo+IG1fdW5uYW1lZFR5cGVNYXBwaW5nOwogICAgIEhhc2hNYXA8QVNUOjpOYW1lZFR5cGUqLCBN
YW5nbGVkVHlwZU5hbWU+IG1fbmFtZWRUeXBlTWFwcGluZzsKICAgICBIYXNoTWFwPEFTVDo6TmFt
ZWRUeXBlKiwgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8QmFzZVR5cGVOYW1lTm9kZT4+
PiBtX2RlcGVuZGVuY3lHcmFwaDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDI0ODMzNikKKysrIFNvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtMjIzMSw2ICsyMjMxLDcgQEAKIAkJN0M4MTM5QTgxRUQ2Mjg3NDAwQ0UyNkU4IC8qIEpTRE9N
T3BlcmF0aW9uUmV0dXJuaW5nUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gN0M4MTM5QTUxRUQ2MjgxRDAwQ0UyNkU4IC8qIEpTRE9NT3BlcmF0
aW9uUmV0dXJuaW5nUHJvbWlzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTdDODEzOUFBMUVENjYwNEIwMENFMjZFOCAvKiBKU0RPTUNhc3RlZFRo
aXNFcnJvckJlaGF2aW9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA3QzgxMzlBOTFFRDYyREYyMDBDRTI2RTggLyogSlNET01DYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTdDODNERTg2MUQwNENDNUQwMEZFQkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDODNERTg1MUQwNENCRDQwMEZF
QkNGMyAvKiBTcHJpbmdTb2x2ZXIuaCAqLzsgfTsKKwkJN0M4NUIyMDIyMkZCMDQ4NTAwMzA2ODRG
IC8qIFdITFNMVW5uYW1lZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gN0M4NUIyMDEyMkZCMDQ4NTAwMzA2ODRGIC8qIFdITFNMVW5uYW1lZFR5
cGUuY3BwICovOyB9OwogCQk3QzhFMzRBRDFFNEEzM0FGMDA1NENFMjMgLyogSlNET01Db252ZXJ0
QW55LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3QzhF
MzQ5MjFFNEEzMzhFMDA1NENFMjMgLyogSlNET01Db252ZXJ0QW55LmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJN0M4RTM0QUUxRTRBMzNBRjAwNTRD
RTIzIC8qIEpTRE9NQ29udmVydEJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDdDOEUzNDkzMUU0QTMzOEUwMDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRC
YXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJ
N0M4RTM0QUYxRTRBMzNBRjAwNTRDRTIzIC8qIEpTRE9NQ29udmVydEJvb2xlYW4uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdDOEUzNDk0MUU0QTMzOEUw
MDU0Q0UyMyAvKiBKU0RPTUNvbnZlcnRCb29sZWFuLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTk3MzksNiArOTc0MCw4IEBACiAJCTdDODEzOUE1
MUVENjI4MUQwMENFMjZFOCAvKiBKU0RPTU9wZXJhdGlvblJldHVybmluZ1Byb21pc2UuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNET01PcGVyYXRpb25SZXR1cm5pbmdQcm9t
aXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTdDODEzOUE5MUVENjJERjIwMENF
MjZFOCAvKiBKU0RPTUNhc3RlZFRoaXNFcnJvckJlaGF2aW9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTRE9NQ2FzdGVkVGhpc0Vycm9yQmVoYXZpb3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJN0M4M0RFODUxRDA0Q0JENDAwRkVCQ0YzIC8qIFNwcmluZ1Nv
bHZlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTcHJpbmdTb2x2ZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJN0M4NUIyMDEyMkZCMDQ4NTAwMzA2ODRGIC8q
IFdITFNMVW5uYW1lZFR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV0hMU0xVbm5hbWVkVHlw
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTdDODVCMjA0MjJGQjA2MzIwMDMw
Njg0RiAvKiBXSExTTFVubmFtZWRUeXBlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXSExTTFVubmFt
ZWRUeXBlSGFzaC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3QzhFMzQ5MjFFNEEz
MzhFMDA1NENFMjMgLyogSlNET01Db252ZXJ0QW55LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEpTRE9NQ29udmVydEFueS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk3QzhFMzQ5MzFFNEEzMzhFMDA1NENFMjMgLyogSlNET01Db252ZXJ0QmFzZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0RPTUNvbnZlcnRCYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTdDOEUzNDk0MUU0QTMzOEUwMDU0Q0UyMyAvKiBKU0RPTUNvbnZl
cnRCb29sZWFuLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTRE9NQ29udmVy
dEJvb2xlYW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE3MDU0LDggKzE3MDU3
LDggQEAKIAkJMUNBMEMyRjYyMUVFREFEMjAwQTExODYwIC8qIEFTVCAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCi0JCQkJMUM4NDBCOTAyMUVDMzBGOTAwRDA1MDBE
IC8qIFdITFNMQWRkcmVzc1NwYWNlLmggKi8sCiAJCQkJNTI5MTRDMkMyMkY5M0U1RDAwNTc4MTUw
IC8qIFdITFNMQWRkcmVzc0VzY2FwZU1vZGUuaCAqLywKKwkJCQkxQzg0MEI5MDIxRUMzMEY5MDBE
MDUwMEQgLyogV0hMU0xBZGRyZXNzU3BhY2UuaCAqLywKIAkJCQlDMjFCRjcyNTIxQ0Q4OUUyMDAy
Mjc5NzkgLyogV0hMU0xBcnJheVJlZmVyZW5jZVR5cGUuaCAqLywKIAkJCQlDMjFCRjcwOTIxQ0Q4
OUNBMDAyMjc5NzkgLyogV0hMU0xBcnJheVR5cGUuaCAqLywKIAkJCQlDMjFCRjczMDIxQ0Q4OUVE
MDAyMjc5NzkgLyogV0hMU0xBc3NpZ25tZW50RXhwcmVzc2lvbi5oICovLApAQCAtMTcxMzMsNyAr
MTcxMzYsOSBAQAogCQkJCUMyMUJGNzI5MjFDRDg5RTYwMDIyNzk3OSAvKiBXSExTTFR5cGVEZWZp
bml0aW9uLmggKi8sCiAJCQkJQzIwRjRGNjQyMURGQkU1QzAwNzBDNDVBIC8qIFdITFNMVHlwZVJl
ZmVyZW5jZS5jcHAgKi8sCiAJCQkJQzIxQkY3MUYyMUNEODlEQzAwMjI3OTc5IC8qIFdITFNMVHlw
ZVJlZmVyZW5jZS5oICovLAorCQkJCTdDODVCMjAxMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVu
bmFtZWRUeXBlLmNwcCAqLywKIAkJCQkxQzMzMjc3MjIxQ0YwRDJFMDAwREM5RjIgLyogV0hMU0xV
bm5hbWVkVHlwZS5oICovLAorCQkJCTdDODVCMjA0MjJGQjA2MzIwMDMwNjg0RiAvKiBXSExTTFVu
bmFtZWRUeXBlSGFzaC5oICovLAogCQkJCUMyMEY0RjY3MjFERkYzQTcwMDcwQzQ1QSAvKiBXSExT
TFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuY3BwICovLAogCQkJCUMyMUJGNzJCMjFDRDg5RTgwMDIy
Nzk3OSAvKiBXSExTTFVuc2lnbmVkSW50ZWdlckxpdGVyYWwuaCAqLywKIAkJCQkxQ0I2OUIzQjIx
REYwNDFFMDA2RTg0NkEgLyogV0hMU0xVbnNpZ25lZEludGVnZXJMaXRlcmFsVHlwZS5jcHAgKi8s
CkBAIC0zMzUxMSw2ICszMzUxNiw3IEBACiAJCQkJRjEyMTcxRjUxNkE4Q0VEMjAwMDA1M0NBIC8q
IFdlYlZUVEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNUQyMUE4MDIxM0VDRTVERjAw
QkI3MDY0IC8qIFdlYlZUVFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCMTBCNjk4MTE0
MEMxNzQwMDBCQzFDMjYgLyogV2ViVlRUVG9rZW5pemVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTdDODVCMjAyMjJGQjA0ODUwMDMwNjg0RiAvKiBXSExTTFVubmFtZWRUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUExNDgzMkMyMTg3RjY1QzcwMERBNjNBNiAvKiBXS1V0aWxpdGllcy5jIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M3Q0MwQTJDRjA3NDAwRDU3NjY0IC8qIFhMaW5rTmFtZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5h
bWVzLmNwcCBpbiBTb3VyY2VzICovLAo=
</data>
<flag name="review"
          id="391516"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>