<?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>163284</bug_id>
          
          <creation_ts>2016-10-11 09:01:54 -0700</creation_ts>
          <short_desc>Move Web SQL database and WebSockets off legacy exceptions</short_desc>
          <delta_ts>2016-10-15 16:26:17 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>cdumez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1238872</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-11 09:01:54 -0700</bug_when>
    <thetext>Move Web SQL database and WebSockets off legacy exceptions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238876</commentid>
    <comment_count>1</comment_count>
      <attachid>291266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-11 09:10:55 -0700</bug_when>
    <thetext>Created attachment 291266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239675</commentid>
    <comment_count>2</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-12 21:09:17 -0700</bug_when>
    <thetext>Looks like this break EFL and GTK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239684</commentid>
    <comment_count>3</comment_count>
      <attachid>291266</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-12 21:27:53 -0700</bug_when>
    <thetext>Comment on attachment 291266
Patch

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

r=me but please fix the GTK/EFL build before landing.

&gt; Source/WebCore/Modules/webdatabase/SQLResultSet.cpp:48
&gt; +    return WTFMove(insertId);

Why do we WTFMove() an integer?

can&apos;t we just: &quot;return *m_insertId;&quot; ?

&gt; Source/WebCore/Modules/webdatabase/SQLResultSet.idl:33
&gt; +    [GetterMayThrowException] readonly attribute long insertId; // FIXME: Will not work for insertId greater than 2^31.

I don&apos;t understand this comment. This is a long and a Web IDL long is in the range [−2147483648, 2147483647]*. So it will obviously not work for values greater than 2^31, right?
The spec says to use long, not long long, so it seems the fact that we&apos;re using an int in the implementation is correct. Am I missing something?

* https://www.w3.org/TR/WebIDL/#idl-long

&gt; Source/WebCore/Modules/websockets/WebSocket.cpp:184
&gt; +    return create(context, url, { 1, protocol });

Personally feel like having an explicit Vector { } would be more easily understandable.

&gt; Source/WebCore/Modules/websockets/WebSocket.cpp:194
&gt; +    return connect(url, { 1, protocol });

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239801</commentid>
    <comment_count>4</comment_count>
      <attachid>291266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-13 09:52:16 -0700</bug_when>
    <thetext>Comment on attachment 291266
Patch

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

&gt;&gt; Source/WebCore/Modules/webdatabase/SQLResultSet.cpp:48
&gt;&gt; +    return WTFMove(insertId);
&gt; 
&gt; Why do we WTFMove() an integer?
&gt; 
&gt; can&apos;t we just: &quot;return *m_insertId;&quot; ?

I don’t think that works. I believe I tried it already; the constructor takes an int&amp;&amp;, not an int, and the result of *m_insertId is an int&amp;, not an int&amp;&amp;.

We can return to this and try to fix the ExceptionOr template so that more normal syntax works, but doing that probably requires specializing ExceptionOr for scalars or something along those lines.

&gt;&gt; Source/WebCore/Modules/webdatabase/SQLResultSet.idl:33
&gt;&gt; +    [GetterMayThrowException] readonly attribute long insertId; // FIXME: Will not work for insertId greater than 2^31.
&gt; 
&gt; I don&apos;t understand this comment. This is a long and a Web IDL long is in the range [−2147483648, 2147483647]*. So it will obviously not work for values greater than 2^31, right?
&gt; The spec says to use long, not long long, so it seems the fact that we&apos;re using an int in the implementation is correct. Am I missing something?
&gt; 
&gt; * https://www.w3.org/TR/WebIDL/#idl-long

Yes, the specification and the IDL file agree with each other. Also not sure how important the specification is given that this was not a widely-adopted standard; in this case our legacy behavior may be more important.

But our implementation uses int64_t; I don’t know what prevents the implementation from generating numbers outside of the range of an IDL long. I can write a different comment and put it somewhere different, but I think the issue does exist.

&gt;&gt; Source/WebCore/Modules/websockets/WebSocket.cpp:184
&gt;&gt; +    return create(context, url, { 1, protocol });
&gt; 
&gt; Personally feel like having an explicit Vector { } would be more easily understandable.

OK. I will go with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239803</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-13 09:53:33 -0700</bug_when>
    <thetext>I’ll have to figure out what the failure on EFL and GTK is. Something about the openDatabase function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239806</commentid>
    <comment_count>6</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-13 09:56:44 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; I’ll have to figure out what the failure on EFL and GTK is. Something about
&gt; the openDatabase function.

Looks like the generated bindings still try to pass an ExceptionCode&amp; ?

DerivedSources/WebCore/JSDOMWindow.cpp: In function &apos;JSC::EncodedJSValue WebCore::jsDOMWindowInstanceFunctionOpenDatabase(JSC::ExecState*)&apos;:
DerivedSources/WebCore/JSDOMWindow.cpp:29274:355: error: no matching function for call to &apos;WebCore::DOMWindowWebDatabase::openDatabase(WebCore::DOMWindow&amp;, std::remove_reference&lt;WTF::String&amp;&gt;::type, std::remove_reference&lt;WTF::String&amp;&gt;::type, std::remove_reference&lt;WTF::String&amp;&gt;::type, std::remove_reference&lt;unsigned int&amp;&gt;::type, std::remove_reference&lt;WTF::RefPtr&lt;WebCore::DatabaseCallback&gt;&amp;&gt;::type, WebCore::ExceptionCode&amp;)&apos;

Either we generate bad bindings or the bot needs a clean build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239809</commentid>
    <comment_count>7</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2016-10-13 09:57:54 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #5)
&gt; &gt; I’ll have to figure out what the failure on EFL and GTK is. Something about
&gt; &gt; the openDatabase function.
&gt; 
&gt; Looks like the generated bindings still try to pass an ExceptionCode&amp; ?
&gt; 
&gt; DerivedSources/WebCore/JSDOMWindow.cpp: In function &apos;JSC::EncodedJSValue
&gt; WebCore::jsDOMWindowInstanceFunctionOpenDatabase(JSC::ExecState*)&apos;:
&gt; DerivedSources/WebCore/JSDOMWindow.cpp:29274:355: error: no matching
&gt; function for call to
&gt; &apos;WebCore::DOMWindowWebDatabase::openDatabase(WebCore::DOMWindow&amp;,
&gt; std::remove_reference&lt;WTF::String&amp;&gt;::type,
&gt; std::remove_reference&lt;WTF::String&amp;&gt;::type,
&gt; std::remove_reference&lt;WTF::String&amp;&gt;::type, std::remove_reference&lt;unsigned
&gt; int&amp;&gt;::type,
&gt; std::remove_reference&lt;WTF::RefPtr&lt;WebCore::DatabaseCallback&gt;&amp;&gt;::type,
&gt; WebCore::ExceptionCode&amp;)&apos;
&gt; 
&gt; Either we generate bad bindings or the bot needs a clean build.

I think it is likely dependency tracking is wrong for those ports and JSDOMWindow.cpp was not properly re-generated even though you modified:
Source/WebCore/Modules/webdatabase/DOMWindowWebDatabase.idl</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1239849</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-13 11:12:52 -0700</bug_when>
    <thetext>I’ll work around the dependency problem when landing this by touching DOMWindow.idl. And I think I will also file a bug report about the CMake build system not handling this right.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240663</commentid>
    <comment_count>9</comment_count>
      <attachid>291266</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 16:22:41 -0700</bug_when>
    <thetext>Comment on attachment 291266
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/webdatabase/SQLResultSet.idl:33
&gt;&gt;&gt; +    [GetterMayThrowException] readonly attribute long insertId; // FIXME: Will not work for insertId greater than 2^31.
&gt;&gt; 
&gt;&gt; I don&apos;t understand this comment. This is a long and a Web IDL long is in the range [−2147483648, 2147483647]*. So it will obviously not work for values greater than 2^31, right?
&gt;&gt; The spec says to use long, not long long, so it seems the fact that we&apos;re using an int in the implementation is correct. Am I missing something?
&gt;&gt; 
&gt;&gt; * https://www.w3.org/TR/WebIDL/#idl-long
&gt; 
&gt; Yes, the specification and the IDL file agree with each other. Also not sure how important the specification is given that this was not a widely-adopted standard; in this case our legacy behavior may be more important.
&gt; 
&gt; But our implementation uses int64_t; I don’t know what prevents the implementation from generating numbers outside of the range of an IDL long. I can write a different comment and put it somewhere different, but I think the issue does exist.

I just realized that our bindings will indeed work with int64_t even though we specify long here. The fact that we specify long here doesn’t matter; the integer conversion is done based on overloading and the actual return type, the type specified here in the IDL file just tells it that it’s numeric. The conversion won’t work for values of 64-bit integers that can’t be represented as JavaScript number because they can’t be represented as a double, but that would be a problem no matter what this IDL file said.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1240667</commentid>
    <comment_count>10</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-15 16:26:17 -0700</bug_when>
    <thetext>Committed r207384: &lt;http://trac.webkit.org/changeset/207384&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>291266</attachid>
            <date>2016-10-11 09:10:55 -0700</date>
            <delta_ts>2016-10-12 21:28:04 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163284-20161011090733.patch</filename>
            <type>text/plain</type>
            <size>38561</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzMyZjE1MzNiOWZlMmRk
MzRmMzMzMTYzZWFmMzY0NTQ0OGY0YTFjOS4uYWY5ODRjZDQyMDk3Mjg3YzUzMjljNjcwOTE3ZDI4
ZjU4NzM1ZGZjOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYxIEBACisyMDE2LTEwLTExICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlIFdlYiBTUUwgZGF0YWJh
c2UgYW5kIFdlYlNvY2tldHMgb2ZmIGxlZ2FjeSBleGNlcHRpb25zCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjMyODQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvRE9N
V2luZG93V2ViRGF0YWJhc2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RE9NV2luZG93V2ViRGF0
YWJhc2U6Om9wZW5EYXRhYmFzZSk6IFVzZSBFeGNlcHRpb25Pci4KKyAgICAgICAgKiBNb2R1bGVz
L3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisg
ICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFzZS5pZGw6IERp
dHRvLgorCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1FMUmVzdWx0U2V0OjpTUUxSZXN1bHRTZXQpOiBNb3ZlIGluaXRp
YWxpemF0aW9uIG9mCisgICAgICAgIG1hbnkgZGF0YSBtZW1iZXJzIGludG8gdGhlIGNsYXNzIGRl
ZmluaXRpb24uCisgICAgICAgIChXZWJDb3JlOjpTUUxSZXN1bHRTZXQ6Omluc2VydElkKTogVXNl
IEV4Y2VwdGlvbk9yLiBOZWVkZWQgdG8gdXNlCisgICAgICAgIFdURk1vdmUgaGVyZSB0byBtYWtl
IE9wdGlvbmFsIHdvcmsgd2l0aCBFeGNlcHRpb25PcjsgaWYgdGhpcyBjb21lcworICAgICAgICB1
cCBhIGxvdCwgbWlnaHQgYmUgd29ydGggY2hhbmdpbmcgaG93IEV4Y2VwdGlvbk9yIHdvcmtzIHdp
dGggc2NhbGFycworICAgICAgICB0byBjbGVhbiB1cCBjYXNlcyBsaWtlIHRoaXMuCisgICAgICAg
IChXZWJDb3JlOjpTUUxSZXN1bHRTZXQ6OnJvd3NBZmZlY3RlZCk6IE1vdmVkIGludG8gY2xhc3Mg
ZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlNRTFJlc3VsdFNldDo6cm93cyk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6U1FMUmVzdWx0U2V0OjpzZXRJbnNlcnRJZCk6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6U1FMUmVzdWx0U2V0OjpzZXRSb3dzQWZmZWN0ZWQpOiBEaXR0by4K
KworICAgICAgICAqIE1vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0Lmg6IFVwZGF0ZWQg
Zm9yIGFib3ZlLgorCisgICAgICAgICogTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQu
aWRsOiBVc2Ugbm9uLWxlZ2FjeSBleGNlcHRpb25zLgorICAgICAgICBBZGRlZCBhIEZJWE1FIGFi
b3V0IHRoZSBtaXNtYXRjaCBiZXR3ZWVuIGxvbmcgYW5kIGludDY0X3QuCisKKyAgICAgICAgKiBN
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpT
UUxTdGF0ZW1lbnQ6OmV4ZWN1dGUpOiBVc2UgcmVmZXJlbmNlIGluc3RlYWQgb2YgcG9pbnRlci4K
KworICAgICAgICAqIE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aXNWYWxpZFByb3RvY29sU3RyaW5nKTogVXNlIFN0cmluZ1ZpZXcuCisgICAgICAg
IChXZWJDb3JlOjpXZWJTb2NrZXQ6OnN1YnByb3RvY29sU2VwYXJhdG9yKTogRml4ZWQgY2FwaXRh
bGl6YXRpb24gYW5kCisgICAgICAgIHNwZWxsaW5nIGVycm9yIGluIHRoZSBuYW1lIG9mIHRoaXMg
ZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OldlYlNvY2tldCk6IE1vdmUg
aW5pdGlhbGl6YXRpb24gb2YgbWFueSBkYXRhCisgICAgICAgIG1lbWJlcnMgaW50byB0aGUgY2xh
c3MgZGVmaW5pdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OldlYlNvY2tldDo6Y3JlYXRlKTogVXNl
IEV4Y2VwdGlvbk9yLgorICAgICAgICAoV2ViQ29yZTo6V2ViU29ja2V0Ojpjb25uZWN0KTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXQ6OnNlbmQpOiBEaXR0by4KKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldDo6Y2xvc2UpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YlNvY2tldDo6YmluYXJ5VHlwZSk6IFVwZGF0ZSB0byB1c2UgZW51bSBjbGFzcy4KKyAgICAgICAg
KFdlYkNvcmU6OldlYlNvY2tldDo6c2V0QmluYXJ5VHlwZSk6IFVzZSBFeGVjcHRpb25PciBhbmQg
dXBkYXRlIHRvCisgICAgICAgIHVzZSBlbnVtIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6V2Vi
U29ja2V0OjpkaWRSZWNlaXZlQmluYXJ5RGF0YSk6IERpdHRvLgorCisgICAgICAgICogTW9kdWxl
cy93ZWJzb2NrZXRzL1dlYlNvY2tldC5oOiBVcGRhdGVkIGZvciBhYm92ZS4gQ2hhbmdlZCB0aGUK
KyAgICAgICAgQmluYXJ5VHlwZSBlbnVtIGludG8gYW4gZW51bSBjbGFzcy4KKworICAgICAgICAq
IE1vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsOiBVc2Ugbm9uLWxlZ2FjeSBleGNlcHRp
b25zLgorCisgICAgICAgICogTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJTb2NrZXRIYW5kc2hha2U6OmNoZWNrUmVzcG9uc2VI
ZWFkZXJzKToKKyAgICAgICAgVXBkYXRlZCBmb3IgbmFtZSBjaGFuZ2UgdG8gc3VicHJvdG9jb2xT
ZXBhcmF0b3IuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5j
cHA6IFVzZSByZWZlcmVuY2UgaW5zdGVhZCBvZiBwb2ludGVyLgorCiAyMDE2LTEwLTEwICBCcmVu
dCBGdWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dW0RpcmVjdDJE
XSBBZGQgaW5pdGlhbCBQYXR0ZXJuIGhhbmRsaW5nIGltcGxlbWVudGF0aW9uCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0
YWJhc2UuY3BwCmluZGV4IDNlNTU5MDJhYWM1NWY1NGFlN2RhYjY0M2IwMDA2ZjUxOTkzZTM2MzEu
LjIwMGI1ODMwODk4MDYzNTg1ZjU3Njg5YTRmNGM1NWE2OWFkMGZmY2EgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0
YWJhc2UuY3BwCkBAIC0yOSwzMCArMjksMzMgQEAKIAogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgog
I2luY2x1ZGUgIkRhdGFiYXNlLmgiCi0jaW5jbHVkZSAiRGF0YWJhc2VDYWxsYmFjay5oIgogI2lu
Y2x1ZGUgIkRhdGFiYXNlTWFuYWdlci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVk
ZSAiRnJhbWUuaCIKICNpbmNsdWRlICJTZWN1cml0eU9yaWdpbi5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLVJlZlB0cjxEYXRhYmFzZT4gRE9NV2luZG93V2ViRGF0YWJhc2U6Om9wZW5EYXRh
YmFzZShET01XaW5kb3cmIHdpbmRvdywgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcm
IHZlcnNpb24sIGNvbnN0IFN0cmluZyYgZGlzcGxheU5hbWUsIHVuc2lnbmVkIGxvbmcgZXN0aW1h
dGVkU2l6ZSwgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+JiYgY3JlYXRpb25DYWxsYmFjaywgRXhj
ZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25PcjxSZWZQdHI8RGF0YWJhc2U+PiBET01XaW5kb3dX
ZWJEYXRhYmFzZTo6b3BlbkRhdGFiYXNlKERPTVdpbmRvdyYgd2luZG93LCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmVyc2lvbiwgY29uc3QgU3RyaW5nJiBkaXNwbGF5TmFtZSwg
dW5zaWduZWQgZXN0aW1hdGVkU2l6ZSwgUmVmUHRyPERhdGFiYXNlQ2FsbGJhY2s+JiYgY3JlYXRp
b25DYWxsYmFjaykKIHsKICAgICBpZiAoIXdpbmRvdy5pc0N1cnJlbnRseURpc3BsYXllZEluRnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICBSZWZQdHI8RGF0YWJhc2U+IGRh
dGFiYXNlOwotICAgIERhdGFiYXNlTWFuYWdlciYgZGJNYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2Vy
OjpzaW5nbGV0b24oKTsKLSAgICBEYXRhYmFzZUVycm9yIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6
Tm9uZTsKLSAgICBpZiAoZGJNYW5hZ2VyLmlzQXZhaWxhYmxlKCkgJiYgd2luZG93LmRvY3VtZW50
KCktPnNlY3VyaXR5T3JpZ2luKCktPmNhbkFjY2Vzc0RhdGFiYXNlKHdpbmRvdy5kb2N1bWVudCgp
LT50b3BPcmlnaW4oKSkpIHsKLSAgICAgICAgZGF0YWJhc2UgPSBkYk1hbmFnZXIub3BlbkRhdGFi
YXNlKHdpbmRvdy5kb2N1bWVudCgpLCBuYW1lLCB2ZXJzaW9uLCBkaXNwbGF5TmFtZSwgZXN0aW1h
dGVkU2l6ZSwgV1RGTW92ZShjcmVhdGlvbkNhbGxiYWNrKSwgZXJyb3IpOwotICAgICAgICBBU1NF
UlQoZGF0YWJhc2UgfHwgZXJyb3IgIT0gRGF0YWJhc2VFcnJvcjo6Tm9uZSk7Ci0gICAgICAgIGVj
ID0gRGF0YWJhc2VNYW5hZ2VyOjpleGNlcHRpb25Db2RlRm9yRGF0YWJhc2VFcnJvcihlcnJvcik7
Ci0gICAgfSBlbHNlCi0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotCi0gICAgcmV0dXJuIGRh
dGFiYXNlOworICAgICAgICByZXR1cm4gUmVmUHRyPERhdGFiYXNlPiB7IG51bGxwdHIgfTsKKyAg
ICBhdXRvJiBtYW5hZ2VyID0gRGF0YWJhc2VNYW5hZ2VyOjpzaW5nbGV0b24oKTsKKyAgICBpZiAo
IW1hbmFnZXIuaXNBdmFpbGFibGUoKSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VS
SVRZX0VSUiB9OworICAgIGF1dG8qIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50KCk7CisgICAg
aWYgKCFkb2N1bWVudCkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9
OworICAgIGF1dG8qIHNlY3VyaXR5T3JpZ2luID0gZG9jdW1lbnQtPnNlY3VyaXR5T3JpZ2luKCk7
CisgICAgaWYgKCFzZWN1cml0eU9yaWdpbikKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNF
Q1VSSVRZX0VSUiB9OworICAgIGlmICghc2VjdXJpdHlPcmlnaW4tPmNhbkFjY2Vzc0RhdGFiYXNl
KGRvY3VtZW50LT50b3BPcmlnaW4oKSkpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNV
UklUWV9FUlIgfTsKKyAgICBhdXRvIGVycm9yID0gRGF0YWJhc2VFcnJvcjo6Tm9uZTsKKyAgICBh
dXRvIGRhdGFiYXNlID0gbWFuYWdlci5vcGVuRGF0YWJhc2Uod2luZG93LmRvY3VtZW50KCksIG5h
bWUsIHZlcnNpb24sIGRpc3BsYXlOYW1lLCBlc3RpbWF0ZWRTaXplLCBXVEZNb3ZlKGNyZWF0aW9u
Q2FsbGJhY2spLCBlcnJvcik7CisgICAgaWYgKGVycm9yICE9IERhdGFiYXNlRXJyb3I6Ok5vbmUp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBEYXRhYmFzZU1hbmFnZXI6OmV4Y2VwdGlvbkNv
ZGVGb3JEYXRhYmFzZUVycm9yKGVycm9yKSB9OworICAgIEFTU0VSVChkYXRhYmFzZSk7CisgICAg
cmV0dXJuIFdURk1vdmUoZGF0YWJhc2UpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRvd1dl
YkRhdGFiYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL0RPTVdpbmRv
d1dlYkRhdGFiYXNlLmgKaW5kZXggOTBlODQ0OTNiNDk5NjlkMjhiYjUyZjViNDcwNGQ0ZmE5NDRk
OTJmYy4uNWFlOTVmMTc1Zjc4YmUyMWI1ZjFiNGVkYjJjM2I4NjE3NDViMmU4YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9ET01XaW5kb3dXZWJEYXRhYmFz
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvRE9NV2luZG93V2Vi
RGF0YWJhc2UuaApAQCAtMjQsMjkgKzI0LDIyIEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgRE9NV2luZG93V2ViRGF0YWJhc2VfaAotI2RlZmluZSBET01XaW5kb3dXZWJEYXRhYmFz
ZV9oCisjcHJhZ21hIG9uY2UKIAotI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKLSNpbmNsdWRl
IDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KLSNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIERhdGFiYXNlOwogY2xhc3Mg
RGF0YWJhc2VDYWxsYmFjazsKLWNsYXNzIEZyYW1lOwogCiBjbGFzcyBET01XaW5kb3dXZWJEYXRh
YmFzZSB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZlB0cjxEYXRhYmFzZT4gb3BlbkRhdGFiYXNl
KERPTVdpbmRvdyYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRlZFNpemUsIFJl
ZlB0cjxEYXRhYmFzZUNhbGxiYWNrPiYmIGNyZWF0aW9uQ2FsbGJhY2ssIEV4Y2VwdGlvbkNvZGUm
KTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmUHRyPERhdGFiYXNlPj4gb3BlbkRhdGFiYXNl
KERPTVdpbmRvdyYsIGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2ZXJzaW9uLCBj
b25zdCBTdHJpbmcmIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBlc3RpbWF0ZWRTaXplLCBSZWZQdHI8
RGF0YWJhc2VDYWxsYmFjaz4mJiBjcmVhdGlvbkNhbGxiYWNrKTsKIAogICAgIERPTVdpbmRvd1dl
YkRhdGFiYXNlKCkgPSBkZWxldGU7CiAgICAgfkRPTVdpbmRvd1dlYkRhdGFiYXNlKCkgPSBkZWxl
dGU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCi0KLSNlbmRpZiAvLyBET01XaW5kb3dX
ZWJEYXRhYmFzZV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFi
YXNlL0RPTVdpbmRvd1dlYkRhdGFiYXNlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuaWRsCmluZGV4IDA4NjM0ZjE2ZWFmNzczODk2
MDI5YjYwMGI3Y2ZkNGVlYTcwMjc2ZjQuLmUxNDBjYzRjMjUwNjJmOTEyMjUzYzAxNjcyY2RlZDQ3
MTA4MWEzYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
RE9NV2luZG93V2ViRGF0YWJhc2UuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
ZGF0YWJhc2UvRE9NV2luZG93V2ViRGF0YWJhc2UuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLVsKLV0gcGFydGlhbCBpbnRlcmZhY2UgRE9NV2luZG93IHsKLSAg
ICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIERhdGFiYXNlIG9wZW5EYXRhYmFzZShET01TdHJp
bmcgbmFtZSwgRE9NU3RyaW5nIHZlcnNpb24sIERPTVN0cmluZyBkaXNwbGF5TmFtZSwgdW5zaWdu
ZWQgbG9uZyBlc3RpbWF0ZWRTaXplLCBvcHRpb25hbCBEYXRhYmFzZUNhbGxiYWNrPyBjcmVhdGlv
bkNhbGxiYWNrKTsKK3BhcnRpYWwgaW50ZXJmYWNlIERPTVdpbmRvdyB7CisgICAgW01heVRocm93
RXhjZXB0aW9uXSBEYXRhYmFzZT8gb3BlbkRhdGFiYXNlKERPTVN0cmluZyBuYW1lLCBET01TdHJp
bmcgdmVyc2lvbiwgRE9NU3RyaW5nIGRpc3BsYXlOYW1lLCB1bnNpZ25lZCBsb25nIGVzdGltYXRl
ZFNpemUsIG9wdGlvbmFsIERhdGFiYXNlQ2FsbGJhY2s/IGNyZWF0aW9uQ2FsbGJhY2spOwogfTsK
LQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1
bHRTZXQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRT
ZXQuY3BwCmluZGV4IGJhZmFhNzJhMWY5MzdkOWZkYzY4N2UyOWJkY2ZiZGE2NmU1Yzc1ZWQuLjJj
YmQ5MjljNTJjZTgwMzkxZmIzZjkyMjk5YWQ0YWEwNmQxNDhiY2UgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5jcHAKQEAgLTM1LDQ0
ICszNSwxNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNRTFJlc3VsdFNldDo6U1FMUmVzdWx0
U2V0KCkKICAgICA6IG1fcm93cyhTUUxSZXN1bHRTZXRSb3dMaXN0OjpjcmVhdGUoKSkKLSAgICAs
IG1faW5zZXJ0SWQoMCkKLSAgICAsIG1faW5zZXJ0SWRTZXQoZmFsc2UpCi0gICAgLCBtX3Jvd3NB
ZmZlY3RlZCgwKQogewogfQogCi1pbnQ2NF90IFNRTFJlc3VsdFNldDo6aW5zZXJ0SWQoRXhjZXB0
aW9uQ29kZSYgZSkgY29uc3QKK0V4Y2VwdGlvbk9yPGludDY0X3Q+IFNRTFJlc3VsdFNldDo6aW5z
ZXJ0SWQoKSBjb25zdAogewogICAgIC8vIDQuMTEuNCAtIFJldHVybiB0aGUgaWQgb2YgdGhlIGxh
c3Qgcm93IGluc2VydGVkIGFzIGEgcmVzdWx0IG9mIHRoZSBxdWVyeQogICAgIC8vIElmIHRoZSBx
dWVyeSBkaWRuJ3QgcmVzdWx0IGluIGFueSByb3dzIGJlaW5nIGFkZGVkLCByYWlzZSBhbiBJTlZB
TElEX0FDQ0VTU19FUlIgZXhjZXB0aW9uCi0gICAgaWYgKG1faW5zZXJ0SWRTZXQpCi0gICAgICAg
IHJldHVybiBtX2luc2VydElkOwotCi0gICAgZSA9IElOVkFMSURfQUNDRVNTX0VSUjsKLSAgICBy
ZXR1cm4gLTE7Ci19Ci0KLWludCBTUUxSZXN1bHRTZXQ6OnJvd3NBZmZlY3RlZCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcm93c0FmZmVjdGVkOwotfQotCi1TUUxSZXN1bHRTZXRSb3dMaXN0KiBT
UUxSZXN1bHRTZXQ6OnJvd3MoKSBjb25zdAotewotICAgIHJldHVybiBtX3Jvd3MuZ2V0KCk7Ci19
Ci0KLXZvaWQgU1FMUmVzdWx0U2V0OjpzZXRJbnNlcnRJZChpbnQ2NF90IGlkKQotewotICAgIEFT
U0VSVCghbV9pbnNlcnRJZFNldCk7Ci0KLSAgICBtX2luc2VydElkID0gaWQ7Ci0gICAgbV9pbnNl
cnRJZFNldCA9IHRydWU7Ci19Ci0KLXZvaWQgU1FMUmVzdWx0U2V0OjpzZXRSb3dzQWZmZWN0ZWQo
aW50IGNvdW50KQotewotICAgIG1fcm93c0FmZmVjdGVkID0gY291bnQ7CisgICAgaWYgKCFtX2lu
c2VydElkKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJSIH07
CisgICAgaW50NjRfdCBpbnNlcnRJZCA9IG1faW5zZXJ0SWQudmFsdWUoKTsKKyAgICByZXR1cm4g
V1RGTW92ZShpbnNlcnRJZCk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVzdWx0U2V0LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5oCmluZGV4IDc0ZDhjZDkxZjE4NGNjOWE4NDNhZGE2
MDA5MDFkNmZlOTRmMmRmZGUuLmQ3MTZmYmYwMTU3ZWZmOGUxOGRjZDZjZmJiYWJmNjJiYmFmZThi
ZWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2UvU1FMUmVz
dWx0U2V0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1
bHRTZXQuaApAQCAtMjYsMTAgKzI2LDkgQEAKICAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBT
UUxSZXN1bHRTZXRfaAotI2RlZmluZSBTUUxSZXN1bHRTZXRfaAorI3ByYWdtYSBvbmNlCiAKLSNp
bmNsdWRlICJEYXRhYmFzZUJhc2ljVHlwZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Pci5oIgog
I2luY2x1ZGUgIlNRTFJlc3VsdFNldFJvd0xpc3QuaCIKICNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KIApAQCAtMzksMjQgKzM4LDMxIEBAIGNsYXNzIFNRTFJlc3VsdFNldCA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTUUxSZXN1bHRTZXQ+IHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUmVmPFNRTFJlc3VsdFNldD4gY3JlYXRlKCkgeyByZXR1cm4gYWRvcHRSZWYoKm5l
dyBTUUxSZXN1bHRTZXQpOyB9CiAKLSAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzKCkgY29u
c3Q7CisgICAgU1FMUmVzdWx0U2V0Um93TGlzdCYgcm93cygpIHsgcmV0dXJuIG1fcm93cy5nZXQo
KTsgfQogCi0gICAgaW50NjRfdCBpbnNlcnRJZChFeGNlcHRpb25Db2RlJikgY29uc3Q7Ci0gICAg
aW50IHJvd3NBZmZlY3RlZCgpIGNvbnN0OworICAgIEV4Y2VwdGlvbk9yPGludDY0X3Q+IGluc2Vy
dElkKCkgY29uc3Q7CisgICAgaW50IHJvd3NBZmZlY3RlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcm93
c0FmZmVjdGVkOyB9CiAKLS8vIEZvciBpbnRlcm5hbCAobm9uLUpTKSB1c2UKICAgICB2b2lkIHNl
dEluc2VydElkKGludDY0X3QpOwogICAgIHZvaWQgc2V0Um93c0FmZmVjdGVkKGludCk7CiAKIHBy
aXZhdGU6CiAgICAgU1FMUmVzdWx0U2V0KCk7CiAKLSAgICBSZWZQdHI8U1FMUmVzdWx0U2V0Um93
TGlzdD4gbV9yb3dzOwotICAgIGludDY0X3QgbV9pbnNlcnRJZDsKLSAgICBib29sIG1faW5zZXJ0
SWRTZXQ7Ci0gICAgaW50IG1fcm93c0FmZmVjdGVkOworICAgIFJlZjxTUUxSZXN1bHRTZXRSb3dM
aXN0PiBtX3Jvd3M7CisgICAgT3B0aW9uYWw8aW50NjRfdD4gbV9pbnNlcnRJZDsKKyAgICBpbnQg
bV9yb3dzQWZmZWN0ZWQgeyAwIH07CiB9OwogCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCitpbmxp
bmUgdm9pZCBTUUxSZXN1bHRTZXQ6OnNldEluc2VydElkKGludDY0X3QgaWQpCit7CisgICAgQVNT
RVJUKCFtX2luc2VydElkKTsKKyAgICBtX2luc2VydElkID0gaWQ7Cit9CisKK2lubGluZSB2b2lk
IFNRTFJlc3VsdFNldDo6c2V0Um93c0FmZmVjdGVkKGludCBjb3VudCkKK3sKKyAgICBtX3Jvd3NB
ZmZlY3RlZCA9IGNvdW50OworfQogCi0jZW5kaWYgLy8gU1FMUmVzdWx0U2V0X2gKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0
YWJhc2UvU1FMUmVzdWx0U2V0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJh
c2UvU1FMUmVzdWx0U2V0LmlkbAppbmRleCA0ZjFjMmQxZDM1MTE1YTQwMTdjMjAxZjM0Njk3M2Ew
OTNlMTI0OGU4Li45NTg0MzExZjczNjZjZTA3M2IzMjZmY2NiMTYyODJmZGIxZWE4NzFlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmRhdGFiYXNlL1NRTFJlc3VsdFNldC5p
ZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9TUUxSZXN1bHRTZXQu
aWRsCkBAIC0zMCw2ICszMCw2IEBACiAgICAgSW1wbGVtZW50YXRpb25MYWNrc1ZUYWJsZQogXSBp
bnRlcmZhY2UgU1FMUmVzdWx0U2V0IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgU1FMUmVzdWx0
U2V0Um93TGlzdCByb3dzOwotICAgIFtHZXR0ZXJNYXlUaHJvd0xlZ2FjeUV4Y2VwdGlvbl0gcmVh
ZG9ubHkgYXR0cmlidXRlIGxvbmcgaW5zZXJ0SWQ7CisgICAgW0dldHRlck1heVRocm93RXhjZXB0
aW9uXSByZWFkb25seSBhdHRyaWJ1dGUgbG9uZyBpbnNlcnRJZDsgLy8gRklYTUU6IFdpbGwgbm90
IHdvcmsgZm9yIGluc2VydElkIGdyZWF0ZXIgdGhhbiAyXjMxLgogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBsb25nIHJvd3NBZmZlY3RlZDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmRhdGFiYXNlL1NRTFN0YXRlbWVudC5jcHAKaW5kZXggYzFhZjkwYTNjOTAwZDdjYzJj
ODBiMmYzOGJkMTE1ZjMyMGM2YTU1Ni4uMzJhY2IxODFlNWE1MDkxM2YxNjg2YjZjOTY0YmRlMWE3
MTdkOWNlNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJkYXRhYmFzZS9T
UUxTdGF0ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZGF0YWJhc2Uv
U1FMU3RhdGVtZW50LmNwcApAQCAtMTU0LDE0ICsxNTQsMTQgQEAgYm9vbCBTUUxTdGF0ZW1lbnQ6
OmV4ZWN1dGUoRGF0YWJhc2UmIGRiKQogICAgIHN3aXRjaCAocmVzdWx0KSB7CiAgICAgY2FzZSBT
UUxJVEVfUk9XOiB7CiAgICAgICAgIGludCBjb2x1bW5Db3VudCA9IHN0YXRlbWVudC5jb2x1bW5D
b3VudCgpOwotICAgICAgICBTUUxSZXN1bHRTZXRSb3dMaXN0KiByb3dzID0gcmVzdWx0U2V0LT5y
b3dzKCk7CisgICAgICAgIGF1dG8mIHJvd3MgPSByZXN1bHRTZXQtPnJvd3MoKTsKIAogICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvbHVtbkNvdW50OyBpKyspCi0gICAgICAgICAgICByb3dz
LT5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOworICAgICAgICAgICAgcm93
cy5hZGRDb2x1bW4oc3RhdGVtZW50LmdldENvbHVtbk5hbWUoaSkpOwogCiAgICAgICAgIGRvIHsK
ICAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY29sdW1uQ291bnQ7IGkrKykKLSAgICAg
ICAgICAgICAgICByb3dzLT5hZGRSZXN1bHQoc3RhdGVtZW50LmdldENvbHVtblZhbHVlKGkpKTsK
KyAgICAgICAgICAgICAgICByb3dzLmFkZFJlc3VsdChzdGF0ZW1lbnQuZ2V0Q29sdW1uVmFsdWUo
aSkpOwogCiAgICAgICAgICAgICByZXN1bHQgPSBzdGF0ZW1lbnQuc3RlcCgpOwogICAgICAgICB9
IHdoaWxlIChyZXN1bHQgPT0gU1FMSVRFX1JPVyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCmluZGV4IDdmYmFmMWY1NGU5NDg1YjZlYmMxZTRj
ODQ2ZjQ3ODMzZTc4NzFlZDYuLjQ3MGNmZTgzNzA4MThjMmM4YzJmZDQzNDg1MjQzYzUzZWZiYmNl
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2Nr
ZXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQu
Y3BwCkBAIC04NSwxMiArODUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRQcm90b2Nv
bENoYXJhY3RlcihVQ2hhciBjaGFyYWN0ZXIpCiAgICAgICAgICYmIGNoYXJhY3RlciAhPSAneycg
JiYgY2hhcmFjdGVyICE9ICd9JzsKIH0KIAotc3RhdGljIGJvb2wgaXNWYWxpZFByb3RvY29sU3Ry
aW5nKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCitzdGF0aWMgYm9vbCBpc1ZhbGlkUHJvdG9jb2xT
dHJpbmcoU3RyaW5nVmlldyBwcm90b2NvbCkKIHsKICAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBwcm90
b2NvbC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICghaXNWYWxpZFByb3RvY29sQ2hhcmFj
dGVyKHByb3RvY29sW2ldKSkKKyAgICBmb3IgKGF1dG8gY29kZVVuaXQgOiBwcm90b2NvbC5jb2Rl
VW5pdHMoKSkgeworICAgICAgICBpZiAoIWlzVmFsaWRQcm90b2NvbENoYXJhY3Rlcihjb2RlVW5p
dCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIHJldHVybiB0cnVlOwpA
QCAtMTQwLDE3ICsxNDAsMTMgQEAgYm9vbCBXZWJTb2NrZXQ6OmlzQXZhaWxhYmxlKCkKICAgICBy
ZXR1cm4gd2ViU29ja2V0c0F2YWlsYWJsZTsKIH0KIAotY29uc3QgY2hhciogV2ViU29ja2V0Ojpz
dWJQcm90b2NvbFNlcGVyYXRvcigpCitjb25zdCBjaGFyKiBXZWJTb2NrZXQ6OnN1YnByb3RvY29s
U2VwYXJhdG9yKCkKIHsKICAgICByZXR1cm4gIiwgIjsKIH0KIAogV2ViU29ja2V0OjpXZWJTb2Nr
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCkKICAgICA6IEFjdGl2ZURPTU9iamVj
dCgmY29udGV4dCkKLSAgICAsIG1fc3RhdGUoQ09OTkVDVElORykKLSAgICAsIG1fYnVmZmVyZWRB
bW91bnQoMCkKLSAgICAsIG1fYnVmZmVyZWRBbW91bnRBZnRlckNsb3NlKDApCi0gICAgLCBtX2Jp
bmFyeVR5cGUoQmluYXJ5VHlwZUJsb2IpCiAgICAgLCBtX3N1YnByb3RvY29sKGVtcHR5U3RyaW5n
KCkpCiAgICAgLCBtX2V4dGVuc2lvbnMoZW1wdHlTdHJpbmcoKSkKICAgICAsIG1fcmVzdW1lVGlt
ZXIoKnRoaXMsICZXZWJTb2NrZXQ6OnJlc3VtZVRpbWVyRmlyZWQpCkBAIC0xNjMsNTcgKzE1OSw0
MiBAQCBXZWJTb2NrZXQ6On5XZWJTb2NrZXQoKQogICAgICAgICBtX2NoYW5uZWwtPmRpc2Nvbm5l
Y3QoKTsKIH0KIAotUmVmPFdlYlNvY2tldD4gV2ViU29ja2V0OjpjcmVhdGUoU2NyaXB0RXhlY3V0
aW9uQ29udGV4dCYgY29udGV4dCkKK0V4Y2VwdGlvbk9yPFJlZjxXZWJTb2NrZXQ+PiBXZWJTb2Nr
ZXQ6OmNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcm
IHVybCkKIHsKLSAgICBSZWY8V2ViU29ja2V0PiB3ZWJTb2NrZXQoYWRvcHRSZWYoKm5ldyBXZWJT
b2NrZXQoY29udGV4dCkpKTsKLSAgICB3ZWJTb2NrZXQtPnN1c3BlbmRJZk5lZWRlZCgpOwotICAg
IHJldHVybiB3ZWJTb2NrZXQ7CisgICAgcmV0dXJuIGNyZWF0ZShjb250ZXh0LCB1cmwsIFZlY3Rv
cjxTdHJpbmc+IHsgfSk7CiB9CiAKLVJlZlB0cjxXZWJTb2NrZXQ+IFdlYlNvY2tldDo6Y3JlYXRl
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBFeGNl
cHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPFJlZjxXZWJTb2NrZXQ+PiBXZWJTb2NrZXQ6OmNy
ZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIHVybCwg
Y29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scykKIHsKLSAgICBWZWN0b3I8U3RyaW5nPiBw
cm90b2NvbHM7Ci0gICAgcmV0dXJuIFdlYlNvY2tldDo6Y3JlYXRlKGNvbnRleHQsIHVybCwgcHJv
dG9jb2xzLCBlYyk7Ci19Ci0KLVJlZlB0cjxXZWJTb2NrZXQ+IFdlYlNvY2tldDo6Y3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlcHRpb25Db2RlJiBlYykKLXsKLSAgICBpZiAo
dXJsLmlzTnVsbCgpKSB7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0gICAgfQorICAgIGlmICh1cmwuaXNOdWxsKCkpCisgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiAKLSAgICBSZWZQdHI8V2ViU29ja2V0PiB3ZWJTb2Nr
ZXQoYWRvcHRSZWYoKm5ldyBXZWJTb2NrZXQoY29udGV4dCkpKTsKLSAgICB3ZWJTb2NrZXQtPnN1
c3BlbmRJZk5lZWRlZCgpOworICAgIGF1dG8gc29ja2V0ID0gYWRvcHRSZWYoKm5ldyBXZWJTb2Nr
ZXQoY29udGV4dCkpOworICAgIHNvY2tldC0+c3VzcGVuZElmTmVlZGVkKCk7CiAKLSAgICB3ZWJT
b2NrZXQtPmNvbm5lY3QoY29udGV4dC5jb21wbGV0ZVVSTCh1cmwpLCBwcm90b2NvbHMsIGVjKTsK
LSAgICBpZiAoZWMpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgIGF1dG8gcmVzdWx0ID0g
c29ja2V0LT5jb25uZWN0KGNvbnRleHQuY29tcGxldGVVUkwodXJsKSwgcHJvdG9jb2xzKTsKKyAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVh
c2VFeGNlcHRpb24oKTsKIAotICAgIHJldHVybiB3ZWJTb2NrZXQ7CisgICAgcmV0dXJuIFdURk1v
dmUoc29ja2V0KTsKIH0KIAotUmVmUHRyPFdlYlNvY2tldD4gV2ViU29ja2V0OjpjcmVhdGUoU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCYgY29udGV4dCwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgcHJvdG9jb2wsIEV4Y2VwdGlvbkNvZGUmIGVjKQorRXhjZXB0aW9uT3I8UmVmPFdlYlNv
Y2tldD4+IFdlYlNvY2tldDo6Y3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmIGNvbnRleHQs
IGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIHByb3RvY29sKQogewotICAgIFZlY3Rv
cjxTdHJpbmc+IHByb3RvY29sczsKLSAgICBwcm90b2NvbHMuYXBwZW5kKHByb3RvY29sKTsKLSAg
ICByZXR1cm4gV2ViU29ja2V0OjpjcmVhdGUoY29udGV4dCwgdXJsLCBwcm90b2NvbHMsIGVjKTsK
KyAgICByZXR1cm4gY3JlYXRlKGNvbnRleHQsIHVybCwgeyAxLCBwcm90b2NvbCB9KTsKIH0KIAot
dm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIEV4Y2VwdGlvbkNvZGUm
IGVjKQorRXhjZXB0aW9uT3I8dm9pZD4gV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYg
dXJsKQogewotICAgIFZlY3RvcjxTdHJpbmc+IHByb3RvY29sczsKLSAgICBjb25uZWN0KHVybCwg
cHJvdG9jb2xzLCBlYyk7CisgICAgcmV0dXJuIGNvbm5lY3QodXJsLCBWZWN0b3I8U3RyaW5nPiB7
IH0pOwogfQogCi12b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lk
PiBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgcHJv
dG9jb2wpCiB7Ci0gICAgVmVjdG9yPFN0cmluZz4gcHJvdG9jb2xzOwotICAgIHByb3RvY29scy5h
cHBlbmQocHJvdG9jb2wpOwotICAgIGNvbm5lY3QodXJsLCBwcm90b2NvbHMsIGVjKTsKKyAgICBy
ZXR1cm4gY29ubmVjdCh1cmwsIHsgMSwgcHJvdG9jb2wgfSk7CiB9CiAKLXZvaWQgV2ViU29ja2V0
Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcHJvdG9j
b2xzLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6Y29u
bmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scykK
IHsKICAgICBMT0coTmV0d29yaywgIldlYlNvY2tldCAlcCBjb25uZWN0KCkgdXJsPSclcyciLCB0
aGlzLCB1cmwudXRmOCgpLmRhdGEoKSk7CiAgICAgbV91cmwgPSBVUkwoVVJMKCksIHVybCk7CkBA
IC0yMjQsMjEgKzIwNSwxOCBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcm
IHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZQogICAgIGlmICghbV91
cmwuaXNWYWxpZCgpKSB7CiAgICAgICAgIGNvbnRleHQuYWRkQ29uc29sZU1lc3NhZ2UoTWVzc2Fn
ZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJJbnZhbGlkIHVybCBmb3IgV2ViU29j
a2V0ICIgKyBtX3VybC5zdHJpbmdDZW50ZXJFbGxpcHNpemVkVG9MZW5ndGgoKSk7CiAgICAgICAg
IG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgIGVjID0gU1lOVEFYX0VSUjsKLSAgICAgICAgcmV0
dXJuOworICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgU1lOVEFYX0VSUiB9OwogICAgIH0KIAog
ICAgIGlmICghbV91cmwucHJvdG9jb2xJcygid3MiKSAmJiAhbV91cmwucHJvdG9jb2xJcygid3Nz
IikpIHsKICAgICAgICAgY29udGV4dC5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpK
UywgTWVzc2FnZUxldmVsOjpFcnJvciwgIldyb25nIHVybCBzY2hlbWUgZm9yIFdlYlNvY2tldCAi
ICsgbV91cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRvTGVuZ3RoKCkpOwogICAgICAgICBtX3N0
YXRlID0gQ0xPU0VEOwotICAgICAgICBlYyA9IFNZTlRBWF9FUlI7Ci0gICAgICAgIHJldHVybjsK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKICAgICB9CiAgICAgaWYg
KG1fdXJsLmhhc0ZyYWdtZW50SWRlbnRpZmllcigpKSB7CiAgICAgICAgIGNvbnRleHQuYWRkQ29u
c29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3NhZ2VMZXZlbDo6RXJyb3IsICJVUkwg
aGFzIGZyYWdtZW50IGNvbXBvbmVudCAiICsgbV91cmwuc3RyaW5nQ2VudGVyRWxsaXBzaXplZFRv
TGVuZ3RoKCkpOwogICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRB
WF9FUlIgfTsKICAgICB9CiAKICAgICBBU1NFUlQoY29udGV4dC5jb250ZW50U2VjdXJpdHlQb2xp
Y3koKSk7CkBAIC0yNDksOCArMjI3LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2UKICAgICBp
ZiAoIXBvcnRBbGxvd2VkKG1fdXJsKSkgewogICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNz
YWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHBv
cnQgIiArIFN0cmluZzo6bnVtYmVyKG1fdXJsLnBvcnQoKSkgKyAiIGJsb2NrZWQiKTsKICAgICAg
ICAgbV9zdGF0ZSA9IENMT1NFRDsKLSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNFQ1VSSVRZX0VSUiB9OwogICAg
IH0KIAogICAgIC8vIEZJWE1FOiBDb252ZXJ0IHRoaXMgdG8gY2hlY2sgdGhlIGlzb2xhdGVkIHdv
cmxkJ3MgQ29udGVudCBTZWN1cml0eSBQb2xpY3kgb25jZSB3ZWJraXQub3JnL2IvMTA0NTIwIGlz
IHNvbHZlZC4KQEAgLTI1OCw4ICsyMzUsNyBAQCB2b2lkIFdlYlNvY2tldDo6Y29ubmVjdChjb25z
dCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZQogICAg
ICAgICBtX3N0YXRlID0gQ0xPU0VEOwogCiAgICAgICAgIC8vIEZJWE1FOiBTaG91bGQgdGhpcyBi
ZSB0aHJvd2luZyBhbiBleGNlcHRpb24/Ci0gICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOwotICAg
ICAgICByZXR1cm47CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBTRUNVUklUWV9FUlIgfTsK
ICAgICB9CiAKICAgICBpZiAoYXV0byogcHJvdmlkZXIgPSBjb250ZXh0LnNvY2tldFByb3ZpZGVy
KCkpCkBAIC0yNzksOCArMjU1LDcgQEAgdm9pZCBXZWJTb2NrZXQ6OmNvbm5lY3QoY29uc3QgU3Ry
aW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMsIEV4Y2UKICAgICAgICAg
aWYgKCFpc1ZhbGlkUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpKSB7CiAgICAgICAgICAgICBjb250
ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3VyY2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVy
cm9yLCAiV3JvbmcgcHJvdG9jb2wgZm9yIFdlYlNvY2tldCAnIiArIGVuY29kZVByb3RvY29sU3Ry
aW5nKHByb3RvY29sKSArICInIik7CiAgICAgICAgICAgICBtX3N0YXRlID0gQ0xPU0VEOwotICAg
ICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKICAgICAgICAgfQogICAgIH0KICAg
ICBIYXNoU2V0PFN0cmluZz4gdmlzaXRlZDsKQEAgLTI4OCw4ICsyNjMsNyBAQCB2b2lkIFdlYlNv
Y2tldDo6Y29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBy
b3RvY29scywgRXhjZQogICAgICAgICBpZiAoIXZpc2l0ZWQuYWRkKHByb3RvY29sKS5pc05ld0Vu
dHJ5KSB7CiAgICAgICAgICAgICBjb250ZXh0LmFkZENvbnNvbGVNZXNzYWdlKE1lc3NhZ2VTb3Vy
Y2U6OkpTLCBNZXNzYWdlTGV2ZWw6OkVycm9yLCAiV2ViU29ja2V0IHByb3RvY29scyBjb250YWlu
IGR1cGxpY2F0ZXM6ICciICsgZW5jb2RlUHJvdG9jb2xTdHJpbmcocHJvdG9jb2wpICsgIiciKTsK
ICAgICAgICAgICAgIG1fc3RhdGUgPSBDTE9TRUQ7Ci0gICAgICAgICAgICBlYyA9IFNZTlRBWF9F
UlI7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
U1lOVEFYX0VSUiB9OwogICAgICAgICB9CiAgICAgfQogCkBAIC0zMTgsMTE4ICsyOTIsMTE0IEBA
IHZvaWQgV2ViU29ja2V0Ojpjb25uZWN0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBWZWN0b3I8
U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlCiAgICAgICAgICAgICAgICAgc3RvcCgpOwogICAgICAg
ICAgICAgfSk7CiAjZW5kaWYKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHJldHVy
biB7IH07CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgUmVzb3VyY2VMb2FkT2JzZXJ2ZXI6
OnNoYXJlZE9ic2VydmVyKCkubG9nV2ViU29ja2V0TG9hZGluZyhkb2N1bWVudC5mcmFtZSgpLCBt
X3VybCk7CiAgICAgfQogCiAgICAgU3RyaW5nIHByb3RvY29sU3RyaW5nOwogICAgIGlmICghcHJv
dG9jb2xzLmlzRW1wdHkoKSkKLSAgICAgICAgcHJvdG9jb2xTdHJpbmcgPSBqb2luU3RyaW5ncyhw
cm90b2NvbHMsIHN1YlByb3RvY29sU2VwZXJhdG9yKCkpOworICAgICAgICBwcm90b2NvbFN0cmlu
ZyA9IGpvaW5TdHJpbmdzKHByb3RvY29scywgc3VicHJvdG9jb2xTZXBhcmF0b3IoKSk7CiAKICAg
ICBtX2NoYW5uZWwtPmNvbm5lY3QobV91cmwsIHByb3RvY29sU3RyaW5nKTsKICAgICBBY3RpdmVE
T01PYmplY3Q6OnNldFBlbmRpbmdBY3Rpdml0eSh0aGlzKTsKKworICAgIHJldHVybiB7IH07CiB9
CiAKLXZvaWQgV2ViU29ja2V0OjpzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9u
Q29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OnNlbmQoY29uc3QgU3RyaW5n
JiBtZXNzYWdlKQogewogICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIHNlbmQoKSBTZW5k
aW5nIFN0cmluZyAnJXMnIiwgdGhpcywgbWVzc2FnZS51dGY4KCkuZGF0YSgpKTsKLSAgICBpZiAo
bV9zdGF0ZSA9PSBDT05ORUNUSU5HKSB7Ci0gICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykK
KyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IElOVkFMSURfU1RBVEVfRVJSIH07CiAgICAgLy8g
Tm8gZXhjZXB0aW9uIGlzIHJhaXNlZCBpZiB0aGUgY29ubmVjdGlvbiB3YXMgb25jZSBlc3RhYmxp
c2hlZCBidXQgaGFzIHN1YnNlcXVlbnRseSBiZWVuIGNsb3NlZC4KICAgICBpZiAobV9zdGF0ZSA9
PSBDTE9TSU5HIHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIHNpemVfdCBwYXlsb2Fk
U2l6ZSA9IG1lc3NhZ2UudXRmOCgpLmxlbmd0aCgpOwogICAgICAgICBtX2J1ZmZlcmVkQW1vdW50
QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1fYnVmZmVyZWRBbW91bnRBZnRlckNsb3NlLCBwYXls
b2FkU2l6ZSk7CiAgICAgICAgIG1fYnVmZmVyZWRBbW91bnRBZnRlckNsb3NlID0gc2F0dXJhdGVB
ZGQobV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UsIGdldEZyYW1pbmdPdmVyaGVhZChwYXlsb2Fk
U2l6ZSkpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiB7IH07CiAgICAgfQogICAg
IEFTU0VSVChtX2NoYW5uZWwpOwogICAgIG1fY2hhbm5lbC0+c2VuZChtZXNzYWdlKTsKKyAgICBy
ZXR1cm4geyB9OwogfQogCi12b2lkIFdlYlNvY2tldDo6c2VuZChBcnJheUJ1ZmZlciYgYmluYXJ5
RGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJTb2NrZXQ6OnNl
bmQoQXJyYXlCdWZmZXImIGJpbmFyeURhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2Nr
ZXQgJXAgc2VuZCgpIFNlbmRpbmcgQXJyYXlCdWZmZXIgJXAiLCB0aGlzLCAmYmluYXJ5RGF0YSk7
Ci0gICAgaWYgKG1fc3RhdGUgPT0gQ09OTkVDVElORykgewotICAgICAgICBlYyA9IElOVkFMSURf
U1RBVEVfRVJSOwotICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIGlmIChtX3N0YXRlID09IENP
Tk5FQ1RJTkcpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJTlZBTElEX1NUQVRFX0VSUiB9
OwogICAgIGlmIChtX3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9PSBDTE9TRUQpIHsKICAg
ICAgICAgdW5zaWduZWQgcGF5bG9hZFNpemUgPSBiaW5hcnlEYXRhLmJ5dGVMZW5ndGgoKTsKICAg
ICAgICAgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UgPSBzYXR1cmF0ZUFkZChtX2J1ZmZlcmVk
QW1vdW50QWZ0ZXJDbG9zZSwgcGF5bG9hZFNpemUpOwogICAgICAgICBtX2J1ZmZlcmVkQW1vdW50
QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1fYnVmZmVyZWRBbW91bnRBZnRlckNsb3NlLCBnZXRG
cmFtaW5nT3ZlcmhlYWQocGF5bG9hZFNpemUpKTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICBy
ZXR1cm4geyB9OwogICAgIH0KICAgICBBU1NFUlQobV9jaGFubmVsKTsKICAgICBtX2NoYW5uZWwt
PnNlbmQoYmluYXJ5RGF0YSwgMCwgYmluYXJ5RGF0YS5ieXRlTGVuZ3RoKCkpOworICAgIHJldHVy
biB7IH07CiB9CiAKLXZvaWQgV2ViU29ja2V0OjpzZW5kKEFycmF5QnVmZmVyVmlldyYgYXJyYXlC
dWZmZXJWaWV3LCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tl
dDo6c2VuZChBcnJheUJ1ZmZlclZpZXcmIGFycmF5QnVmZmVyVmlldykKIHsKICAgICBMT0coTmV0
d29yaywgIldlYlNvY2tldCAlcCBzZW5kKCkgU2VuZGluZyBBcnJheUJ1ZmZlclZpZXcgJXAiLCB0
aGlzLCAmYXJyYXlCdWZmZXJWaWV3KTsKIAotICAgIGlmIChtX3N0YXRlID09IENPTk5FQ1RJTkcp
IHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKLSAgICAgICAgcmV0dXJuOwotICAg
IH0KKyAgICBpZiAobV9zdGF0ZSA9PSBDT05ORUNUSU5HKQorICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKICAgICBpZiAobV9zdGF0ZSA9PSBDTE9TSU5HIHx8
IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIHVuc2lnbmVkIHBheWxvYWRTaXplID0gYXJy
YXlCdWZmZXJWaWV3LmJ5dGVMZW5ndGgoKTsKICAgICAgICAgbV9idWZmZXJlZEFtb3VudEFmdGVy
Q2xvc2UgPSBzYXR1cmF0ZUFkZChtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSwgcGF5bG9hZFNp
emUpOwogICAgICAgICBtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1f
YnVmZmVyZWRBbW91bnRBZnRlckNsb3NlLCBnZXRGcmFtaW5nT3ZlcmhlYWQocGF5bG9hZFNpemUp
KTsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBBU1NF
UlQobV9jaGFubmVsKTsKICAgICBtX2NoYW5uZWwtPnNlbmQoKmFycmF5QnVmZmVyVmlldy5idWZm
ZXIoKSwgYXJyYXlCdWZmZXJWaWV3LmJ5dGVPZmZzZXQoKSwgYXJyYXlCdWZmZXJWaWV3LmJ5dGVM
ZW5ndGgoKSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBXZWJTb2NrZXQ6OnNlbmQoQmxv
YiYgYmluYXJ5RGF0YSwgRXhjZXB0aW9uQ29kZSYgZWMpCitFeGNlcHRpb25Pcjx2b2lkPiBXZWJT
b2NrZXQ6OnNlbmQoQmxvYiYgYmluYXJ5RGF0YSkKIHsKICAgICBMT0coTmV0d29yaywgIldlYlNv
Y2tldCAlcCBzZW5kKCkgU2VuZGluZyBCbG9iICclcyciLCB0aGlzLCBiaW5hcnlEYXRhLnVybCgp
LnN0cmluZ0NlbnRlckVsbGlwc2l6ZWRUb0xlbmd0aCgpLnV0ZjgoKS5kYXRhKCkpOwotICAgIGlm
IChtX3N0YXRlID09IENPTk5FQ1RJTkcpIHsKLSAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VS
UjsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KKyAgICBpZiAobV9zdGF0ZSA9PSBDT05ORUNUSU5H
KQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9TVEFURV9FUlIgfTsKICAgICBp
ZiAobV9zdGF0ZSA9PSBDTE9TSU5HIHx8IG1fc3RhdGUgPT0gQ0xPU0VEKSB7CiAgICAgICAgIHVu
c2lnbmVkIHBheWxvYWRTaXplID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJpbmFyeURhdGEuc2l6
ZSgpKTsKICAgICAgICAgbV9idWZmZXJlZEFtb3VudEFmdGVyQ2xvc2UgPSBzYXR1cmF0ZUFkZCht
X2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZSwgcGF5bG9hZFNpemUpOwogICAgICAgICBtX2J1ZmZl
cmVkQW1vdW50QWZ0ZXJDbG9zZSA9IHNhdHVyYXRlQWRkKG1fYnVmZmVyZWRBbW91bnRBZnRlckNs
b3NlLCBnZXRGcmFtaW5nT3ZlcmhlYWQocGF5bG9hZFNpemUpKTsKLSAgICAgICAgcmV0dXJuOwor
ICAgICAgICByZXR1cm4geyB9OwogICAgIH0KICAgICBBU1NFUlQobV9jaGFubmVsKTsKICAgICBt
X2NoYW5uZWwtPnNlbmQoYmluYXJ5RGF0YSk7CisgICAgcmV0dXJuIHsgfTsKIH0KIAotdm9pZCBX
ZWJTb2NrZXQ6OmNsb3NlKE9wdGlvbmFsPHVuc2lnbmVkIHNob3J0PiBvcHRpb25hbENvZGUsIGNv
bnN0IFN0cmluZyYgcmVhc29uLCBFeGNlcHRpb25Db2RlJiBlYykKK0V4Y2VwdGlvbk9yPHZvaWQ+
IFdlYlNvY2tldDo6Y2xvc2UoT3B0aW9uYWw8dW5zaWduZWQgc2hvcnQ+IG9wdGlvbmFsQ29kZSwg
Y29uc3QgU3RyaW5nJiByZWFzb24pCiB7CiAgICAgaW50IGNvZGUgPSBvcHRpb25hbENvZGUgPyBv
cHRpb25hbENvZGUudmFsdWUoKSA6IHN0YXRpY19jYXN0PGludD4oV2ViU29ja2V0Q2hhbm5lbDo6
Q2xvc2VFdmVudENvZGVOb3RTcGVjaWZpZWQpOwogICAgIGlmIChjb2RlID09IFdlYlNvY2tldENo
YW5uZWw6OkNsb3NlRXZlbnRDb2RlTm90U3BlY2lmaWVkKQogICAgICAgICBMT0coTmV0d29yaywg
IldlYlNvY2tldCAlcCBjbG9zZSgpIHdpdGhvdXQgY29kZSBhbmQgcmVhc29uIiwgdGhpcyk7CiAg
ICAgZWxzZSB7CiAgICAgICAgIExPRyhOZXR3b3JrLCAiV2ViU29ja2V0ICVwIGNsb3NlKCkgY29k
ZT0lZCByZWFzb249JyVzJyIsIHRoaXMsIGNvZGUsIHJlYXNvbi51dGY4KCkuZGF0YSgpKTsKLSAg
ICAgICAgaWYgKCEoY29kZSA9PSBXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29kZU5vcm1h
bENsb3N1cmUgfHwgKFdlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlTWluaW11bVVzZXJE
ZWZpbmVkIDw9IGNvZGUgJiYgY29kZSA8PSBXZWJTb2NrZXRDaGFubmVsOjpDbG9zZUV2ZW50Q29k
ZU1heGltdW1Vc2VyRGVmaW5lZCkpKSB7Ci0gICAgICAgICAgICBlYyA9IElOVkFMSURfQUNDRVNT
X0VSUjsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQorICAgICAgICBpZiAoIShjb2Rl
ID09IFdlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlTm9ybWFsQ2xvc3VyZSB8fCAoV2Vi
U29ja2V0Q2hhbm5lbDo6Q2xvc2VFdmVudENvZGVNaW5pbXVtVXNlckRlZmluZWQgPD0gY29kZSAm
JiBjb2RlIDw9IFdlYlNvY2tldENoYW5uZWw6OkNsb3NlRXZlbnRDb2RlTWF4aW11bVVzZXJEZWZp
bmVkKSkpCisgICAgICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSU5WQUxJRF9BQ0NFU1NfRVJS
IH07CiAgICAgICAgIENTdHJpbmcgdXRmOCA9IHJlYXNvbi51dGY4KFN0cmljdENvbnZlcnNpb25S
ZXBsYWNpbmdVbnBhaXJlZFN1cnJvZ2F0ZXNXaXRoRkZGRCk7CiAgICAgICAgIGlmICh1dGY4Lmxl
bmd0aCgpID4gbWF4UmVhc29uU2l6ZUluQnl0ZXMpIHsKICAgICAgICAgICAgIHNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQoKS0+YWRkQ29uc29sZU1lc3NhZ2UoTWVzc2FnZVNvdXJjZTo6SlMsIE1lc3Nh
Z2VMZXZlbDo6RXJyb3IsIEFTQ0lJTGl0ZXJhbCgiV2ViU29ja2V0IGNsb3NlIG1lc3NhZ2UgaXMg
dG9vIGxvbmcuIikpOwotICAgICAgICAgICAgZWMgPSBTWU5UQVhfRVJSOwotICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFNZTlRBWF9FUlIgfTsKICAg
ICAgICAgfQogICAgIH0KIAogICAgIGlmIChtX3N0YXRlID09IENMT1NJTkcgfHwgbV9zdGF0ZSA9
PSBDTE9TRUQpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIHsgfTsKICAgICBpZiAo
bV9zdGF0ZSA9PSBDT05ORUNUSU5HKSB7CiAgICAgICAgIG1fc3RhdGUgPSBDTE9TSU5HOwogICAg
ICAgICBtX2NoYW5uZWwtPmZhaWwoIldlYlNvY2tldCBpcyBjbG9zZWQgYmVmb3JlIHRoZSBjb25u
ZWN0aW9uIGlzIGVzdGFibGlzaGVkLiIpOwotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVy
biB7IH07CiAgICAgfQogICAgIG1fc3RhdGUgPSBDTE9TSU5HOwogICAgIGlmIChtX2NoYW5uZWwp
CiAgICAgICAgIG1fY2hhbm5lbC0+Y2xvc2UoY29kZSwgcmVhc29uKTsKKyAgICByZXR1cm4geyB9
OwogfQogCiBjb25zdCBVUkwmIFdlYlNvY2tldDo6dXJsKCkgY29uc3QKQEAgLTQ2MCwyNyArNDMw
LDI3IEBAIFN0cmluZyBXZWJTb2NrZXQ6OmV4dGVuc2lvbnMoKSBjb25zdAogU3RyaW5nIFdlYlNv
Y2tldDo6YmluYXJ5VHlwZSgpIGNvbnN0CiB7CiAgICAgc3dpdGNoIChtX2JpbmFyeVR5cGUpIHsK
LSAgICBjYXNlIEJpbmFyeVR5cGVCbG9iOgorICAgIGNhc2UgQmluYXJ5VHlwZTo6QmxvYjoKICAg
ICAgICAgcmV0dXJuIEFTQ0lJTGl0ZXJhbCgiYmxvYiIpOwotICAgIGNhc2UgQmluYXJ5VHlwZUFy
cmF5QnVmZmVyOgorICAgIGNhc2UgQmluYXJ5VHlwZTo6QXJyYXlCdWZmZXI6CiAgICAgICAgIHJl
dHVybiBBU0NJSUxpdGVyYWwoImFycmF5YnVmZmVyIik7CiAgICAgfQogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotdm9pZCBXZWJTb2NrZXQ6OnNl
dEJpbmFyeVR5cGUoY29uc3QgU3RyaW5nJiBiaW5hcnlUeXBlLCBFeGNlcHRpb25Db2RlJiBlYykK
K0V4Y2VwdGlvbk9yPHZvaWQ+IFdlYlNvY2tldDo6c2V0QmluYXJ5VHlwZShjb25zdCBTdHJpbmcm
IGJpbmFyeVR5cGUpCiB7CiAgICAgaWYgKGJpbmFyeVR5cGUgPT0gImJsb2IiKSB7Ci0gICAgICAg
IG1fYmluYXJ5VHlwZSA9IEJpbmFyeVR5cGVCbG9iOwotICAgICAgICByZXR1cm47CisgICAgICAg
IG1fYmluYXJ5VHlwZSA9IEJpbmFyeVR5cGU6OkJsb2I7CisgICAgICAgIHJldHVybiB7IH07CiAg
ICAgfQogICAgIGlmIChiaW5hcnlUeXBlID09ICJhcnJheWJ1ZmZlciIpIHsKLSAgICAgICAgbV9i
aW5hcnlUeXBlID0gQmluYXJ5VHlwZUFycmF5QnVmZmVyOwotICAgICAgICByZXR1cm47CisgICAg
ICAgIG1fYmluYXJ5VHlwZSA9IEJpbmFyeVR5cGU6OkFycmF5QnVmZmVyOworICAgICAgICByZXR1
cm4geyB9OwogICAgIH0KLSAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpLT5hZGRDb25zb2xlTWVzc2FnZShNZXNzYWdlU291cmNlOjpKUywgTWVzc2FnZUxl
dmVsOjpFcnJvciwgIiciICsgYmluYXJ5VHlwZSArICInIGlzIG5vdCBhIHZhbGlkIHZhbHVlIGZv
ciBiaW5hcnlUeXBlOyBiaW5hcnlUeXBlIHJlbWFpbnMgdW5jaGFuZ2VkLiIpOworICAgIHJldHVy
biBFeGNlcHRpb24geyBTWU5UQVhfRVJSIH07CiB9CiAKIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIFdl
YlNvY2tldDo6ZXZlbnRUYXJnZXRJbnRlcmZhY2UoKSBjb25zdApAQCAtNTkxLDExICs1NjEsMTEg
QEAgdm9pZCBXZWJTb2NrZXQ6OmRpZFJlY2VpdmVCaW5hcnlEYXRhKFZlY3Rvcjx1aW50OF90PiYm
IGJpbmFyeURhdGEpCiB7CiAgICAgTE9HKE5ldHdvcmssICJXZWJTb2NrZXQgJXAgZGlkUmVjZWl2
ZUJpbmFyeURhdGEoKSAldSBieXRlIGJpbmFyeSBtZXNzYWdlIiwgdGhpcywgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KGJpbmFyeURhdGEuc2l6ZSgpKSk7CiAgICAgc3dpdGNoIChtX2JpbmFyeVR5cGUp
IHsKLSAgICBjYXNlIEJpbmFyeVR5cGVCbG9iOgorICAgIGNhc2UgQmluYXJ5VHlwZTo6QmxvYjoK
ICAgICAgICAgLy8gRklYTUU6IFdlIGp1c3QgcmVjZWl2ZWQgdGhlIGRhdGEgZnJvbSBOZXR3b3Jr
UHJvY2VzcywgYW5kIGFyZSBzZW5kaW5nIGl0IGJhY2suIFRoaXMgaXMgaW5lZmZpY2llbnQuCiAg
ICAgICAgIGRpc3BhdGNoRXZlbnQoTWVzc2FnZUV2ZW50OjpjcmVhdGUoQmxvYjo6Y3JlYXRlKFdU
Rk1vdmUoYmluYXJ5RGF0YSksIGVtcHR5U3RyaW5nKCkpLCBTZWN1cml0eU9yaWdpbjo6Y3JlYXRl
KG1fdXJsKS0+dG9TdHJpbmcoKSkpOwogICAgICAgICBicmVhazsKLSAgICBjYXNlIEJpbmFyeVR5
cGVBcnJheUJ1ZmZlcjoKKyAgICBjYXNlIEJpbmFyeVR5cGU6OkFycmF5QnVmZmVyOgogICAgICAg
ICBkaXNwYXRjaEV2ZW50KE1lc3NhZ2VFdmVudDo6Y3JlYXRlKEFycmF5QnVmZmVyOjpjcmVhdGUo
YmluYXJ5RGF0YS5kYXRhKCksIGJpbmFyeURhdGEuc2l6ZSgpKSwgU2VjdXJpdHlPcmlnaW46OmNy
ZWF0ZShtX3VybCktPnRvU3RyaW5nKCkpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5oCmluZGV4IDBmMjJiNWEw
M2ExNGIzZDg4ZmFmODRjNjdlOGUzYzQxNTcwMWM1YTQuLjQxNTRlZWVjNjMyMTJlYmNkZmExYmY4
MDFiZjVlMTIyNjRmMTA1NzkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
c29ja2V0cy9XZWJTb2NrZXQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tl
dHMvV2ViU29ja2V0LmgKQEAgLTI4LDM2ICsyOCwzOCBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwog
Ci0jaWZuZGVmIFdlYlNvY2tldF9oCi0jZGVmaW5lIFdlYlNvY2tldF9oCisjcHJhZ21hIG9uY2UK
IAogI2lmIEVOQUJMRShXRUJfU09DS0VUUykKIAogI2luY2x1ZGUgIkFjdGl2ZURPTU9iamVjdC5o
IgotI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudFRhcmdldC5oIgor
I2luY2x1ZGUgIkV4Y2VwdGlvbk9yLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKICNpbmNsdWRlICJV
UkwuaCIKLSNpbmNsdWRlICJXZWJTb2NrZXRDaGFubmVsLmgiCiAjaW5jbHVkZSAiV2ViU29ja2V0
Q2hhbm5lbENsaWVudC5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0jaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9taWNTdHJpbmdIYXNoLmg+Cisj
aW5jbHVkZSA8d3RmL0RlcXVlLmg+CisKK25hbWVzcGFjZSBKU0MgeworY2xhc3MgQXJyYXlCdWZm
ZXI7CitjbGFzcyBBcnJheUJ1ZmZlclZpZXc7Cit9CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Y2xhc3MgQmxvYjsKLWNsYXNzIENsb3NlRXZlbnQ7CiBjbGFzcyBUaHJlYWRhYmxlV2ViU29ja2V0
Q2hhbm5lbDsKIAotY2xhc3MgV2ViU29ja2V0IGZpbmFsIDogcHVibGljIFJlZkNvdW50ZWQ8V2Vi
U29ja2V0PiwgcHVibGljIEV2ZW50VGFyZ2V0V2l0aElubGluZURhdGEsIHB1YmxpYyBBY3RpdmVE
T01PYmplY3QsIHB1YmxpYyBXZWJTb2NrZXRDaGFubmVsQ2xpZW50IHsKK2NsYXNzIFdlYlNvY2tl
dCBmaW5hbCA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYlNvY2tldD4sIHB1YmxpYyBFdmVudFRhcmdl
dFdpdGhJbmxpbmVEYXRhLCBwdWJsaWMgQWN0aXZlRE9NT2JqZWN0LCBwcml2YXRlIFdlYlNvY2tl
dENoYW5uZWxDbGllbnQgewogcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldElzQXZhaWxhYmxl
KGJvb2wpOwogICAgIHN0YXRpYyBib29sIGlzQXZhaWxhYmxlKCk7Ci0gICAgc3RhdGljIGNvbnN0
IGNoYXIqIHN1YlByb3RvY29sU2VwZXJhdG9yKCk7Ci0gICAgc3RhdGljIFJlZjxXZWJTb2NrZXQ+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0Jik7Ci0gICAgc3RhdGljIFJlZlB0cjxXZWJT
b2NrZXQ+IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmws
IEV4Y2VwdGlvbkNvZGUmKTsKLSAgICBzdGF0aWMgUmVmUHRyPFdlYlNvY2tldD4gY3JlYXRlKFNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5nJiBw
cm90b2NvbCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHN0YXRpYyBSZWZQdHI8V2ViU29ja2V0PiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBW
ZWN0b3I8U3RyaW5nPiYgcHJvdG9jb2xzLCBFeGNlcHRpb25Db2RlJik7CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogc3VicHJvdG9jb2xTZXBhcmF0b3IoKTsKKworICAgIHN0YXRpYyBFeGNlcHRp
b25PcjxSZWY8V2ViU29ja2V0Pj4gY3JlYXRlKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBTdHJpbmcmIHVybCk7CisgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxXZWJTb2NrZXQ+PiBj
cmVhdGUoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBT
dHJpbmcmIHByb3RvY29sKTsKKyAgICBzdGF0aWMgRXhjZXB0aW9uT3I8UmVmPFdlYlNvY2tldD4+
IGNyZWF0ZShTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0
IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMpOwogICAgIHZpcnR1YWwgfldlYlNvY2tldCgpOwog
CiAgICAgZW51bSBTdGF0ZSB7CkBAIC02NywxNiArNjksMTYgQEAgcHVibGljOgogICAgICAgICBD
TE9TRUQgPSAzCiAgICAgfTsKIAotICAgIHZvaWQgY29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwg
RXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY29ubmVjdChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU3RyaW5nJiBwcm90b2NvbCwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgY29ubmVjdChj
b25zdCBTdHJpbmcmIHVybCwgY29uc3QgVmVjdG9yPFN0cmluZz4mIHByb3RvY29scywgRXhjZXB0
aW9uQ29kZSYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1
cmwpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbm5lY3QoY29uc3QgU3RyaW5nJiB1cmwsIGNv
bnN0IFN0cmluZyYgcHJvdG9jb2wpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IGNvbm5lY3QoY29u
c3QgU3RyaW5nJiB1cmwsIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwcm90b2NvbHMpOwogCi0gICAg
dm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgbWVzc2FnZSwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZv
aWQgc2VuZChKU0M6OkFycmF5QnVmZmVyJiwgRXhjZXB0aW9uQ29kZSYpOwotICAgIHZvaWQgc2Vu
ZChKU0M6OkFycmF5QnVmZmVyVmlldyYsIEV4Y2VwdGlvbkNvZGUmKTsKLSAgICB2b2lkIHNlbmQo
QmxvYiYsIEV4Y2VwdGlvbkNvZGUmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZW5kKGNvbnN0
IFN0cmluZyYgbWVzc2FnZSk7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2VuZChKU0M6OkFycmF5
QnVmZmVyJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2VuZChKU0M6OkFycmF5QnVmZmVyVmll
dyYpOworICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNlbmQoQmxvYiYpOwogCi0gICAgdm9pZCBjbG9z
ZShPcHRpb25hbDx1bnNpZ25lZCBzaG9ydD4gY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24sIEV4
Y2VwdGlvbkNvZGUmKTsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBjbG9zZShPcHRpb25hbDx1bnNp
Z25lZCBzaG9ydD4gY29kZSwgY29uc3QgU3RyaW5nJiByZWFzb24pOwogCiAgICAgY29uc3QgVVJM
JiB1cmwoKSBjb25zdDsKICAgICBTdGF0ZSByZWFkeVN0YXRlKCkgY29uc3Q7CkBAIC04NiwxNiAr
ODgsMzEgQEAgcHVibGljOgogICAgIFN0cmluZyBleHRlbnNpb25zKCkgY29uc3Q7CiAKICAgICBT
dHJpbmcgYmluYXJ5VHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0QmluYXJ5VHlwZShjb25zdCBT
dHJpbmcmLCBFeGNlcHRpb25Db2RlJik7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0QmluYXJ5
VHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIHVzaW5nIFJlZkNvdW50ZWQ6OnJlZjsKKyAgICB1
c2luZyBSZWZDb3VudGVkOjpkZXJlZjsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBXZWJTb2Nr
ZXQoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCByZXN1bWVUaW1lckZpcmVk
KCk7CisgICAgdm9pZCBkaXNwYXRjaE9yUXVldWVFcnJvckV2ZW50KCk7CisgICAgdm9pZCBkaXNw
YXRjaE9yUXVldWVFdmVudChSZWY8RXZlbnQ+JiYpOworCisgICAgdm9pZCBjb250ZXh0RGVzdHJv
eWVkKCkgZmluYWw7CisgICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9uKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24pIGZpbmFs
OworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisgICAg
Y29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IGZpbmFsOwogCi0gICAgLy8g
RXZlbnRUYXJnZXQgZnVuY3Rpb25zLgotICAgIEV2ZW50VGFyZ2V0SW50ZXJmYWNlIGV2ZW50VGFy
Z2V0SW50ZXJmYWNlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4
dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIEV2ZW50VGFy
Z2V0SW50ZXJmYWNlIGV2ZW50VGFyZ2V0SW50ZXJmYWNlKCkgY29uc3QgZmluYWw7CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0IGZpbmFs
OwogCi0gICAgdXNpbmcgUmVmQ291bnRlZDxXZWJTb2NrZXQ+OjpyZWY7Ci0gICAgdXNpbmcgUmVm
Q291bnRlZDxXZWJTb2NrZXQ+OjpkZXJlZjsKKyAgICB2b2lkIHJlZkV2ZW50VGFyZ2V0KCkgZmlu
YWwgeyByZWYoKTsgfQorICAgIHZvaWQgZGVyZWZFdmVudFRhcmdldCgpIGZpbmFsIHsgZGVyZWYo
KTsgfQogCi0gICAgLy8gV2ViU29ja2V0Q2hhbm5lbENsaWVudCBmdW5jdGlvbnMuCiAgICAgdm9p
ZCBkaWRDb25uZWN0KCkgZmluYWw7CiAgICAgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZShjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpIGZpbmFsOwogICAgIHZvaWQgZGlkUmVjZWl2ZUJpbmFyeURhdGEoVmVj
dG9yPHVpbnQ4X3Q+JiYpIGZpbmFsOwpAQCAtMTA1LDM4ICsxMjIsMTcgQEAgcHVibGljOgogICAg
IHZvaWQgZGlkQ2xvc2UodW5zaWduZWQgdW5oYW5kbGVkQnVmZmVyZWRBbW91bnQsIENsb3NpbmdI
YW5kc2hha2VDb21wbGV0aW9uU3RhdHVzLCB1bnNpZ25lZCBzaG9ydCBjb2RlLCBjb25zdCBTdHJp
bmcmIHJlYXNvbikgZmluYWw7CiAgICAgdm9pZCBkaWRVcGdyYWRlVVJMKCkgZmluYWw7CiAKLXBy
aXZhdGU6Ci0gICAgZXhwbGljaXQgV2ViU29ja2V0KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmKTsK
LQotICAgIHZvaWQgcmVzdW1lVGltZXJGaXJlZCgpOwotICAgIHZvaWQgZGlzcGF0Y2hPclF1ZXVl
RXJyb3JFdmVudCgpOwotICAgIHZvaWQgZGlzcGF0Y2hPclF1ZXVlRXZlbnQoUmVmPEV2ZW50PiYm
KTsKLQotICAgIC8vIEFjdGl2ZURPTU9iamVjdCBBUEkuCi0gICAgdm9pZCBjb250ZXh0RGVzdHJv
eWVkKCkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBjYW5TdXNwZW5kRm9yRG9jdW1lbnRTdXNwZW5zaW9u
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdXNwZW5kKFJlYXNvbkZvclN1c3BlbnNpb24p
IG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdW1lKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzdG9wKCkg
b3ZlcnJpZGU7Ci0gICAgY29uc3QgY2hhciogYWN0aXZlRE9NT2JqZWN0TmFtZSgpIGNvbnN0IG92
ZXJyaWRlOwotCi0gICAgdm9pZCByZWZFdmVudFRhcmdldCgpIG92ZXJyaWRlIHsgcmVmKCk7IH0K
LSAgICB2b2lkIGRlcmVmRXZlbnRUYXJnZXQoKSBvdmVycmlkZSB7IGRlcmVmKCk7IH0KLQogICAg
IHNpemVfdCBnZXRGcmFtaW5nT3ZlcmhlYWQoc2l6ZV90IHBheWxvYWRTaXplKTsKIAotICAgIGVu
dW0gQmluYXJ5VHlwZSB7Ci0gICAgICAgIEJpbmFyeVR5cGVCbG9iLAotICAgICAgICBCaW5hcnlU
eXBlQXJyYXlCdWZmZXIKLSAgICB9OworICAgIGVudW0gY2xhc3MgQmluYXJ5VHlwZSB7IEJsb2Is
IEFycmF5QnVmZmVyIH07CiAKICAgICBSZWZQdHI8VGhyZWFkYWJsZVdlYlNvY2tldENoYW5uZWw+
IG1fY2hhbm5lbDsKIAotICAgIFN0YXRlIG1fc3RhdGU7CisgICAgU3RhdGUgbV9zdGF0ZSB7IENP
Tk5FQ1RJTkcgfTsKICAgICBVUkwgbV91cmw7Ci0gICAgdW5zaWduZWQgbV9idWZmZXJlZEFtb3Vu
dDsKLSAgICB1bnNpZ25lZCBtX2J1ZmZlcmVkQW1vdW50QWZ0ZXJDbG9zZTsKLSAgICBCaW5hcnlU
eXBlIG1fYmluYXJ5VHlwZTsKKyAgICB1bnNpZ25lZCBtX2J1ZmZlcmVkQW1vdW50IHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fYnVmZmVyZWRBbW91bnRBZnRlckNsb3NlIHsgMCB9OworICAgIEJpbmFy
eVR5cGUgbV9iaW5hcnlUeXBlIHsgQmluYXJ5VHlwZTo6QmxvYiB9OwogICAgIFN0cmluZyBtX3N1
YnByb3RvY29sOwogICAgIFN0cmluZyBtX2V4dGVuc2lvbnM7CiAKQEAgLTE0OSw1ICsxNDUsMyBA
QCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9TT0NLRVRTKQotCi0jZW5kaWYgLy8gV2ViU29ja2V0X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2Vic29ja2V0cy9XZWJTb2NrZXQuaWRsIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldC5pZGwKaW5kZXggZjUxNGU2YjU3NDNhMjVkM2Yw
OGExZGU3YzJkMGVmNTQyYTM1NzQ0MS4uZDcxZWQyYjg2ODQ5NWYwZjhlYTI5MDMwOGU2YzIyMjk1
Yzc2NGU5OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dl
YlNvY2tldC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNv
Y2tldC5pZGwKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBDb25kaXRpb25hbD1XRUJfU09DS0VUUywK
ICAgICBDb25zdHJ1Y3RvcihVU1ZTdHJpbmcgdXJsLCBvcHRpb25hbCBzZXF1ZW5jZTxET01TdHJp
bmc+IHByb3RvY29scyA9IFtdKSwKICAgICBDb25zdHJ1Y3RvcihVU1ZTdHJpbmcgdXJsLCBET01T
dHJpbmcgcHJvdG9jb2wpLAotICAgIENvbnN0cnVjdG9yTWF5VGhyb3dMZWdhY3lFeGNlcHRpb24s
CisgICAgQ29uc3RydWN0b3JNYXlUaHJvd0V4Y2VwdGlvbiwKICAgICBDb25zdHJ1Y3RvckNhbGxX
aXRoPVNjcmlwdEV4ZWN1dGlvbkNvbnRleHQsCiAgICAgRW5hYmxlZEF0UnVudGltZSwKICAgICBF
eHBvc2VkPShXaW5kb3csV29ya2VyKSwKQEAgLTQyLDcgKzQyLDYgQEAKICAgICByZWFkb25seSBh
dHRyaWJ1dGUgVVNWU3RyaW5nIFVSTDsgLy8gTG93ZXJjYXNlZCAudXJsIGlzIHRoZSBvbmUgaW4g
dGhlIHNwZWMsIGJ1dCBsZWF2aW5nIC5VUkwgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucy4KICAg
ICByZWFkb25seSBhdHRyaWJ1dGUgVVNWU3RyaW5nIHVybDsKIAotICAgIC8vIHJlYWR5IHN0YXRl
CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ09OTkVDVElORyA9IDA7CiAgICAgY29uc3QgdW5z
aWduZWQgc2hvcnQgT1BFTiA9IDE7CiAgICAgY29uc3QgdW5zaWduZWQgc2hvcnQgQ0xPU0lORyA9
IDI7CkBAIC01MSw3ICs1MCw2IEBACiAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBidWZmZXJlZEFtb3VudDsKIAotICAgIC8vIG5ldHdvcmtpbmcKICAgICBhdHRyaWJ1dGUg
RXZlbnRIYW5kbGVyIG9ub3BlbjsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9ubWVzc2Fn
ZTsKICAgICBhdHRyaWJ1dGUgRXZlbnRIYW5kbGVyIG9uZXJyb3I7CkBAIC02MCwxMiArNTgsMTIg
QEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBwcm90b2NvbDsKICAgICByZWFk
b25seSBhdHRyaWJ1dGUgRE9NU3RyaW5nPyBleHRlbnNpb25zOwogCi0gICAgW1NldHRlck1heVRo
cm93TGVnYWN5RXhjZXB0aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJpbmFyeVR5cGU7CisgICAg
W1NldHRlck1heVRocm93RXhjZXB0aW9uXSBhdHRyaWJ1dGUgRE9NU3RyaW5nIGJpbmFyeVR5cGU7
CiAKLSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2VuZChBcnJheUJ1ZmZlciBk
YXRhKTsKLSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2VuZChBcnJheUJ1ZmZl
clZpZXcgZGF0YSk7Ci0gICAgW01heVRocm93TGVnYWN5RXhjZXB0aW9uXSB2b2lkIHNlbmQoQmxv
YiBkYXRhKTsKLSAgICBbTWF5VGhyb3dMZWdhY3lFeGNlcHRpb25dIHZvaWQgc2VuZChVU1ZTdHJp
bmcgZGF0YSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHNlbmQoQXJyYXlCdWZmZXIg
ZGF0YSk7CisgICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHNlbmQoQXJyYXlCdWZmZXJWaWV3
IGRhdGEpOworICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdm9pZCBzZW5kKEJsb2IgZGF0YSk7Cisg
ICAgW01heVRocm93RXhjZXB0aW9uXSB2b2lkIHNlbmQoVVNWU3RyaW5nIGRhdGEpOwogCi0gICAg
W01heVRocm93TGVnYWN5RXhjZXB0aW9uXSB2b2lkIGNsb3NlKFtDbGFtcF0gb3B0aW9uYWwgdW5z
aWduZWQgc2hvcnQgY29kZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHJlYXNvbik7CisgICAgW01heVRo
cm93RXhjZXB0aW9uXSB2b2lkIGNsb3NlKFtDbGFtcF0gb3B0aW9uYWwgdW5zaWduZWQgc2hvcnQg
Y29kZSwgb3B0aW9uYWwgRE9NU3RyaW5nIHJlYXNvbik7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJzb2NrZXRzL1dlYlNvY2tldEhhbmRzaGFrZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAppbmRl
eCA3OWZiYWEyMzNkMDdhMzExZDhkMjkyMzExOTM5MTA3NTRmYzc2MThiLi4yNTgxMmE3MTRhMWYx
ZjVlZTI0ODllMmRlZjllMTkxNWI3Mjc0Y2YxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYnNvY2tldHMvV2ViU29ja2V0SGFuZHNoYWtlLmNwcApAQCAtNjA1LDcg
KzYwNSw3IEBAIGJvb2wgV2ViU29ja2V0SGFuZHNoYWtlOjpjaGVja1Jlc3BvbnNlSGVhZGVycygp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgVmVjdG9yPFN0
cmluZz4gcmVzdWx0OwotICAgICAgICBtX2NsaWVudFByb3RvY29sLnNwbGl0KFN0cmluZyhXZWJT
b2NrZXQ6OnN1YlByb3RvY29sU2VwZXJhdG9yKCkpLCByZXN1bHQpOworICAgICAgICBtX2NsaWVu
dFByb3RvY29sLnNwbGl0KFdlYlNvY2tldDo6c3VicHJvdG9jb2xTZXBhcmF0b3IoKSwgcmVzdWx0
KTsKICAgICAgICAgaWYgKCFyZXN1bHQuY29udGFpbnMoc2VydmVyV2ViU29ja2V0UHJvdG9jb2wp
KSB7CiAgICAgICAgICAgICBtX2ZhaWx1cmVSZWFzb24gPSBBU0NJSUxpdGVyYWwoIkVycm9yIGR1
cmluZyBXZWJTb2NrZXQgaGFuZHNoYWtlOiBTZWMtV2ViU29ja2V0LVByb3RvY29sIG1pc21hdGNo
Iik7CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRGF0YWJhc2VBZ2VudC5jcHAKaW5kZXggYmQ5MGIzMjI1YWQ3NzBi
ZmE4YTVkYmM3ZTUzY2E0MThjZTY1MWE3ZS4uMDFhYTc5YjRiYTI3MGQ3ZjM0MzAxMmQ5ZWJmYjYy
NWNjNTBkYWNjZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRhdGFiYXNlQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEYXRhYmFzZUFnZW50LmNwcApAQCAtNzcsMTQgKzc3LDE0IEBAIHB1YmxpYzoKIAogICAgIGJv
b2wgaGFuZGxlRXZlbnQoU1FMVHJhbnNhY3Rpb24qLCBTUUxSZXN1bHRTZXQqIHJlc3VsdFNldCkg
b3ZlcnJpZGUKICAgICB7Ci0gICAgICAgIFNRTFJlc3VsdFNldFJvd0xpc3QqIHJvd0xpc3QgPSBy
ZXN1bHRTZXQtPnJvd3MoKTsKKyAgICAgICAgYXV0byYgcm93TGlzdCA9IHJlc3VsdFNldC0+cm93
cygpOwogCiAgICAgICAgIGF1dG8gY29sdW1uTmFtZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpB
cnJheTxTdHJpbmc+OjpjcmVhdGUoKTsKLSAgICAgICAgZm9yIChhdXRvJiBjb2x1bW4gOiByb3dM
aXN0LT5jb2x1bW5OYW1lcygpKQorICAgICAgICBmb3IgKGF1dG8mIGNvbHVtbiA6IHJvd0xpc3Qu
Y29sdW1uTmFtZXMoKSkKICAgICAgICAgICAgIGNvbHVtbk5hbWVzLT5hZGRJdGVtKGNvbHVtbik7
CiAKICAgICAgICAgYXV0byB2YWx1ZXMgPSBJbnNwZWN0b3I6OlByb3RvY29sOjpBcnJheTxJbnNw
ZWN0b3JWYWx1ZT46OmNyZWF0ZSgpOwotICAgICAgICBmb3IgKGF1dG8mIHZhbHVlIDogcm93TGlz
dC0+dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChhdXRvJiB2YWx1ZSA6IHJvd0xpc3QudmFsdWVz
KCkpIHsKICAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWU7
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLnR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBT
UUxWYWx1ZTo6U3RyaW5nVmFsdWU6IGluc3BlY3RvclZhbHVlID0gSW5zcGVjdG9yVmFsdWU6OmNy
ZWF0ZSh2YWx1ZS5zdHJpbmcoKSk7IGJyZWFrOwo=
</data>
<flag name="review"
          id="314401"
          type_id="1"
          status="+"
          setter="cdumez"
    />
    <flag name="commit-queue"
          id="314583"
          type_id="3"
          status="-"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>