<?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>156317</bug_id>
          
          <creation_ts>2016-04-06 16:39:34 -0700</creation_ts>
          <short_desc>JSC should have a simple way of gathering IC statistics</short_desc>
          <delta_ts>2016-04-06 19:03:22 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1181453</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 16:39:34 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181460</commentid>
    <comment_count>1</comment_count>
      <attachid>275831</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 16:50:01 -0700</bug_when>
    <thetext>Created attachment 275831
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181463</commentid>
    <comment_count>2</comment_count>
      <attachid>275831</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-04-06 16:57:15 -0700</bug_when>
    <thetext>Comment on attachment 275831
the patch

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

I think you forgot to include ICStats.h also.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:187
&gt; +    if (ident == &quot;supersedes&quot;) {
&gt; +        dataLog(*exec-&gt;codeBlock(), &quot; &quot;, exec-&gt;codeOrigin(), &quot;: &quot;);
&gt; +        switch (stubInfo-&gt;cacheType) {
&gt; +        case CacheType::Unset:
&gt; +            dataLog(&quot;Unset&quot;);
&gt; +            break;
&gt; +        case CacheType::GetByIdSelf:
&gt; +            dataLog(&quot;GetByIdSelf&quot;);
&gt; +            break;
&gt; +        case CacheType::Stub:
&gt; +            dataLog(&quot;Stub(&quot;, pointerDump(stubInfo-&gt;u.stub), &quot;)&quot;);
&gt; +            break;
&gt; +        default:
&gt; +            RELEASE_ASSERT_NOT_REACHED();
&gt; +            break;
&gt; +        }
&gt; +        dataLog(&quot; for &quot;, baseValue, &quot;\n&quot;);
&gt; +    }

This should be deleted before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181500</commentid>
    <comment_count>3</comment_count>
      <attachid>275841</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 18:10:49 -0700</bug_when>
    <thetext>Created attachment 275841
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181503</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-06 18:12:28 -0700</bug_when>
    <thetext>Attachment 275841 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/ICStats.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.h:167:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:66:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181513</commentid>
    <comment_count>5</comment_count>
      <attachid>275844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 18:43:01 -0700</bug_when>
    <thetext>Created attachment 275844
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181514</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-04-06 18:44:40 -0700</bug_when>
    <thetext>Attachment 275844 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/ICStats.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.h:167:  The parameter name &quot;event&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:63:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/ICStats.cpp:66:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 4 in 11 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181517</commentid>
    <comment_count>7</comment_count>
      <attachid>275844</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-04-06 18:46:36 -0700</bug_when>
    <thetext>Comment on attachment 275844
the patch

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

&gt; Source/JavaScriptCore/jit/ICStats.h:115
&gt; +        return m_kind + WTF::PtrHash&lt;const ClassInfo*&gt;::hash(m_classInfo) + StringHash::hash(m_propertyName.string());

+ tends to suck hard for combining hashes.
PairHash would probably be better here.

&gt; Source/JavaScriptCore/jit/ICStats.h:125
&gt; +    void log() const;

Odd API IMHO. 

I would not mind the explicit ICStats::instance().add().

&gt; Source/JavaScriptCore/jit/ICStats.h:182
&gt; +#define LOG_IC(arguments) do {                  \

No way to use a template to make this into a real function instead of a macro?

&gt; Source/WTF/ChangeLog:10
&gt; +        std::chrono. I now believe that std::chrono is just a bad decision, and I always want to
&gt; +        use doubles instead. This makes it easier to do the right thing and use doubles.

ahahahah. I dislike chrono too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181528</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 18:58:40 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; Comment on attachment 275844 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=275841&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/ICStats.h:115
&gt; &gt; +        return m_kind + WTF::PtrHash&lt;const ClassInfo*&gt;::hash(m_classInfo) + StringHash::hash(m_propertyName.string());
&gt; 
&gt; + tends to suck hard for combining hashes.
&gt; PairHash would probably be better here.
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/ICStats.h:125
&gt; &gt; +    void log() const;
&gt; 
&gt; Odd API IMHO. 
&gt; 
&gt; I would not mind the explicit ICStats::instance().add().

Yeah...  Since there is a call to this in 6 places or so, I was trying to conserve code size by having just one call.

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/ICStats.h:182
&gt; &gt; +#define LOG_IC(arguments) do {                  \
&gt; 
&gt; No way to use a template to make this into a real function instead of a
&gt; macro?

You could but it would be weird.  The point is to avoid evaluating the arguments if the flag is not set, since those arguments require work to evaluate (particularly the call to classInfoOrNull(), but not just that).

I think that if we didn&apos;t like the macro, we could just have JITOperations.cpp explicitly test Options::useICStats().  I just wanted the brevity so I went with the macro.

&gt; 
&gt; &gt; Source/WTF/ChangeLog:10
&gt; &gt; +        std::chrono. I now believe that std::chrono is just a bad decision, and I always want to
&gt; &gt; +        use doubles instead. This makes it easier to do the right thing and use doubles.
&gt; 
&gt; ahahahah. I dislike chrono too :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1181530</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-04-06 19:03:22 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/199140</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275831</attachid>
            <date>2016-04-06 16:50:01 -0700</date>
            <delta_ts>2016-04-06 18:10:49 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18610</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBA
CisyMDE2LTA0LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBoYXZlIGEgc2ltcGxlIHdheSBvZiBnYXRoZXJpbmcgSUMgc3RhdGlzdGljcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRz
IGEgY2hlYXAsIHJ1bnRpbWUtZW5hYmxlZCB3YXkgb2YgZ2F0aGVyaW5nIHN0YXRpc3RpY3MgYWJv
dXQgd2h5IHdlIHRha2UgdGhlIHNsb3cKKyAgICAgICAgcGF0aHMgZm9yIGlubGluZSBjYWNoZXMu
IFRoaXMgaXMgY29tcGxlbWVudGFyeSB0byBvdXIgZXhpc3RpbmcgYnl0ZWNvZGUgcHJvZmlsZXIu
IEV2ZW50dWFsbHkKKyAgICAgICAgd2UgbWF5IHdhbnQgdG8gY29tYmluZSB0aGUgdHdvIHRoaW5n
cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbm90IGEgc2xvdy1kb3duIG9uIGFueXRoaW5n
IGJlY2F1c2Ugd2Ugb25seSBkbyBleHRyYSB3b3JrIG9uIElDIHNsb3cgcGF0aHMgYW5kIGlmCisg
ICAgICAgIGl0J3MgZGlzYWJsZWQgaXQncyBqdXN0IGEgbG9hZC1hbmQtYnJhbmNoIHRvIHNraXAg
dGhlIHN0YXRzIGdhdGhlcmluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6
CisgICAgICAgICogcnVudGltZS9KU0NKU1ZhbHVlLmg6CisgICAgICAgICogcnVudGltZS9KU0NK
U1ZhbHVlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKU1ZhbHVlOjppbmhlcml0cyk6CisgICAg
ICAgIChKU0M6OkpTVmFsdWU6OmNsYXNzSW5mb09yTnVsbCk6CisgICAgICAgIChKU0M6OkpTVmFs
dWU6OnRvVGhpcyk6CisgICAgICAgICogcnVudGltZS9PcHRpb25zLmg6CisKIDIwMTYtMDQtMDYg
IE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVwZGF0ZSBlczYueWFt
bCB0byBleHBlY3QgZXM2L1Byb3h5X2ludGVybmFsX2dldF9jYWxsc19SZWdFeHBfY29uc3RydWN0
b3IuanMgdG8gcGFzcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lv
biAxOTkxMDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMTk5OCw2ICsxOTk4LDggQEAK
IAkJREU1QTBBMDAxQkEzQUMzRTAwM0Q0NDI0IC8qIEludHJpbnNpY0VtaXR0ZXIuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREU1QTA5RkYxQkEzQUMz
RTAwM0Q0NDI0IC8qIEludHJpbnNpY0VtaXR0ZXIuY3BwICovOyB9OwogCQlERUE3RTI0NDFCQkM2
NzcyMDBENzg0NDAgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1M0YyNTZFMTFCODdFMjgwMDBCNEI3
NjggLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5jcHAgKi87IH07CiAJCURFQTdFMjQ1MUJC
QzY3N0YwMEQ3ODQ0MCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MzkxN0U3QzFCNzkxMTA2MDAwRUJE
MzMgLyogSlNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCURDMjE0MzA3MUNBMzJFNTUwMDBBODg2OSAvKiBJ
Q1N0YXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBE
QzIxNDMwNjFDQTMyRTUyMDAwQTg4NjkgLyogSUNTdGF0cy5oICovOyB9OworCQlEQzIxNDMwODFD
QTMyRTU4MDAwQTg4NjkgLyogSUNTdGF0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBEQzIxNDMwNTFDQTMyRTUyMDAwQTg4NjkgLyogSUNTdGF0cy5j
cHAgKi87IH07CiAJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjUw
RTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTEyNEE4RjgwRTU1NTc3NTAwMzA5MUYxIC8q
IE9wYXF1ZUpTU3RyaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxMjRBOEY2MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAg
Ki87IH07CiAJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMThFM0E1NzBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwICovOyB9OwpAQCAtNDE5Niw2ICs0MTk4LDggQEAKIAkJRDIxMjAyMjgwQUQ0
MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252ZXJzaW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBEYXRlQ29udmVyc2lvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMwMDAzOTAxOUQ4QkU2RjAwMDIzRUIwIC8qIERGR1By
ZWNpc2VMb2NhbENsb2JiZXJpemUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
REZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBwYXRoID0gZGZnL0RGR1ByZWNpc2VMb2NhbENs
b2JiZXJpemUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJREMyMTQzMDUxQ0EzMkU1
MjAwMEE4ODY5IC8qIElDU3RhdHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSUNTdGF0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCURDMjE0MzA2
MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IElDU3RhdHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMxN0U4MTMx
QzlDN0ZENDAwOEE2QUIzIC8qIFNoYWRvd0NoaWNrZW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gU2hhZG93Q2hpY2tlbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCURDMTdFODE0MUM5QzdGRDQwMDhBNkFCMyAvKiBTaGFkb3dDaGlja2VuLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd0NoaWNrZW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMxN0U4MTUxQzlDN0ZENDAwOEE2QUIzIC8qIFNoYWRvd0No
aWNrZW5JbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYWRvd0No
aWNrZW5JbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00OTkyLDYgKzQ5
OTYsOCBAQAogCQkJCTBGMjRFNTNGMTdFQTlGNTkwMEFCQjIxNyAvKiBHUFJJbmZvLmggKi8sCiAJ
CQkJMEY0NjgwRDAxNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuY3BwICov
LAogCQkJCTBGNDY4MEQxMTRCQkM1RjgwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmgg
Ki8sCisJCQkJREMyMTQzMDUxQ0EzMkU1MjAwMEE4ODY5IC8qIElDU3RhdHMuY3BwICovLAorCQkJ
CURDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi8sCiAJCQkJREU1QTA5RkYx
QkEzQUMzRTAwM0Q0NDI0IC8qIEludHJpbnNpY0VtaXR0ZXIuY3BwICovLAogCQkJCTE0MjlEOTJE
MEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3BwICovLAogCQkJCTE0MjlEOTJFMEVEMjJENzAwMEI4
OTYxOSAvKiBKSVQuaCAqLywKQEAgLTc5MjAsNiArNzkyNiw3IEBACiAJCQkJQTVCQTE1RUIxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUNvbm5lY3Rpb25Ub1RhcmdldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5l
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBS
ZXBhdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQlEQzIxNDMwNzFDQTMyRTU1MDAwQTg4NjkgLyog
SUNTdGF0cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8q
IFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBBOUQxMUE5QjY2NDYwMDAxMzA2
QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMw
MEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCkBAIC04ODQ1LDYgKzg4NTIs
NyBAQAogCQkJCUZFM0EwNkIxMUMxMENCODQwMDM5MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3NzYxNDY5NDNCMDAwQ0YyNDQyIC8qIERGR09T
UkV4aXRDb21waWxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5NzcyMTQ2OTNB
RjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQlEQzIxNDMwODFDQTMyRTU4MDAwQTg4NjkgLyogSUNTdGF0cy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdP
U1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdG
NTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24g
MTk5MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enou
aCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNpbmNsdWRlICJIb3N0Q2FsbFJldHVyblZh
bHVlLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgogI2luY2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUg
IkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKSVRUb0RGR0RlZmVycmVkQ29tcGlsYXRpb25D
YWxsYmFjay5oIgpAQCAtNTQsNiArNTUsNyBAQAogI2luY2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAj
aW5jbHVkZSAiTGVnYWN5UHJvZmlsZXIuaCIKICNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5o
IgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlOYW1l
LmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpA
QCAtMTY0LDYgKzE2NiwyNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bkdlCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7CiAgICAg
UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9k
VHlwZTo6R2V0KTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2
bSwgdWlkKTsKKyAgICAKKyAgICBpZiAoaWRlbnQgPT0gInN1cGVyc2VkZXMiKSB7CisgICAgICAg
IGRhdGFMb2coKmV4ZWMtPmNvZGVCbG9jaygpLCAiICIsIGV4ZWMtPmNvZGVPcmlnaW4oKSwgIjog
Iik7CisgICAgICAgIHN3aXRjaCAoc3R1YkluZm8tPmNhY2hlVHlwZSkgeworICAgICAgICBjYXNl
IENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgICAgICBkYXRhTG9nKCJVbnNldCIpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ2FjaGVUeXBlOjpHZXRCeUlkU2VsZjoKKyAgICAg
ICAgICAgIGRhdGFMb2coIkdldEJ5SWRTZWxmIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6CisgICAgICAgICAgICBkYXRhTG9nKCJTdHViKCIsIHBv
aW50ZXJEdW1wKHN0dWJJbmZvLT51LnN0dWIpLCAiKSIpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiIGZvciAi
LCBiYXNlVmFsdWUsICJcbiIpOworICAgIH0KKyAgICAKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9w
ZXJhdGlvbkdldEJ5SWQsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3Qp
KTsKIH0KIApAQCAtMTc1LDYgKzE5OCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNl
KTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJu
YWxNZXRob2RUeXBlOjpHZXQpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpm
cm9tVWlkKHZtLCB1aWQpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdl
bmVyaWMsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIApA
QCAtMTg1LDYgKzIwOSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2UKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsK
IAogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOworICAgIExP
R19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJ
bmZvT3JOdWxsKCksIGlkZW50KSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQ
cm9wZXJ0eVNsb3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAKICAgICBib29sIGhh
c1Jlc3VsdCA9IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwpA
QCAtMjA3LDYgKzIzMiw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
SW4KICAgICBBY2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihz
dHViSW5mby0+YWNjZXNzVHlwZSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwga2V5KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkluT3B0
aW1pemUsIGJhc2UtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90
KGJhc2UsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAg
ICAgYm9vbCByZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlk
ZW50LCBzbG90KTsKICAgICAKQEAgLTIzMSw2ICsyNTcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkluCiAgICAgfQogCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElk
ZW50aWZpZXI6OmZyb21VaWQodm0sIGtleSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRp
b25JbiwgYmFzZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc0Jvb2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkp
OwogfQogCkBAIC0yNDksOSArMjc2LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeUlkU3RyaWMKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAg
ICAKKyAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7
CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0g
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSwgdHJ1
ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSkucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKSwgc2xvdCk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRC
eUlkU3RyaWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlkZW50KSk7CisKKyAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJl
U3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMjYxLDkgKzI5
MSwxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgCiAg
ICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCisgICAgSlNWYWx1ZSBiYXNl
VmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRl
bnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBz
bG90KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSksIGZhbHNlLCBleGVjLT5jb2RlQmxvY2so
KS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5w
dXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90
KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QsIGJhc2VW
YWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xv
dChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7
CisgICAgYmFzZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjdFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTI3Myw5ICszMDUsMTEgQEAgdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIAogICAgIHN0dWJJbmZvLT50
b29rU2xvd1BhdGggPSB0cnVlOwogICAgIAorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmll
cjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZEJhc2UpLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRl
eHQoKSk7Ci0gICAgYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSktPnB1dERp
cmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNs
b3QpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkpOworICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOworICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVu
dCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAg
LTI4NSw5ICszMTksMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJl
YwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgIAorICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBJZGVu
dGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBQdXRQcm9w
ZXJ0eVNsb3Qgc2xvdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBmYWxzZSwgZXhlYy0+
Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGFzT2JqZWN0KEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkQmFzZSkpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6
OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJh
dGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwg
aWRlbnQpKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVj
LT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVl
KS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWN0T3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8s
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2Us
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0zMDAsNiArMzM2LDcgQEAgdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRTdHJpYwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1
dEJ5SWRTdHJpY3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkp
OwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJs
b2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBi
YXNlVmFsdWUuaXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDog
bnVsbHB0cjsKQEAgLTMyMiw2ICszNTksNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0QnlJZE5vblN0CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29k
ZWRWYWx1ZSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2Rl
ZEJhc2UpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9w
dGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlkZW50KSk7CiAgICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5
SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXND
ZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgICAg
CkBAIC0zNDQsNiArMzgyLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWRE
aXJlYwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUp
OwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRCYXNlKSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0
U3RyaWN0T3B0aW1pemUsIGJhc2VPYmplY3QtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5w
dXRCeUlkQ29udGV4dCgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VP
YmplY3QtPnN0cnVjdHVyZSgqdm0pOwpAQCAtMzY2LDYgKzQwNSw3IEBAIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWMKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVl
OjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2Jq
ZWN0KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOworICAgIExPR19JQygoSUNFdmVudDo6
T3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCBiYXNlT2JqZWN0LT5jbGFz
c0luZm8oKSwgaWRlbnQpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBm
YWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxOTkx
MDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI0MSw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0N1c3RvbUdl
dHRlclNldHRlcigpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKICAgICBib29s
IGluaGVyaXRzKGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OworICAgIGNvbnN0IENsYXNzSW5mbyog
Y2xhc3NJbmZvT3JOdWxsKCkgY29uc3Q7CiAgICAgICAgIAogICAgIC8vIEV4dHJhY3RpbmcgdGhl
IHZhbHVlLgogICAgIGJvb2wgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSosIFdURjo6U3RyaW5nJikgY29u
c3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFs
dWVJbmxpbmVzLmgJKHJldmlzaW9uIDE5OTEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0Niw2ICs3NDYs
MTEgQEAgaW5saW5lIGJvb2wgSlNWYWx1ZTo6aW5oZXJpdHMoY29uc3QgQ2xhcwogICAgIHJldHVy
biBpc0NlbGwoKSAmJiBhc0NlbGwoKS0+aW5oZXJpdHMoY2xhc3NJbmZvKTsKIH0KIAoraW5saW5l
IGNvbnN0IENsYXNzSW5mbyogSlNWYWx1ZTo6Y2xhc3NJbmZvT3JOdWxsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+Y2xhc3NJbmZvKCkgOiBudWxscHRyOworfQor
CiBpbmxpbmUgSlNWYWx1ZSBKU1ZhbHVlOjp0b1RoaXMoRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9k
ZSBlY21hTW9kZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+bWV0
aG9kVGFibGUoZXhlYy0+dm0oKSktPnRvVGhpcyhhc0NlbGwoKSwgZXhlYywgZWNtYU1vZGUpIDog
dG9UaGlzU2xvd0Nhc2UoZXhlYywgZWNtYU1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL09wdGlvbnMuaAkocmV2aXNpb24gMTk5MTAzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNiArMzUxLDgg
QEAgdHlwZWRlZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYodW5zaWdu
ZWQsIHdhdGNoZG9nLCAwLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVkLCBOID0gYSB0
aW1lb3V0IHBlcmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgXAorICAgIHYoYm9vbCwg
dXNlSUNTdGF0cywgZmFsc2UsIG51bGxwdHIpIFwKKyAgICBcCiAgICAgdihib29sLCBkdW1wTW9k
dWxlUmVjb3JkLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZHVtcE1vZHVsZUxvYWRp
bmdTdGF0ZSwgZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGV4cG9zZUludGVybmFsTW9k
dWxlTG9hZGVyLCBmYWxzZSwgImV4cG9zZSB0aGUgaW50ZXJuYWwgbW9kdWxlIGxvYWRlciBvYmpl
Y3QgdG8gdGhlIGdsb2JhbCBzcGFjZSBmb3IgZGVidWdnaW5nIikgXApJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE5OTEyNCkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTggQEAKKzIwMTYtMDQtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBKU0Mgc2hvdWxkIGhhdmUgYSBzaW1wbGUgd2F5IG9mIGdhdGhlcmluZyBJQyBzdGF0
aXN0aWNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTYzMTcKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisg
ICAgICAgIE1ha2UgaXQgZWFzaWVyIHRvIGRvIHJlbGF0aXZlIHNsZWVwaW5nIG9uIGEgY29uZGl0
aW9uLiBQcmV2aW91c2x5IHlvdSBjb3VsZCBkbyB0aGlzIHVzaW5nCisgICAgICAgIHN0ZDo6Y2hy
b25vLiBJIG5vdyBiZWxpZXZlIHRoYXQgc3RkOjpjaHJvbm8gaXMganVzdCBhIGJhZCBkZWNpc2lv
biwgYW5kIEkgYWx3YXlzIHdhbnQgdG8KKyAgICAgICAgdXNlIGRvdWJsZXMgaW5zdGVhZC4gVGhp
cyBtYWtlcyBpdCBlYXNpZXIgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCB1c2UgZG91Ymxlcy4K
KworICAgICAgICAqIHd0Zi9Db25kaXRpb24uaDoKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uQmFz
ZTo6d2FpdFVudGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKToKKyAgICAgICAgKFdURjo6Q29uZGl0
aW9uQmFzZTo6d2FpdEZvclNlY29uZHMpOgorCiAyMDE2LTA0LTA1ICBTaW1vbiBGcmFzZXIgIDxz
aW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBvcGVyYXRvcj09IGFu
ZCBvcGVyYXRvciE9IGZvciBPcHRpb25hbDw+CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRp
b24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24g
MTk5MTAzKQorKysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE0MSw2ICsxNDEsMzEgQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIHsKICAgICAgICAg
cmV0dXJuIHdhaXRGb3JTZWNvbmRzSW1wbChsb2NrLCBhYnNvbHV0ZVRpbWVvdXRTZWNvbmRzIC0g
bW9ub3RvbmljYWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIHdhaXRGb3JT
ZWNvbmRzKExvY2tUeXBlJiBsb2NrLCBkb3VibGUgcmVsYXRpdmVUaW1lb3V0U2Vjb25kcywgY29u
c3QgRnVuY3RvciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgZG91YmxlIHJlbGF0aXZlVGlt
ZW91dE5hbm9zZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAw
LjAgKiAxMDAwLjApOworICAgICAgICAKKyAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFu
b3NlY29uZHMgPiAwKSkgeworICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVv
dXRzIGFzIHdlbGwgYXMgTmFOLgorICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAg
ICAgIGxvY2subG9jaygpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91
YmxlPihzdGQ6Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKKyAgICAgICAgICAg
IC8vIElmIHRoZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNp
bmcgYSA2NC1iaXQgaW50ZWdlciwgdGhlbiB3ZQorICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2Vs
bCB3YWl0IGZvcmV2ZXIuCisgICAgICAgICAgICB3YWl0KGxvY2ssIHByZWRpY2F0ZSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0byBy
ZWxhdGl2ZVRpbWVvdXQgPQorICAgICAgICAgICAgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzKHN0
YXRpY19jYXN0PGludDY0X3Q+KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzKSk7CisKKyAgICAg
ICAgcmV0dXJuIHdhaXRGb3IobG9jaywgcmVsYXRpdmVUaW1lb3V0LCBwcmVkaWNhdGUpOworICAg
IH0KIAogICAgIC8vIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBleHRyZW1lbHkgZmFzdCB3aGVu
IG5vYm9keSBpcyB3YWl0aW5nLiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHRyeSB0bwogICAgIC8v
IGF2b2lkIGNhbGxpbmcgdGhpcyBtZXRob2QuCg==
</data>
<flag name="review"
          id="300128"
          type_id="1"
          status="-"
          setter="keith_miller"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275841</attachid>
            <date>2016-04-06 18:10:49 -0700</date>
            <delta_ts>2016-04-06 18:43:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MTI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBA
CisyMDE2LTA0LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBoYXZlIGEgc2ltcGxlIHdheSBvZiBnYXRoZXJpbmcgSUMgc3RhdGlzdGljcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRz
IGEgY2hlYXAsIHJ1bnRpbWUtZW5hYmxlZCB3YXkgb2YgZ2F0aGVyaW5nIHN0YXRpc3RpY3MgYWJv
dXQgd2h5IHdlIHRha2UgdGhlIHNsb3cKKyAgICAgICAgcGF0aHMgZm9yIGlubGluZSBjYWNoZXMu
IFRoaXMgaXMgY29tcGxlbWVudGFyeSB0byBvdXIgZXhpc3RpbmcgYnl0ZWNvZGUgcHJvZmlsZXIu
IEV2ZW50dWFsbHkKKyAgICAgICAgd2UgbWF5IHdhbnQgdG8gY29tYmluZSB0aGUgdHdvIHRoaW5n
cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbm90IGEgc2xvdy1kb3duIG9uIGFueXRoaW5n
IGJlY2F1c2Ugd2Ugb25seSBkbyBleHRyYSB3b3JrIG9uIElDIHNsb3cgcGF0aHMgYW5kIGlmCisg
ICAgICAgIGl0J3MgZGlzYWJsZWQgaXQncyBqdXN0IGEgbG9hZC1hbmQtYnJhbmNoIHRvIHNraXAg
dGhlIHN0YXRzIGdhdGhlcmluZyBjb2RlLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBqaXQvSUNTdGF0cy5jcHA6IEFkZGVk
LgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6IEFkZGVkLgorICAgICAgICAqIGppdC9KSVRPcGVy
YXRpb25zLmNwcDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBy
dW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkpTVmFsdWU6OmluaGVy
aXRzKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6Y2xhc3NJbmZvT3JOdWxsKToKKyAgICAgICAg
KEpTQzo6SlNWYWx1ZTo6dG9UaGlzKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwog
MjAxNi0wNC0wNiAgTWFyayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgVXBk
YXRlIGVzNi55YW1sIHRvIGV4cGVjdCBlczYvUHJveHlfaW50ZXJuYWxfZ2V0X2NhbGxzX1JlZ0V4
cF9jb25zdHJ1Y3Rvci5qcyB0byBwYXNzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHJldmlzaW9uIDE5OTEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0xOTk4LDYg
KzE5OTgsOCBAQAogCQlERTVBMEEwMDFCQTNBQzNFMDAzRDQ0MjQgLyogSW50cmluc2ljRW1pdHRl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBERTVB
MDlGRjFCQTNBQzNFMDAzRDQ0MjQgLyogSW50cmluc2ljRW1pdHRlci5jcHAgKi87IH07CiAJCURF
QTdFMjQ0MUJCQzY3NzIwMEQ3ODQ0MCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzRjI1NkUxMUI4
N0UyODAwMEI0Qjc2OCAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmNwcCAqLzsgfTsKIAkJ
REVBN0UyNDUxQkJDNjc3RjAwRDc4NDQwIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUzOTE3RTdDMUI3
OTExMDYwMDBFQkQzMyAvKiBKU1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJREMyMTQzMDcxQ0EzMkU1NTAw
MEE4ODY5IC8qIElDU3RhdHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmggKi87IH07CisJ
CURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IERDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAv
KiBJQ1N0YXRzLmNwcCAqLzsgfTsKIAkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1
ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTI0QThGNTBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMTI0QThGODBFNTU1Nzc1
MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRTEyNEE4RjYwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpT
U3RyaW5nLmNwcCAqLzsgfTsKIAkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOEUzQTU3MERG
OTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgKi87IH07CkBAIC00MTk2LDYgKzQxOTgsOCBAQAogCQlE
MjEyMDIyODBBRDQzMTBDMDBFRDc5QjYgLyogRGF0ZUNvbnZlcnNpb24uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IERhdGVDb252ZXJzaW9uLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIxMjAyMjkwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVDb252
ZXJzaW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEYXRlQ29udmVyc2lv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzAwMDM5MDE5RDhCRTZGMDAwMjNF
QjAgLyogREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHBhdGggPSBkZmcvREZHUHJl
Y2lzZUxvY2FsQ2xvYmJlcml6ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlEQzIx
NDMwNTFDQTMyRTUyMDAwQTg4NjkgLyogSUNTdGF0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBJQ1N0YXRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8qIElDU3RhdHMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSUNTdGF0cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlEQzE3RTgxMzFDOUM3RkQ0MDA4QTZBQjMgLyogU2hhZG93Q2hpY2tlbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTaGFkb3dDaGlja2VuLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJREMxN0U4MTQxQzlDN0ZENDAwOEE2QUIzIC8qIFNoYWRvd0No
aWNrZW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhZG93Q2hpY2tlbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzE3RTgxNTFDOUM3RkQ0MDA4QTZBQjMg
LyogU2hhZG93Q2hpY2tlbklubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gU2hhZG93Q2hpY2tlbklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTQ5OTIsNiArNDk5Niw4IEBACiAJCQkJMEYyNEU1M0YxN0VBOUY1OTAwQUJCMjE3IC8qIEdQUklu
Zm8uaCAqLywKIAkJCQkwRjQ2ODBEMDE0QkJDNUY4MDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5W
YWx1ZS5jcHAgKi8sCiAJCQkJMEY0NjgwRDExNEJCQzVGODAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0
dXJuVmFsdWUuaCAqLywKKwkJCQlEQzIxNDMwNTFDQTMyRTUyMDAwQTg4NjkgLyogSUNTdGF0cy5j
cHAgKi8sCisJCQkJREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8qIElDU3RhdHMuaCAqLywKIAkJ
CQlERTVBMDlGRjFCQTNBQzNFMDAzRDQ0MjQgLyogSW50cmluc2ljRW1pdHRlci5jcHAgKi8sCiAJ
CQkJMTQyOUQ5MkQwRUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5jcHAgKi8sCiAJCQkJMTQyOUQ5MkUw
RUQyMkQ3MDAwQjg5NjE5IC8qIEpJVC5oICovLApAQCAtNzkyMCw2ICs3OTI2LDcgQEAKIAkJCQlB
NUJBMTVFQjE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlQ29ubmVjdGlvblRvVGFyZ2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCURDMjE0MzA3MUNBMzJFNTUw
MDBBODg2OSAvKiBJQ1N0YXRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRB
MDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlC
NjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTg4
NDUsNiArODg1Miw3IEBACiAJCQkJRkUzQTA2QjExQzEwQ0I4NDAwMzkwRkREIC8qIEpJVEJpdEFu
ZEdlbmVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTc3NjE0Njk0M0IwMDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
MDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCURDMjE0MzA4MUNBMzJFNTgwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29t
cGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0
NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4
MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9JQ1N0YXRzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworYm9vbCBJQ0V2ZW50OjpvcGVyYXRvcjwoY29uc3QgSUNFdmVudCYg
b3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKG1fY2xhc3NJbmZvICE9IG90aGVyLm1fY2xhc3NJbmZv
KSB7CisgICAgICAgIGlmICghbV9jbGFzc0luZm8pCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFvdGhlci5tX2NsYXNzSW5mbykKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIHN0cmNtcChtX2NsYXNzSW5mby0+Y2xhc3NOYW1lLCBvdGhlci5t
X2NsYXNzSW5mby0+Y2xhc3NOYW1lKSA8IDA7CisgICAgfQorICAgIAorICAgIGlmIChtX3Byb3Bl
cnR5TmFtZSAhPSBvdGhlci5tX3Byb3BlcnR5TmFtZSkKKyAgICAgICAgcmV0dXJuIGNvZGVQb2lu
dENvbXBhcmUobV9wcm9wZXJ0eU5hbWUuc3RyaW5nKCksIG90aGVyLm1fcHJvcGVydHlOYW1lLnN0
cmluZygpKSA8IDA7CisgICAgCisgICAgcmV0dXJuIG1fa2luZCA8IG90aGVyLm1fa2luZDsKK30K
Kwordm9pZCBJQ0V2ZW50OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fa2luZCwgIigiLCBtX2NsYXNzSW5mbyA/IG1fY2xhc3NJbmZvLT5jbGFzc05hbWUg
OiAiPG51bGw+IiwgIiwgIiwgbV9wcm9wZXJ0eU5hbWUsICIpIik7Cit9CisKK3ZvaWQgSUNFdmVu
dDo6bG9nKCkgY29uc3QKK3sKKyAgICBJQ1N0YXRzOjppbnN0YW5jZSgpLmFkZCgqdGhpcyk7Cit9
CisKK0F0b21pYzxJQ1N0YXRzKj4gSUNTdGF0czo6c19pbnN0YW5jZTsKKworSUNTdGF0czo6SUNT
dGF0cygpCit7CisgICAgbV90aHJlYWQgPSBjcmVhdGVUaHJlYWQoCisgICAgICAgICJKU0MgSUNT
dGF0cyIsCisgICAgICAgIFt0aGlzXSAoKSB7CisgICAgICAgICAgICBMb2NrSG9sZGVyIGxvY2tl
cihtX2xvY2spOworICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgIG1fY29u
ZGl0aW9uLndhaXRGb3JTZWNvbmRzKG1fbG9jaywgMSwgW3RoaXNdICgpIC0+IGJvb2wgeyByZXR1
cm4gbV9zaG91bGRTdG9wOyB9KTsKKyAgICAgICAgICAgICAgICBpZiAobV9zaG91bGRTdG9wKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCJJQ1N0YXRzOlxuIik7CisgICAgICAgICAgICAgICAgYXV0byBsaXN0ID0g
bV9zcGVjdHJ1bS5idWlsZExpc3QoKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBsaXN0LnNpemUoKTsgaS0tOykKKyAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgICIs
IGxpc3RbaV0ua2V5LCAiOiAiLCBsaXN0W2ldLmNvdW50LCAiXG4iKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfSk7Cit9CisKK0lDU3RhdHM6On5JQ1N0YXRzKCkKK3sKKyAgICB7CisgICAgICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgIG1fc2hvdWxkU3RvcCA9IHRydWU7
CisgICAgICAgIG1fY29uZGl0aW9uLm5vdGlmeUFsbCgpOworICAgIH0KKyAgICAKKyAgICB3YWl0
Rm9yVGhyZWFkQ29tcGxldGlvbihtX3RocmVhZCk7Cit9CisKK3ZvaWQgSUNTdGF0czo6YWRkKGNv
bnN0IElDRXZlbnQmIGV2ZW50KQoreworICAgIG1fc3BlY3RydW0uYWRkKGV2ZW50KTsKK30KKwor
SUNTdGF0cyYgSUNTdGF0czo6aW5zdGFuY2UoKQoreworICAgIGZvciAoOzspIHsKKyAgICAgICAg
SUNTdGF0cyogcmVzdWx0ID0gc19pbnN0YW5jZS5sb2FkKCk7CisgICAgICAgIGlmIChyZXN1bHQp
CisgICAgICAgICAgICByZXR1cm4gKnJlc3VsdDsKKyAgICAgICAgCisgICAgICAgIElDU3RhdHMq
IG5ld1N0YXRzID0gbmV3IElDU3RhdHMoKTsKKyAgICAgICAgaWYgKHNfaW5zdGFuY2UuY29tcGFy
ZUV4Y2hhbmdlV2VhayhudWxscHRyLCBuZXdTdGF0cykpCisgICAgICAgICAgICByZXR1cm4gKm5l
d1N0YXRzOworICAgICAgICAKKyAgICAgICAgZGVsZXRlIG5ld1N0YXRzOworICAgIH0KK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgSUNFdmVudDo6S2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworI2RlZmluZSBJQ0VWRU5UX0tJTkRfRFVN
UChuYW1lKSBjYXNlIElDRXZlbnQ6Om5hbWU6IG91dC5wcmludCgjbmFtZSk7IHJldHVybjsKKyAg
ICAgICAgRk9SX0VBQ0hfSUNFVkVOVF9LSU5EKElDRVZFTlRfS0lORF9EVU1QKTsKKyN1bmRlZiBJ
Q0VWRU5UX0tJTkRfRFVNUAorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0lDU3RhdHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0lDU3RhdHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNT
dGF0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSUNTdGF0c19oCisjZGVmaW5l
IElDU3RhdHNfaAorCisjaW5jbHVkZSAiQ2xhc3NJbmZvLmgiCisjaW5jbHVkZSAiSWRlbnRpZmll
ci5oIgorI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFRhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorI2luY2x1ZGUgPHd0Zi9TcGVjdHJ1bS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworI2RlZmlu
ZSBGT1JfRUFDSF9JQ0VWRU5UX0tJTkQobWFjcm8pIFwKKyAgICBtYWNybyhJbnZhbGlkS2luZCkg
XAorICAgIG1hY3JvKE9wZXJhdGlvbkdldEJ5SWQpIFwKKyAgICBtYWNybyhPcGVyYXRpb25HZXRC
eUlkR2VuZXJpYykgXAorICAgIG1hY3JvKE9wZXJhdGlvbkdldEJ5SWRCdWlsZExpc3QpIFwKKyAg
ICBtYWNybyhPcGVyYXRpb25HZXRCeUlkT3B0aW1pemUpIFwKKyAgICBtYWNybyhPcGVyYXRpb25J
bk9wdGltaXplKSBcCisgICAgbWFjcm8oT3BlcmF0aW9uSW4pIFwKKyAgICBtYWNybyhPcGVyYXRp
b25HZW5lcmljSW4pIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkU3RyaWN0KSBcCisgICAg
bWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCkgXAorICAgIG1hY3JvKE9wZXJhdGlvblB1
dEJ5SWREaXJlY3RTdHJpY3QpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9u
U3RyaWN0KSBcCisgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZFN0cmljdE9wdGltaXplKSBcCisg
ICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplKSBcCisgICAgbWFjcm8o
T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdE9wdGltaXplKSBcCisgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplKSBcCisgICAgbWFjcm8oT3BlcmF0aW9u
UHV0QnlJZFN0cmljdEJ1aWxkTGlzdCkgXAorICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWROb25T
dHJpY3RCdWlsZExpc3QpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0
QnVpbGRMaXN0KSBcCisgICAgbWFjcm8oT3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdEJ1
aWxkTGlzdCkKKworY2xhc3MgSUNFdmVudCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyNk
ZWZpbmUgSUNFVkVOVF9LSU5EX0RFQ0xBUkFUSU9OKG5hbWUpIG5hbWUsCisgICAgICAgIEZPUl9F
QUNIX0lDRVZFTlRfS0lORChJQ0VWRU5UX0tJTkRfREVDTEFSQVRJT04pCisjdW5kZWYgSUNFVkVO
VF9LSU5EX0RFQ0xBUkFUSU9OCisgICAgfTsKKyAgICAKKyAgICBJQ0V2ZW50KCkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIElDRXZlbnQoS2luZCBraW5kLCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbywgY29uc3QgSWRlbnRpZmllciBwcm9wZXJ0eU5hbWUpCisgICAgICAgIDogbV9raW5kKGtp
bmQpCisgICAgICAgICwgbV9jbGFzc0luZm8oY2xhc3NJbmZvKQorICAgICAgICAsIG1fcHJvcGVy
dHlOYW1lKHByb3BlcnR5TmFtZSkKKyAgICB7CisgICAgfQorCisgICAgSUNFdmVudChXVEY6Okhh
c2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9raW5kKE9wZXJhdGlvbkdldEJ5
SWQpCisgICAgeworICAgIH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSUNFdmVu
dCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kID09IG90aGVyLm1f
a2luZAorICAgICAgICAgICAgJiYgbV9jbGFzc0luZm8gPT0gb3RoZXIubV9jbGFzc0luZm8KKyAg
ICAgICAgICAgICYmIG1fcHJvcGVydHlOYW1lID09IG90aGVyLm1fcHJvcGVydHlOYW1lOworICAg
IH0KKyAgICAKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSUNFdmVudCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorICAgIAor
ICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IElDRXZlbnQmIG90aGVyKSBjb25zdDsKKyAgICBib29s
IG9wZXJhdG9yPihjb25zdCBJQ0V2ZW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gb3RoZXIgPCAq
dGhpczsgfQorICAgIGJvb2wgb3BlcmF0b3I8PShjb25zdCBJQ0V2ZW50JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gISgqdGhpcyA+IG90aGVyKTsgfQorICAgIGJvb2wgb3BlcmF0b3I+PShjb25zdCBJ
Q0V2ZW50JiBvdGhlcikgY29uc3QgeyByZXR1cm4gISgqdGhpcyA8IG90aGVyKTsgfQorICAgIAor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICp0aGlzICE9IElDRXZlbnQoKTsKKyAgICB9CisgICAgCisgICAgS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiBtX2NsYXNzSW5mbzsgfQorICAgIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlOYW1lOyB9CisgICAgCisgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kICsgV1RGOjpQdHJI
YXNoPGNvbnN0IENsYXNzSW5mbyo+OjpoYXNoKG1fY2xhc3NJbmZvKSArIFN0cmluZ0hhc2g6Omhh
c2gobV9wcm9wZXJ0eU5hbWUuc3RyaW5nKCkpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
PSBJQ0V2ZW50KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisgICAgCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCisgICAgdm9pZCBsb2coKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgCisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkS2luZCB9
OworICAgIGNvbnN0IENsYXNzSW5mbyogbV9jbGFzc0luZm8geyBudWxscHRyIH07CisgICAgSWRl
bnRpZmllciBtX3Byb3BlcnR5TmFtZTsKK307CisKK3N0cnVjdCBJQ0V2ZW50SGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgSUNFdmVudCYga2V5KSB7IHJldHVybiBrZXkuaGFz
aCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSUNFdmVudCYgYSwgY29uc3QgSUNF
dmVudCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlND
CisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OklDRXZlbnQ6OktpbmQpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OklDRXZlbnQ+IHsKKyAg
ICB0eXBlZGVmIEpTQzo6SUNFdmVudEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6
OklDRXZlbnQ+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6SUNFdmVudD4geworICAgIHN0
YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSUNTdGF0cyB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoSUNTdGF0cyk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgSUNTdGF0cygpOworICAgIH5JQ1N0YXRzKCk7CisgICAgCisgICAgdm9p
ZCBhZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpOworICAgIAorICAgIHN0YXRpYyBJQ1N0YXRzJiBp
bnN0YW5jZSgpOworICAgIAorcHJpdmF0ZToKKworICAgIFNwZWN0cnVtPElDRXZlbnQsIHVpbnQ2
NF90PiBtX3NwZWN0cnVtOworICAgIFRocmVhZElkZW50aWZpZXIgbV90aHJlYWQ7CisgICAgTG9j
ayBtX2xvY2s7CisgICAgQ29uZGl0aW9uIG1fY29uZGl0aW9uOworICAgIGJvb2wgbV9zaG91bGRT
dG9wIHsgZmFsc2UgfTsKKyAgICAKKyAgICBzdGF0aWMgQXRvbWljPElDU3RhdHMqPiBzX2luc3Rh
bmNlOworfTsKKworI2RlZmluZSBMT0dfSUMoYXJndW1lbnRzKSBkbyB7ICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBpZiAoT3B0aW9uczo6dXNlSUNTdGF0cygpKSAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgKElDRXZlbnQgYXJndW1lbnRzKS5sb2coKTsgICAgICAgICAgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIElDU3RhdHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHJldmlzaW9uIDE5OTEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKICNpbmNsdWRlICJFeGNl
cHRpb25GdXp6LmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCiAjaW5jbHVkZSAiSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIgorI2luY2x1ZGUgIklDU3RhdHMuaCIKICNpbmNsdWRlICJKSVQuaCIK
ICNpbmNsdWRlICJKSVRFeGNlcHRpb25zLmgiCiAjaW5jbHVkZSAiSklUVG9ERkdEZWZlcnJlZENv
bXBpbGF0aW9uQ2FsbGJhY2suaCIKQEAgLTU0LDYgKzU1LDcgQEAKICNpbmNsdWRlICJKU1dpdGhT
Y29wZS5oIgogI2luY2x1ZGUgIkxlZ2FjeVByb2ZpbGVyLmgiCiAjaW5jbHVkZSAiT2JqZWN0Q29u
c3RydWN0b3IuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgogI2luY2x1ZGUgIlBy
b3BlcnR5TmFtZS5oIgogI2luY2x1ZGUgIlJlcGF0Y2guaCIKICNpbmNsdWRlICJTY29wZWRBcmd1
bWVudHMuaCIKQEAgLTE2NCw2ICsxNjYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkdlCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFz
ZSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNsb3Q6OkludGVy
bmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6
ZnJvbVVpZCh2bSwgdWlkKTsKKyAgICAKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkdl
dEJ5SWQsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIApA
QCAtMTc1LDYgKzE3OSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
R2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShiYXNlKTsKICAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RU
eXBlOjpHZXQpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZt
LCB1aWQpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uR2V0QnlJZEdlbmVyaWMsIGJh
c2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGJhc2VWYWx1ZS5nZXQoZXhlYywgaWRlbnQsIHNsb3QpKTsKIH0KIApAQCAtMTg1LDYg
KzE5MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBJ
ZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKIAogICAgIEpT
VmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGJhc2UpOworICAgIExPR19JQygoSUNF
dmVudDo6T3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxs
KCksIGlkZW50KSk7CiAgICAgUHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCBQcm9wZXJ0eVNs
b3Q6OkludGVybmFsTWV0aG9kVHlwZTo6R2V0KTsKICAgICAKICAgICBib29sIGhhc1Jlc3VsdCA9
IGJhc2VWYWx1ZS5nZXRQcm9wZXJ0eVNsb3QoZXhlYywgaWRlbnQsIHNsb3QpOwpAQCAtMjA3LDYg
KzIxMyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KICAgICBB
Y2Nlc3NUeXBlIGFjY2Vzc1R5cGUgPSBzdGF0aWNfY2FzdDxBY2Nlc3NUeXBlPihzdHViSW5mby0+
YWNjZXNzVHlwZSk7CiAKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwga2V5KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvbkluT3B0aW1pemUsIGJh
c2UtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2UsIFBy
b3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpIYXNQcm9wZXJ0eSk7CiAgICAgYm9vbCBy
ZXN1bHQgPSBhc09iamVjdChiYXNlKS0+Z2V0UHJvcGVydHlTbG90KGV4ZWMsIGlkZW50LCBzbG90
KTsKICAgICAKQEAgLTIzMSw2ICsyMzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbkluCiAgICAgfQogCiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6
OmZyb21VaWQodm0sIGtleSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25JbiwgYmFz
ZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc0Jv
b2xlYW4oYXNPYmplY3QoYmFzZSktPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkpOwogfQogCkBA
IC0yNDksOSArMjU3LDEyIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3Ry
aWMKICAgICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAKKyAgICBK
U1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSWRl
bnRpZmllciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgUHV0UHJv
cGVydHlTbG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSwgdHJ1ZSwgZXhlYy0+
Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSkucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZh
bHVlKSwgc2xvdCk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkU3RyaWN0
LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlkZW50KSk7CisKKyAgICBQdXRQcm9wZXJ0
eVNsb3Qgc2xvdChiYXNlVmFsdWUsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpk
ZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMjYxLDkgKzI3MiwxMSBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5vblN0CiAgICAgCiAgICAgc3R1Yklu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSksIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJ
ZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXRJbmxpbmUo
ZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBM
T0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QsIGJhc2VWYWx1ZS5jbGFz
c0luZm9Pck51bGwoKSwgaWRlbnQpKTsKKyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYmFz
ZVZhbHVlLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVj
dFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTI3Myw5ICsyODYsMTEgQEAgdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1Bh
dGggPSB0cnVlOwogICAgIAorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVp
ZCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChKU1ZhbHVlOjpkZWNvZGUoZW5j
b2RlZEJhc2UpLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0g
ICAgYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSktPnB1dERpcmVjdChleGVj
LT52bSgpLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAg
IExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCwgYmFzZVZhbHVl
LmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJh
c2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAg
IGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkQmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTI4NSw5ICsz
MDAsMTEgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogICAgIAog
ICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVlOwogICAgIAorICAgIEpTVmFsdWUgYmFz
ZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKTsKICAgICBJZGVudGlmaWVyIGlk
ZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlkKTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qg
c2xvdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwotICAgIGFzT2JqZWN0KEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkQmFzZSkpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5
SWREaXJlY3ROb25TdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsK
KyAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxv
Y2soKS0+cHV0QnlJZENvbnRleHQoKSk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGly
ZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xv
dCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkU3RyaWN0T3B0aW1p
emUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpCkBAIC0zMDAsNiArMzE3LDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblB1dEJ5SWRTdHJpYwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29k
ZShlbmNvZGVkVmFsdWUpOwogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGVuY29kZWRCYXNlKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRTdHJp
Y3RPcHRpbWl6ZSwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkpOwogICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1
dEJ5SWRDb250ZXh0KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUu
aXNDZWxsKCkgPyBiYXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsK
QEAgLTMyMiw2ICszNDAsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZE5v
blN0CiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7
CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwor
ICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdE9wdGltaXplLCBi
YXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlkZW50KSk7CiAgICAgUHV0UHJvcGVydHlTbG90
IHNsb3QoYmFzZVZhbHVlLCBmYWxzZSwgZXhlYy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0
KCkpOwogCiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlVmFsdWUuaXNDZWxsKCkgPyBi
YXNlVmFsdWUuYXNDZWxsKCktPnN0cnVjdHVyZSgqdm0pIDogbnVsbHB0cjsgICAgCkBAIC0zNDQs
NiArMzYzLDcgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogCiAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpT
T2JqZWN0KiBiYXNlT2JqZWN0ID0gYXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNl
KSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0
aW1pemUsIGJhc2VPYmplY3QtPmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgIFB1dFByb3BlcnR5
U2xvdCBzbG90KGJhc2VPYmplY3QsIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29u
dGV4dCgpKTsKICAgICAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VPYmplY3QtPnN0
cnVjdHVyZSgqdm0pOwpAQCAtMzY2LDYgKzM4Niw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkRGlyZWMKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBKU09iamVjdCogYmFzZU9iamVjdCA9IGFzT2JqZWN0KEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9u
UHV0QnlJZERpcmVjdE5vblN0cmljdE9wdGltaXplLCBiYXNlT2JqZWN0LT5jbGFzc0luZm8oKSwg
aWRlbnQpKTsKICAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlT2JqZWN0LCBmYWxzZSwgZXhl
Yy0+Y29kZUJsb2NrKCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSog
c3RydWN0dXJlID0gYmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSlNWYWx1ZS5oCShyZXZpc2lvbiAxOTkxMDMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTI0MSw2ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc0N1c3RvbUdldHRlclNldHRl
cigpIGNvbnN0OwogICAgIGJvb2wgaXNPYmplY3QoKSBjb25zdDsKICAgICBib29sIGluaGVyaXRz
KGNvbnN0IENsYXNzSW5mbyopIGNvbnN0OworICAgIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZv
T3JOdWxsKCkgY29uc3Q7CiAgICAgICAgIAogICAgIC8vIEV4dHJhY3RpbmcgdGhlIHZhbHVlLgog
ICAgIGJvb2wgZ2V0U3RyaW5nKEV4ZWNTdGF0ZSosIFdURjo6U3RyaW5nJikgY29uc3Q7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVz
LmgJKHJldmlzaW9uIDE5OTEwMykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
Q0pTVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0Niw2ICs3NDYsMTEgQEAgaW5s
aW5lIGJvb2wgSlNWYWx1ZTo6aW5oZXJpdHMoY29uc3QgQ2xhcwogICAgIHJldHVybiBpc0NlbGwo
KSAmJiBhc0NlbGwoKS0+aW5oZXJpdHMoY2xhc3NJbmZvKTsKIH0KIAoraW5saW5lIGNvbnN0IENs
YXNzSW5mbyogSlNWYWx1ZTo6Y2xhc3NJbmZvT3JOdWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aXNDZWxsKCkgPyBhc0NlbGwoKS0+Y2xhc3NJbmZvKCkgOiBudWxscHRyOworfQorCiBpbmxpbmUg
SlNWYWx1ZSBKU1ZhbHVlOjp0b1RoaXMoRXhlY1N0YXRlKiBleGVjLCBFQ01BTW9kZSBlY21hTW9k
ZSkgY29uc3QKIHsKICAgICByZXR1cm4gaXNDZWxsKCkgPyBhc0NlbGwoKS0+bWV0aG9kVGFibGUo
ZXhlYy0+dm0oKSktPnRvVGhpcyhhc0NlbGwoKSwgZXhlYywgZWNtYU1vZGUpIDogdG9UaGlzU2xv
d0Nhc2UoZXhlYywgZWNtYU1vZGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvT3B0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L09wdGlvbnMuaAkocmV2aXNpb24gMTk5MTAzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvT3B0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTEsNiArMzUxLDggQEAgdHlwZWRl
ZiBjb25zdCBjaGFyKiBvcHRpb25TdHJpbmc7CiAgICAgXAogICAgIHYodW5zaWduZWQsIHdhdGNo
ZG9nLCAwLCAid2F0Y2hkb2cgdGltZW91dCAoMCA9IERpc2FibGVkLCBOID0gYSB0aW1lb3V0IHBl
cmlvZCBvZiBOIG1pbGxpc2Vjb25kcykiKSBcCiAgICAgXAorICAgIHYoYm9vbCwgdXNlSUNTdGF0
cywgZmFsc2UsIG51bGxwdHIpIFwKKyAgICBcCiAgICAgdihib29sLCBkdW1wTW9kdWxlUmVjb3Jk
LCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZHVtcE1vZHVsZUxvYWRpbmdTdGF0ZSwg
ZmFsc2UsIG51bGxwdHIpIFwKICAgICB2KGJvb2wsIGV4cG9zZUludGVybmFsTW9kdWxlTG9hZGVy
LCBmYWxzZSwgImV4cG9zZSB0aGUgaW50ZXJuYWwgbW9kdWxlIGxvYWRlciBvYmplY3QgdG8gdGhl
IGdsb2JhbCBzcGFjZSBmb3IgZGVidWdnaW5nIikgXApJbmRleDogU291cmNlL1dURi9DaGFuZ2VM
b2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5OTEyNCkK
KysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTYtMDQtMDYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBK
U0Mgc2hvdWxkIGhhdmUgYSBzaW1wbGUgd2F5IG9mIGdhdGhlcmluZyBJQyBzdGF0aXN0aWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTYzMTcKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIE1h
a2UgaXQgZWFzaWVyIHRvIGRvIHJlbGF0aXZlIHNsZWVwaW5nIG9uIGEgY29uZGl0aW9uLiBQcmV2
aW91c2x5IHlvdSBjb3VsZCBkbyB0aGlzIHVzaW5nCisgICAgICAgIHN0ZDo6Y2hyb25vLiBJIG5v
dyBiZWxpZXZlIHRoYXQgc3RkOjpjaHJvbm8gaXMganVzdCBhIGJhZCBkZWNpc2lvbiwgYW5kIEkg
YWx3YXlzIHdhbnQgdG8KKyAgICAgICAgdXNlIGRvdWJsZXMgaW5zdGVhZC4gVGhpcyBtYWtlcyBp
dCBlYXNpZXIgdG8gZG8gdGhlIHJpZ2h0IHRoaW5nIGFuZCB1c2UgZG91Ymxlcy4KKworICAgICAg
ICAqIHd0Zi9Db25kaXRpb24uaDoKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uQmFzZTo6d2FpdFVu
dGlsTW9ub3RvbmljQ2xvY2tTZWNvbmRzKToKKyAgICAgICAgKFdURjo6Q29uZGl0aW9uQmFzZTo6
d2FpdEZvclNlY29uZHMpOgorCiAyMDE2LTA0LTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFz
ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEltcGxlbWVudCBvcGVyYXRvcj09IGFuZCBvcGVyYXRv
ciE9IGZvciBPcHRpb25hbDw+CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkocmV2aXNpb24gMTk5MTAzKQor
KysgU291cmNlL1dURi93dGYvQ29uZGl0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsx
NDEsMzEgQEAgc3RydWN0IENvbmRpdGlvbkJhc2UgewogICAgIHsKICAgICAgICAgcmV0dXJuIHdh
aXRGb3JTZWNvbmRzSW1wbChsb2NrLCBhYnNvbHV0ZVRpbWVvdXRTZWNvbmRzIC0gbW9ub3Rvbmlj
YWxseUluY3JlYXNpbmdUaW1lKCkpOwogICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBMb2NrVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBib29sIHdhaXRGb3JTZWNvbmRzKExv
Y2tUeXBlJiBsb2NrLCBkb3VibGUgcmVsYXRpdmVUaW1lb3V0U2Vjb25kcywgY29uc3QgRnVuY3Rv
ciYgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgZG91YmxlIHJlbGF0aXZlVGltZW91dE5hbm9z
ZWNvbmRzID0gcmVsYXRpdmVUaW1lb3V0U2Vjb25kcyAqICgxMDAwLjAgKiAxMDAwLjAgKiAxMDAw
LjApOworICAgICAgICAKKyAgICAgICAgaWYgKCEocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMg
PiAwKSkgeworICAgICAgICAgICAgLy8gVGhpcyBoYW5kbGVzIGluc3RhLXRpbWVvdXRzIGFzIHdl
bGwgYXMgTmFOLgorICAgICAgICAgICAgbG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGxvY2su
bG9jaygpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzID4gc3RhdGljX2Nhc3Q8ZG91YmxlPihzdGQ6
Om51bWVyaWNfbGltaXRzPGludDY0X3Q+OjptYXgoKSkpIHsKKyAgICAgICAgICAgIC8vIElmIHRo
ZSB0aW1lb3V0IGluIG5hbm9zZWNvbmRzIGNhbm5vdCBiZSBleHByZXNzZWQgdXNpbmcgYSA2NC1i
aXQgaW50ZWdlciwgdGhlbiB3ZQorICAgICAgICAgICAgLy8gbWlnaHQgYXMgd2VsbCB3YWl0IGZv
cmV2ZXIuCisgICAgICAgICAgICB3YWl0KGxvY2ssIHByZWRpY2F0ZSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgYXV0byByZWxhdGl2ZVRp
bWVvdXQgPQorICAgICAgICAgICAgc3RkOjpjaHJvbm86Om5hbm9zZWNvbmRzKHN0YXRpY19jYXN0
PGludDY0X3Q+KHJlbGF0aXZlVGltZW91dE5hbm9zZWNvbmRzKSk7CisKKyAgICAgICAgcmV0dXJu
IHdhaXRGb3IobG9jaywgcmVsYXRpdmVUaW1lb3V0LCBwcmVkaWNhdGUpOworICAgIH0KIAogICAg
IC8vIE5vdGUgdGhhdCB0aGlzIG1ldGhvZCBpcyBleHRyZW1lbHkgZmFzdCB3aGVuIG5vYm9keSBp
cyB3YWl0aW5nLiBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHRyeSB0bwogICAgIC8vIGF2b2lkIGNh
bGxpbmcgdGhpcyBtZXRob2QuCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>275844</attachid>
            <date>2016-04-06 18:43:01 -0700</date>
            <delta_ts>2016-04-06 18:46:36 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>28590</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk5MTI5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBA
CisyMDE2LTA0LTA2ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
SlNDIHNob3VsZCBoYXZlIGEgc2ltcGxlIHdheSBvZiBnYXRoZXJpbmcgSUMgc3RhdGlzdGljcwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU2MzE3CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBhZGRz
IGEgY2hlYXAsIHJ1bnRpbWUtZW5hYmxlZCB3YXkgb2YgZ2F0aGVyaW5nIHN0YXRpc3RpY3MgYWJv
dXQgd2h5IHdlIHRha2UgdGhlIHNsb3cKKyAgICAgICAgcGF0aHMgZm9yIGlubGluZSBjYWNoZXMu
IFRoaXMgaXMgY29tcGxlbWVudGFyeSB0byBvdXIgZXhpc3RpbmcgYnl0ZWNvZGUgcHJvZmlsZXIu
IEV2ZW50dWFsbHkKKyAgICAgICAgd2UgbWF5IHdhbnQgdG8gY29tYmluZSB0aGUgdHdvIHRoaW5n
cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbm90IGEgc2xvdy1kb3duIG9uIGFueXRoaW5n
IGJlY2F1c2Ugd2Ugb25seSBkbyBleHRyYSB3b3JrIG9uIElDIHNsb3cgcGF0aHMgYW5kIGlmCisg
ICAgICAgIGl0J3MgZGlzYWJsZWQgaXQncyBqdXN0IGEgbG9hZC1hbmQtYnJhbmNoIHRvIHNraXAg
dGhlIHN0YXRzIGdhdGhlcmluZyBjb2RlLgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAg
ICAgKiBqaXQvSUNTdGF0cy5jcHA6IEFkZGVkLgorICAgICAgICAqIGppdC9JQ1N0YXRzLmg6IEFk
ZGVkLgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBydW50aW1l
L0pTQ0pTVmFsdWUuaDoKKyAgICAgICAgKiBydW50aW1lL0pTQ0pTVmFsdWVJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkpTVmFsdWU6OmluaGVyaXRzKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6
Y2xhc3NJbmZvT3JOdWxsKToKKyAgICAgICAgKEpTQzo6SlNWYWx1ZTo6dG9UaGlzKToKKyAgICAg
ICAgKiBydW50aW1lL09wdGlvbnMuaDoKKwogMjAxNi0wNC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEpTQyB0ZXN0IHN0cmVzcy9hcnJvd2Z1bmN0aW9uLWxl
eGljYWwtYmluZC1zdXBlcnByb3BlcnR5LmpzIGZhaWxpbmcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5OTEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNTI0LDYgKzUyNCw3IEBAIHNl
dChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgaml0L0dDQXdhcmVKSVRTdHViUm91dGluZS5j
cHAKICAgICBqaXQvR1BSSW5mby5jcHAKICAgICBqaXQvSG9zdENhbGxSZXR1cm5WYWx1ZS5jcHAK
KyAgICBqaXQvSUNTdGF0cy5jcHAKICAgICBqaXQvSW50cmluc2ljRW1pdHRlci5jcHAKICAgICBq
aXQvSklULmNwcAogICAgIGppdC9KSVRBZGRHZW5lcmF0b3IuY3BwCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk5MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTE5OTksNiArMTk5OSw4IEBACiAJCURFNUEwQTAwMUJBM0FDM0UwMDNENDQyNCAvKiBJ
bnRyaW5zaWNFbWl0dGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IERFNUEwOUZGMUJBM0FDM0UwMDNENDQyNCAvKiBJbnRyaW5zaWNFbWl0dGVyLmNw
cCAqLzsgfTsKIAkJREVBN0UyNDQxQkJDNjc3MjAwRDc4NDQwIC8qIEpTVHlwZWRBcnJheVZpZXdQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTNGMjU2RTExQjg3RTI4MDAwQjRCNzY4IC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
Y3BwICovOyB9OwogCQlERUE3RTI0NTFCQkM2NzdGMDBENzg0NDAgLyogSlNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNTM5MTdFN0MxQjc5MTEwNjAwMEVCRDMzIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlEQzIx
NDMwNzFDQTMyRTU1MDAwQTg4NjkgLyogSUNTdGF0cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMyMTQzMDYxQ0EzMkU1MjAwMEE4ODY5IC8qIElDU3Rh
dHMuaCAqLzsgfTsKKwkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElDU3RhdHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gREMyMTQzMDUxQ0Ez
MkU1MjAwMEE4ODY5IC8qIElDU3RhdHMuY3BwICovOyB9OwogCQlFMTI0QThGNzBFNTU1Nzc1MDAz
MDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUxMjRBOEY1MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmlu
Zy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUx
MjRBOEY4MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTI0QThGNjBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuY3BwICovOyB9OwogCQlFMThFM0E1OTBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTE4RTNBNTcwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCAqLzsgfTsKQEAgLTQxOTgsNiAr
NDIwMCw4IEBACiAJCUQyMTIwMjI4MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlQ29udmVyc2lvbi5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRGF0ZUNvbnZlcnNpb24u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEMjEyMDIyOTBBRDQzMTBDMDBFRDc5
QjYgLyogRGF0ZUNvbnZlcnNpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IERhdGVDb252ZXJzaW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDMDAwMzkw
MTlEOEJFNkYwMDAyM0VCMCAvKiBERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaDsgcGF0
aCA9IGRmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCURDMjE0MzA1MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IElDU3RhdHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQlEQzIxNDMwNjFDQTMyRTUyMDAwQTg4NjkgLyogSUNTdGF0cy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJQ1N0YXRzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCURDMTdFODEzMUM5QzdGRDQwMDhBNkFCMyAvKiBTaGFkb3dDaGlja2Vu
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNoYWRvd0NoaWNrZW4u
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlEQzE3RTgxNDFDOUM3RkQ0MDA4QTZB
QjMgLyogU2hhZG93Q2hpY2tlbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aGFkb3dDaGlja2VuLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURDMTdFODE1MUM5
QzdGRDQwMDhBNkFCMyAvKiBTaGFkb3dDaGlja2VuSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFkb3dDaGlja2VuSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtNDk5NCw2ICs0OTk4LDggQEAKIAkJCQkwRjI0RTUzRjE3RUE5RjU5MDBB
QkIyMTcgLyogR1BSSW5mby5oICovLAogCQkJCTBGNDY4MEQwMTRCQkM1RjgwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmNwcCAqLywKIAkJCQkwRjQ2ODBEMTE0QkJDNUY4MDBCRkUyNzIg
LyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oICovLAorCQkJCURDMjE0MzA1MUNBMzJFNTIwMDBBODg2
OSAvKiBJQ1N0YXRzLmNwcCAqLywKKwkJCQlEQzIxNDMwNjFDQTMyRTUyMDAwQTg4NjkgLyogSUNT
dGF0cy5oICovLAogCQkJCURFNUEwOUZGMUJBM0FDM0UwMDNENDQyNCAvKiBJbnRyaW5zaWNFbWl0
dGVyLmNwcCAqLywKIAkJCQkxNDI5RDkyRDBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCAqLywK
IAkJCQkxNDI5RDkyRTBFRDIyRDcwMDBCODk2MTkgLyogSklULmggKi8sCkBAIC03OTI0LDYgKzc5
MzAsNyBAQAogCQkJCUE1QkExNUVCMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVDb25uZWN0aW9u
VG9UYXJnZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2OSAv
KiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0
RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJREMy
MTQzMDcxQ0EzMkU1NTAwMEE4ODY5IC8qIElDU3RhdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3MEIwQTlEMTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtODg0OSw2ICs4ODU2LDcgQEAKIAkJCQlGRTNBMDZCMTFDMTBDQjg0MDAzOTBG
REQgLyogSklUQml0QW5kR2VuZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5Nzc2
MTQ2OTQzQjAwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIzMl82NC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkMwOTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVy
NjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJREMyMTQzMDgxQ0EzMkU1ODAwMEE4ODY5IC8qIElD
U3RhdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8q
IERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM5MkM4
OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3Rh
dHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0lDU3RhdHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJ
Q1N0YXRzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitib29sIElDRXZlbnQ6Om9wZXJhdG9yPChj
b25zdCBJQ0V2ZW50JiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAobV9jbGFzc0luZm8gIT0gb3Ro
ZXIubV9jbGFzc0luZm8pIHsKKyAgICAgICAgaWYgKCFtX2NsYXNzSW5mbykKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBpZiAoIW90aGVyLm1fY2xhc3NJbmZvKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gc3RyY21wKG1fY2xhc3NJbmZvLT5jbGFz
c05hbWUsIG90aGVyLm1fY2xhc3NJbmZvLT5jbGFzc05hbWUpIDwgMDsKKyAgICB9CisgICAgCisg
ICAgaWYgKG1fcHJvcGVydHlOYW1lICE9IG90aGVyLm1fcHJvcGVydHlOYW1lKQorICAgICAgICBy
ZXR1cm4gY29kZVBvaW50Q29tcGFyZShtX3Byb3BlcnR5TmFtZS5zdHJpbmcoKSwgb3RoZXIubV9w
cm9wZXJ0eU5hbWUuc3RyaW5nKCkpIDwgMDsKKyAgICAKKyAgICByZXR1cm4gbV9raW5kIDwgb3Ro
ZXIubV9raW5kOworfQorCit2b2lkIElDRXZlbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kLCAiKCIsIG1fY2xhc3NJbmZvID8gbV9jbGFzc0lu
Zm8tPmNsYXNzTmFtZSA6ICI8bnVsbD4iLCAiLCAiLCBtX3Byb3BlcnR5TmFtZSwgIikiKTsKK30K
Kwordm9pZCBJQ0V2ZW50Ojpsb2coKSBjb25zdAoreworICAgIElDU3RhdHM6Omluc3RhbmNlKCku
YWRkKCp0aGlzKTsKK30KKworQXRvbWljPElDU3RhdHMqPiBJQ1N0YXRzOjpzX2luc3RhbmNlOwor
CitJQ1N0YXRzOjpJQ1N0YXRzKCkKK3sKKyAgICBtX3RocmVhZCA9IGNyZWF0ZVRocmVhZCgKKyAg
ICAgICAgIkpTQyBJQ1N0YXRzIiwKKyAgICAgICAgW3RoaXNdICgpIHsKKyAgICAgICAgICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CisgICAgICAgICAgICBmb3IgKDs7KSB7CisgICAgICAg
ICAgICAgICAgbV9jb25kaXRpb24ud2FpdEZvclNlY29uZHMobV9sb2NrLCAxLCBbdGhpc10gKCkg
LT4gYm9vbCB7IHJldHVybiBtX3Nob3VsZFN0b3A7IH0pOworICAgICAgICAgICAgICAgIGlmICht
X3Nob3VsZFN0b3ApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIGRhdGFMb2coIklDU3RhdHM6XG4iKTsKKyAgICAgICAgICAgICAg
ICBhdXRvIGxpc3QgPSBtX3NwZWN0cnVtLmJ1aWxkTGlzdCgpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGxpc3Quc2l6ZSgpOyBpLS07KQorICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nKCIgICAgIiwgbGlzdFtpXS5rZXksICI6ICIsIGxpc3RbaV0uY291bnQsICJcbiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKK30KKworSUNTdGF0czo6fklDU3RhdHMoKQorewor
ICAgIHsKKyAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKKyAgICAgICAgbV9zaG91
bGRTdG9wID0gdHJ1ZTsKKyAgICAgICAgbV9jb25kaXRpb24ubm90aWZ5QWxsKCk7CisgICAgfQor
ICAgIAorICAgIHdhaXRGb3JUaHJlYWRDb21wbGV0aW9uKG1fdGhyZWFkKTsKK30KKwordm9pZCBJ
Q1N0YXRzOjphZGQoY29uc3QgSUNFdmVudCYgZXZlbnQpCit7CisgICAgbV9zcGVjdHJ1bS5hZGQo
ZXZlbnQpOworfQorCitJQ1N0YXRzJiBJQ1N0YXRzOjppbnN0YW5jZSgpCit7CisgICAgZm9yICg7
OykgeworICAgICAgICBJQ1N0YXRzKiByZXN1bHQgPSBzX2luc3RhbmNlLmxvYWQoKTsKKyAgICAg
ICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgIHJldHVybiAqcmVzdWx0OworICAgICAgICAKKyAg
ICAgICAgSUNTdGF0cyogbmV3U3RhdHMgPSBuZXcgSUNTdGF0cygpOworICAgICAgICBpZiAoc19p
bnN0YW5jZS5jb21wYXJlRXhjaGFuZ2VXZWFrKG51bGxwdHIsIG5ld1N0YXRzKSkKKyAgICAgICAg
ICAgIHJldHVybiAqbmV3U3RhdHM7CisgICAgICAgIAorICAgICAgICBkZWxldGUgbmV3U3RhdHM7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBJQ0V2ZW50OjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisjZGVmaW5lIElD
RVZFTlRfS0lORF9EVU1QKG5hbWUpIGNhc2UgSUNFdmVudDo6bmFtZTogb3V0LnByaW50KCNuYW1l
KTsgcmV0dXJuOworICAgICAgICBGT1JfRUFDSF9JQ0VWRU5UX0tJTkQoSUNFVkVOVF9LSU5EX0RV
TVApOworI3VuZGVmIElDRVZFTlRfS0lORF9EVU1QCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSUNTdGF0cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9JQ1N0YXRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBJQ1N0
YXRzX2gKKyNkZWZpbmUgSUNTdGF0c19oCisKKyNpbmNsdWRlICJDbGFzc0luZm8uaCIKKyNpbmNs
dWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9IYXNoVGFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1NwZWN0cnVtLmg+CisKK25hbWVzcGFjZSBK
U0MgeworCisjZGVmaW5lIEZPUl9FQUNIX0lDRVZFTlRfS0lORChtYWNybykgXAorICAgIG1hY3Jv
KEludmFsaWRLaW5kKSBcCisgICAgbWFjcm8oT3BlcmF0aW9uR2V0QnlJZCkgXAorICAgIG1hY3Jv
KE9wZXJhdGlvbkdldEJ5SWRHZW5lcmljKSBcCisgICAgbWFjcm8oT3BlcmF0aW9uR2V0QnlJZEJ1
aWxkTGlzdCkgXAorICAgIG1hY3JvKE9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSkgXAorICAgIG1h
Y3JvKE9wZXJhdGlvbkluT3B0aW1pemUpIFwKKyAgICBtYWNybyhPcGVyYXRpb25JbikgXAorICAg
IG1hY3JvKE9wZXJhdGlvbkdlbmVyaWNJbikgXAorICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5SWRT
dHJpY3QpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0KSBcCisgICAgbWFj
cm8oT3BlcmF0aW9uUHV0QnlJZERpcmVjdFN0cmljdCkgXAorICAgIG1hY3JvKE9wZXJhdGlvblB1
dEJ5SWREaXJlY3ROb25TdHJpY3QpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkU3RyaWN0
T3B0aW1pemUpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkTm9uU3RyaWN0T3B0aW1pemUp
IFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGlyZWN0U3RyaWN0T3B0aW1pemUpIFwKKyAg
ICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUpIFwKKyAgICBt
YWNybyhPcGVyYXRpb25QdXRCeUlkU3RyaWN0QnVpbGRMaXN0KSBcCisgICAgbWFjcm8oT3BlcmF0
aW9uUHV0QnlJZE5vblN0cmljdEJ1aWxkTGlzdCkgXAorICAgIG1hY3JvKE9wZXJhdGlvblB1dEJ5
SWREaXJlY3RTdHJpY3RCdWlsZExpc3QpIFwKKyAgICBtYWNybyhPcGVyYXRpb25QdXRCeUlkRGly
ZWN0Tm9uU3RyaWN0QnVpbGRMaXN0KQorCitjbGFzcyBJQ0V2ZW50IHsKK3B1YmxpYzoKKyAgICBl
bnVtIEtpbmQgeworI2RlZmluZSBJQ0VWRU5UX0tJTkRfREVDTEFSQVRJT04obmFtZSkgbmFtZSwK
KyAgICAgICAgRk9SX0VBQ0hfSUNFVkVOVF9LSU5EKElDRVZFTlRfS0lORF9ERUNMQVJBVElPTikK
KyN1bmRlZiBJQ0VWRU5UX0tJTkRfREVDTEFSQVRJT04KKyAgICB9OworICAgIAorICAgIElDRXZl
bnQoKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSUNFdmVudChLaW5kIGtpbmQsIGNvbnN0IENs
YXNzSW5mbyogY2xhc3NJbmZvLCBjb25zdCBJZGVudGlmaWVyIHByb3BlcnR5TmFtZSkKKyAgICAg
ICAgOiBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX2NsYXNzSW5mbyhjbGFzc0luZm8pCisgICAg
ICAgICwgbV9wcm9wZXJ0eU5hbWUocHJvcGVydHlOYW1lKQorICAgIHsKKyAgICB9CisKKyAgICBJ
Q0V2ZW50KFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2tpbmQo
T3BlcmF0aW9uR2V0QnlJZCkKKyAgICB7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBJQ0V2ZW50JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2NsYXNzSW5mbyA9PSBvdGhlci5t
X2NsYXNzSW5mbworICAgICAgICAgICAgJiYgbV9wcm9wZXJ0eU5hbWUgPT0gb3RoZXIubV9wcm9w
ZXJ0eU5hbWU7CisgICAgfQorICAgIAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJQ0V2ZW50
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgSUNFdmVudCYgb3RoZXIpIGNv
bnN0OworICAgIGJvb2wgb3BlcmF0b3I+KGNvbnN0IElDRXZlbnQmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBvdGhlciA8ICp0aGlzOyB9CisgICAgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IElDRXZlbnQm
IG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzID4gb3RoZXIpOyB9CisgICAgYm9vbCBvcGVy
YXRvcj49KGNvbnN0IElDRXZlbnQmIG90aGVyKSBjb25zdCB7IHJldHVybiAhKCp0aGlzIDwgb3Ro
ZXIpOyB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gSUNFdmVudCgpOworICAgIH0KKyAgICAKKyAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICBjb25zdCBDbGFzc0luZm8qIGNs
YXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fY2xhc3NJbmZvOyB9CisgICAgY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eU5hbWU7IH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tp
bmQgKyBXVEY6OlB0ckhhc2g8Y29uc3QgQ2xhc3NJbmZvKj46Omhhc2gobV9jbGFzc0luZm8pICsg
U3RyaW5nSGFzaDo6aGFzaChtX3Byb3BlcnR5TmFtZS5zdHJpbmcoKSk7CisgICAgfQorICAgIAor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID09IElDRXZlbnQoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAg
IH0KKyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKKyAgICB2
b2lkIGxvZygpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICAKKyAgICBLaW5kIG1fa2luZCB7
IEludmFsaWRLaW5kIH07CisgICAgY29uc3QgQ2xhc3NJbmZvKiBtX2NsYXNzSW5mbyB7IG51bGxw
dHIgfTsKKyAgICBJZGVudGlmaWVyIG1fcHJvcGVydHlOYW1lOworfTsKKworc3RydWN0IElDRXZl
bnRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBJQ0V2ZW50JiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBJQ0V2ZW50
JiBhLCBjb25zdCBJQ0V2ZW50JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6SUNFdmVudDo6S2luZCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6
SUNFdmVudD4geworICAgIHR5cGVkZWYgSlNDOjpJQ0V2ZW50SGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6SUNFdmVudD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpJQ0V2
ZW50PiB7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBJQ1N0
YXRzIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShJQ1N0YXRzKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBJQ1N0YXRzKCk7CisgICAgfklDU3RhdHMoKTsK
KyAgICAKKyAgICB2b2lkIGFkZChjb25zdCBJQ0V2ZW50JiBldmVudCk7CisgICAgCisgICAgc3Rh
dGljIElDU3RhdHMmIGluc3RhbmNlKCk7CisgICAgCitwcml2YXRlOgorCisgICAgU3BlY3RydW08
SUNFdmVudCwgdWludDY0X3Q+IG1fc3BlY3RydW07CisgICAgVGhyZWFkSWRlbnRpZmllciBtX3Ro
cmVhZDsKKyAgICBMb2NrIG1fbG9jazsKKyAgICBDb25kaXRpb24gbV9jb25kaXRpb247CisgICAg
Ym9vbCBtX3Nob3VsZFN0b3AgeyBmYWxzZSB9OworICAgIAorICAgIHN0YXRpYyBBdG9taWM8SUNT
dGF0cyo+IHNfaW5zdGFuY2U7Cit9OworCisjZGVmaW5lIExPR19JQyhhcmd1bWVudHMpIGRvIHsg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChPcHRpb25zOjp1c2VJQ1N0YXRzKCkpICAg
ICAgICAgICAgICBcCisgICAgICAgICAgICAoSUNFdmVudCBhcmd1bWVudHMpLmxvZygpOyAgICAg
ICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5k
aWYgLy8gSUNTdGF0c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTk5MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAog
I2luY2x1ZGUgIkV4Y2VwdGlvbkZ1enouaCIKICNpbmNsdWRlICJHZXR0ZXJTZXR0ZXIuaCIKICNp
bmNsdWRlICJIb3N0Q2FsbFJldHVyblZhbHVlLmgiCisjaW5jbHVkZSAiSUNTdGF0cy5oIgogI2lu
Y2x1ZGUgIkpJVC5oIgogI2luY2x1ZGUgIkpJVEV4Y2VwdGlvbnMuaCIKICNpbmNsdWRlICJKSVRU
b0RGR0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIgpAQCAtNTQsNiArNTUsNyBAQAogI2lu
Y2x1ZGUgIkpTV2l0aFNjb3BlLmgiCiAjaW5jbHVkZSAiTGVnYWN5UHJvZmlsZXIuaCIKICNpbmNs
dWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgi
CiAjaW5jbHVkZSAiUHJvcGVydHlOYW1lLmgiCiAjaW5jbHVkZSAiUmVwYXRjaC5oIgogI2luY2x1
ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgpAQCAtMTY0LDYgKzE2Niw4IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uR2UKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFs
dWU6OmRlY29kZShiYXNlKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIFByb3Bl
cnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIElkZW50aWZpZXIgaWRlbnQg
PSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOworICAgIAorICAgIExPR19JQygoSUNFdmVu
dDo6T3BlcmF0aW9uR2V0QnlJZCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkp
OwogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwg
c2xvdCkpOwogfQogCkBAIC0xNzUsNiArMTc5LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25HZQogICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2Rl
KGJhc2UpOwogICAgIFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgUHJvcGVydHlTbG90OjpJ
bnRlcm5hbE1ldGhvZFR5cGU6OkdldCk7CiAgICAgSWRlbnRpZmllciBpZGVudCA9IElkZW50aWZp
ZXI6OmZyb21VaWQodm0sIHVpZCk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRC
eUlkR2VuZXJpYywgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkpOwogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYmFzZVZhbHVlLmdldChleGVjLCBpZGVudCwgc2xvdCkpOwog
fQogCkBAIC0xODUsNiArMTkwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25HZQogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1
aWQpOwogCiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoYmFzZSk7Cisg
ICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIGJhc2VWYWx1ZS5j
bGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAgICBQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFs
dWUsIFByb3BlcnR5U2xvdDo6SW50ZXJuYWxNZXRob2RUeXBlOjpHZXQpOwogICAgIAogICAgIGJv
b2wgaGFzUmVzdWx0ID0gYmFzZVZhbHVlLmdldFByb3BlcnR5U2xvdChleGVjLCBpZGVudCwgc2xv
dCk7CkBAIC0yMDcsNiArMjEzLDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25JbgogICAgIEFjY2Vzc1R5cGUgYWNjZXNzVHlwZSA9IHN0YXRpY19jYXN0PEFjY2Vzc1R5
cGU+KHN0dWJJbmZvLT5hY2Nlc3NUeXBlKTsKIAogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCBrZXkpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9u
SW5PcHRpbWl6ZSwgYmFzZS0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAgICAgUHJvcGVydHlTbG90
IHNsb3QoYmFzZSwgUHJvcGVydHlTbG90OjpJbnRlcm5hbE1ldGhvZFR5cGU6Okhhc1Byb3BlcnR5
KTsKICAgICBib29sIHJlc3VsdCA9IGFzT2JqZWN0KGJhc2UpLT5nZXRQcm9wZXJ0eVNsb3QoZXhl
YywgaWRlbnQsIHNsb3QpOwogICAgIApAQCAtMjMxLDYgKzIzOCw3IEBAIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSW4KICAgICB9CiAKICAgICBJZGVudGlmaWVyIGlkZW50
ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwga2V5KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9w
ZXJhdGlvbkluLCBiYXNlLT5jbGFzc0luZm8oKSwgaWRlbnQpKTsKICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzQm9vbGVhbihhc09iamVjdChiYXNlKS0+aGFzUHJvcGVydHkoZXhlYywgaWRl
bnQpKSk7CiB9CiAKQEAgLTI0OSw5ICsyNTcsMTIgQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5SWRTdHJpYwogICAgIAogICAgIHN0dWJJbmZvLT50b29rU2xvd1BhdGggPSB0cnVl
OwogICAgIAorICAgIEpTVmFsdWUgYmFzZVZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRC
YXNlKTsKICAgICBJZGVudGlmaWVyIGlkZW50ID0gSWRlbnRpZmllcjo6ZnJvbVVpZCh2bSwgdWlk
KTsKLSAgICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2Up
LCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKS5wdXRJbmxpbmUoZXhlYywgaWRlbnQsIEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlv
blB1dEJ5SWRTdHJpY3QsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKKwor
ICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOworICAgIGJhc2VWYWx1ZS5wdXRJbmxpbmUoZXhlYywgaWRl
bnQsIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWROb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCkBAIC0yNjEs
OSArMjcyLDExIEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkTm9uU3QKICAg
ICAKICAgICBzdHViSW5mby0+dG9va1Nsb3dQYXRoID0gdHJ1ZTsKICAgICAKKyAgICBKU1ZhbHVl
IGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSWRlbnRpZmll
ciBpZGVudCA9IElkZW50aWZpZXI6OmZyb21VaWQodm0sIHVpZCk7Ci0gICAgUHV0UHJvcGVydHlT
bG90IHNsb3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSwgZmFsc2UsIGV4ZWMtPmNvZGVC
bG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKLSAgICBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJh
c2UpLnB1dElubGluZShleGVjLCBpZGVudCwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSks
IHNsb3QpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0aW9uUHV0QnlJZE5vblN0cmljdCwg
YmFzZVZhbHVlLmNsYXNzSW5mb09yTnVsbCgpLCBpZGVudCkpOworICAgIFB1dFByb3BlcnR5U2xv
dCBzbG90KGJhc2VWYWx1ZSwgZmFsc2UsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4
dCgpKTsKKyAgICBiYXNlVmFsdWUucHV0SW5saW5lKGV4ZWMsIGlkZW50LCBKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUlkRGlyZWN0U3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlU3R1YkluZm8q
IHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQpAQCAtMjczLDkgKzI4NiwxMSBAQCB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZERpcmVjCiAgICAgCiAgICAgc3R1Yklu
Zm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCisgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAgIElkZW50aWZpZXIgaWRlbnQgPSBJZGVu
dGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KEpTVmFs
dWU6OmRlY29kZShlbmNvZGVkQmFzZSksIHRydWUsIGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlk
Q29udGV4dCgpKTsKLSAgICBhc09iamVjdChKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpKS0+
cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVl
KSwgc2xvdCk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0U3Ry
aWN0LCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlkZW50KSk7CisgICAgUHV0UHJvcGVy
dHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENv
bnRleHQoKSk7CisgICAgYXNPYmplY3QoYmFzZVZhbHVlKS0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGlkZW50LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSwgc2xvdCk7CiB9CiAKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KQpAQCAtMjg1LDkgKzMwMCwxMSBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJ
ZERpcmVjCiAgICAgCiAgICAgc3R1YkluZm8tPnRvb2tTbG93UGF0aCA9IHRydWU7CiAgICAgCisg
ICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOwogICAg
IElkZW50aWZpZXIgaWRlbnQgPSBJZGVudGlmaWVyOjpmcm9tVWlkKHZtLCB1aWQpOwotICAgIFB1
dFByb3BlcnR5U2xvdCBzbG90KEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSksIGZhbHNlLCBl
eGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7Ci0gICAgYXNPYmplY3QoSlNWYWx1
ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSktPnB1dERpcmVjdChleGVjLT52bSgpLCBpZGVudCwgSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSksIHNsb3QpOworICAgIExPR19JQygoSUNFdmVudDo6
T3BlcmF0aW9uUHV0QnlJZERpcmVjdE5vblN0cmljdCwgYmFzZVZhbHVlLmNsYXNzSW5mb09yTnVs
bCgpLCBpZGVudCkpOworICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VWYWx1ZSwgZmFsc2Us
IGV4ZWMtPmNvZGVCbG9jaygpLT5wdXRCeUlkQ29udGV4dCgpKTsKKyAgICBhc09iamVjdChiYXNl
VmFsdWUpLT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgaWRlbnQsIEpTVmFsdWU6OmRlY29kZShlbmNv
ZGVkVmFsdWUpLCBzbG90KTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SWRTdHJpY3RPcHRpbWl6ZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
QmFzZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKQEAgLTMwMCw2ICszMTcsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlJZFN0cmljCiAKICAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAgICAgSlNWYWx1ZSBiYXNlVmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZEJhc2UpOworICAgIExPR19JQygoSUNFdmVudDo6T3BlcmF0
aW9uUHV0QnlJZFN0cmljdE9wdGltaXplLCBiYXNlVmFsdWUuY2xhc3NJbmZvT3JOdWxsKCksIGlk
ZW50KSk7CiAgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZVZhbHVlLCB0cnVlLCBleGVjLT5j
b2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGJhc2VWYWx1ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2
bSkgOiBudWxscHRyOwpAQCAtMzIyLDYgKzM0MCw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRCeUlkTm9uU3QKIAogICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUo
ZW5jb2RlZFZhbHVlKTsKICAgICBKU1ZhbHVlIGJhc2VWYWx1ZSA9IEpTVmFsdWU6OmRlY29kZShl
bmNvZGVkQmFzZSk7CisgICAgTE9HX0lDKChJQ0V2ZW50OjpPcGVyYXRpb25QdXRCeUlkTm9uU3Ry
aWN0T3B0aW1pemUsIGJhc2VWYWx1ZS5jbGFzc0luZm9Pck51bGwoKSwgaWRlbnQpKTsKICAgICBQ
dXRQcm9wZXJ0eVNsb3Qgc2xvdChiYXNlVmFsdWUsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+
cHV0QnlJZENvbnRleHQoKSk7CiAKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGJhc2VWYWx1
ZS5pc0NlbGwoKSA/IGJhc2VWYWx1ZS5hc0NlbGwoKS0+c3RydWN0dXJlKCp2bSkgOiBudWxscHRy
OyAgICAKQEAgLTM0NCw2ICszNjMsNyBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlJZERpcmVjCiAKICAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSk7CiAgICAgSlNPYmplY3QqIGJhc2VPYmplY3QgPSBhc09iamVjdChKU1ZhbHVlOjpkZWNv
ZGUoZW5jb2RlZEJhc2UpKTsKKyAgICBMT0dfSUMoKElDRXZlbnQ6Ok9wZXJhdGlvblB1dEJ5SWRE
aXJlY3RTdHJpY3RPcHRpbWl6ZSwgYmFzZU9iamVjdC0+Y2xhc3NJbmZvKCksIGlkZW50KSk7CiAg
ICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFzZU9iamVjdCwgdHJ1ZSwgZXhlYy0+Y29kZUJsb2Nr
KCktPnB1dEJ5SWRDb250ZXh0KCkpOwogICAgIAogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0g
YmFzZU9iamVjdC0+c3RydWN0dXJlKCp2bSk7CkBAIC0zNjYsNiArMzg2LDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5SWREaXJlYwogCiAgICAgSlNWYWx1ZSB2YWx1ZSA9IEpT
VmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpOwogICAgIEpTT2JqZWN0KiBiYXNlT2JqZWN0ID0g
YXNPYmplY3QoSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRCYXNlKSk7CisgICAgTE9HX0lDKChJQ0V2
ZW50OjpPcGVyYXRpb25QdXRCeUlkRGlyZWN0Tm9uU3RyaWN0T3B0aW1pemUsIGJhc2VPYmplY3Qt
PmNsYXNzSW5mbygpLCBpZGVudCkpOwogICAgIFB1dFByb3BlcnR5U2xvdCBzbG90KGJhc2VPYmpl
Y3QsIGZhbHNlLCBleGVjLT5jb2RlQmxvY2soKS0+cHV0QnlJZENvbnRleHQoKSk7CiAgICAgCiAg
ICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBiYXNlT2JqZWN0LT5zdHJ1Y3R1cmUoKnZtKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NKU1ZhbHVlLmgJKHJldmlzaW9u
IDE5OTEyOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQxLDYgKzI0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzQ3Vz
dG9tR2V0dGVyU2V0dGVyKCkgY29uc3Q7CiAgICAgYm9vbCBpc09iamVjdCgpIGNvbnN0OwogICAg
IGJvb2wgaW5oZXJpdHMoY29uc3QgQ2xhc3NJbmZvKikgY29uc3Q7CisgICAgY29uc3QgQ2xhc3NJ
bmZvKiBjbGFzc0luZm9Pck51bGwoKSBjb25zdDsKICAgICAgICAgCiAgICAgLy8gRXh0cmFjdGlu
ZyB0aGUgdmFsdWUuCiAgICAgYm9vbCBnZXRTdHJpbmcoRXhlY1N0YXRlKiwgV1RGOjpTdHJpbmcm
KSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0pTVmFsdWVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlND
SlNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMTk5MTI5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNDSlNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNzQ2LDYg
Kzc0NiwxMSBAQCBpbmxpbmUgYm9vbCBKU1ZhbHVlOjppbmhlcml0cyhjb25zdCBDbGFzCiAgICAg
cmV0dXJuIGlzQ2VsbCgpICYmIGFzQ2VsbCgpLT5pbmhlcml0cyhjbGFzc0luZm8pOwogfQogCitp
bmxpbmUgY29uc3QgQ2xhc3NJbmZvKiBKU1ZhbHVlOjpjbGFzc0luZm9Pck51bGwoKSBjb25zdAor
eworICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgpLT5jbGFzc0luZm8oKSA6IG51bGxwdHI7
Cit9CisKIGlubGluZSBKU1ZhbHVlIEpTVmFsdWU6OnRvVGhpcyhFeGVjU3RhdGUqIGV4ZWMsIEVD
TUFNb2RlIGVjbWFNb2RlKSBjb25zdAogewogICAgIHJldHVybiBpc0NlbGwoKSA/IGFzQ2VsbCgp
LT5tZXRob2RUYWJsZShleGVjLT52bSgpKS0+dG9UaGlzKGFzQ2VsbCgpLCBleGVjLCBlY21hTW9k
ZSkgOiB0b1RoaXNTbG93Q2FzZShleGVjLCBlY21hTW9kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTkxMjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1MSw2ICsz
NTEsOCBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICBcCiAgICAgdih1
bnNpZ25lZCwgd2F0Y2hkb2csIDAsICJ3YXRjaGRvZyB0aW1lb3V0ICgwID0gRGlzYWJsZWQsIE4g
PSBhIHRpbWVvdXQgcGVyaW9kIG9mIE4gbWlsbGlzZWNvbmRzKSIpIFwKICAgICBcCisgICAgdihi
b29sLCB1c2VJQ1N0YXRzLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIFwKICAgICB2KGJvb2wsIGR1
bXBNb2R1bGVSZWNvcmQsIGZhbHNlLCBudWxscHRyKSBcCiAgICAgdihib29sLCBkdW1wTW9kdWxl
TG9hZGluZ1N0YXRlLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgZXhwb3NlSW50ZXJu
YWxNb2R1bGVMb2FkZXIsIGZhbHNlLCAiZXhwb3NlIHRoZSBpbnRlcm5hbCBtb2R1bGUgbG9hZGVy
IG9iamVjdCB0byB0aGUgZ2xvYmFsIHNwYWNlIGZvciBkZWJ1Z2dpbmciKSBcCkluZGV4OiBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2
aXNpb24gMTk5MTI5KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAxNi0wNC0wNiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29t
PgorCisgICAgICAgIEpTQyBzaG91bGQgaGF2ZSBhIHNpbXBsZSB3YXkgb2YgZ2F0aGVyaW5nIElD
IHN0YXRpc3RpY3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1NjMxNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAg
ICAKKyAgICAgICAgTWFrZSBpdCBlYXNpZXIgdG8gZG8gcmVsYXRpdmUgc2xlZXBpbmcgb24gYSBj
b25kaXRpb24uIFByZXZpb3VzbHkgeW91IGNvdWxkIGRvIHRoaXMgdXNpbmcKKyAgICAgICAgc3Rk
OjpjaHJvbm8uIEkgbm93IGJlbGlldmUgdGhhdCBzdGQ6OmNocm9ubyBpcyBqdXN0IGEgYmFkIGRl
Y2lzaW9uLCBhbmQgSSBhbHdheXMgd2FudCB0bworICAgICAgICB1c2UgZG91YmxlcyBpbnN0ZWFk
LiBUaGlzIG1ha2VzIGl0IGVhc2llciB0byBkbyB0aGUgcmlnaHQgdGhpbmcgYW5kIHVzZSBkb3Vi
bGVzLgorCisgICAgICAgICogd3RmL0NvbmRpdGlvbi5oOgorICAgICAgICAoV1RGOjpDb25kaXRp
b25CYXNlOjp3YWl0VW50aWxNb25vdG9uaWNDbG9ja1NlY29uZHMpOgorICAgICAgICAoV1RGOjpD
b25kaXRpb25CYXNlOjp3YWl0Rm9yU2Vjb25kcyk6CisKIDIwMTYtMDQtMDUgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSW1wbGVtZW50IG9wZXJhdG9y
PT0gYW5kIG9wZXJhdG9yIT0gZm9yIE9wdGlvbmFsPD4KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0Nv
bmRpdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0NvbmRpdGlvbi5oCShyZXZp
c2lvbiAxOTkxMjkpCisrKyBTb3VyY2UvV1RGL3d0Zi9Db25kaXRpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTQxLDYgKzE0MSwzMSBAQCBzdHJ1Y3QgQ29uZGl0aW9uQmFzZSB7CiAgICAgewogICAg
ICAgICByZXR1cm4gd2FpdEZvclNlY29uZHNJbXBsKGxvY2ssIGFic29sdXRlVGltZW91dFNlY29u
ZHMgLSBtb25vdG9uaWNhbGx5SW5jcmVhc2luZ1RpbWUoKSk7CiAgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIExvY2tUeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIGJvb2wgd2Fp
dEZvclNlY29uZHMoTG9ja1R5cGUmIGxvY2ssIGRvdWJsZSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRz
LCBjb25zdCBGdW5jdG9yJiBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBkb3VibGUgcmVsYXRp
dmVUaW1lb3V0TmFub3NlY29uZHMgPSByZWxhdGl2ZVRpbWVvdXRTZWNvbmRzICogKDEwMDAuMCAq
IDEwMDAuMCAqIDEwMDAuMCk7CisgICAgICAgIAorICAgICAgICBpZiAoIShyZWxhdGl2ZVRpbWVv
dXROYW5vc2Vjb25kcyA+IDApKSB7CisgICAgICAgICAgICAvLyBUaGlzIGhhbmRsZXMgaW5zdGEt
dGltZW91dHMgYXMgd2VsbCBhcyBOYU4uCisgICAgICAgICAgICBsb2NrLnVubG9jaygpOworICAg
ICAgICAgICAgbG9jay5sb2NrKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKworICAgICAgICBpZiAocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMgPiBzdGF0aWNfY2Fz
dDxkb3VibGU+KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50NjRfdD46Om1heCgpKSkgeworICAgICAg
ICAgICAgLy8gSWYgdGhlIHRpbWVvdXQgaW4gbmFub3NlY29uZHMgY2Fubm90IGJlIGV4cHJlc3Nl
ZCB1c2luZyBhIDY0LWJpdCBpbnRlZ2VyLCB0aGVuIHdlCisgICAgICAgICAgICAvLyBtaWdodCBh
cyB3ZWxsIHdhaXQgZm9yZXZlci4KKyAgICAgICAgICAgIHdhaXQobG9jaywgcHJlZGljYXRlKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBh
dXRvIHJlbGF0aXZlVGltZW91dCA9CisgICAgICAgICAgICBzdGQ6OmNocm9ubzo6bmFub3NlY29u
ZHMoc3RhdGljX2Nhc3Q8aW50NjRfdD4ocmVsYXRpdmVUaW1lb3V0TmFub3NlY29uZHMpKTsKKwor
ICAgICAgICByZXR1cm4gd2FpdEZvcihsb2NrLCByZWxhdGl2ZVRpbWVvdXQsIHByZWRpY2F0ZSk7
CisgICAgfQogCiAgICAgLy8gTm90ZSB0aGF0IHRoaXMgbWV0aG9kIGlzIGV4dHJlbWVseSBmYXN0
IHdoZW4gbm9ib2R5IGlzIHdhaXRpbmcuIEl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gdHJ5IHRvCiAg
ICAgLy8gYXZvaWQgY2FsbGluZyB0aGlzIG1ldGhvZC4K
</data>
<flag name="review"
          id="300141"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>