<?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>137660</bug_id>
          
          <creation_ts>2014-10-13 10:48:06 -0700</creation_ts>
          <short_desc>[EFL] Add message APIs to communicate between ewk_context and extensions</short_desc>
          <delta_ts>2015-02-24 03:02:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit EFL</component>
          <version>528+ (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="Ryuan Choi">ryuan.choi</reporter>
          <assigned_to name="Ryuan Choi">ryuan.choi</assigned_to>
          <cc>buildbot</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>jinwoo7.song</cc>
    
    <cc>lucas.de.marchi</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1041304</commentid>
    <comment_count>0</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-10-13 10:48:06 -0700</bug_when>
    <thetext>SSIA</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1041310</commentid>
    <comment_count>1</comment_count>
      <attachid>239735</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-10-13 11:16:00 -0700</bug_when>
    <thetext>Created attachment 239735
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1044871</commentid>
    <comment_count>2</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-10-29 15:30:24 -0700</bug_when>
    <thetext>Gyuyoung, jinwoo,

Could you take a look at this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1047028</commentid>
    <comment_count>3</comment_count>
      <attachid>241162</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2014-11-06 22:24:07 -0800</bug_when>
    <thetext>Created attachment 241162
rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068063</commentid>
    <comment_count>4</comment_count>
      <attachid>241162</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-02-10 08:05:58 -0800</bug_when>
    <thetext>Comment on attachment 241162
rebased

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

Could you explain what do you want to do in this patch ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:528
&gt; +        eina_value_get(body, &amp;value);

Why does messageBody need to get eina_value_get() ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068319</commentid>
    <comment_count>5</comment_count>
      <attachid>241162</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-02-11 03:48:52 -0800</bug_when>
    <thetext>Comment on attachment 241162
rebased

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

This is the part of ewk_extension which wraps InjectedBundle as ewk API.
This patch provides some APIs of ewk_extension to communicate between ewk_context(UIProcess) and ewk_extension(WebProcess).

Without this, we don&apos;t have a way to do it without exposing InjectedBundle and WK C-APIs like tizen did.

&gt;&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:528
&gt;&gt; +        eina_value_get(body, &amp;value);
&gt; 
&gt; Why does messageBody need to get eina_value_get() ?

It&apos;s to support various types in the future although this patch just implements string type.

For example, we can support double or integer type or any structures which EFL supports to post from UIProcess to WebProcess.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069431</commentid>
    <comment_count>6</comment_count>
      <attachid>241162</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2015-02-16 07:48:56 -0800</bug_when>
    <thetext>Comment on attachment 241162
rebased

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

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:411
&gt; +    if (messageBody &amp;&amp; WKStringGetTypeID() == WKGetTypeID(messageBody)) {

Can messageBody be null ? Isn&apos;t WKTypeRef a reference, not a pointer ?

&gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:526
&gt; +    if (type == EINA_VALUE_TYPE_STRINGSHARE || type == EINA_VALUE_TYPE_STRING) {

Looks like early return is better.

if (type != EINA_VALUE_TYPE_STRINGSHARE &amp;&amp; type != EINA_VALUE_TYPE_STRING)
    return false;

const char* value;
eina_value_get(body, &amp;value);
messageBody = adoptWK(WKStringCreateWithUTF8CString(value));

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:89
&gt; +    if (messageBody &amp;&amp; WKStringGetTypeID() == WKGetTypeID(messageBody)) {

ditto.

&gt; Source/WebKit2/WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:137
&gt; +    if (type == EINA_VALUE_TYPE_STRINGSHARE || type == EINA_VALUE_TYPE_STRING) {

ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071588</commentid>
    <comment_count>7</comment_count>
      <attachid>247213</attachid>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-02-24 01:32:57 -0800</bug_when>
    <thetext>Created attachment 247213
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071589</commentid>
    <comment_count>8</comment_count>
    <who name="Ryuan Choi">ryuan.choi</who>
    <bug_when>2015-02-24 01:35:30 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 241162 [details]
&gt; rebased
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=241162&amp;action=review
&gt; 
&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:411
&gt; &gt; +    if (messageBody &amp;&amp; WKStringGetTypeID() == WKGetTypeID(messageBody)) {
&gt; 
&gt; Can messageBody be null ? Isn&apos;t WKTypeRef a reference, not a pointer ?
&gt; 

Yes, WKTypeRef is defined like below in Source/WebKit2/Shared/API/c/WKBase.h
typedef const void* WKTypeRef;

Although we don&apos;t pass the empty message logically, I think that this check routine is reasonable.

&gt; &gt; Source/WebKit2/UIProcess/API/efl/ewk_context.cpp:526
&gt; &gt; +    if (type == EINA_VALUE_TYPE_STRINGSHARE || type == EINA_VALUE_TYPE_STRING) {
&gt; 
&gt; Looks like early return is better.
&gt; 
Sure, I fixed.

&gt; if (type != EINA_VALUE_TYPE_STRINGSHARE &amp;&amp; type != EINA_VALUE_TYPE_STRING)
&gt;     return false;
&gt; 
&gt; const char* value;
&gt; eina_value_get(body, &amp;value);
&gt; messageBody = adoptWK(WKStringCreateWithUTF8CString(value));
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:89
&gt; &gt; +    if (messageBody &amp;&amp; WKStringGetTypeID() == WKGetTypeID(messageBody)) {
&gt; 
&gt; ditto.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/InjectedBundle/API/efl/ewk_extension.cpp:137
&gt; &gt; +    if (type == EINA_VALUE_TYPE_STRINGSHARE || type == EINA_VALUE_TYPE_STRING) {
&gt; 
&gt; ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071603</commentid>
    <comment_count>9</comment_count>
      <attachid>247213</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 03:02:31 -0800</bug_when>
    <thetext>Comment on attachment 247213
Patch

Clearing flags on attachment: 247213

Committed r180553: &lt;http://trac.webkit.org/changeset/180553&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071604</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-24 03:02:39 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>239735</attachid>
            <date>2014-10-13 11:16:00 -0700</date>
            <delta_ts>2014-11-06 22:23:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137660-20141014031551.patch</filename>
            <type>text/plain</type>
            <size>29727</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc0NjM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZGY5MWRiNmI3OWMyOTBi
ZjMxNGY3ODc4NWI3ODk5NWJiM2M2MGJhZS4uZDdlODU5ZmEzNjFlOTJlNTRkMGViYjc3MTk4MzNk
YmQ0YjU5YjExZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE0LTEwLTEzICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBnbWFpbC5jb20+CisKKyAgICAgICAgW0VGTF0gQWRkIG1lc3Nh
Z2UgQVBJcyB0byBjb21tdW5pY2F0ZSBiZXR3ZWVuIGV3a19jb250ZXh0IGFuZCBleHRlbnNpb25z
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzc2NjAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFBsYXRm
b3JtRWZsLmNtYWtlOiBBZGRlZCBkZXBlbmRlbmNpZXMgZm9yIGV3azJVbml0VGVzdEV4dGVuc2lv
blNhbXBsZQorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcDoKKyAg
ICAgICAgKEV3a0NvbnRleHQ6OkV3a0NvbnRleHQpOgorICAgICAgICAoRXdrQ29udGV4dDo6ZGlk
UmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUpOgorICAgICAgICAoRXdrQ29udGV4dDo6
c2V0TWVzc2FnZUZyb21FeHRlbnNpb25DYWxsYmFjayk6CisgICAgICAgIChFd2tDb250ZXh0Ojpw
cm9jZXNzUmVjZWl2ZWRNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAgICAgICAgKGV3a19j
b250ZXh0X21lc3NhZ2VfcG9zdF90b19leHRlbnNpb25zKToKKyAgICAgICAgKGV3a19jb250ZXh0
X21lc3NhZ2VfZnJvbV9leHRlbnNpb25zX2NhbGxiYWNrX3NldCk6CisgICAgICAgIChFd2tDb250
ZXh0OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAg
ICAgICAgRGVsZXRlZCB0byBzcGxpdCBzeW5jaHJvbm91c2UgbWVzc2FnZSBBUElzIGZyb20gYXN5
bmNocm9udW91cyBtZXNzYWdlIEFQSXMuCisgICAgICAgIGV3ZWJraXQgd2lsbCBub3Qgc3VwcG9y
dCB0aGlzIHVudGlsIHRoZXJlIGFyZSByZXF1aXJlbWVudHMuCisgICAgICAgIChFd2tDb250ZXh0
OjpzZXRNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlQ2FsbGJhY2spOiBSZW5hbWVkIHRvIHNldE1l
c3NhZ2VGcm9tRXh0ZW5zaW9uQ2FsbGJhY2suCisgICAgICAgIChld2tfY29udGV4dF9tZXNzYWdl
X3Bvc3RfdG9faW5qZWN0ZWRfYnVuZGxlKTogUmVuYW1lZCB0byBld2tfY29udGV4dF9tZXNzYWdl
X3Bvc3RfdG9fZXh0ZW5zaW9ucy4KKyAgICAgICAgKGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9p
bmplY3RlZF9idW5kbGVfY2FsbGJhY2tfc2V0KTogUmVuYW1lZCB0byBld2tfY29udGV4dF9tZXNz
YWdlX2Zyb21faW5qZWN0ZWRfYnVuZGxlX2NhbGxiYWNrX3NldC4KKyAgICAgICAgKiBVSVByb2Nl
c3MvQVBJL2VmbC9ld2tfY29udGV4dC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL2V3
a19jb250ZXh0X3ByaXZhdGUuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9V
bml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuY3BwOgorICAgICAgICBJbXByb3ZlZCB0ZXN0
IGNhc2UgZm9yIGV3a19jb250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNfcGF0aCB1c2luZyB0aGUg
bWVzc2FnZSBBUElzLgorICAgICAgICAoRVdLMlVuaXRUZXN0OjpFV0syVW5pdFRlc3RCYXNlOjpF
V0syVW5pdFRlc3RCYXNlKToKKyAgICAgICAgKEVXSzJVbml0VGVzdDo6RVdLMlVuaXRUZXN0QmFz
ZTo6U2V0VXApOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0QmFzZS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuY3BwOgorICAgICAgICAoRVdL
MlVuaXRUZXN0OjpFV0syVW5pdFRlc3RFbnZpcm9ubWVudDo6ZXh0ZW5zaW9uU2FtcGxlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VX
SzJVbml0VGVzdEVudmlyb25tZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvZXh0ZW5zaW9ucy9leHRlbnNpb25fc2FtcGxlLmNwcDogCisgICAgICAgIEltcHJvdmVkIHRl
c3QgY2FzZSBmb3IgZXdrX2NvbnRleHRfbmV3X3dpdGhfZXh0ZW5zaW9uc19wYXRoIHVzaW5nIHRo
ZSBtZXNzYWdlIEFQSXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9l
d2syX2NvbnRleHQuY3BwOiBEaXR0by4KKyAgICAgICAgKEVXSzJDb250ZXh0VGVzdFdpdGhFeHRl
bnNpb246Om1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKToKKyAgICAgICAgKEVXSzJDb250ZXh0VGVz
dFdpdGhFeHRlbnNpb246OkVXSzJDb250ZXh0VGVzdFdpdGhFeHRlbnNpb24pOgorICAgICAgICAo
VEVTVF9GKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdr
X2V4dGVuc2lvbi5jcHA6CisgICAgICAgICh0b0V3a0V4dGVuZGlvbik6CisgICAgICAgIChFd2tF
eHRlbnNpb246OkV3a0V4dGVuc2lvbik6CisgICAgICAgIChFd2tFeHRlbnNpb246OmRpZENyZWF0
ZVBhZ2UpOgorICAgICAgICAoRXdrRXh0ZW5zaW9uOjp3aWxsRGVzdHJveVBhZ2UpOgorICAgICAg
ICAoRXdrRXh0ZW5zaW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChFd2tFeHRlbnNp
b246OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgKGV3a19leHRlbnNpb25fbWVz
c2FnZV9wb3N0KTogSW1wbGVtZW50ZWQgdG8gcG9zdCBtZXNzYWdlIHRvIGV3a19jb250ZXh0Lgor
ICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0ZW5zaW9u
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRl
bnNpb25fcHJpdmF0ZS5oOgorICAgICAgICAoRXdrRXh0ZW5zaW9uOjpidW5kbGUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpFeHRlbnNpb25NYW5hZ2VyRWZsOjppbml0aWFsaXplKToKKyAgICAgICAgRml4ZWQgdGhl
IGJ1ZyB3aGVuIHRoZXJlIGFyZSBkaWZmZXJlbnQgc2hhcmVkIG9iamVjdHMgaW4gZXh0ZW5zaW9u
IHBhdGguCisgICAgICAgIFRoaXMgaXMgc3BvdHRlZCB3aGlsZSBpbXByb3ZpbmcgdGVzdCBjYXNl
LgorCiAyMDE0LTEwLTEyICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBnbWFpbC5jb20+CiAKICAg
ICAgICAgW0VGTF0gSW50cm9kdWNlIEVXZWJLaXRfRXh0ZW5zaW9uCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9QbGF0Zm9ybUVmbC5jbWFrZSBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZs
LmNtYWtlCmluZGV4IGMwYmRlY2UwMzEzM2Y5NmE1YTIxNGMyMDNmMGI2NjZhMjA1YjBlM2QuLjI0
MTM5NWYyNWE3YzQ0ZTBlNTQ4MjdhMmYxMjgzNTkzOTliNjc2NzcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3Jt
RWZsLmNtYWtlCkBAIC01MzAsNiArNTMwLDcgQEAgaWYgKEVOQUJMRV9BUElfVEVTVFMpCiAgICAg
ZW5kZm9yZWFjaCAoKQogCiAgICAgYWRkX2xpYnJhcnkoZXdrMlVuaXRUZXN0RXh0ZW5zaW9uU2Ft
cGxlIFNIQVJFRCAke1RFU1RfRVhURU5TSU9OU19ESVJ9L2V4dGVuc2lvbl9zYW1wbGUuY3BwKQor
ICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhld2syVW5pdFRlc3RFeHRlbnNpb25TYW1wbGUgJHtF
SU5BX0xJQlJBUklFU30gV2ViS2l0MikKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfU1BFTExDSEVD
SykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmNw
cAppbmRleCA3NzBmMjEwYmM5NDkwZGExMWRjMjQyZDJkMDg4OTUxNTA5NzNkNzExLi44OTgyZWYw
NTk4ZmU1NDdmNzhiYTJiNzk0Njg4N2Y5NGMxYTQ3OTY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCkBAIC05NCw4ICs5NCw4IEBAIEV3
a0NvbnRleHQ6OkV3a0NvbnRleHQoV0tDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFN0cmluZyYg
ZXh0ZW5zaW9uc1BhdGgpCiAgICAgVGV4dENoZWNrZXJDbGllbnRFZmw6Omluc3RhbmNlKCkuZW5z
dXJlU3BlbGxDaGVja2luZ0xhbmd1YWdlKCk7CiAjZW5kaWYKIAotICAgIG1fY2FsbGJhY2tGb3JN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLmNhbGxiYWNrID0gbnVsbHB0cjsKLSAgICBtX2NhbGxi
YWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZS51c2VyRGF0YSA9IG51bGxwdHI7CisgICAg
bV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tRXh0ZW5zaW9uLmNhbGxiYWNrID0gbnVsbHB0cjsKKyAg
ICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24udXNlckRhdGEgPSBudWxscHRyOwog
CiAgICAgaWYgKCFleHRlbnNpb25zUGF0aC5pc0VtcHR5KCkpIHsKICAgICAgICAgV0tDb250ZXh0
SW5qZWN0ZWRCdW5kbGVDbGllbnRWMSBjbGllbnQ7CkBAIC0xMDQsNyArMTA0LDYgQEAgRXdrQ29u
dGV4dDo6RXdrQ29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBleHRl
bnNpb25zUGF0aCkKICAgICAgICAgY2xpZW50LmJhc2UudmVyc2lvbiA9IDE7CiAgICAgICAgIGNs
aWVudC5iYXNlLmNsaWVudEluZm8gPSB0aGlzOwogICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZU1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUgPSBkaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZTsKLSAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUgPSBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlOwogICAgICAgICBjbGllbnQuZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJE
YXRhID0gZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhOwogCiAgICAgICAg
IFdLQ29udGV4dFNldEluamVjdGVkQnVuZGxlQ2xpZW50KG1fY29udGV4dC5nZXQoKSwgJmNsaWVu
dC5iYXNlKTsKQEAgLTM4NCwxMiArMzgzLDcgQEAgc3RhdGljIGlubGluZSBFd2tDb250ZXh0KiB0
b0V3a0NvbnRleHQoY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIAogdm9pZCBFd2tDb250ZXh0Ojpk
aWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5n
UmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqIGNsaWVu
dEluZm8pCiB7Ci0gICAgdG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5wcm9jZXNzUmVjZWl2ZWRN
ZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKG1lc3NhZ2VOYW1lLCBtZXNzYWdlQm9keSwgbnVsbHB0
cik7Ci19Ci0KLXZvaWQgRXdrQ29udGV4dDo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBX
S1R5cGVSZWYgbWVzc2FnZUJvZHksIFdLVHlwZVJlZiogcmV0dXJuRGF0YSwgY29uc3Qgdm9pZCog
Y2xpZW50SW5mbykKLXsKLSAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnByb2Nlc3NSZWNl
aXZlZE1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LCBy
ZXR1cm5EYXRhKTsKKyAgICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnByb2Nlc3NSZWNlaXZl
ZE1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5KTsKIH0K
IAogV0tUeXBlUmVmIEV3a0NvbnRleHQ6OmdldEluamVjdGVkQnVuZGxlSW5pdGlhbGl6YXRpb25V
c2VyRGF0YShXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCkBAIC0zOTcsMzYg
KzM5MSwzMyBAQCBXS1R5cGVSZWYgRXdrQ29udGV4dDo6Z2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFs
aXphdGlvblVzZXJEYXRhKFdLQ29udGV4dFJlZiwgY29ucwogICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXS1R5cGVSZWY+KHRvQ29waWVkQVBJKHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+ZXh0ZW5z
aW9uc1BhdGgoKSkpOwogfQogCi12b2lkIEV3a0NvbnRleHQ6OnNldE1lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGVDYWxsYmFjayhFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fSW5qZWN0ZWRfQnVuZGxl
X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3ZvaWQgRXdrQ29udGV4dDo6c2V0TWVzc2Fn
ZUZyb21FeHRlbnNpb25DYWxsYmFjayhFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9u
X0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBtX2NhbGxiYWNrRm9yTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsZS51c2VyRGF0YSA9IHVzZXJEYXRhOworICAgIG1fY2FsbGJhY2tG
b3JNZXNzYWdlRnJvbUV4dGVuc2lvbi51c2VyRGF0YSA9IHVzZXJEYXRhOwogCi0gICAgaWYgKG1f
Y2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLmNhbGxiYWNrID09IGNhbGxiYWNr
KQorICAgIGlmIChtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24uY2FsbGJhY2sgPT0g
Y2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlLmNhbGxiYWNrID0gY2FsbGJhY2s7CisgICAgbV9jYWxsYmFja0Zvck1l
c3NhZ2VGcm9tRXh0ZW5zaW9uLmNhbGxiYWNrID0gY2FsbGJhY2s7CiB9CiAKLXZvaWQgRXdrQ29u
dGV4dDo6cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1Jl
ZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBXS1R5cGVSZWYqIHJldHVybkRh
dGEpCit2b2lkIEV3a0NvbnRleHQ6OnByb2Nlc3NSZWNlaXZlZE1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSkKIHsK
LSAgICBpZiAoIW1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLmNhbGxiYWNr
KQorICAgIGlmICghbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tRXh0ZW5zaW9uLmNhbGxiYWNrKQog
ICAgICAgICByZXR1cm47CiAKICAgICBDU3RyaW5nIG5hbWUgPSB0b0ltcGwobWVzc2FnZU5hbWUp
LT5zdHJpbmcoKS51dGY4KCk7Ci0gICAgQ1N0cmluZyBib2R5OwotICAgIGlmIChtZXNzYWdlQm9k
eSAmJiBXS1N0cmluZ0dldFR5cGVJRCgpID09IFdLR2V0VHlwZUlEKG1lc3NhZ2VCb2R5KSkKLSAg
ICAgICAgYm9keSA9IHRvSW1wbChzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJvZHkp
KS0+c3RyaW5nKCkudXRmOCgpOwotCi0gICAgaWYgKHJldHVybkRhdGEpIHsKLSAgICAgICAgY2hh
ciogcmV0dXJuU3RyaW5nID0gbnVsbHB0cjsKLSAgICAgICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2sobmFtZS5kYXRhKCksIGJvZHkuZGF0YSgpLCAmcmV0
dXJuU3RyaW5nLCBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZS51c2VyRGF0
YSk7Ci0gICAgICAgIGlmIChyZXR1cm5TdHJpbmcpIHsKLSAgICAgICAgICAgICpyZXR1cm5EYXRh
ID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcocmV0dXJuU3RyaW5nKTsKLSAgICAgICAg
ICAgIGZyZWUocmV0dXJuU3RyaW5nKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAqcmV0
dXJuRGF0YSA9IFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKCIiKTsKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2so
bmFtZS5kYXRhKCksIGJvZHkuZGF0YSgpLCBudWxscHRyLCBtX2NhbGxiYWNrRm9yTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZS51c2VyRGF0YSk7CisgICAgRWluYV9WYWx1ZSogdmFsdWUgPSBudWxs
cHRyOworICAgIGlmIChtZXNzYWdlQm9keSAmJiBXS1N0cmluZ0dldFR5cGVJRCgpID09IFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSkgeworICAgICAgICB2YWx1ZSA9IGVpbmFfdmFsdWVfbmV3KEVJ
TkFfVkFMVUVfVFlQRV9TVFJJTkcpOworICAgICAgICBDU3RyaW5nIGJvZHkgPSB0b0ltcGwoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KSktPnN0cmluZygpLnV0ZjgoKTsKKyAg
ICAgICAgZWluYV92YWx1ZV9zZXQodmFsdWUsIGJvZHkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBt
X2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24uY2FsbGJhY2sobmFtZS5kYXRhKCksIHZh
bHVlLCBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24udXNlckRhdGEpOworCisgICAg
aWYgKHZhbHVlKQorICAgICAgICBlaW5hX3ZhbHVlX2ZyZWUodmFsdWUpOwogfQogCiBFd2tfVExT
X0Vycm9yX1BvbGljeSBFd2tDb250ZXh0OjppZ25vcmVUTFNFcnJvcnMoKSBjb25zdApAQCAtNTI0
LDIyICs1MTUsMzIgQEAgdm9pZCBld2tfY29udGV4dF9yZXNvdXJjZV9jYWNoZV9jbGVhcihFd2tf
Q29udGV4dCogZXdrQ29udGV4dCkKICAgICBpbXBsLT5jbGVhclJlc291cmNlQ2FjaGUoKTsKIH0K
IAotdm9pZCBld2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9faW5qZWN0ZWRfYnVuZGxlKEV3a19D
b250ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBjaGFyKiBib2R5KQor
RWluYV9Cb29sIGV3a19jb250ZXh0X21lc3NhZ2VfcG9zdF90b19leHRlbnNpb25zKEV3a19Db250
ZXh0KiBld2tDb250ZXh0LCBjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBFaW5hX1ZhbHVlKiBib2R5
KQogewotICAgIEVXS19PQkpfR0VUX0lNUExfT1JfUkVUVVJOKEV3a0NvbnRleHQsIGV3a0NvbnRl
eHQsIGltcGwpOwotICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOKG5hbWUpOwotICAgIEVJ
TkFfU0FGRVRZX09OX05VTExfUkVUVVJOKGJvZHkpOworICAgIEVXS19PQkpfR0VUX0lNUExfT1Jf
UkVUVVJOKEV3a0NvbnRleHQsIGV3a0NvbnRleHQsIGltcGwsIGZhbHNlKTsKKyAgICBFSU5BX1NB
RkVUWV9PTl9OVUxMX1JFVFVSTl9WQUwobmFtZSwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09O
X05VTExfUkVUVVJOX1ZBTChib2R5LCBmYWxzZSk7CisKKyAgICBXS1JldGFpblB0cjxXS1R5cGVS
ZWY+IG1lc3NhZ2VCb2R5OworICAgIGNvbnN0IEVpbmFfVmFsdWVfVHlwZSogdHlwZSA9IGVpbmFf
dmFsdWVfdHlwZV9nZXQoYm9keSk7CisgICAgaWYgKHR5cGUgPT0gRUlOQV9WQUxVRV9UWVBFX1NU
UklOR1NIQVJFIHx8IHR5cGUgPT0gRUlOQV9WQUxVRV9UWVBFX1NUUklORykgeworICAgICAgICBj
b25zdCBjaGFyKiB2YWx1ZTsKKyAgICAgICAgZWluYV92YWx1ZV9nZXQoYm9keSwgJnZhbHVlKTsK
KyAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKHZhbHVlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIFdL
UmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0
ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7Ci0gICAgV0tSZXRhaW5QdHI8V0tTdHJpbmdSZWY+IG1l
c3NhZ2VCb2R5KEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKGJvZHkpKTsK
ICAgICBXS0NvbnRleHRQb3N0TWVzc2FnZVRvSW5qZWN0ZWRCdW5kbGUoaW1wbC0+d2tDb250ZXh0
KCksIG1lc3NhZ2VOYW1lLmdldCgpLCBtZXNzYWdlQm9keS5nZXQoKSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBld2tfY29udGV4dF9tZXNzYWdlX2Zyb21faW5qZWN0ZWRfYnVuZGxl
X2NhbGxiYWNrX3NldChFd2tfQ29udGV4dCogZXdrQ29udGV4dCwgRXdrX0NvbnRleHRfTWVzc2Fn
ZV9Gcm9tX0luamVjdGVkX0J1bmRsZV9DYiBjYWxsYmFjaywgdm9pZCogdXNlckRhdGEpCit2b2lk
IGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9leHRlbnNpb25zX2NhbGxiYWNrX3NldChFd2tfQ29u
dGV4dCogZXdrQ29udGV4dCwgRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0V4dGVuc2lvbl9DYiBj
YWxsYmFjaywgdm9pZCogdXNlckRhdGEpCiB7CiAgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRV
Uk4oRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCk7CiAKLSAgICBpbXBsLT5zZXRNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlQ2FsbGJhY2soY2FsbGJhY2ssIHVzZXJEYXRhKTsKKyAgICBpbXBs
LT5zZXRNZXNzYWdlRnJvbUV4dGVuc2lvbkNhbGxiYWNrKGNhbGxiYWNrLCB1c2VyRGF0YSk7CiB9
CiAKIEVpbmFfQm9vbCBld2tfY29udGV4dF9wcm9jZXNzX21vZGVsX3NldChFd2tfQ29udGV4dCog
ZXdrQ29udGV4dCwgRXdrX1Byb2Nlc3NfTW9kZWwgcHJvY2Vzc01vZGVsKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaCBiL1NvdXJjZS9X
ZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKaW5kZXggZGQ5MWI2ODY5NjFh
M2QxNDA1MGZkOTNmYTcxY2U5MzkxOWEzMWVmZC4uMWY0NDkyNDA5ZjNiZmJlZjY5NGUxMzNkZGRh
ODEwNTY1MDQ0MmEwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9l
d2tfY29udGV4dC5oCkBAIC0xMzksMTcgKzEzOSwxNiBAQCB0eXBlZGVmIHZvaWQgKCpFd2tfSGlz
dG9yeV9UaXRsZV9VcGRhdGVfQ2IpKGNvbnN0IEV2YXNfT2JqZWN0ICp2aWV3LCBjb25zdCBjaGFy
CiB0eXBlZGVmIHZvaWQgKCpFd2tfSGlzdG9yeV9Qb3B1bGF0ZV9WaXNpdGVkX0xpbmtzX0NiKSh2
b2lkICp1c2VyX2RhdGEpOwogCiAvKioKLSAqIENhbGxiYWNrIGZvciBkaWRSZWNlaXZlTWVzc2Fn
ZUZyb21JbmplY3RlZEJ1bmRsZSBhbmQgZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZQorICogQ2FsbGJhY2sgdG8gcmVjZWl2ZSBtZXNzYWdlIGZyb20gZXh0ZW5z
aW9uLgogICoKLSAqIFVzZXIgc2hvdWxkIGFsbG9jYXRlIG5ldyBzdHJpbmcgZm9yIHJldHVybl9k
YXRhIGJlZm9yZSBzZXR0aW5nIGl0LgotICogVGhlIHJldHVybl9kYXRhIHN0cmluZyB3aWxsIGJl
IGZyZWVkIG9uIFdlYktpdCBzaWRlLgorICogQHBhcmFtIG5hbWUgbmFtZSBvZiBtZXNzYWdlIGZy
b20gZXh0ZW5zaW9uCisgKiBAcGFyYW0gYm9keSBib2R5IG9mIG1lc3NhZ2UgZnJvbSBleHRlbmRp
b24KKyAqIEBwYXJhbSB1c2VyX2RhdGEgdXNlcl9kYXRhIHdpbGwgYmUgcGFzc3NlZCB3aGVuIHJl
Y2VpdmluZyBtZXNzYWdlIGZyb20gZXh0ZW5zaW9uCiAgKgotICogQHBhcmFtIG5hbWUgbmFtZSBv
ZiBtZXNzYWdlIGZyb20gaW5qZWN0ZWQgYnVuZGxlCi0gKiBAcGFyYW0gYm9keSBib2R5IG9mIG1l
c3NhZ2UgZnJvbSBpbmplY3RlZCBidW5kbGUKLSAqIEBwYXJhbSByZXR1cm5fZGF0YSByZXR1cm5f
ZGF0YSBzdHJpbmcgZnJvbSBhcHBsaWNhdGlvbgotICogQHBhcmFtIHVzZXJfZGF0YSB1c2VyX2Rh
dGEgd2lsbCBiZSBwYXNzc2VkIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2UgZnJvbSBpbmplY3RlZCBi
dW5kbGUKKyAqIEBzZWUgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJh
Y2tfc2V0CisgKiBAc2VlIGV3a19leHRlbnNpb25fbWVzc2FnZV9wb3N0CiAgKi8KLXR5cGVkZWYg
dm9pZCAoKkV3a19Db250ZXh0X01lc3NhZ2VfRnJvbV9JbmplY3RlZF9CdW5kbGVfQ2IpKGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmJvZHksIGNoYXIgKipyZXR1cm5fZGF0YSwgdm9pZCAq
dXNlcl9kYXRhKTsKK3R5cGVkZWYgdm9pZCAoKkV3a19Db250ZXh0X01lc3NhZ2VfRnJvbV9FeHRl
bnNpb25fQ2IpKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEVpbmFfVmFsdWUgKmJvZHksIHZvaWQg
KnVzZXJfZGF0YSk7CiAKIC8qKgogICogR2V0cyBkZWZhdWx0IEV3a19Db250ZXh0IGluc3RhbmNl
LgpAQCAtMzY4LDE2ICszNjcsMjIgQEAgRUFQSSBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfYWRkaXRp
b25hbF9wbHVnaW5fcGF0aF9zZXQoRXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnMKIEVBUEkgdm9p
ZCBld2tfY29udGV4dF9yZXNvdXJjZV9jYWNoZV9jbGVhcihFd2tfQ29udGV4dCAqY29udGV4dCk7
CiAKIC8qKgotICogUG9zdHMgbWVzc2FnZSB0byBpbmplY3RlZCBidW5kbGUuCisgKiBQb3N0cyBt
ZXNzYWdlIHRvIGV4dGVuc2lvbnMgYXN5bmNocm9ub3VzbHkuCiAgKgotICogQHBhcmFtIGNvbnRl
eHQgY29udGV4dCBvYmplY3QgdG8gcG9zdCBtZXNzYWdlIHRvIGluamVjdGVkIGJ1bmRsZQorICog
QG5vdGUgYm9keSBvbmx5IHN1cHBvcnRzIEBjIEVJTkFfVkFMVUVfVFlQRV9TVFJJTkdTSEFSRSBv
ciBAYyBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HLAorICogbm93LgorICoKKyAqIEBwYXJhbSBjb250
ZXh0IGNvbnRleHQgb2JqZWN0IHRvIHBvc3QgbWVzc2FnZSB0byBleHRlbnNpb25zCiAgKiBAcGFy
YW0gbmFtZSBtZXNzYWdlIG5hbWUKICAqIEBwYXJhbSBib2R5IG1lc3NhZ2UgYm9keQorICoKKyAq
IEByZXR1cm4gQGMgRUlOQV9UUlVFIG9uIHN1Y2Nlc3Mgb2YgQGMgRUlOQV9GQUxTRSBvbiBmYWls
dXJlIG9yIHdoZW4gdGhlIHR5cGUKKyAqIG9mIEBwIGJvZHkgaXMgbm90IHN1cHBvcnRlZC4KICAq
LwotRUFQSSB2b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfcG9zdF90b19pbmplY3RlZF9idW5kbGUo
RXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKmJvZHkp
OworRUFQSSBFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVzc2FnZV9wb3N0X3RvX2V4dGVuc2lvbnMo
RXdrX0NvbnRleHQgKmNvbnRleHQsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IEVpbmFfVmFsdWUg
KmJvZHkpOwogCiAvKioKLSAqIFNldHMgY2FsbGJhY2sgZm9yIHJlY2VpdmVkIGluamVjdGVkIGJ1
bmRsZSBtZXNzYWdlLgorICogU2V0cyBjYWxsYmFjayBmb3IgcmVjZWl2ZWQgZXh0ZW5zaW9uIG1l
c3NhZ2UuCiAgKgogICogQ2xpZW50IGNhbiBwYXNzIEBjIE5VTEwgZm9yIGNhbGxiYWNrIHRvIHN0
b3AgbGlzdGVuaW5nIGZvciBtZXNzYWdlcy4KICAqCkBAIC0zODUsNyArMzkwLDcgQEAgRUFQSSB2
b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfcG9zdF90b19pbmplY3RlZF9idW5kbGUoRXdrX0NvbnRl
eHQgKmNvbnRleHQsIGNvbnMKICAqIEBwYXJhbSBjYWxsYmFjayBjYWxsYmFjayBmb3IgcmVjZWl2
ZWQgaW5qZWN0ZWQgYnVuZGxlIG1lc3NhZ2Ugb3IgQGMgTlVMTAogICogQHBhcmFtIHVzZXJfZGF0
YSB1c2VyIGRhdGEKICAqLwotRUFQSSB2b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9pbmpl
Y3RlZF9idW5kbGVfY2FsbGJhY2tfc2V0KEV3a19Db250ZXh0ICpjb250ZXh0LCBFd2tfQ29udGV4
dF9NZXNzYWdlX0Zyb21fSW5qZWN0ZWRfQnVuZGxlX0NiIGNhbGxiYWNrLCB2b2lkICp1c2VyX2Rh
dGEpOworRUFQSSB2b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9leHRlbnNpb25zX2NhbGxi
YWNrX3NldChFd2tfQ29udGV4dCAqY29udGV4dCwgRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0V4
dGVuc2lvbl9DYiBjYWxsYmFjaywgdm9pZCAqdXNlcl9kYXRhKTsKIAogLyoqCiAgKiBTZXRzIGEg
cHJvY2VzcyBtb2RlbCBmb3IgQGEgY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0X3ByaXZhdGUuaAppbmRleCAzMmQyM2VkOWI0
M2RlOGY4NDNjMmZiYWNmNzQ1MjVkNGFlMjkxZWU4Li45ZTcwN2ExY2EzYjk2MTg4YzIwNDQ1YzYy
N2NjYTg1ZjI2YmIzOWM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC9ld2tfY29udGV4dF9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCkBAIC05NywxMCArOTcsOSBAQCBwdWJsaWM6
CiAgICAgSlNHbG9iYWxDb250ZXh0UmVmIGpzR2xvYmFsQ29udGV4dCgpOwogCiAgICAgc3RhdGlj
IHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBX
S1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKLSAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgV0tUeXBlUmVmKiByZXR1cm5EYXRhLCBjb25zdCB2
b2lkKiBjbGllbnRJbmZvKTsKICAgICBzdGF0aWMgV0tUeXBlUmVmIGdldEluamVjdGVkQnVuZGxl
SW5pdGlhbGl6YXRpb25Vc2VyRGF0YShXS0NvbnRleHRSZWYsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwotICAgIHZvaWQgc2V0TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZUNhbGxiYWNrKEV3a19D
b250ZXh0X01lc3NhZ2VfRnJvbV9JbmplY3RlZF9CdW5kbGVfQ2IsIHZvaWQqKTsKLSAgICB2b2lk
IHByb2Nlc3NSZWNlaXZlZE1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUoV0tTdHJpbmdSZWYgbWVz
c2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgV0tUeXBlUmVmKiByZXR1cm5EYXRhKTsK
KyAgICB2b2lkIHNldE1lc3NhZ2VGcm9tRXh0ZW5zaW9uQ2FsbGJhY2soRXdrX0NvbnRleHRfTWVz
c2FnZV9Gcm9tX0V4dGVuc2lvbl9DYiwgdm9pZCopOworICAgIHZvaWQgcHJvY2Vzc1JlY2VpdmVk
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBl
UmVmIG1lc3NhZ2VCb2R5KTsKIAogcHJpdmF0ZToKICAgICBleHBsaWNpdCBFd2tDb250ZXh0KFdL
Q29udGV4dFJlZiwgY29uc3QgU3RyaW5nJiBleHRlbnNpb25zUGF0aCA9IFN0cmluZygpKTsKQEAg
LTEyNyw5ICsxMjYsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX2V4dGVuc2lvbnNQYXRoOwog
CiAgICAgc3RydWN0IHsKLSAgICAgICAgRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0luamVjdGVk
X0J1bmRsZV9DYiBjYWxsYmFjazsKKyAgICAgICAgRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0V4
dGVuc2lvbl9DYiBjYWxsYmFjazsKICAgICAgICAgdm9pZCogdXNlckRhdGE7Ci0gICAgfSBtX2Nh
bGxiYWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZTsKKyAgICB9IG1fY2FsbGJhY2tGb3JN
ZXNzYWdlRnJvbUV4dGVuc2lvbjsKIH07CiAKICNlbmRpZiAvLyBld2tfY29udGV4dF9wcml2YXRl
X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1Vu
aXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuY3BwCmluZGV4
IDE1ZjM2YTAxMWE4ZmQ2OGU3NzEzMTJlZDU5ZGU0ZGQ0ZjUyOWE0NjMuLjQzMTZjNmE3N2ZlYTNl
YTVmODZhYmQyYWQ2NzUwODUwMzM2ZmRjNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RCYXNlLmNwcApAQCAtMzksNiArMzksNyBAQCBFV0syVW5pdFRlc3RCYXNl
OjpFV0syVW5pdFRlc3RCYXNlKCkKICAgICAsIG1fd2ViVmlldygwKQogICAgICwgbV9ld2tWaWV3
Q2xhc3MoZXdrMlVuaXRUZXN0QnJvd3NlclZpZXdTbWFydENsYXNzKCkpCiAgICAgLCBtX211bHRp
cGxlUHJvY2Vzc2VzKGZhbHNlKQorICAgICwgbV93aXRoRXh0ZW5zaW9uKGZhbHNlKQogewogICAg
IGV3a192aWV3X3NtYXJ0X2NsYXNzX3NldCgmbV9ld2tWaWV3Q2xhc3MpOwogfQpAQCAtNjEsNyAr
NjIsMTIgQEAgdm9pZCBFV0syVW5pdFRlc3RCYXNlOjpTZXRVcCgpCiAKICAgICBFdmFzX1NtYXJ0
KiBzbWFydCA9IGV2YXNfc21hcnRfY2xhc3NfbmV3KCZtX2V3a1ZpZXdDbGFzcy5zYyk7CiAKLSAg
ICBFd2tfQ29udGV4dCogbmV3Q29udGV4dCA9IGV3a19jb250ZXh0X25ldygpOworICAgIEV3a19D
b250ZXh0KiBuZXdDb250ZXh0OworICAgIGlmIChtX3dpdGhFeHRlbnNpb24pCisgICAgICAgIG5l
d0NvbnRleHQgPSBld2tfY29udGV4dF9uZXdfd2l0aF9leHRlbnNpb25zX3BhdGgoVEVTVF9MSUJf
RElSKTsKKyAgICBlbHNlCisgICAgICAgIG5ld0NvbnRleHQgPSBld2tfY29udGV4dF9uZXcoKTsK
KwogICAgIGlmIChtX211bHRpcGxlUHJvY2Vzc2VzKQogICAgICAgICBld2tfY29udGV4dF9wcm9j
ZXNzX21vZGVsX3NldChuZXdDb250ZXh0LCBFV0tfUFJPQ0VTU19NT0RFTF9NVUxUSVBMRV9TRUNP
TkRBUlkpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaCBiL1NvdXJjZS9XZWJLaXQyL1VJ
UHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oCmlu
ZGV4IGZiNWM5ZjVjZjE2M2Y4OWM5MDI1YzdmYzRhYzQ5M2JiOTc2ZDVhNTEuLjIzMzdkZmE3NzZl
MDc3MTNhNjNjNGUzNGUzMTM5Y2MxYWI4MjMyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQy
L1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0QmFzZS5oCkBAIC00Niw2ICs0Niw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHN0YXRpYyBjb25zdGV4cHIgZG91YmxlIGRlZmF1bHRUaW1lb3V0U2Vjb25kcyA9IDEwLjA7CiAg
ICAgYm9vbCBtX211bHRpcGxlUHJvY2Vzc2VzOworICAgIGJvb2wgbV93aXRoRXh0ZW5zaW9uOwog
CiAgICAgYm9vbCBsb2FkVXJsU3luYyhjb25zdCBjaGFyKiB1cmwsIGRvdWJsZSB0aW1lb3V0U2Vj
b25kcyA9IGRlZmF1bHRUaW1lb3V0U2Vjb25kcyk7CiAgICAgYm9vbCB3YWl0VW50aWxMb2FkRmlu
aXNoZWQoZG91YmxlIHRpbWVvdXRTZWNvbmRzID0gZGVmYXVsdFRpbWVvdXRTZWNvbmRzKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5j
cHAKaW5kZXggOWVhZGY4NmI0ZTRhNmVkZjBmNzhlZjIyMGMxYTE3MTRlOGY1YjI2MS4uYjAyZDZj
N2ZiNzI3OWUyMzZhZTczOTNjMjkzOTNkYjEwNjU1YjU2ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RF
bnZpcm9ubWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5jcHAKQEAgLTQzLDExICs0
Myw2IEBAIGNvbnN0IGNoYXIqIEVXSzJVbml0VGVzdEVudmlyb25tZW50OjpkZWZhdWx0VGhlbWUo
KSBjb25zdAogICAgIHJldHVybiBERUZBVUxUX1RIRU1FX0RJUiAiL2RlZmF1bHQuZWRqIjsKIH0K
IAotY29uc3QgY2hhciogRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OmV4dGVuc2lvblNhbXBsZSgp
IGNvbnN0Ci17Ci0gICAgcmV0dXJuIFRFU1RfTElCX0RJUiAiL2xpYmV3azJVbml0VGVzdEV4dGVu
c2lvblNhbXBsZS5zbyI7Ci19Ci0KIENTdHJpbmcgRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OnVy
bEZvclJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNlKQogewogICAgIHJldHVybiBtYWtlU3Ry
aW5nKCJmaWxlOi8vIiBURVNUX1JFU09VUkNFU19ESVIgIi8iLCByZXNvdXJjZSkudXRmOCgpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRl
c3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5o
CmluZGV4IGViNTViZjhmOTk1MWU5YThhZTUwNmI3OGRkODJmZDMwOTMzZDBiZTUuLjRkZDg5MzVi
YjRiMjJlNjIzNGNhNzEzYWZkMmRhNjQxNTZiZWRmMGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0RW52
aXJvbm1lbnQuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9V
bml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgKQEAgLTMwLDcgKzMwLDYgQEAg
cHVibGljOgogCiAgICAgY29uc3QgY2hhciogZGVmYXVsdFRlc3RQYWdlVXJsKCkgY29uc3Q7CiAg
ICAgY29uc3QgY2hhciogZGVmYXVsdFRoZW1lKCkgY29uc3Q7Ci0gICAgY29uc3QgY2hhciogZXh0
ZW5zaW9uU2FtcGxlKCkgY29uc3Q7CiAgICAgQ1N0cmluZyB1cmxGb3JSZXNvdXJjZShjb25zdCBj
aGFyKiByZXNvdXJjZSk7CiAgICAgQ1N0cmluZyBwYXRoRm9yUmVzb3VyY2UoY29uc3QgY2hhciog
cmVzb3VyY2UpOwogICAgIENTdHJpbmcgcGF0aEZvclRoZW1lKGNvbnN0IGNoYXIqIHRoZW1lKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL2V4dGVu
c2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJ
L2VmbC90ZXN0cy9leHRlbnNpb25zL2V4dGVuc2lvbl9zYW1wbGUuY3BwCmluZGV4IDJhMDNkOGUx
ODkyM2U1YTRjNDFiZjMyYjAwMzExNmQwNTAzOTQ1MGMuLjI5NDEzNDNlYzJiZmI0MDI3ZTQxMjZm
MjYzOTRhN2QyY2UxM2ZhOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9B
UEkvZWZsL3Rlc3RzL2V4dGVuc2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHAKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvZXh0ZW5zaW9ucy9leHRlbnNpb25fc2Ft
cGxlLmNwcApAQCAtMjksOCArMjksMjIgQEAKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKLXZvaWQg
ZXdrX2V4dGVuc2lvbl9pbml0KEV3a19FeHRlbnNpb24gKikKK3N0YXRpYyB2b2lkIG1lc3NhZ2VS
ZWNlaXZlZChjb25zdCBjaGFyKiBuYW1lLCBjb25zdCBFaW5hX1ZhbHVlKiBib2R5LCB2b2lkKiBk
YXRhKQogeworICAgIEVpbmFfVmFsdWUqIHZhbHVlID0gZWluYV92YWx1ZV9uZXcoRUlOQV9WQUxV
RV9UWVBFX1NUUklORyk7CisgICAgZWluYV92YWx1ZV9zZXQodmFsdWUsICJGcm9tIGV4dGVuc2lv
biIpOworICAgIGV3a19leHRlbnNpb25fbWVzc2FnZV9wb3N0KHN0YXRpY19jYXN0PEV3a19FeHRl
bnNpb24qPihkYXRhKSwgInBvbmciLCB2YWx1ZSk7CisgICAgZWluYV92YWx1ZV9mcmVlKHZhbHVl
KTsKK30KKwordm9pZCBld2tfZXh0ZW5zaW9uX2luaXQoRXdrX0V4dGVuc2lvbiogZXh0ZW5zaW9u
KQoreworICAgIHN0YXRpYyBFd2tFeHRlbnNpb25DbGllbnQgY2xpZW50OworICAgIGNsaWVudC52
ZXJzaW9uID0gMTsKKyAgICBjbGllbnQuZGF0YSA9ICh2b2lkICopZXh0ZW5zaW9uOworICAgIGNs
aWVudC5tZXNzYWdlX3JlY2VpdmVkID0gbWVzc2FnZVJlY2VpdmVkOworCisgICAgZXdrX2V4dGVu
c2lvbl9jbGllbnRfYWRkKGV4dGVuc2lvbiwgJmNsaWVudCk7CiB9CiAKICNpZmRlZiBfX2NwbHVz
cGx1cwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
dGVzdF9ld2syX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvdGVzdF9ld2syX2NvbnRleHQuY3BwCmluZGV4IGRiYjY4Nzg5ZWFhN2I0MWIwYThlNTVh
NmJiMGYwZDkwNDVhYmIwZmEuLjMyYmZjZTRlNDE3MmI5YmM3MmU1YWNiZTRlMGIwMWI0MWQxNDM4
ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2Vm
bC90ZXN0cy90ZXN0X2V3azJfY29udGV4dC5jcHAKQEAgLTY2LDYgKzY2LDIzIEBAIHByb3RlY3Rl
ZDoKICAgICB9CiB9OwogCitjbGFzcyBFV0syQ29udGV4dFRlc3RXaXRoRXh0ZW5zaW9uIDogcHVi
bGljIEVXSzJVbml0VGVzdEJhc2UgeworcHVibGljOgorICAgIHN0YXRpYyB2b2lkIG1lc3NhZ2VS
ZWNlaXZlZENhbGxiYWNrKGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEVpbmFfVmFsdWUqIGJvZHks
IHZvaWQqIHVzZXJEYXRhKQorICAgIHsKKyAgICAgICAgYm9vbCogaGFuZGxlZCA9IHN0YXRpY19j
YXN0PGJvb2wqPih1c2VyRGF0YSk7CisgICAgICAgIEFTU0VSVF9TVFJFUSgicG9uZyIsIG5hbWUp
OworCisgICAgICAgICpoYW5kbGVkID0gdHJ1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICBF
V0syQ29udGV4dFRlc3RXaXRoRXh0ZW5zaW9uKCkKKyAgICB7CisgICAgICAgIG1fd2l0aEV4dGVu
c2lvbiA9IHRydWU7CisgICAgfQorfTsKKwogVEVTVF9GKEVXSzJDb250ZXh0VGVzdCwgZXdrX2Nv
bnRleHRfZGVmYXVsdF9nZXQpCiB7CiAgICAgRXdrX0NvbnRleHQqIGRlZmF1bHRDb250ZXh0ID0g
ZXdrX2NvbnRleHRfZGVmYXVsdF9nZXQoKTsKQEAgLTIyOCwxMSArMjQ1LDIyIEBAIFRFU1RfRihF
V0syQ29udGV4dFRlc3QsIGV3a19jb250ZXh0X25ldykKICAgICBld2tfb2JqZWN0X3VucmVmKGNv
bnRleHQpOwogfQogCi1URVNUX0YoRVdLMkNvbnRleHRUZXN0LCBld2tfY29udGV4dF9uZXdfd2l0
aF9leHRlbnNpb25zX3BhdGgpCitURVNUX0YoRVdLMkNvbnRleHRUZXN0V2l0aEV4dGVuc2lvbiwg
ZXdrX2NvbnRleHRfbmV3X3dpdGhfZXh0ZW5zaW9uc19wYXRoKQogewotICAgIEV3a19Db250ZXh0
KiBjb250ZXh0ID0gZXdrX2NvbnRleHRfbmV3X3dpdGhfZXh0ZW5zaW9uc19wYXRoKGVudmlyb25t
ZW50LT5leHRlbnNpb25TYW1wbGUoKSk7Ci0gICAgQVNTRVJUX1RSVUUoY29udGV4dCk7Ci0gICAg
ZXdrX29iamVjdF91bnJlZihjb250ZXh0KTsKKyAgICBib29sIHJlY2VpdmVkID0gZmFsc2U7Cisg
ICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tfdmlld19jb250ZXh0X2dldCh3ZWJWaWV3KCkp
OworCisgICAgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0
KGNvbnRleHQsIG1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrLCAmcmVjZWl2ZWQpOworCisgICAgZXdr
X3ZpZXdfdXJsX3NldCh3ZWJWaWV3KCksIGVudmlyb25tZW50LT5kZWZhdWx0VGVzdFBhZ2VVcmwo
KSk7CisgICAgQVNTRVJUX1RSVUUod2FpdFVudGlsTG9hZEZpbmlzaGVkKCkpOworCisgICAgRWlu
YV9WYWx1ZSogYm9keSA9IGVpbmFfdmFsdWVfbmV3KEVJTkFfVkFMVUVfVFlQRV9TVFJJTkcpOwor
ICAgIGVpbmFfdmFsdWVfc2V0KGJvZHksICJGcm9tIFVJUHJvY2VzcyIpOworICAgIGV3a19jb250
ZXh0X21lc3NhZ2VfcG9zdF90b19leHRlbnNpb25zKGNvbnRleHQsICJwaW5nIiwgYm9keSk7Cisg
ICAgZWluYV92YWx1ZV9mcmVlKGJvZHkpOworCisgICAgQVNTRVJUX1RSVUUod2FpdFVudGlsVHJ1
ZShyZWNlaXZlZCwgdGVzdFRpbWVvdXRTZWNvbmRzKSk7CiB9CiAKIFRFU1RfRihFV0syQ29udGV4
dFRlc3QsIGV3a19jb250ZXh0X2FkZGl0aW9uYWxfcGx1Z2luX3BhdGhfc2V0KQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19l
eHRlbnNpb24uY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9B
UEkvZWZsL2V3a19leHRlbnNpb24uY3BwCmluZGV4IGExYmM4NTZiMWViYTMyZTdjNmMwNmFlM2Y4
ZWQwOWI0YjM3NTE5NzYuLjA1NzU3MWQ1ZTc1MWEyZjQ2MjBlZWEzYjBhYmRlYWFiZTFmMjgwODMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2VmbC9ld2tfZXh0ZW5zaW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAKQEAgLTI2LDEwICsyNiwzOSBA
QAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgImV3a19leHRlbnNpb24uaCIKIAorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiV0tCdW5kbGUuaCIKKyNpbmNsdWRl
ICJXS0J1bmRsZUFQSUNhc3QuaCIKKyNpbmNsdWRlICJXS1JldGFpblB0ci5oIgogI2luY2x1ZGUg
ImV3a19leHRlbnNpb25fcHJpdmF0ZS5oIgorI2luY2x1ZGUgPFdlYktpdC9XS1N0cmluZy5oPgor
I2luY2x1ZGUgPFdlYktpdC9XS1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7CiAKK3N0YXRpYyBpbmxpbmUgRXdrRXh0ZW5zaW9u
KiB0b0V3a0V4dGVuZGlvbihjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIHJldHVybiBj
b25zdF9jYXN0PEV3a0V4dGVuc2lvbio+KHN0YXRpY19jYXN0PGNvbnN0IEV3a0V4dGVuc2lvbio+
KGNsaWVudEluZm8pKTsKK30KKworRXdrRXh0ZW5zaW9uOjpFd2tFeHRlbnNpb24oSW5qZWN0ZWRC
dW5kbGUqIGJ1bmRsZSkKKyAgICA6IG1fYnVuZGxlKGJ1bmRsZSkKK3sKKyAgICBXS0J1bmRsZUNs
aWVudFYxIHdrQnVuZGxlQ2xpZW50ID0geworICAgICAgICB7CisgICAgICAgICAgICAxLCAvLyB2
ZXJzaW9uCisgICAgICAgICAgICB0aGlzLCAvLyBjbGllbnRJbmZvCisgICAgICAgIH0sCisgICAg
ICAgIGRpZENyZWF0ZVBhZ2UsCisgICAgICAgIHdpbGxEZXN0cm95UGFnZSwKKyAgICAgICAgMCwg
Ly8gZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cAorICAgICAgICBkaWRSZWNlaXZlTWVzc2FnZSwKKyAg
ICAgICAgZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2UKKyAgICB9OworICAgIFdLQnVuZGxlU2V0Q2xp
ZW50KHRvQVBJKGJ1bmRsZSksICZ3a0J1bmRsZUNsaWVudC5iYXNlKTsKK30KKwogdm9pZCBFd2tF
eHRlbnNpb246OmFwcGVuZChFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KQogewogICAgIG1f
Y2xpZW50cy5hcHBlbmQoY2xpZW50KTsKQEAgLTQwLDYgKzY5LDQ0IEBAIHZvaWQgRXdrRXh0ZW5z
aW9uOjpyZW1vdmUoRXdrX0V4dGVuc2lvbl9DbGllbnQqIGNsaWVudCkKICAgICBtX2NsaWVudHMu
cmVtb3ZlKG1fY2xpZW50cy5maW5kKGNsaWVudCkpOwogfQogCit2b2lkIEV3a0V4dGVuc2lvbjo6
ZGlkQ3JlYXRlUGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmLCBjb25zdCB2b2lkKikK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEV3a0V4dGVuc2lvbjo6d2lsbERl
c3Ryb3lQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQqKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXdrRXh0ZW5zaW9uOjpkaWRSZWNlaXZl
TWVzc2FnZShXS0J1bmRsZVJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBt
ZXNzYWdlQm9keSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sKKyAgICBFd2tFeHRlbnNpb24q
IHNlbGYgPSB0b0V3a0V4dGVuZGlvbihjbGllbnRJbmZvKTsKKyAgICBDU3RyaW5nIG5hbWUgPSB0
b0ltcGwobWVzc2FnZU5hbWUpLT5zdHJpbmcoKS51dGY4KCk7CisgICAgRWluYV9WYWx1ZSogdmFs
dWUgPSBudWxscHRyOworCisgICAgLy8gRklYTUU6IE5lZWQgdG8gc3VwcG9ydCBvdGhlciB0eXBl
cy4KKyAgICBpZiAobWVzc2FnZUJvZHkgJiYgV0tTdHJpbmdHZXRUeXBlSUQoKSA9PSBXS0dldFR5
cGVJRChtZXNzYWdlQm9keSkpIHsKKyAgICAgICAgdmFsdWUgPSBlaW5hX3ZhbHVlX25ldyhFSU5B
X1ZBTFVFX1RZUEVfU1RSSU5HKTsKKyAgICAgICAgQ1N0cmluZyBib2R5ID0gdG9JbXBsKHN0YXRp
Y19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSkpLT5zdHJpbmcoKS51dGY4KCk7CisKKyAg
ICAgICAgZWluYV92YWx1ZV9zZXQodmFsdWUsIGJvZHkuZGF0YSgpKTsKKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIGl0IDogc2VsZi0+bV9jbGllbnRzKSB7CisgICAgICAgIGlmIChpdC0+bWVzc2Fn
ZV9yZWNlaXZlZCkKKyAgICAgICAgICAgIGl0LT5tZXNzYWdlX3JlY2VpdmVkKG5hbWUuZGF0YSgp
LCB2YWx1ZSwgaXQtPmRhdGEpOworICAgIH0KKworICAgIGlmICh2YWx1ZSkKKyAgICAgICAgZWlu
YV92YWx1ZV9mcmVlKHZhbHVlKTsKK30KKwordm9pZCBFd2tFeHRlbnNpb246OmRpZFJlY2VpdmVN
ZXNzYWdlVG9QYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIFdLU3RyaW5nUmVmLCBX
S1R5cGVSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKIEVp
bmFfQm9vbCBld2tfZXh0ZW5zaW9uX2NsaWVudF9hZGQoRXdrX0V4dGVuc2lvbiogZXh0ZW5zaW9u
LCBFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KQogewogICAgIEVJTkFfU0FGRVRZX09OX05V
TExfUkVUVVJOX1ZBTChleHRlbnNpb24sIGZhbHNlKTsKQEAgLTU5LDMgKzEyNiwyMyBAQCBFaW5h
X0Jvb2wgZXdrX2V4dGVuc2lvbl9jbGllbnRfZGVsKEV3a19FeHRlbnNpb24qIGV4dGVuc2lvbiwg
RXdrX0V4dGVuc2lvbl9DbGllbgogCiAgICAgcmV0dXJuIHRydWU7CiB9CisKK0VpbmFfQm9vbCBl
d2tfZXh0ZW5zaW9uX21lc3NhZ2VfcG9zdChFd2tfRXh0ZW5zaW9uICpleHRlbnNpb24sIGNvbnN0
IGNoYXIgKm5hbWUsIGNvbnN0IEVpbmFfVmFsdWUgKmJvZHkpCit7CisgICAgRUlOQV9TQUZFVFlf
T05fTlVMTF9SRVRVUk5fVkFMKGV4dGVuc2lvbiwgZmFsc2UpOworCisgICAgV0tSZXRhaW5QdHI8
V0tUeXBlUmVmPiBtZXNzYWdlQm9keTsKKworICAgIGNvbnN0IEVpbmFfVmFsdWVfVHlwZSogdHlw
ZSA9IGVpbmFfdmFsdWVfdHlwZV9nZXQoYm9keSk7CisgICAgaWYgKHR5cGUgPT0gRUlOQV9WQUxV
RV9UWVBFX1NUUklOR1NIQVJFIHx8IHR5cGUgPT0gRUlOQV9WQUxVRV9UWVBFX1NUUklORykgewor
ICAgICAgICBjb25zdCBjaGFyKiB2YWx1ZTsKKyAgICAgICAgZWluYV92YWx1ZV9nZXQoYm9keSwg
JnZhbHVlKTsKKyAgICAgICAgbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKHZhbHVlKSk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFtZShBZG9wdFdLLCBXS1N0
cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgV0tCdW5kbGVQb3N0TWVzc2Fn
ZSh0b0FQSShleHRlbnNpb24tPmJ1bmRsZSgpKSwgbWVzc2FnZU5hbWUuZ2V0KCksIG1lc3NhZ2VC
b2R5LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24uaCBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0
ZW5zaW9uLmgKaW5kZXggODNjNTIyOWU2MDY0N2M0YjlhNjk0ZGE2YzI4MjE0YWRjMzJlMmIxNi4u
NGZhM2FkMThjOTJkMjliYjI4YmUyMTE5YzUyYjgxZjlkN2IyOTYyMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNp
b24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9l
ZmwvZXdrX2V4dGVuc2lvbi5oCkBAIC01Niw2ICs1NiwxNCBAQCB0eXBlZGVmIHZvaWQgKigqRXdr
X0V4dGVuc2lvbl9Jbml0aWFsaXplX0Z1bmN0aW9uKShFd2tfRXh0ZW5zaW9uICpleHRlbnNpb24s
IHZvaQogc3RydWN0IEV3a0V4dGVuc2lvbkNsaWVudCB7CiAgICAgaW50IHZlcnNpb247CiAgICAg
dm9pZCAqZGF0YTsKKworICAgIC8qKgorICAgICAqIENhbGxiYWNrcyB0byByZWNlaXZlIG1lc3Nh
Z2UgZnJvbSBld2tfY29udGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJhbSBuYW1lIG5hbWUgb2Yg
bWVzc2FnZSBmcm9tIGV3a19jb250ZXh0CisgICAgICogQHBhcmFtIGJvZHkgYm9keSBvZiBtZXNz
YWdlIGZyb20gZXdrX2NvbnRleHQKKyAgICAgKi8KKyAgICB2b2lkICgqbWVzc2FnZV9yZWNlaXZl
ZCkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSwgdm9pZCAqZGF0YSk7
CiB9OwogdHlwZWRlZiBzdHJ1Y3QgRXdrRXh0ZW5zaW9uQ2xpZW50IEV3a19FeHRlbnNpb25fQ2xp
ZW50OwogCkBAIC04MCw2ICs4OCwyNCBAQCBFQVBJIEVpbmFfQm9vbCBld2tfZXh0ZW5zaW9uX2Ns
aWVudF9hZGQoRXdrX0V4dGVuc2lvbiAqZXh0ZW5zaW9uLCBFd2tfRXh0ZW5zaW9uXwogICovCiBF
QVBJIEVpbmFfQm9vbCBld2tfZXh0ZW5zaW9uX2NsaWVudF9kZWwoRXdrX0V4dGVuc2lvbiAqZXh0
ZW5zaW9uLCBFd2tfRXh0ZW5zaW9uX0NsaWVudCAqY2xpZW50KTsKIAorLyoqCisgKiBQb3N0cyBt
ZXNzYWdlIHRvIGV3a19jb250ZXh0IGFzeW5jaHJvbm91c2x5LgorICoKKyAqIEBub3RlIGJvZHkg
b25seSBzdXBwb3J0cyBAYyBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HU0hBUkUgb3IgQGMgRUlOQV9W
QUxVRV9UWVBFX1NUUklORywKKyAqIG5vdy4KKyAqCisgKiBAcGFyYW0gZXh0ZW5zaW9uIGV4dGVu
c2lvbiB0byBwb3N0IG1lc3NhZ2UKKyAqIEBwYXJhbSBuYW1lIG1lc3NhZ2UgbmFtZQorICogQHBh
cmFtIGJvZHkgbWVzc2FnZSBib2R5CisgKgorICogQHJldHVybiBAYyBFSU5BX1RSVUUgb24gc3Vj
Y2VzcyBvZiBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgb3Igd2hlbiB0aGUgdHlwZQorICogb2Yg
QHAgYm9keSBpcyBub3Qgc3VwcG9ydGVkLgorICoKKyAqIEBzZWUgZXdrX2NvbnRleHRfbWVzc2Fn
ZV9wb3N0X3RvX2V4dGVuc2lvbnMKKyAqIEBzZWUgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2V4
dGVuc2lvbnNfY2FsbGJhY2tfc2V0CisgKi8KK0VBUEkgRWluYV9Cb29sIGV3a19leHRlbnNpb25f
bWVzc2FnZV9wb3N0KEV3a19FeHRlbnNpb24gKmV4dGVuc2lvbiwgY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgRWluYV9WYWx1ZSAqYm9keSk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlm
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQ
SS9lZmwvZXdrX2V4dGVuc2lvbl9wcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNz
L0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbl9wcml2YXRlLmgKaW5kZXggZjNi
MDE5NWQ3NDZjN2MwY2JiOTAxM2M1YjU5MjMyODA0Y2NiZTQwNi4uZDQ3Mjc2OTQ2ZTM5ODU4MjEw
Y2M3MTk3YWI0ZmU5OTRhMGM1ZjA1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb25fcHJpdmF0ZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0
ZW5zaW9uX3ByaXZhdGUuaApAQCAtMzQsMTMgKzM0LDIyIEBAIGNsYXNzIEluamVjdGVkQnVuZGxl
OwogCiBjbGFzcyBFd2tFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4cGxpY2l0IEV3a0V4dGVu
c2lvbihXZWJLaXQ6OkluamVjdGVkQnVuZGxlKikgeyB9CisgICAgZXhwbGljaXQgRXdrRXh0ZW5z
aW9uKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGUqKTsKICAgICB+RXdrRXh0ZW5zaW9uKCkgeyB9CiAK
ICAgICB2b2lkIGFwcGVuZChFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KTsKICAgICB2b2lk
IHJlbW92ZShFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KTsKIAorICAgIFdlYktpdDo6SW5q
ZWN0ZWRCdW5kbGUqIGJ1bmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVuZGxlOyB9CisKKyAgICBz
dGF0aWMgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNv
bnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYs
IFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2Vp
dmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiwgV0tUeXBlUmVmLCBjb25zdCB2b2lk
KiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZShX
S0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmLCBXS1N0cmluZ1JlZiwgV0tUeXBlUmVmLCBjb25z
dCB2b2lkKik7CisKIHByaXZhdGU6CisgICAgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZSogbV9idW5k
bGU7CisKICAgICBWZWN0b3I8RXdrX0V4dGVuc2lvbl9DbGllbnQqPiBtX2NsaWVudHM7CiB9Owog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5h
Z2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFn
ZXJFZmwuY3BwCmluZGV4IGIzM2UyODZhZTQ2ZTgyYzg2MzUxYzhjZDdkNjIwMTExOTlmNzRlOWEu
LmFhYzRhMDk4YzlmZjM0ZjdlOWU2NDY0MThlYThmN2NlMDM4Nzk0MTcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwCkBA
IC02NSw3ICs2NSw3IEBAIHZvaWQgRXh0ZW5zaW9uTWFuYWdlckVmbDo6aW5pdGlhbGl6ZShXS0J1
bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiB1c2VyRGF0YSkKIAogICAgICAgICAgICAgRXdrX0V4
dGVuc2lvbl9Jbml0aWFsaXplX0Z1bmN0aW9uIGluaXRpYWxpemVGdW5jdGlvbiA9IG1vZHVsZS0+
ZnVuY3Rpb25Qb2ludGVyPEV3a19FeHRlbnNpb25fSW5pdGlhbGl6ZV9GdW5jdGlvbj4oImV3a19l
eHRlbnNpb25faW5pdCIpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFsaXplRnVuY3Rpb24pCi0g
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24obV9leHRlbnNpb24uZ2V0KCksIG51bGxwdHIgLyog
cmVzZXJ2ZWQgZm9yIHRoZSBmdXR1cmUgKi8pOwogICAgICAgICAgICAgbV9leHRlbnNpb25Nb2R1
bGVzLmFwcGVuZChtb2R1bGUucmVsZWFzZSgpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>241162</attachid>
            <date>2014-11-06 22:24:07 -0800</date>
            <delta_ts>2015-02-24 01:32:49 -0800</delta_ts>
            <desc>rebased</desc>
            <filename>bug-137660-20141107152415.patch</filename>
            <type>text/plain</type>
            <size>29771</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc1NzQyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggZTU3YjcyMDQ0MWUzMGY5
MzFhODNkMjk2ZTFmNzRmZDQwMWIxNjVmNC4uOTVkZTQ3YmFiMGY2YzcyMzVhOGI2ZmUxMGUxYjk5
NjMxYWUxNTNjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE0LTExLTA2ICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtFRkxdIEFkZCBt
ZXNzYWdlIEFQSXMgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBld2tfY29udGV4dCBhbmQgZXh0ZW5z
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3
NjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgZGVwZW5kZW5jaWVzIGZvciBld2syVW5pdFRlc3RFeHRl
bnNpb25TYW1wbGUKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6
CisgICAgICAgIChFd2tDb250ZXh0OjpFd2tDb250ZXh0KToKKyAgICAgICAgKEV3a0NvbnRleHQ6
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAgICAgICAgKEV3a0NvbnRl
eHQ6OnNldE1lc3NhZ2VGcm9tRXh0ZW5zaW9uQ2FsbGJhY2spOgorICAgICAgICAoRXdrQ29udGV4
dDo6cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChl
d2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9fZXh0ZW5zaW9ucyk6CisgICAgICAgIChld2tfY29u
dGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQpOgorICAgICAgICAoRXdr
Q29udGV4dDo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
CisgICAgICAgIERlbGV0ZWQgdG8gc3BsaXQgc3luY2hyb25vdXNlIG1lc3NhZ2UgQVBJcyBmcm9t
IGFzeW5jaHJvbnVvdXMgbWVzc2FnZSBBUElzLgorICAgICAgICBld2Via2l0IHdpbGwgbm90IHN1
cHBvcnQgdGhpcyB1bnRpbCB0aGVyZSBhcmUgcmVxdWlyZW1lbnRzLgorICAgICAgICAoRXdrQ29u
dGV4dDo6c2V0TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZUNhbGxiYWNrKTogUmVuYW1lZCB0byBz
ZXRNZXNzYWdlRnJvbUV4dGVuc2lvbkNhbGxiYWNrLgorICAgICAgICAoZXdrX2NvbnRleHRfbWVz
c2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZSk6IFJlbmFtZWQgdG8gZXdrX2NvbnRleHRfbWVz
c2FnZV9wb3N0X3RvX2V4dGVuc2lvbnMuCisgICAgICAgIChld2tfY29udGV4dF9tZXNzYWdlX2Zy
b21faW5qZWN0ZWRfYnVuZGxlX2NhbGxiYWNrX3NldCk6IFJlbmFtZWQgdG8gZXdrX2NvbnRleHRf
bWVzc2FnZV9mcm9tX2luamVjdGVkX2J1bmRsZV9jYWxsYmFja19zZXQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmNwcDoKKyAgICAgICAgSW1wcm92ZWQg
dGVzdCBjYXNlIGZvciBld2tfY29udGV4dF9uZXdfd2l0aF9leHRlbnNpb25zX3BhdGggdXNpbmcg
dGhlIG1lc3NhZ2UgQVBJcy4KKyAgICAgICAgKEVXSzJVbml0VGVzdDo6RVdLMlVuaXRUZXN0QmFz
ZTo6RVdLMlVuaXRUZXN0QmFzZSk6CisgICAgICAgIChFV0syVW5pdFRlc3Q6OkVXSzJVbml0VGVz
dEJhc2U6OlNldFVwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcDoKKyAgICAgICAg
KEVXSzJVbml0VGVzdDo6RVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OmV4dGVuc2lvblNhbXBsZSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL2V4dGVuc2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHA6IAorICAgICAgICBJbXByb3Zl
ZCB0ZXN0IGNhc2UgZm9yIGV3a19jb250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNfcGF0aCB1c2lu
ZyB0aGUgbWVzc2FnZSBBUElzLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rl
c3RfZXdrMl9jb250ZXh0LmNwcDogRGl0dG8uCisgICAgICAgIChFV0syQ29udGV4dFRlc3RXaXRo
RXh0ZW5zaW9uOjptZXNzYWdlUmVjZWl2ZWRDYWxsYmFjayk6CisgICAgICAgIChFV0syQ29udGV4
dFRlc3RXaXRoRXh0ZW5zaW9uOjpFV0syQ29udGV4dFRlc3RXaXRoRXh0ZW5zaW9uKToKKyAgICAg
ICAgKFRFU1RfRik6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZs
L2V3a19leHRlbnNpb24uY3BwOgorICAgICAgICAodG9Fd2tFeHRlbmRpb24pOgorICAgICAgICAo
RXdrRXh0ZW5zaW9uOjpFd2tFeHRlbnNpb24pOgorICAgICAgICAoRXdrRXh0ZW5zaW9uOjpkaWRD
cmVhdGVQYWdlKToKKyAgICAgICAgKEV3a0V4dGVuc2lvbjo6d2lsbERlc3Ryb3lQYWdlKToKKyAg
ICAgICAgKEV3a0V4dGVuc2lvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2UpOgorICAgICAgICAoRXdrRXh0
ZW5zaW9uOjpkaWRSZWNlaXZlTWVzc2FnZVRvUGFnZSk6CisgICAgICAgIChld2tfZXh0ZW5zaW9u
X21lc3NhZ2VfcG9zdCk6IEltcGxlbWVudGVkIHRvIHBvc3QgbWVzc2FnZSB0byBld2tfY29udGV4
dC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVu
c2lvbi5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tf
ZXh0ZW5zaW9uX3ByaXZhdGUuaDoKKyAgICAgICAgKEV3a0V4dGVuc2lvbjo6YnVuZGxlKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL2VmbC9FeHRlbnNpb25NYW5hZ2VyRWZsLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6RXh0ZW5zaW9uTWFuYWdlckVmbDo6aW5pdGlhbGl6ZSk6CisgICAgICAgIEZpeGVk
IHRoZSBidWcgd2hlbiB0aGVyZSBhcmUgZGlmZmVyZW50IHNoYXJlZCBvYmplY3RzIGluIGV4dGVu
c2lvbiBwYXRoLgorICAgICAgICBUaGlzIGlzIHNwb3R0ZWQgd2hpbGUgaW1wcm92aW5nIHRlc3Qg
Y2FzZS4KKwogMjAxNC0xMS0wNiAgQ29ucmFkIFNodWx0eiAgPGNvbnJhZF9zaHVsdHpAYXBwbGUu
Y29tPgogCiAgICAgICAgIENsaWVudHMgc2hvdWxkIGJlIGFibGUgdG8gY3VzdG9taXplIHRoZSB2
aWV3IHVzZWQgZm9yIHBhZ2UgcHJldmlld3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1Bs
YXRmb3JtRWZsLmNtYWtlIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXgg
NzNhYWIxNWM0OWE3MmQzNzBlOGY4ODIxYTg0ZTk5OGFiOTI2MmFmYy4uYjgzNTQ4MDQ0ZjQzNTc2
YjVhZGM3ZDg1NjQ3YTk2MDVkMGE3NzIzMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxh
dGZvcm1FZmwuY21ha2UKKysrIGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAg
LTU0MCw2ICs1NDAsNyBAQCBpZiAoRU5BQkxFX0FQSV9URVNUUykKICAgICBlbmRmb3JlYWNoICgp
CiAKICAgICBhZGRfbGlicmFyeShld2syVW5pdFRlc3RFeHRlbnNpb25TYW1wbGUgU0hBUkVEICR7
VEVTVF9FWFRFTlNJT05TX0RJUn0vZXh0ZW5zaW9uX3NhbXBsZS5jcHApCisgICAgdGFyZ2V0X2xp
bmtfbGlicmFyaWVzKGV3azJVbml0VGVzdEV4dGVuc2lvblNhbXBsZSAke0VJTkFfTElCUkFSSUVT
fSBXZWJLaXQyKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9TUEVMTENIRUNLKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDc3MGYy
MTBiYzk0OTBkYTExZGMyNDJkMmQwODg5NTE1MDk3M2Q3MTEuLjg5ODJlZjA1OThmZTU0N2Y3OGJh
MmI3OTQ2ODg3Zjk0YzFhNDc5NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vz
cy9BUEkvZWZsL2V3a19jb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC9ld2tfY29udGV4dC5jcHAKQEAgLTk0LDggKzk0LDggQEAgRXdrQ29udGV4dDo6RXdr
Q29udGV4dChXS0NvbnRleHRSZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBleHRlbnNpb25zUGF0
aCkKICAgICBUZXh0Q2hlY2tlckNsaWVudEVmbDo6aW5zdGFuY2UoKS5lbnN1cmVTcGVsbENoZWNr
aW5nTGFuZ3VhZ2UoKTsKICNlbmRpZgogCi0gICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUuY2FsbGJhY2sgPSBudWxscHRyOwotICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlLnVzZXJEYXRhID0gbnVsbHB0cjsKKyAgICBtX2NhbGxiYWNrRm9y
TWVzc2FnZUZyb21FeHRlbnNpb24uY2FsbGJhY2sgPSBudWxscHRyOworICAgIG1fY2FsbGJhY2tG
b3JNZXNzYWdlRnJvbUV4dGVuc2lvbi51c2VyRGF0YSA9IG51bGxwdHI7CiAKICAgICBpZiAoIWV4
dGVuc2lvbnNQYXRoLmlzRW1wdHkoKSkgewogICAgICAgICBXS0NvbnRleHRJbmplY3RlZEJ1bmRs
ZUNsaWVudFYxIGNsaWVudDsKQEAgLTEwNCw3ICsxMDQsNiBAQCBFd2tDb250ZXh0OjpFd2tDb250
ZXh0KFdLQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbnNQYXRoKQog
ICAgICAgICBjbGllbnQuYmFzZS52ZXJzaW9uID0gMTsKICAgICAgICAgY2xpZW50LmJhc2UuY2xp
ZW50SW5mbyA9IHRoaXM7CiAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21Jbmpl
Y3RlZEJ1bmRsZSA9IGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOwotICAgICAg
ICBjbGllbnQuZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSA9
IGRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGU7CiAgICAgICAg
IGNsaWVudC5nZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEgPSBnZXRJbmpl
Y3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGE7CiAKICAgICAgICAgV0tDb250ZXh0U2V0
SW5qZWN0ZWRCdW5kbGVDbGllbnQobV9jb250ZXh0LmdldCgpLCAmY2xpZW50LmJhc2UpOwpAQCAt
Mzg0LDEyICszODMsNyBAQCBzdGF0aWMgaW5saW5lIEV3a0NvbnRleHQqIHRvRXdrQ29udGV4dChj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQogCiB2b2lkIEV3a0NvbnRleHQ6OmRpZFJlY2VpdmVNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5h
bWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAg
ICB0b0V3a0NvbnRleHQoY2xpZW50SW5mbyktPnByb2Nlc3NSZWNlaXZlZE1lc3NhZ2VGcm9tSW5q
ZWN0ZWRCdW5kbGUobWVzc2FnZU5hbWUsIG1lc3NhZ2VCb2R5LCBudWxscHRyKTsKLX0KLQotdm9p
ZCBFd2tDb250ZXh0OjpkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNz
YWdlQm9keSwgV0tUeXBlUmVmKiByZXR1cm5EYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQot
ewotICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHksIHJldHVybkRhdGEpOwor
ICAgIHRvRXdrQ29udGV4dChjbGllbnRJbmZvKS0+cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21J
bmplY3RlZEJ1bmRsZShtZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHkpOwogfQogCiBXS1R5cGVSZWYg
RXdrQ29udGV4dDo6Z2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdLQ29u
dGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKQEAgLTM5NywzNiArMzkxLDMzIEBAIFdL
VHlwZVJlZiBFd2tDb250ZXh0OjpnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRh
dGEoV0tDb250ZXh0UmVmLCBjb25zCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVHlwZVJlZj4o
dG9Db3BpZWRBUEkodG9Fd2tDb250ZXh0KGNsaWVudEluZm8pLT5leHRlbnNpb25zUGF0aCgpKSk7
CiB9CiAKLXZvaWQgRXdrQ29udGV4dDo6c2V0TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZUNhbGxi
YWNrKEV3a19Db250ZXh0X01lc3NhZ2VfRnJvbV9JbmplY3RlZF9CdW5kbGVfQ2IgY2FsbGJhY2ss
IHZvaWQqIHVzZXJEYXRhKQordm9pZCBFd2tDb250ZXh0OjpzZXRNZXNzYWdlRnJvbUV4dGVuc2lv
bkNhbGxiYWNrKEV3a19Db250ZXh0X01lc3NhZ2VfRnJvbV9FeHRlbnNpb25fQ2IgY2FsbGJhY2ss
IHZvaWQqIHVzZXJEYXRhKQogewotICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlLnVzZXJEYXRhID0gdXNlckRhdGE7CisgICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9t
RXh0ZW5zaW9uLnVzZXJEYXRhID0gdXNlckRhdGE7CiAKLSAgICBpZiAobV9jYWxsYmFja0Zvck1l
c3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2sgPT0gY2FsbGJhY2spCisgICAgaWYgKG1f
Y2FsbGJhY2tGb3JNZXNzYWdlRnJvbUV4dGVuc2lvbi5jYWxsYmFjayA9PSBjYWxsYmFjaykKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGUuY2FsbGJhY2sgPSBjYWxsYmFjazsKKyAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRl
bnNpb24uY2FsbGJhY2sgPSBjYWxsYmFjazsKIH0KIAotdm9pZCBFd2tDb250ZXh0Ojpwcm9jZXNz
UmVjZWl2ZWRNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1l
LCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIFdLVHlwZVJlZiogcmV0dXJuRGF0YSkKK3ZvaWQgRXdr
Q29udGV4dDo6cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmlu
Z1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotICAgIGlmICghbV9j
YWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2spCisgICAgaWYgKCFt
X2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24uY2FsbGJhY2spCiAgICAgICAgIHJldHVy
bjsKIAogICAgIENTdHJpbmcgbmFtZSA9IHRvSW1wbChtZXNzYWdlTmFtZSktPnN0cmluZygpLnV0
ZjgoKTsKLSAgICBDU3RyaW5nIGJvZHk7Ci0gICAgaWYgKG1lc3NhZ2VCb2R5ICYmIFdLU3RyaW5n
R2V0VHlwZUlEKCkgPT0gV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpKQotICAgICAgICBib2R5ID0g
dG9JbXBsKHN0YXRpY19jYXN0PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSkpLT5zdHJpbmcoKS51
dGY4KCk7Ci0KLSAgICBpZiAocmV0dXJuRGF0YSkgewotICAgICAgICBjaGFyKiByZXR1cm5TdHJp
bmcgPSBudWxscHRyOwotICAgICAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1
bmRsZS5jYWxsYmFjayhuYW1lLmRhdGEoKSwgYm9keS5kYXRhKCksICZyZXR1cm5TdHJpbmcsIG1f
Y2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLnVzZXJEYXRhKTsKLSAgICAgICAg
aWYgKHJldHVyblN0cmluZykgewotICAgICAgICAgICAgKnJldHVybkRhdGEgPSBXS1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhyZXR1cm5TdHJpbmcpOwotICAgICAgICAgICAgZnJlZShyZXR1
cm5TdHJpbmcpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICpyZXR1cm5EYXRhID0gV0tT
dHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoIiIpOwotICAgIH0gZWxzZQotICAgICAgICBtX2Nh
bGxiYWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZS5jYWxsYmFjayhuYW1lLmRhdGEoKSwg
Ym9keS5kYXRhKCksIG51bGxwdHIsIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlLnVzZXJEYXRhKTsKKyAgICBFaW5hX1ZhbHVlKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgaWYg
KG1lc3NhZ2VCb2R5ICYmIFdLU3RyaW5nR2V0VHlwZUlEKCkgPT0gV0tHZXRUeXBlSUQobWVzc2Fn
ZUJvZHkpKSB7CisgICAgICAgIHZhbHVlID0gZWluYV92YWx1ZV9uZXcoRUlOQV9WQUxVRV9UWVBF
X1NUUklORyk7CisgICAgICAgIENTdHJpbmcgYm9keSA9IHRvSW1wbChzdGF0aWNfY2FzdDxXS1N0
cmluZ1JlZj4obWVzc2FnZUJvZHkpKS0+c3RyaW5nKCkudXRmOCgpOworICAgICAgICBlaW5hX3Zh
bHVlX3NldCh2YWx1ZSwgYm9keS5kYXRhKCkpOworICAgIH0KKworICAgIG1fY2FsbGJhY2tGb3JN
ZXNzYWdlRnJvbUV4dGVuc2lvbi5jYWxsYmFjayhuYW1lLmRhdGEoKSwgdmFsdWUsIG1fY2FsbGJh
Y2tGb3JNZXNzYWdlRnJvbUV4dGVuc2lvbi51c2VyRGF0YSk7CisKKyAgICBpZiAodmFsdWUpCisg
ICAgICAgIGVpbmFfdmFsdWVfZnJlZSh2YWx1ZSk7CiB9CiAKIEV3a19UTFNfRXJyb3JfUG9saWN5
IEV3a0NvbnRleHQ6Omlnbm9yZVRMU0Vycm9ycygpIGNvbnN0CkBAIC01MjQsMjIgKzUxNSwzMiBA
QCB2b2lkIGV3a19jb250ZXh0X3Jlc291cmNlX2NhY2hlX2NsZWFyKEV3a19Db250ZXh0KiBld2tD
b250ZXh0KQogICAgIGltcGwtPmNsZWFyUmVzb3VyY2VDYWNoZSgpOwogfQogCi12b2lkIGV3a19j
b250ZXh0X21lc3NhZ2VfcG9zdF90b19pbmplY3RlZF9idW5kbGUoRXdrX0NvbnRleHQqIGV3a0Nv
bnRleHQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpCitFaW5hX0Jvb2wgZXdr
X2NvbnRleHRfbWVzc2FnZV9wb3N0X3RvX2V4dGVuc2lvbnMoRXdrX0NvbnRleHQqIGV3a0NvbnRl
eHQsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IEVpbmFfVmFsdWUqIGJvZHkpCiB7Ci0gICAgRVdL
X09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCk7Ci0g
ICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4obmFtZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4oYm9keSk7CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oRXdrQ29u
dGV4dCwgZXdrQ29udGV4dCwgaW1wbCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExf
UkVUVVJOX1ZBTChuYW1lLCBmYWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5f
VkFMKGJvZHksIGZhbHNlKTsKKworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJv
ZHk7CisgICAgY29uc3QgRWluYV9WYWx1ZV9UeXBlKiB0eXBlID0gZWluYV92YWx1ZV90eXBlX2dl
dChib2R5KTsKKyAgICBpZiAodHlwZSA9PSBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HU0hBUkUgfHwg
dHlwZSA9PSBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIHZh
bHVlOworICAgICAgICBlaW5hX3ZhbHVlX2dldChib2R5LCAmdmFsdWUpOworICAgICAgICBtZXNz
YWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcodmFsdWUpKTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgV0tSZXRhaW5QdHI8V0tT
dHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3Ry
aW5nKG5hbWUpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRv
cHRXSywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYm9keSkpOwogICAgIFdLQ29udGV4
dFBvc3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShpbXBsLT53a0NvbnRleHQoKSwgbWVzc2FnZU5h
bWUuZ2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi12
b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9pbmplY3RlZF9idW5kbGVfY2FsbGJhY2tfc2V0
KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fSW5qZWN0
ZWRfQnVuZGxlX0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3ZvaWQgZXdrX2NvbnRleHRf
bWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0KEV3a19Db250ZXh0KiBld2tDb250
ZXh0LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNhbGxiYWNrLCB2b2lk
KiB1c2VyRGF0YSkKIHsKICAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihFd2tDb250ZXh0
LCBld2tDb250ZXh0LCBpbXBsKTsKIAotICAgIGltcGwtPnNldE1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGVDYWxsYmFjayhjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGltcGwtPnNldE1lc3NhZ2VG
cm9tRXh0ZW5zaW9uQ2FsbGJhY2soY2FsbGJhY2ssIHVzZXJEYXRhKTsKIH0KIAogRWluYV9Cb29s
IGV3a19jb250ZXh0X3Byb2Nlc3NfbW9kZWxfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBF
d2tfUHJvY2Vzc19Nb2RlbCBwcm9jZXNzTW9kZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCBkZDkxYjY4Njk2MWEzZDE0MDUwZmQ5M2Zh
NzFjZTkzOTE5YTMxZWZkLi4xZjQ0OTI0MDlmM2JmYmVmNjk0ZTEzM2RkZGE4MTA1NjUwNDQyYTBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgK
QEAgLTEzOSwxNyArMTM5LDE2IEBAIHR5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X1RpdGxlX1Vw
ZGF0ZV9DYikoY29uc3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIKIHR5cGVkZWYgdm9p
ZCAoKkV3a19IaXN0b3J5X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2IpKHZvaWQgKnVzZXJfZGF0
YSk7CiAKIC8qKgotICogQ2FsbGJhY2sgZm9yIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVk
QnVuZGxlIGFuZCBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
CisgKiBDYWxsYmFjayB0byByZWNlaXZlIG1lc3NhZ2UgZnJvbSBleHRlbnNpb24uCiAgKgotICog
VXNlciBzaG91bGQgYWxsb2NhdGUgbmV3IHN0cmluZyBmb3IgcmV0dXJuX2RhdGEgYmVmb3JlIHNl
dHRpbmcgaXQuCi0gKiBUaGUgcmV0dXJuX2RhdGEgc3RyaW5nIHdpbGwgYmUgZnJlZWQgb24gV2Vi
S2l0IHNpZGUuCisgKiBAcGFyYW0gbmFtZSBuYW1lIG9mIG1lc3NhZ2UgZnJvbSBleHRlbnNpb24K
KyAqIEBwYXJhbSBib2R5IGJvZHkgb2YgbWVzc2FnZSBmcm9tIGV4dGVuZGlvbgorICogQHBhcmFt
IHVzZXJfZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBwYXNzc2VkIHdoZW4gcmVjZWl2aW5nIG1lc3Nh
Z2UgZnJvbSBleHRlbnNpb24KICAqCi0gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIG1lc3NhZ2UgZnJv
bSBpbmplY3RlZCBidW5kbGUKLSAqIEBwYXJhbSBib2R5IGJvZHkgb2YgbWVzc2FnZSBmcm9tIGlu
amVjdGVkIGJ1bmRsZQotICogQHBhcmFtIHJldHVybl9kYXRhIHJldHVybl9kYXRhIHN0cmluZyBm
cm9tIGFwcGxpY2F0aW9uCi0gKiBAcGFyYW0gdXNlcl9kYXRhIHVzZXJfZGF0YSB3aWxsIGJlIHBh
c3NzZWQgd2hlbiByZWNlaXZpbmcgbWVzc2FnZSBmcm9tIGluamVjdGVkIGJ1bmRsZQorICogQHNl
ZSBld2tfY29udGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQKKyAqIEBz
ZWUgZXdrX2V4dGVuc2lvbl9tZXNzYWdlX3Bvc3QKICAqLwotdHlwZWRlZiB2b2lkICgqRXdrX0Nv
bnRleHRfTWVzc2FnZV9Gcm9tX0luamVjdGVkX0J1bmRsZV9DYikoY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgY2hhciAqYm9keSwgY2hhciAqKnJldHVybl9kYXRhLCB2b2lkICp1c2VyX2RhdGEpOwor
dHlwZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0V4dGVuc2lvbl9DYikoY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSwgdm9pZCAqdXNlcl9kYXRhKTsK
IAogLyoqCiAgKiBHZXRzIGRlZmF1bHQgRXdrX0NvbnRleHQgaW5zdGFuY2UuCkBAIC0zNjgsMTYg
KzM2NywyMiBAQCBFQVBJIEVpbmFfQm9vbCBld2tfY29udGV4dF9hZGRpdGlvbmFsX3BsdWdpbl9w
YXRoX3NldChFd2tfQ29udGV4dCAqY29udGV4dCwgY29ucwogRUFQSSB2b2lkIGV3a19jb250ZXh0
X3Jlc291cmNlX2NhY2hlX2NsZWFyKEV3a19Db250ZXh0ICpjb250ZXh0KTsKIAogLyoqCi0gKiBQ
b3N0cyBtZXNzYWdlIHRvIGluamVjdGVkIGJ1bmRsZS4KKyAqIFBvc3RzIG1lc3NhZ2UgdG8gZXh0
ZW5zaW9ucyBhc3luY2hyb25vdXNseS4KICAqCi0gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9i
amVjdCB0byBwb3N0IG1lc3NhZ2UgdG8gaW5qZWN0ZWQgYnVuZGxlCisgKiBAbm90ZSBib2R5IG9u
bHkgc3VwcG9ydHMgQGMgRUlOQV9WQUxVRV9UWVBFX1NUUklOR1NIQVJFIG9yIEBjIEVJTkFfVkFM
VUVfVFlQRV9TVFJJTkcsCisgKiBub3cuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBv
YmplY3QgdG8gcG9zdCBtZXNzYWdlIHRvIGV4dGVuc2lvbnMKICAqIEBwYXJhbSBuYW1lIG1lc3Nh
Z2UgbmFtZQogICogQHBhcmFtIGJvZHkgbWVzc2FnZSBib2R5CisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgb24gc3VjY2VzcyBvZiBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgb3Igd2hlbiB0
aGUgdHlwZQorICogb2YgQHAgYm9keSBpcyBub3Qgc3VwcG9ydGVkLgogICovCi1FQVBJIHZvaWQg
ZXdrX2NvbnRleHRfbWVzc2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZShFd2tfQ29udGV4dCAq
Y29udGV4dCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYm9keSk7CitFQVBJIEVpbmFf
Qm9vbCBld2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9fZXh0ZW5zaW9ucyhFd2tfQ29udGV4dCAq
Y29udGV4dCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSk7CiAKIC8q
KgotICogU2V0cyBjYWxsYmFjayBmb3IgcmVjZWl2ZWQgaW5qZWN0ZWQgYnVuZGxlIG1lc3NhZ2Uu
CisgKiBTZXRzIGNhbGxiYWNrIGZvciByZWNlaXZlZCBleHRlbnNpb24gbWVzc2FnZS4KICAqCiAg
KiBDbGllbnQgY2FuIHBhc3MgQGMgTlVMTCBmb3IgY2FsbGJhY2sgdG8gc3RvcCBsaXN0ZW5pbmcg
Zm9yIG1lc3NhZ2VzLgogICoKQEAgLTM4NSw3ICszOTAsNyBAQCBFQVBJIHZvaWQgZXdrX2NvbnRl
eHRfbWVzc2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZShFd2tfQ29udGV4dCAqY29udGV4dCwg
Y29ucwogICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIGZvciByZWNlaXZlZCBpbmplY3RlZCBi
dW5kbGUgbWVzc2FnZSBvciBAYyBOVUxMCiAgKiBAcGFyYW0gdXNlcl9kYXRhIHVzZXIgZGF0YQog
ICovCi1FQVBJIHZvaWQgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2luamVjdGVkX2J1bmRsZV9j
YWxsYmFja19zZXQoRXdrX0NvbnRleHQgKmNvbnRleHQsIEV3a19Db250ZXh0X01lc3NhZ2VfRnJv
bV9JbmplY3RlZF9CdW5kbGVfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CitFQVBJIHZv
aWQgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0KEV3a19D
b250ZXh0ICpjb250ZXh0LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNh
bGxiYWNrLCB2b2lkICp1c2VyX2RhdGEpOwogCiAvKioKICAqIFNldHMgYSBwcm9jZXNzIG1vZGVs
IGZvciBAYSBjb250ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDMyZDIzZWQ5YjQzZGU4Zjg0M2MyZmJh
Y2Y3NDUyNWQ0YWUyOTFlZTguLjllNzA3YTFjYTNiOTYxODhjMjA0NDVjNjI3Y2NhODVmMjZiYjM5
YzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tf
Y29udGV4dF9wcml2YXRlLmgKQEAgLTk3LDEwICs5Nyw5IEBAIHB1YmxpYzoKICAgICBKU0dsb2Jh
bENvbnRleHRSZWYganNHbG9iYWxDb250ZXh0KCk7CiAKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNl
aXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1l
c3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwotICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0
ZWRCdW5kbGUoV0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVm
IG1lc3NhZ2VCb2R5LCBXS1R5cGVSZWYqIHJldHVybkRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudElu
Zm8pOwogICAgIHN0YXRpYyBXS1R5cGVSZWYgZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlv
blVzZXJEYXRhKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAgdm9p
ZCBzZXRNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlQ2FsbGJhY2soRXdrX0NvbnRleHRfTWVzc2Fn
ZV9Gcm9tX0luamVjdGVkX0J1bmRsZV9DYiwgdm9pZCopOwotICAgIHZvaWQgcHJvY2Vzc1JlY2Vp
dmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tU
eXBlUmVmIG1lc3NhZ2VCb2R5LCBXS1R5cGVSZWYqIHJldHVybkRhdGEpOworICAgIHZvaWQgc2V0
TWVzc2FnZUZyb21FeHRlbnNpb25DYWxsYmFjayhFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0
ZW5zaW9uX0NiLCB2b2lkKik7CisgICAgdm9pZCBwcm9jZXNzUmVjZWl2ZWRNZXNzYWdlRnJvbUlu
amVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJv
ZHkpOwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEV3a0NvbnRleHQoV0tDb250ZXh0UmVmLCBj
b25zdCBTdHJpbmcmIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKCkpOwpAQCAtMTI3LDkgKzEyNiw5
IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZXh0ZW5zaW9uc1BhdGg7CiAKICAgICBzdHJ1Y3Qg
ewotICAgICAgICBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fSW5qZWN0ZWRfQnVuZGxlX0NiIGNh
bGxiYWNrOworICAgICAgICBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNh
bGxiYWNrOwogICAgICAgICB2b2lkKiB1c2VyRGF0YTsKLSAgICB9IG1fY2FsbGJhY2tGb3JNZXNz
YWdlRnJvbUluamVjdGVkQnVuZGxlOworICAgIH0gbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tRXh0
ZW5zaW9uOwogfTsKIAogI2VuZGlmIC8vIGV3a19jb250ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9F
V0syVW5pdFRlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rl
c3RzL1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5jcHAKaW5kZXggMTVmMzZhMDExYThm
ZDY4ZTc3MTMxMmVkNTlkZTRkZDRmNTI5YTQ2My4uNDMxNmM2YTc3ZmVhM2VhNWY4NmFiZDJhZDY3
NTA4NTAzMzZmZGM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVz
dEJhc2UuY3BwCkBAIC0zOSw2ICszOSw3IEBAIEVXSzJVbml0VGVzdEJhc2U6OkVXSzJVbml0VGVz
dEJhc2UoKQogICAgICwgbV93ZWJWaWV3KDApCiAgICAgLCBtX2V3a1ZpZXdDbGFzcyhld2syVW5p
dFRlc3RCcm93c2VyVmlld1NtYXJ0Q2xhc3MoKSkKICAgICAsIG1fbXVsdGlwbGVQcm9jZXNzZXMo
ZmFsc2UpCisgICAgLCBtX3dpdGhFeHRlbnNpb24oZmFsc2UpCiB7CiAgICAgZXdrX3ZpZXdfc21h
cnRfY2xhc3Nfc2V0KCZtX2V3a1ZpZXdDbGFzcyk7CiB9CkBAIC02MSw3ICs2MiwxMiBAQCB2b2lk
IEVXSzJVbml0VGVzdEJhc2U6OlNldFVwKCkKIAogICAgIEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZh
c19zbWFydF9jbGFzc19uZXcoJm1fZXdrVmlld0NsYXNzLnNjKTsKIAotICAgIEV3a19Db250ZXh0
KiBuZXdDb250ZXh0ID0gZXdrX2NvbnRleHRfbmV3KCk7CisgICAgRXdrX0NvbnRleHQqIG5ld0Nv
bnRleHQ7CisgICAgaWYgKG1fd2l0aEV4dGVuc2lvbikKKyAgICAgICAgbmV3Q29udGV4dCA9IGV3
a19jb250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNfcGF0aChURVNUX0xJQl9ESVIpOworICAgIGVs
c2UKKyAgICAgICAgbmV3Q29udGV4dCA9IGV3a19jb250ZXh0X25ldygpOworCiAgICAgaWYgKG1f
bXVsdGlwbGVQcm9jZXNzZXMpCiAgICAgICAgIGV3a19jb250ZXh0X3Byb2Nlc3NfbW9kZWxfc2V0
KG5ld0NvbnRleHQsIEVXS19QUk9DRVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0
VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmgKaW5kZXggZmI1YzlmNWNm
MTYzZjg5YzkwMjVjN2ZjNGFjNDkzYmI5NzZkNWE1MS4uMjMzN2RmYTc3NmUwNzcxM2E2M2M0ZTM0
ZTMxMzljYzFhYjgyMzI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmgKKysrIGIvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRl
c3RCYXNlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGNvbnN0
ZXhwciBkb3VibGUgZGVmYXVsdFRpbWVvdXRTZWNvbmRzID0gMTAuMDsKICAgICBib29sIG1fbXVs
dGlwbGVQcm9jZXNzZXM7CisgICAgYm9vbCBtX3dpdGhFeHRlbnNpb247CiAKICAgICBib29sIGxv
YWRVcmxTeW5jKGNvbnN0IGNoYXIqIHVybCwgZG91YmxlIHRpbWVvdXRTZWNvbmRzID0gZGVmYXVs
dFRpbWVvdXRTZWNvbmRzKTsKICAgICBib29sIHdhaXRVbnRpbExvYWRGaW5pc2hlZChkb3VibGUg
dGltZW91dFNlY29uZHMgPSBkZWZhdWx0VGltZW91dFNlY29uZHMpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5p
dFRlc3RFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcAppbmRleCA5ZWFk
Zjg2YjRlNGE2ZWRmMGY3OGVmMjIwYzFhMTcxNGU4ZjViMjYxLi5iMDJkNmM3ZmI3Mjc5ZTIzNmFl
NzM5M2MyOTM5M2RiMTA2NTViNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0
aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcApAQCAtNDMsMTEgKzQzLDYgQEAgY29uc3Qg
Y2hhciogRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OmRlZmF1bHRUaGVtZSgpIGNvbnN0CiAgICAg
cmV0dXJuIERFRkFVTFRfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiOwogfQogCi1jb25zdCBjaGFy
KiBFV0syVW5pdFRlc3RFbnZpcm9ubWVudDo6ZXh0ZW5zaW9uU2FtcGxlKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gVEVTVF9MSUJfRElSICIvbGliZXdrMlVuaXRUZXN0RXh0ZW5zaW9uU2FtcGxlLnNv
IjsKLX0KLQogQ1N0cmluZyBFV0syVW5pdFRlc3RFbnZpcm9ubWVudDo6dXJsRm9yUmVzb3VyY2Uo
Y29uc3QgY2hhciogcmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImZpbGU6Ly8i
IFRFU1RfUkVTT1VSQ0VTX0RJUiAiLyIsIHJlc291cmNlKS51dGY4KCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJV
bml0VGVzdEVudmlyb25tZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgKaW5kZXggZWI1NWJm
OGY5OTUxZTlhOGFlNTA2Yjc4ZGQ4MmZkMzA5MzNkMGJlNS4uNGRkODkzNWJiNGIyMmU2MjM0Y2E3
MTNhZmQyZGE2NDE1NmJlZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oCisr
KyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMv
RVdLMlVuaXRUZXN0RW52aXJvbm1lbnQuaApAQCAtMzAsNyArMzAsNiBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBjaGFyKiBkZWZhdWx0VGVzdFBhZ2VVcmwoKSBjb25zdDsKICAgICBjb25zdCBjaGFy
KiBkZWZhdWx0VGhlbWUoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBleHRlbnNpb25TYW1wbGUo
KSBjb25zdDsKICAgICBDU3RyaW5nIHVybEZvclJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNl
KTsKICAgICBDU3RyaW5nIHBhdGhGb3JSZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSk7CiAg
ICAgQ1N0cmluZyBwYXRoRm9yVGhlbWUoY29uc3QgY2hhciogdGhlbWUpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvZXh0ZW5zaW9ucy9leHRlbnNp
b25fc2FtcGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL2V4
dGVuc2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHAKaW5kZXggMmEwM2Q4ZTE4OTIzZTVhNGM0MWJm
MzJiMDAzMTE2ZDA1MDM5NDUwYy4uMjk0MTM0M2VjMmJmYjQwMjdlNDEyNmYyNjM5NGE3ZDJjZTEz
ZmE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMv
ZXh0ZW5zaW9ucy9leHRlbnNpb25fc2FtcGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVBy
b2Nlc3MvQVBJL2VmbC90ZXN0cy9leHRlbnNpb25zL2V4dGVuc2lvbl9zYW1wbGUuY3BwCkBAIC0y
OSw4ICsyOSwyMiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotdm9pZCBld2tfZXh0ZW5zaW9u
X2luaXQoRXdrX0V4dGVuc2lvbiAqKQorc3RhdGljIHZvaWQgbWVzc2FnZVJlY2VpdmVkKGNvbnN0
IGNoYXIqIG5hbWUsIGNvbnN0IEVpbmFfVmFsdWUqIGJvZHksIHZvaWQqIGRhdGEpCiB7CisgICAg
RWluYV9WYWx1ZSogdmFsdWUgPSBlaW5hX3ZhbHVlX25ldyhFSU5BX1ZBTFVFX1RZUEVfU1RSSU5H
KTsKKyAgICBlaW5hX3ZhbHVlX3NldCh2YWx1ZSwgIkZyb20gZXh0ZW5zaW9uIik7CisgICAgZXdr
X2V4dGVuc2lvbl9tZXNzYWdlX3Bvc3Qoc3RhdGljX2Nhc3Q8RXdrX0V4dGVuc2lvbio+KGRhdGEp
LCAicG9uZyIsIHZhbHVlKTsKKyAgICBlaW5hX3ZhbHVlX2ZyZWUodmFsdWUpOworfQorCit2b2lk
IGV3a19leHRlbnNpb25faW5pdChFd2tfRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgc3Rh
dGljIEV3a0V4dGVuc2lvbkNsaWVudCBjbGllbnQ7CisgICAgY2xpZW50LnZlcnNpb24gPSAxOwor
ICAgIGNsaWVudC5kYXRhID0gKHZvaWQgKilleHRlbnNpb247CisgICAgY2xpZW50Lm1lc3NhZ2Vf
cmVjZWl2ZWQgPSBtZXNzYWdlUmVjZWl2ZWQ7CisKKyAgICBld2tfZXh0ZW5zaW9uX2NsaWVudF9h
ZGQoZXh0ZW5zaW9uLCAmY2xpZW50KTsKIH0KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3
azJfY29udGV4dC5jcHAKaW5kZXggZGJiNjg3ODllYWE3YjQxYjBhOGU1NWE2YmIwZjBkOTA0NWFi
YjBmYS4uMzJiZmNlNGU0MTcyYjliYzcyZTVhY2JlNGUwYjAxYjQxZDE0MzhlOCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRl
eHQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3Rf
ZXdrMl9jb250ZXh0LmNwcApAQCAtNjYsNiArNjYsMjMgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07
CiAKK2NsYXNzIEVXSzJDb250ZXh0VGVzdFdpdGhFeHRlbnNpb24gOiBwdWJsaWMgRVdLMlVuaXRU
ZXN0QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgbWVzc2FnZVJlY2VpdmVkQ2FsbGJh
Y2soY29uc3QgY2hhciogbmFtZSwgY29uc3QgRWluYV9WYWx1ZSogYm9keSwgdm9pZCogdXNlckRh
dGEpCisgICAgeworICAgICAgICBib29sKiBoYW5kbGVkID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgQVNTRVJUX1NUUkVRKCJwb25nIiwgbmFtZSk7CisKKyAgICAgICAg
KmhhbmRsZWQgPSB0cnVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEVXSzJDb250ZXh0VGVz
dFdpdGhFeHRlbnNpb24oKQorICAgIHsKKyAgICAgICAgbV93aXRoRXh0ZW5zaW9uID0gdHJ1ZTsK
KyAgICB9Cit9OworCiBURVNUX0YoRVdLMkNvbnRleHRUZXN0LCBld2tfY29udGV4dF9kZWZhdWx0
X2dldCkKIHsKICAgICBFd2tfQ29udGV4dCogZGVmYXVsdENvbnRleHQgPSBld2tfY29udGV4dF9k
ZWZhdWx0X2dldCgpOwpAQCAtMjI4LDExICsyNDUsMjIgQEAgVEVTVF9GKEVXSzJDb250ZXh0VGVz
dCwgZXdrX2NvbnRleHRfbmV3KQogICAgIGV3a19vYmplY3RfdW5yZWYoY29udGV4dCk7CiB9CiAK
LVRFU1RfRihFV0syQ29udGV4dFRlc3QsIGV3a19jb250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNf
cGF0aCkKK1RFU1RfRihFV0syQ29udGV4dFRlc3RXaXRoRXh0ZW5zaW9uLCBld2tfY29udGV4dF9u
ZXdfd2l0aF9leHRlbnNpb25zX3BhdGgpCiB7Ci0gICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBl
d2tfY29udGV4dF9uZXdfd2l0aF9leHRlbnNpb25zX3BhdGgoZW52aXJvbm1lbnQtPmV4dGVuc2lv
blNhbXBsZSgpKTsKLSAgICBBU1NFUlRfVFJVRShjb250ZXh0KTsKLSAgICBld2tfb2JqZWN0X3Vu
cmVmKGNvbnRleHQpOworICAgIGJvb2wgcmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBFd2tfQ29udGV4
dCogY29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7CisKKyAgICBld2tf
Y29udGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQoY29udGV4dCwgbWVz
c2FnZVJlY2VpdmVkQ2FsbGJhY2ssICZyZWNlaXZlZCk7CisKKyAgICBld2tfdmlld191cmxfc2V0
KHdlYlZpZXcoKSwgZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpKTsKKyAgICBBU1NF
UlRfVFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7CisKKyAgICBFaW5hX1ZhbHVlKiBib2R5
ID0gZWluYV92YWx1ZV9uZXcoRUlOQV9WQUxVRV9UWVBFX1NUUklORyk7CisgICAgZWluYV92YWx1
ZV9zZXQoYm9keSwgIkZyb20gVUlQcm9jZXNzIik7CisgICAgZXdrX2NvbnRleHRfbWVzc2FnZV9w
b3N0X3RvX2V4dGVuc2lvbnMoY29udGV4dCwgInBpbmciLCBib2R5KTsKKyAgICBlaW5hX3ZhbHVl
X2ZyZWUoYm9keSk7CisKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxUcnVlKHJlY2VpdmVkLCB0
ZXN0VGltZW91dFNlY29uZHMpKTsKIH0KIAogVEVTVF9GKEVXSzJDb250ZXh0VGVzdCwgZXdrX2Nv
bnRleHRfYWRkaXRpb25hbF9wbHVnaW5fcGF0aF9zZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4
dGVuc2lvbi5jcHAKaW5kZXggYTFiYzg1NmIxZWJhMzJlN2M2YzA2YWUzZjhlZDA5YjRiMzc1MTk3
Ni4uMDU3NTcxZDVlNzUxYTJmNDYyMGVlYTNiMGFiZGVhYWJlMWYyODA4MyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRl
bnNpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmNwcApAQCAtMjYsMTAgKzI2LDM5IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiZXdrX2V4dGVuc2lvbi5oIgogCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJXS0J1bmRsZS5oIgorI2luY2x1ZGUgIldLQnVuZGxlQVBJ
Q2FzdC5oIgorI2luY2x1ZGUgIldLUmV0YWluUHRyLmgiCiAjaW5jbHVkZSAiZXdrX2V4dGVuc2lv
bl9wcml2YXRlLmgiCisjaW5jbHVkZSA8V2ViS2l0L1dLU3RyaW5nLmg+CisjaW5jbHVkZSA8V2Vi
S2l0L1dLVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYktpdDsKIAorc3RhdGljIGlubGluZSBFd2tFeHRlbnNpb24qIHRvRXdrRXh0ZW5k
aW9uKGNvbnN0IHZvaWQqIGNsaWVudEluZm8pCit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RXdr
RXh0ZW5zaW9uKj4oc3RhdGljX2Nhc3Q8Y29uc3QgRXdrRXh0ZW5zaW9uKj4oY2xpZW50SW5mbykp
OworfQorCitFd2tFeHRlbnNpb246OkV3a0V4dGVuc2lvbihJbmplY3RlZEJ1bmRsZSogYnVuZGxl
KQorICAgIDogbV9idW5kbGUoYnVuZGxlKQoreworICAgIFdLQnVuZGxlQ2xpZW50VjEgd2tCdW5k
bGVDbGllbnQgPSB7CisgICAgICAgIHsKKyAgICAgICAgICAgIDEsIC8vIHZlcnNpb24KKyAgICAg
ICAgICAgIHRoaXMsIC8vIGNsaWVudEluZm8KKyAgICAgICAgfSwKKyAgICAgICAgZGlkQ3JlYXRl
UGFnZSwKKyAgICAgICAgd2lsbERlc3Ryb3lQYWdlLAorICAgICAgICAwLCAvLyBkaWRJbml0aWFs
aXplUGFnZUdyb3VwCisgICAgICAgIGRpZFJlY2VpdmVNZXNzYWdlLAorICAgICAgICBkaWRSZWNl
aXZlTWVzc2FnZVRvUGFnZQorICAgIH07CisgICAgV0tCdW5kbGVTZXRDbGllbnQodG9BUEkoYnVu
ZGxlKSwgJndrQnVuZGxlQ2xpZW50LmJhc2UpOworfQorCiB2b2lkIEV3a0V4dGVuc2lvbjo6YXBw
ZW5kKEV3a19FeHRlbnNpb25fQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgbV9jbGllbnRzLmFwcGVu
ZChjbGllbnQpOwpAQCAtNDAsNiArNjksNDQgQEAgdm9pZCBFd2tFeHRlbnNpb246OnJlbW92ZShF
d2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KQogICAgIG1fY2xpZW50cy5yZW1vdmUobV9jbGll
bnRzLmZpbmQoY2xpZW50KSk7CiB9CiAKK3ZvaWQgRXdrRXh0ZW5zaW9uOjpkaWRDcmVhdGVQYWdl
KFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQqKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXdrRXh0ZW5zaW9uOjp3aWxsRGVzdHJveVBhZ2UoV0tC
dW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBFd2tFeHRlbnNpb246OmRpZFJlY2VpdmVNZXNzYWdlKFdLQnVu
ZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1lc3NhZ2VCb2R5LCBj
b25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a0V4dGVuc2lvbiogc2VsZiA9IHRvRXdr
RXh0ZW5kaW9uKGNsaWVudEluZm8pOworICAgIENTdHJpbmcgbmFtZSA9IHRvSW1wbChtZXNzYWdl
TmFtZSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBFaW5hX1ZhbHVlKiB2YWx1ZSA9IG51bGxwdHI7
CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IG90aGVyIHR5cGVzLgorICAgIGlmICht
ZXNzYWdlQm9keSAmJiBXS1N0cmluZ0dldFR5cGVJRCgpID09IFdLR2V0VHlwZUlEKG1lc3NhZ2VC
b2R5KSkgeworICAgICAgICB2YWx1ZSA9IGVpbmFfdmFsdWVfbmV3KEVJTkFfVkFMVUVfVFlQRV9T
VFJJTkcpOworICAgICAgICBDU3RyaW5nIGJvZHkgPSB0b0ltcGwoc3RhdGljX2Nhc3Q8V0tTdHJp
bmdSZWY+KG1lc3NhZ2VCb2R5KSktPnN0cmluZygpLnV0ZjgoKTsKKworICAgICAgICBlaW5hX3Zh
bHVlX3NldCh2YWx1ZSwgYm9keS5kYXRhKCkpOworICAgIH0KKworICAgIGZvciAoYXV0byYgaXQg
OiBzZWxmLT5tX2NsaWVudHMpIHsKKyAgICAgICAgaWYgKGl0LT5tZXNzYWdlX3JlY2VpdmVkKQor
ICAgICAgICAgICAgaXQtPm1lc3NhZ2VfcmVjZWl2ZWQobmFtZS5kYXRhKCksIHZhbHVlLCBpdC0+
ZGF0YSk7CisgICAgfQorCisgICAgaWYgKHZhbHVlKQorICAgICAgICBlaW5hX3ZhbHVlX2ZyZWUo
dmFsdWUpOworfQorCit2b2lkIEV3a0V4dGVuc2lvbjo6ZGlkUmVjZWl2ZU1lc3NhZ2VUb1BhZ2Uo
V0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgV0tTdHJpbmdSZWYsIFdLVHlwZVJlZiwgY29u
c3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwogRWluYV9Cb29sIGV3a19l
eHRlbnNpb25fY2xpZW50X2FkZChFd2tfRXh0ZW5zaW9uKiBleHRlbnNpb24sIEV3a19FeHRlbnNp
b25fQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFM
KGV4dGVuc2lvbiwgZmFsc2UpOwpAQCAtNTksMyArMTI2LDIzIEBAIEVpbmFfQm9vbCBld2tfZXh0
ZW5zaW9uX2NsaWVudF9kZWwoRXdrX0V4dGVuc2lvbiogZXh0ZW5zaW9uLCBFd2tfRXh0ZW5zaW9u
X0NsaWVuCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworRWluYV9Cb29sIGV3a19leHRlbnNpb25f
bWVzc2FnZV9wb3N0KEV3a19FeHRlbnNpb24gKmV4dGVuc2lvbiwgY29uc3QgY2hhciAqbmFtZSwg
Y29uc3QgRWluYV9WYWx1ZSAqYm9keSkKK3sKKyAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVS
Tl9WQUwoZXh0ZW5zaW9uLCBmYWxzZSk7CisKKyAgICBXS1JldGFpblB0cjxXS1R5cGVSZWY+IG1l
c3NhZ2VCb2R5OworCisgICAgY29uc3QgRWluYV9WYWx1ZV9UeXBlKiB0eXBlID0gZWluYV92YWx1
ZV90eXBlX2dldChib2R5KTsKKyAgICBpZiAodHlwZSA9PSBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5H
U0hBUkUgfHwgdHlwZSA9PSBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HKSB7CisgICAgICAgIGNvbnN0
IGNoYXIqIHZhbHVlOworICAgICAgICBlaW5hX3ZhbHVlX2dldChib2R5LCAmdmFsdWUpOworICAg
ICAgICBtZXNzYWdlQm9keSA9IGFkb3B0V0soV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmco
dmFsdWUpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgV0tSZXRh
aW5QdHI8V0tTdHJpbmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0
aFVURjhDU3RyaW5nKG5hbWUpKTsKKyAgICBXS0J1bmRsZVBvc3RNZXNzYWdlKHRvQVBJKGV4dGVu
c2lvbi0+YnVuZGxlKCkpLCBtZXNzYWdlTmFtZS5nZXQoKSwgbWVzc2FnZUJvZHkuZ2V0KCkpOwor
CisgICAgcmV0dXJuIHRydWU7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5oIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb24uaAppbmRl
eCA4M2M1MjI5ZTYwNjQ3YzRiOWE2OTRkYTZjMjgyMTRhZGMzMmUyYjE2Li40ZmEzYWQxOGM5MmQy
OWJiMjhiZTIxMTljNTJiODFmOWQ3YjI5NjIzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0ZW5z
aW9uLmgKQEAgLTU2LDYgKzU2LDE0IEBAIHR5cGVkZWYgdm9pZCAqKCpFd2tfRXh0ZW5zaW9uX0lu
aXRpYWxpemVfRnVuY3Rpb24pKEV3a19FeHRlbnNpb24gKmV4dGVuc2lvbiwgdm9pCiBzdHJ1Y3Qg
RXdrRXh0ZW5zaW9uQ2xpZW50IHsKICAgICBpbnQgdmVyc2lvbjsKICAgICB2b2lkICpkYXRhOwor
CisgICAgLyoqCisgICAgICogQ2FsbGJhY2tzIHRvIHJlY2VpdmUgbWVzc2FnZSBmcm9tIGV3a19j
b250ZXh0LgorICAgICAqCisgICAgICogQHBhcmFtIG5hbWUgbmFtZSBvZiBtZXNzYWdlIGZyb20g
ZXdrX2NvbnRleHQKKyAgICAgKiBAcGFyYW0gYm9keSBib2R5IG9mIG1lc3NhZ2UgZnJvbSBld2tf
Y29udGV4dAorICAgICAqLworICAgIHZvaWQgKCptZXNzYWdlX3JlY2VpdmVkKShjb25zdCBjaGFy
ICpuYW1lLCBjb25zdCBFaW5hX1ZhbHVlICpib2R5LCB2b2lkICpkYXRhKTsKIH07CiB0eXBlZGVm
IHN0cnVjdCBFd2tFeHRlbnNpb25DbGllbnQgRXdrX0V4dGVuc2lvbl9DbGllbnQ7CiAKQEAgLTgw
LDYgKzg4LDI0IEBAIEVBUEkgRWluYV9Cb29sIGV3a19leHRlbnNpb25fY2xpZW50X2FkZChFd2tf
RXh0ZW5zaW9uICpleHRlbnNpb24sIEV3a19FeHRlbnNpb25fCiAgKi8KIEVBUEkgRWluYV9Cb29s
IGV3a19leHRlbnNpb25fY2xpZW50X2RlbChFd2tfRXh0ZW5zaW9uICpleHRlbnNpb24sIEV3a19F
eHRlbnNpb25fQ2xpZW50ICpjbGllbnQpOwogCisvKioKKyAqIFBvc3RzIG1lc3NhZ2UgdG8gZXdr
X2NvbnRleHQgYXN5bmNocm9ub3VzbHkuCisgKgorICogQG5vdGUgYm9keSBvbmx5IHN1cHBvcnRz
IEBjIEVJTkFfVkFMVUVfVFlQRV9TVFJJTkdTSEFSRSBvciBAYyBFSU5BX1ZBTFVFX1RZUEVfU1RS
SU5HLAorICogbm93LgorICoKKyAqIEBwYXJhbSBleHRlbnNpb24gZXh0ZW5zaW9uIHRvIHBvc3Qg
bWVzc2FnZQorICogQHBhcmFtIG5hbWUgbWVzc2FnZSBuYW1lCisgKiBAcGFyYW0gYm9keSBtZXNz
YWdlIGJvZHkKKyAqCisgKiBAcmV0dXJuIEBjIEVJTkFfVFJVRSBvbiBzdWNjZXNzIG9mIEBjIEVJ
TkFfRkFMU0Ugb24gZmFpbHVyZSBvciB3aGVuIHRoZSB0eXBlCisgKiBvZiBAcCBib2R5IGlzIG5v
dCBzdXBwb3J0ZWQuCisgKgorICogQHNlZSBld2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9fZXh0
ZW5zaW9ucworICogQHNlZSBld2tfY29udGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxs
YmFja19zZXQKKyAqLworRUFQSSBFaW5hX0Jvb2wgZXdrX2V4dGVuc2lvbl9tZXNzYWdlX3Bvc3Qo
RXdrX0V4dGVuc2lvbiAqZXh0ZW5zaW9uLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBFaW5hX1Zh
bHVlICpib2R5KTsKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0
ZW5zaW9uX3ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2VmbC9ld2tfZXh0ZW5zaW9uX3ByaXZhdGUuaAppbmRleCBmM2IwMTk1ZDc0NmM3YzBj
YmI5MDEzYzViNTkyMzI4MDRjY2JlNDA2Li5kNDcyNzY5NDZlMzk4NTgyMTBjYzcxOTdhYjRmZTk5
NGEwYzVmMDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbl9wcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb25fcHJpdmF0
ZS5oCkBAIC0zNCwxMyArMzQsMjIgQEAgY2xhc3MgSW5qZWN0ZWRCdW5kbGU7CiAKIGNsYXNzIEV3
a0V4dGVuc2lvbiB7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgRXdrRXh0ZW5zaW9uKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGUqKSB7IH0KKyAgICBleHBsaWNpdCBFd2tFeHRlbnNpb24oV2ViS2l0OjpJ
bmplY3RlZEJ1bmRsZSopOwogICAgIH5Fd2tFeHRlbnNpb24oKSB7IH0KIAogICAgIHZvaWQgYXBw
ZW5kKEV3a19FeHRlbnNpb25fQ2xpZW50KiBjbGllbnQpOwogICAgIHZvaWQgcmVtb3ZlKEV3a19F
eHRlbnNpb25fQ2xpZW50KiBjbGllbnQpOwogCisgICAgV2ViS2l0OjpJbmplY3RlZEJ1bmRsZSog
YnVuZGxlKCkgY29uc3QgeyByZXR1cm4gbV9idW5kbGU7IH0KKworICAgIHN0YXRpYyB2b2lkIGRp
ZENyZWF0ZVBhZ2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopOwor
ICAgIHN0YXRpYyB2b2lkIHdpbGxEZXN0cm95UGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdl
UmVmLCBjb25zdCB2b2lkKik7CisgICAgc3RhdGljIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoV0tC
dW5kbGVSZWYsIFdLU3RyaW5nUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OworICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKFdLQnVuZGxlUmVmLCBX
S0J1bmRsZVBhZ2VSZWYsIFdLU3RyaW5nUmVmLCBXS1R5cGVSZWYsIGNvbnN0IHZvaWQqKTsKKwog
cHJpdmF0ZToKKyAgICBXZWJLaXQ6OkluamVjdGVkQnVuZGxlKiBtX2J1bmRsZTsKKwogICAgIFZl
Y3RvcjxFd2tfRXh0ZW5zaW9uX0NsaWVudCo+IG1fY2xpZW50czsKIH07CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwIGIv
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKaW5k
ZXggYjMzZTI4NmFlNDZlODJjODYzNTFjOGNkN2Q2MjAxMTE5OWY3NGU5YS4uYWFjNGEwOThjOWZm
MzRmN2U5ZTY0NjQxOGVhOGY3Y2UwMzg3OTQxNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKKysrIGIvU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9lZmwvRXh0ZW5zaW9uTWFuYWdlckVmbC5jcHAKQEAgLTY1LDcgKzY1LDcg
QEAgdm9pZCBFeHRlbnNpb25NYW5hZ2VyRWZsOjppbml0aWFsaXplKFdLQnVuZGxlUmVmIGJ1bmRs
ZSwgV0tUeXBlUmVmIHVzZXJEYXRhKQogCiAgICAgICAgICAgICBFd2tfRXh0ZW5zaW9uX0luaXRp
YWxpemVfRnVuY3Rpb24gaW5pdGlhbGl6ZUZ1bmN0aW9uID0gbW9kdWxlLT5mdW5jdGlvblBvaW50
ZXI8RXdrX0V4dGVuc2lvbl9Jbml0aWFsaXplX0Z1bmN0aW9uPigiZXdrX2V4dGVuc2lvbl9pbml0
Iik7CiAgICAgICAgICAgICBpZiAoIWluaXRpYWxpemVGdW5jdGlvbikKLSAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgICAgIGluaXRp
YWxpemVGdW5jdGlvbihtX2V4dGVuc2lvbi5nZXQoKSwgbnVsbHB0ciAvKiByZXNlcnZlZCBmb3Ig
dGhlIGZ1dHVyZSAqLyk7CiAgICAgICAgICAgICBtX2V4dGVuc2lvbk1vZHVsZXMuYXBwZW5kKG1v
ZHVsZS5yZWxlYXNlKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247213</attachid>
            <date>2015-02-24 01:32:57 -0800</date>
            <delta_ts>2015-02-24 03:02:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-137660-20150224183243.patch</filename>
            <type>text/plain</type>
            <size>29742</size>
            <attacher name="Ryuan Choi">ryuan.choi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNTM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggMzhlYjhkODk3Nzk1Yzhj
NTk5OGU4NDZiZDQ3NjcwZWY5NWE5Y2NiZS4uOWI5MmEwNjM0OTlhZDliMjg3NGM2MDQ4OThjNzQ1
ZmNmYmUxYmE5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU2IEBACisyMDE1LTAyLTIzICBSeXVh
biBDaG9pICA8cnl1YW4uY2hvaUBuYXZlcmNvcnAuY29tPgorCisgICAgICAgIFtFRkxdIEFkZCBt
ZXNzYWdlIEFQSXMgdG8gY29tbXVuaWNhdGUgYmV0d2VlbiBld2tfY29udGV4dCBhbmQgZXh0ZW5z
aW9ucworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3
NjYwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQ
bGF0Zm9ybUVmbC5jbWFrZTogQWRkZWQgZGVwZW5kZW5jaWVzIGZvciBld2syVW5pdFRlc3RFeHRl
bnNpb25TYW1wbGUKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5jcHA6
CisgICAgICAgIChFd2tDb250ZXh0OjpFd2tDb250ZXh0KToKKyAgICAgICAgKEV3a0NvbnRleHQ6
OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKToKKyAgICAgICAgKEV3a0NvbnRl
eHQ6OnNldE1lc3NhZ2VGcm9tRXh0ZW5zaW9uQ2FsbGJhY2spOgorICAgICAgICAoRXdrQ29udGV4
dDo6cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6CisgICAgICAgIChl
d2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9fZXh0ZW5zaW9ucyk6CisgICAgICAgIChld2tfY29u
dGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQpOgorICAgICAgICAoRXdr
Q29udGV4dDo6ZGlkUmVjZWl2ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSk6
CisgICAgICAgIERlbGV0ZWQgdG8gc3BsaXQgc3luY2hyb25vdXNlIG1lc3NhZ2UgQVBJcyBmcm9t
IGFzeW5jaHJvbnVvdXMgbWVzc2FnZSBBUElzLgorICAgICAgICBld2Via2l0IHdpbGwgbm90IHN1
cHBvcnQgdGhpcyB1bnRpbCB0aGVyZSBhcmUgcmVxdWlyZW1lbnRzLgorICAgICAgICAoRXdrQ29u
dGV4dDo6c2V0TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZUNhbGxiYWNrKTogUmVuYW1lZCB0byBz
ZXRNZXNzYWdlRnJvbUV4dGVuc2lvbkNhbGxiYWNrLgorICAgICAgICAoZXdrX2NvbnRleHRfbWVz
c2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZSk6IFJlbmFtZWQgdG8gZXdrX2NvbnRleHRfbWVz
c2FnZV9wb3N0X3RvX2V4dGVuc2lvbnMuCisgICAgICAgIChld2tfY29udGV4dF9tZXNzYWdlX2Zy
b21faW5qZWN0ZWRfYnVuZGxlX2NhbGxiYWNrX3NldCk6IFJlbmFtZWQgdG8gZXdrX2NvbnRleHRf
bWVzc2FnZV9mcm9tX2luamVjdGVkX2J1bmRsZV9jYWxsYmFja19zZXQuCisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2Vm
bC9ld2tfY29udGV4dF9wcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVz
dHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmNwcDoKKyAgICAgICAgSW1wcm92ZWQg
dGVzdCBjYXNlIGZvciBld2tfY29udGV4dF9uZXdfd2l0aF9leHRlbnNpb25zX3BhdGggdXNpbmcg
dGhlIG1lc3NhZ2UgQVBJcy4KKyAgICAgICAgKEVXSzJVbml0VGVzdDo6RVdLMlVuaXRUZXN0QmFz
ZTo6RVdLMlVuaXRUZXN0QmFzZSk6CisgICAgICAgIChFV0syVW5pdFRlc3Q6OkVXSzJVbml0VGVz
dEJhc2U6OlNldFVwKToKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVz
dFV0aWxzL0VXSzJVbml0VGVzdEJhc2UuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL2VmbC90
ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcDoKKyAgICAgICAg
KEVXSzJVbml0VGVzdDo6RVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OmV4dGVuc2lvblNhbXBsZSk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGls
cy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvZWZs
L3Rlc3RzL2V4dGVuc2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHA6CisgICAgICAgIEltcHJvdmVk
IHRlc3QgY2FzZSBmb3IgZXdrX2NvbnRleHRfbmV3X3dpdGhfZXh0ZW5zaW9uc19wYXRoIHVzaW5n
IHRoZSBtZXNzYWdlIEFQSXMuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVz
dF9ld2syX2NvbnRleHQuY3BwOiBEaXR0by4KKyAgICAgICAgKEVXSzJDb250ZXh0VGVzdFdpdGhF
eHRlbnNpb246Om1lc3NhZ2VSZWNlaXZlZENhbGxiYWNrKToKKyAgICAgICAgKEVXSzJDb250ZXh0
VGVzdFdpdGhFeHRlbnNpb246OkVXSzJDb250ZXh0VGVzdFdpdGhFeHRlbnNpb24pOgorICAgICAg
ICAoVEVTVF9GKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwv
ZXdrX2V4dGVuc2lvbi5jcHA6CisgICAgICAgICh0b0V3a0V4dGVuZGlvbik6CisgICAgICAgIChF
d2tFeHRlbnNpb246OkV3a0V4dGVuc2lvbik6CisgICAgICAgIChFd2tFeHRlbnNpb246OmRpZENy
ZWF0ZVBhZ2UpOgorICAgICAgICAoRXdrRXh0ZW5zaW9uOjp3aWxsRGVzdHJveVBhZ2UpOgorICAg
ICAgICAoRXdrRXh0ZW5zaW9uOjpkaWRSZWNlaXZlTWVzc2FnZSk6CisgICAgICAgIChFd2tFeHRl
bnNpb246OmRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlKToKKyAgICAgICAgKGV3a19leHRlbnNpb25f
bWVzc2FnZV9wb3N0KTogSW1wbGVtZW50ZWQgdG8gcG9zdCBtZXNzYWdlIHRvIGV3a19jb250ZXh0
LgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2VmbC9ld2tfZXh0ZW5z
aW9uLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19l
eHRlbnNpb25fcHJpdmF0ZS5oOgorICAgICAgICAoRXdrRXh0ZW5zaW9uOjpidW5kbGUpOgorICAg
ICAgICAqIFdlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwOgorICAgICAgICAo
V2ViS2l0OjpFeHRlbnNpb25NYW5hZ2VyRWZsOjppbml0aWFsaXplKToKKyAgICAgICAgRml4ZWQg
dGhlIGJ1ZyB3aGVuIHRoZXJlIGFyZSBkaWZmZXJlbnQgc2hhcmVkIG9iamVjdHMgaW4gZXh0ZW5z
aW9uIHBhdGguCisgICAgICAgIFRoaXMgaXMgc3BvdHRlZCB3aGlsZSBpbXByb3ZpbmcgdGVzdCBj
YXNlLgorCiAyMDE1LTAyLTIzICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29t
PgogCiAgICAgICAgIFtpT1MgV0syXSBUaGUgV2ViUHJvY2VzcyBrZWVwIHNjcm9sbGluZyBwYWdl
cyBiYXNlZCBvbiB0aGUgbGFzdCB2ZWxvY2l0eSBhZnRlciBzY3JvbGxpbmcgaGFzIGJlZW4gaW50
ZXJydXB0ZWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL1BsYXRmb3JtRWZsLmNtYWtlIGIv
U291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKaW5kZXggNTYwZTRkYjcxYjBlMWVlNzY1
NjExOWVkMmU5ZTAxNmJkYWRkOGQzNy4uMzgyOTBlMDg2MzIzMGJmMWRlYjAyZGI4ZTY3NWI4NGRi
M2U1NDQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKKysr
IGIvU291cmNlL1dlYktpdDIvUGxhdGZvcm1FZmwuY21ha2UKQEAgLTUzNyw2ICs1MzcsNyBAQCBp
ZiAoRU5BQkxFX0FQSV9URVNUUykKICAgICBlbmRmb3JlYWNoICgpCiAKICAgICBhZGRfbGlicmFy
eShld2syVW5pdFRlc3RFeHRlbnNpb25TYW1wbGUgU0hBUkVEICR7VEVTVF9FWFRFTlNJT05TX0RJ
Un0vZXh0ZW5zaW9uX3NhbXBsZS5jcHApCisgICAgdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGV3azJV
bml0VGVzdEV4dGVuc2lvblNhbXBsZSAke0VJTkFfTElCUkFSSUVTfSBXZWJLaXQyKQogZW5kaWYg
KCkKIAogaWYgKEVOQUJMRV9TUEVMTENIRUNLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIv
VUlQcm9jZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwIGIvU291cmNlL1dlYktpdDIvVUlQcm9j
ZXNzL0FQSS9lZmwvZXdrX2NvbnRleHQuY3BwCmluZGV4IDk1MmIzM2ViYzQ3OTU4MTg5ZGEzY2Jk
NWQ1OTNmYTIyM2QyYjFhM2YuLmFhYWNjYTcxMjA5OWRlNmJmOTUzMzJjNzFiNzdkMmI3YTFmMGRl
MjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4
dC5jcHAKQEAgLTk2LDggKzk2LDggQEAgRXdrQ29udGV4dDo6RXdrQ29udGV4dChXS0NvbnRleHRS
ZWYgY29udGV4dCwgY29uc3QgU3RyaW5nJiBleHRlbnNpb25zUGF0aCkKICAgICBUZXh0Q2hlY2tl
ckNsaWVudEVmbDo6aW5zdGFuY2UoKS5lbnN1cmVTcGVsbENoZWNraW5nTGFuZ3VhZ2UoKTsKICNl
bmRpZgogCi0gICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJh
Y2sgPSBudWxscHRyOwotICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxl
LnVzZXJEYXRhID0gbnVsbHB0cjsKKyAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNp
b24uY2FsbGJhY2sgPSBudWxscHRyOworICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUV4dGVu
c2lvbi51c2VyRGF0YSA9IG51bGxwdHI7CiAKICAgICBpZiAoIWV4dGVuc2lvbnNQYXRoLmlzRW1w
dHkoKSkgewogICAgICAgICBXS0NvbnRleHRJbmplY3RlZEJ1bmRsZUNsaWVudFYxIGNsaWVudDsK
QEAgLTEwNiw3ICsxMDYsNiBAQCBFd2tDb250ZXh0OjpFd2tDb250ZXh0KFdLQ29udGV4dFJlZiBj
b250ZXh0LCBjb25zdCBTdHJpbmcmIGV4dGVuc2lvbnNQYXRoKQogICAgICAgICBjbGllbnQuYmFz
ZS52ZXJzaW9uID0gMTsKICAgICAgICAgY2xpZW50LmJhc2UuY2xpZW50SW5mbyA9IHRoaXM7CiAg
ICAgICAgIGNsaWVudC5kaWRSZWNlaXZlTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSA9IGRpZFJl
Y2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlOwotICAgICAgICBjbGllbnQuZGlkUmVjZWl2
ZVN5bmNocm9ub3VzTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSA9IGRpZFJlY2VpdmVTeW5jaHJv
bm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGU7CiAgICAgICAgIGNsaWVudC5nZXRJbmplY3Rl
ZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEgPSBnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxp
emF0aW9uVXNlckRhdGE7CiAKICAgICAgICAgV0tDb250ZXh0U2V0SW5qZWN0ZWRCdW5kbGVDbGll
bnQobV9jb250ZXh0LmdldCgpLCAmY2xpZW50LmJhc2UpOwpAQCAtMzg2LDEyICszODUsNyBAQCBz
dGF0aWMgaW5saW5lIEV3a0NvbnRleHQqIHRvRXdrQ29udGV4dChjb25zdCB2b2lkKiBjbGllbnRJ
bmZvKQogCiB2b2lkIEV3a0NvbnRleHQ6OmRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlKFdLQ29udGV4dFJlZiwgV0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNz
YWdlQm9keSwgY29uc3Qgdm9pZCogY2xpZW50SW5mbykKIHsKLSAgICB0b0V3a0NvbnRleHQoY2xp
ZW50SW5mbyktPnByb2Nlc3NSZWNlaXZlZE1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUobWVzc2Fn
ZU5hbWUsIG1lc3NhZ2VCb2R5LCBudWxscHRyKTsKLX0KLQotdm9pZCBFd2tDb250ZXh0OjpkaWRS
ZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlKFdLQ29udGV4dFJlZiwg
V0tTdHJpbmdSZWYgbWVzc2FnZU5hbWUsIFdLVHlwZVJlZiBtZXNzYWdlQm9keSwgV0tUeXBlUmVm
KiByZXR1cm5EYXRhLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQotewotICAgIHRvRXdrQ29udGV4
dChjbGllbnRJbmZvKS0+cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZSht
ZXNzYWdlTmFtZSwgbWVzc2FnZUJvZHksIHJldHVybkRhdGEpOworICAgIHRvRXdrQ29udGV4dChj
bGllbnRJbmZvKS0+cHJvY2Vzc1JlY2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShtZXNz
YWdlTmFtZSwgbWVzc2FnZUJvZHkpOwogfQogCiBXS1R5cGVSZWYgRXdrQ29udGV4dDo6Z2V0SW5q
ZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVzZXJEYXRhKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9p
ZCogY2xpZW50SW5mbykKQEAgLTM5OSwzNiArMzkzLDMzIEBAIFdLVHlwZVJlZiBFd2tDb250ZXh0
OjpnZXRJbmplY3RlZEJ1bmRsZUluaXRpYWxpemF0aW9uVXNlckRhdGEoV0tDb250ZXh0UmVmLCBj
b25zCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdLVHlwZVJlZj4odG9Db3BpZWRBUEkodG9Fd2tD
b250ZXh0KGNsaWVudEluZm8pLT5leHRlbnNpb25zUGF0aCgpKSk7CiB9CiAKLXZvaWQgRXdrQ29u
dGV4dDo6c2V0TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZUNhbGxiYWNrKEV3a19Db250ZXh0X01l
c3NhZ2VfRnJvbV9JbmplY3RlZF9CdW5kbGVfQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQor
dm9pZCBFd2tDb250ZXh0OjpzZXRNZXNzYWdlRnJvbUV4dGVuc2lvbkNhbGxiYWNrKEV3a19Db250
ZXh0X01lc3NhZ2VfRnJvbV9FeHRlbnNpb25fQ2IgY2FsbGJhY2ssIHZvaWQqIHVzZXJEYXRhKQog
ewotICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLnVzZXJEYXRhID0g
dXNlckRhdGE7CisgICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tRXh0ZW5zaW9uLnVzZXJEYXRh
ID0gdXNlckRhdGE7CiAKLSAgICBpZiAobV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUuY2FsbGJhY2sgPT0gY2FsbGJhY2spCisgICAgaWYgKG1fY2FsbGJhY2tGb3JNZXNzYWdl
RnJvbUV4dGVuc2lvbi5jYWxsYmFjayA9PSBjYWxsYmFjaykKICAgICAgICAgcmV0dXJuOwogCi0g
ICAgbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2sgPSBjYWxs
YmFjazsKKyAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21FeHRlbnNpb24uY2FsbGJhY2sgPSBj
YWxsYmFjazsKIH0KIAotdm9pZCBFd2tDb250ZXh0Ojpwcm9jZXNzUmVjZWl2ZWRNZXNzYWdlRnJv
bUluamVjdGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2Fn
ZUJvZHksIFdLVHlwZVJlZiogcmV0dXJuRGF0YSkKK3ZvaWQgRXdrQ29udGV4dDo6cHJvY2Vzc1Jl
Y2VpdmVkTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwg
V0tUeXBlUmVmIG1lc3NhZ2VCb2R5KQogewotICAgIGlmICghbV9jYWxsYmFja0Zvck1lc3NhZ2VG
cm9tSW5qZWN0ZWRCdW5kbGUuY2FsbGJhY2spCisgICAgaWYgKCFtX2NhbGxiYWNrRm9yTWVzc2Fn
ZUZyb21FeHRlbnNpb24uY2FsbGJhY2spCiAgICAgICAgIHJldHVybjsKIAogICAgIENTdHJpbmcg
bmFtZSA9IHRvSW1wbChtZXNzYWdlTmFtZSktPnN0cmluZygpLnV0ZjgoKTsKLSAgICBDU3RyaW5n
IGJvZHk7Ci0gICAgaWYgKG1lc3NhZ2VCb2R5ICYmIFdLU3RyaW5nR2V0VHlwZUlEKCkgPT0gV0tH
ZXRUeXBlSUQobWVzc2FnZUJvZHkpKQotICAgICAgICBib2R5ID0gdG9JbXBsKHN0YXRpY19jYXN0
PFdLU3RyaW5nUmVmPihtZXNzYWdlQm9keSkpLT5zdHJpbmcoKS51dGY4KCk7Ci0KLSAgICBpZiAo
cmV0dXJuRGF0YSkgewotICAgICAgICBjaGFyKiByZXR1cm5TdHJpbmcgPSBudWxscHRyOwotICAg
ICAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZS5jYWxsYmFjayhuYW1l
LmRhdGEoKSwgYm9keS5kYXRhKCksICZyZXR1cm5TdHJpbmcsIG1fY2FsbGJhY2tGb3JNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlLnVzZXJEYXRhKTsKLSAgICAgICAgaWYgKHJldHVyblN0cmluZykg
ewotICAgICAgICAgICAgKnJldHVybkRhdGEgPSBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmlu
ZyhyZXR1cm5TdHJpbmcpOwotICAgICAgICAgICAgZnJlZShyZXR1cm5TdHJpbmcpOwotICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICpyZXR1cm5EYXRhID0gV0tTdHJpbmdDcmVhdGVXaXRoVVRG
OENTdHJpbmcoIiIpOwotICAgIH0gZWxzZQotICAgICAgICBtX2NhbGxiYWNrRm9yTWVzc2FnZUZy
b21JbmplY3RlZEJ1bmRsZS5jYWxsYmFjayhuYW1lLmRhdGEoKSwgYm9keS5kYXRhKCksIG51bGxw
dHIsIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlLnVzZXJEYXRhKTsKKyAg
ICBFaW5hX1ZhbHVlKiB2YWx1ZSA9IG51bGxwdHI7CisgICAgaWYgKG1lc3NhZ2VCb2R5ICYmIFdL
U3RyaW5nR2V0VHlwZUlEKCkgPT0gV0tHZXRUeXBlSUQobWVzc2FnZUJvZHkpKSB7CisgICAgICAg
IHZhbHVlID0gZWluYV92YWx1ZV9uZXcoRUlOQV9WQUxVRV9UWVBFX1NUUklORyk7CisgICAgICAg
IENTdHJpbmcgYm9keSA9IHRvSW1wbChzdGF0aWNfY2FzdDxXS1N0cmluZ1JlZj4obWVzc2FnZUJv
ZHkpKS0+c3RyaW5nKCkudXRmOCgpOworICAgICAgICBlaW5hX3ZhbHVlX3NldCh2YWx1ZSwgYm9k
eS5kYXRhKCkpOworICAgIH0KKworICAgIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUV4dGVuc2lv
bi5jYWxsYmFjayhuYW1lLmRhdGEoKSwgdmFsdWUsIG1fY2FsbGJhY2tGb3JNZXNzYWdlRnJvbUV4
dGVuc2lvbi51c2VyRGF0YSk7CisKKyAgICBpZiAodmFsdWUpCisgICAgICAgIGVpbmFfdmFsdWVf
ZnJlZSh2YWx1ZSk7CiB9CiAKIEV3a19UTFNfRXJyb3JfUG9saWN5IEV3a0NvbnRleHQ6Omlnbm9y
ZVRMU0Vycm9ycygpIGNvbnN0CkBAIC01NDMsMjIgKzUzNCwzMSBAQCB2b2lkIGV3a19jb250ZXh0
X3Jlc291cmNlX2NhY2hlX2NsZWFyKEV3a19Db250ZXh0KiBld2tDb250ZXh0KQogICAgIGltcGwt
PmNsZWFyUmVzb3VyY2VDYWNoZSgpOwogfQogCi12b2lkIGV3a19jb250ZXh0X21lc3NhZ2VfcG9z
dF90b19pbmplY3RlZF9idW5kbGUoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIGNvbnN0IGNoYXIq
IG5hbWUsIGNvbnN0IGNoYXIqIGJvZHkpCitFaW5hX0Jvb2wgZXdrX2NvbnRleHRfbWVzc2FnZV9w
b3N0X3RvX2V4dGVuc2lvbnMoRXdrX0NvbnRleHQqIGV3a0NvbnRleHQsIGNvbnN0IGNoYXIqIG5h
bWUsIGNvbnN0IEVpbmFfVmFsdWUqIGJvZHkpCiB7Ci0gICAgRVdLX09CSl9HRVRfSU1QTF9PUl9S
RVRVUk4oRXdrQ29udGV4dCwgZXdrQ29udGV4dCwgaW1wbCk7Ci0gICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk4obmFtZSk7Ci0gICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk4oYm9keSk7
CisgICAgRVdLX09CSl9HRVRfSU1QTF9PUl9SRVRVUk4oRXdrQ29udGV4dCwgZXdrQ29udGV4dCwg
aW1wbCwgZmFsc2UpOworICAgIEVJTkFfU0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChuYW1lLCBm
YWxzZSk7CisgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKGJvZHksIGZhbHNlKTsK
KworICAgIGNvbnN0IEVpbmFfVmFsdWVfVHlwZSogdHlwZSA9IGVpbmFfdmFsdWVfdHlwZV9nZXQo
Ym9keSk7CisgICAgaWYgKHR5cGUgIT0gRUlOQV9WQUxVRV9UWVBFX1NUUklOR1NIQVJFICYmIHR5
cGUgIT0gRUlOQV9WQUxVRV9UWVBFX1NUUklORykKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCisg
ICAgY29uc3QgY2hhciogdmFsdWU7CisgICAgZWluYV92YWx1ZV9nZXQoYm9keSwgJnZhbHVlKTsK
KworICAgIFdLUmV0YWluUHRyPFdLVHlwZVJlZj4gbWVzc2FnZUJvZHkgPSBhZG9wdFdLKFdLU3Ry
aW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKHZhbHVlKSk7CiAgICAgV0tSZXRhaW5QdHI8V0tTdHJp
bmdSZWY+IG1lc3NhZ2VOYW1lKEFkb3B0V0ssIFdLU3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5n
KG5hbWUpKTsKLSAgICBXS1JldGFpblB0cjxXS1N0cmluZ1JlZj4gbWVzc2FnZUJvZHkoQWRvcHRX
SywgV0tTdHJpbmdDcmVhdGVXaXRoVVRGOENTdHJpbmcoYm9keSkpOwogICAgIFdLQ29udGV4dFBv
c3RNZXNzYWdlVG9JbmplY3RlZEJ1bmRsZShpbXBsLT53a0NvbnRleHQoKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOwogfQogCi12b2lk
IGV3a19jb250ZXh0X21lc3NhZ2VfZnJvbV9pbmplY3RlZF9idW5kbGVfY2FsbGJhY2tfc2V0KEV3
a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fSW5qZWN0ZWRf
QnVuZGxlX0NiIGNhbGxiYWNrLCB2b2lkKiB1c2VyRGF0YSkKK3ZvaWQgZXdrX2NvbnRleHRfbWVz
c2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0
LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNhbGxiYWNrLCB2b2lkKiB1
c2VyRGF0YSkKIHsKICAgICBFV0tfT0JKX0dFVF9JTVBMX09SX1JFVFVSTihFd2tDb250ZXh0LCBl
d2tDb250ZXh0LCBpbXBsKTsKIAotICAgIGltcGwtPnNldE1lc3NhZ2VGcm9tSW5qZWN0ZWRCdW5k
bGVDYWxsYmFjayhjYWxsYmFjaywgdXNlckRhdGEpOworICAgIGltcGwtPnNldE1lc3NhZ2VGcm9t
RXh0ZW5zaW9uQ2FsbGJhY2soY2FsbGJhY2ssIHVzZXJEYXRhKTsKIH0KIAogRWluYV9Cb29sIGV3
a19jb250ZXh0X3Byb2Nlc3NfbW9kZWxfc2V0KEV3a19Db250ZXh0KiBld2tDb250ZXh0LCBFd2tf
UHJvY2Vzc19Nb2RlbCBwcm9jZXNzTW9kZWwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9V
SVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNz
L0FQSS9lZmwvZXdrX2NvbnRleHQuaAppbmRleCA4YzM4YjdkNzZiNjY0N2ZhMjZhY2NjMjkyMzIy
MjYzMjVkNTMwYjRjLi5lYzU2NTQyMTYyZjg3M2VmNGZlYjk5NDA3NjYwNzY4NmUzMWU2Zjc1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29udGV4dC5o
CisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0LmgKQEAg
LTEzOSwxNyArMTM5LDE2IEBAIHR5cGVkZWYgdm9pZCAoKkV3a19IaXN0b3J5X1RpdGxlX1VwZGF0
ZV9DYikoY29uc3QgRXZhc19PYmplY3QgKnZpZXcsIGNvbnN0IGNoYXIKIHR5cGVkZWYgdm9pZCAo
KkV3a19IaXN0b3J5X1BvcHVsYXRlX1Zpc2l0ZWRfTGlua3NfQ2IpKHZvaWQgKnVzZXJfZGF0YSk7
CiAKIC8qKgotICogQ2FsbGJhY2sgZm9yIGRpZFJlY2VpdmVNZXNzYWdlRnJvbUluamVjdGVkQnVu
ZGxlIGFuZCBkaWRSZWNlaXZlU3luY2hyb25vdXNNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlCisg
KiBDYWxsYmFjayB0byByZWNlaXZlIG1lc3NhZ2UgZnJvbSBleHRlbnNpb24uCiAgKgotICogVXNl
ciBzaG91bGQgYWxsb2NhdGUgbmV3IHN0cmluZyBmb3IgcmV0dXJuX2RhdGEgYmVmb3JlIHNldHRp
bmcgaXQuCi0gKiBUaGUgcmV0dXJuX2RhdGEgc3RyaW5nIHdpbGwgYmUgZnJlZWQgb24gV2ViS2l0
IHNpZGUuCisgKiBAcGFyYW0gbmFtZSBuYW1lIG9mIG1lc3NhZ2UgZnJvbSBleHRlbnNpb24KKyAq
IEBwYXJhbSBib2R5IGJvZHkgb2YgbWVzc2FnZSBmcm9tIGV4dGVuZGlvbgorICogQHBhcmFtIHVz
ZXJfZGF0YSB1c2VyX2RhdGEgd2lsbCBiZSBwYXNzc2VkIHdoZW4gcmVjZWl2aW5nIG1lc3NhZ2Ug
ZnJvbSBleHRlbnNpb24KICAqCi0gKiBAcGFyYW0gbmFtZSBuYW1lIG9mIG1lc3NhZ2UgZnJvbSBp
bmplY3RlZCBidW5kbGUKLSAqIEBwYXJhbSBib2R5IGJvZHkgb2YgbWVzc2FnZSBmcm9tIGluamVj
dGVkIGJ1bmRsZQotICogQHBhcmFtIHJldHVybl9kYXRhIHJldHVybl9kYXRhIHN0cmluZyBmcm9t
IGFwcGxpY2F0aW9uCi0gKiBAcGFyYW0gdXNlcl9kYXRhIHVzZXJfZGF0YSB3aWxsIGJlIHBhc3Nz
ZWQgd2hlbiByZWNlaXZpbmcgbWVzc2FnZSBmcm9tIGluamVjdGVkIGJ1bmRsZQorICogQHNlZSBl
d2tfY29udGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQKKyAqIEBzZWUg
ZXdrX2V4dGVuc2lvbl9tZXNzYWdlX3Bvc3QKICAqLwotdHlwZWRlZiB2b2lkICgqRXdrX0NvbnRl
eHRfTWVzc2FnZV9Gcm9tX0luamVjdGVkX0J1bmRsZV9DYikoY29uc3QgY2hhciAqbmFtZSwgY29u
c3QgY2hhciAqYm9keSwgY2hhciAqKnJldHVybl9kYXRhLCB2b2lkICp1c2VyX2RhdGEpOwordHlw
ZWRlZiB2b2lkICgqRXdrX0NvbnRleHRfTWVzc2FnZV9Gcm9tX0V4dGVuc2lvbl9DYikoY29uc3Qg
Y2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSwgdm9pZCAqdXNlcl9kYXRhKTsKIAog
LyoqCiAgKiBHZXRzIGRlZmF1bHQgRXdrX0NvbnRleHQgaW5zdGFuY2UuCkBAIC0zNjgsMTYgKzM2
NywyMiBAQCBFQVBJIEVpbmFfQm9vbCBld2tfY29udGV4dF9hZGRpdGlvbmFsX3BsdWdpbl9wYXRo
X3NldChFd2tfQ29udGV4dCAqY29udGV4dCwgY29ucwogRUFQSSB2b2lkIGV3a19jb250ZXh0X3Jl
c291cmNlX2NhY2hlX2NsZWFyKEV3a19Db250ZXh0ICpjb250ZXh0KTsKIAogLyoqCi0gKiBQb3N0
cyBtZXNzYWdlIHRvIGluamVjdGVkIGJ1bmRsZS4KKyAqIFBvc3RzIG1lc3NhZ2UgdG8gZXh0ZW5z
aW9ucyBhc3luY2hyb25vdXNseS4KICAqCi0gKiBAcGFyYW0gY29udGV4dCBjb250ZXh0IG9iamVj
dCB0byBwb3N0IG1lc3NhZ2UgdG8gaW5qZWN0ZWQgYnVuZGxlCisgKiBAbm90ZSBib2R5IG9ubHkg
c3VwcG9ydHMgQGMgRUlOQV9WQUxVRV9UWVBFX1NUUklOR1NIQVJFIG9yIEBjIEVJTkFfVkFMVUVf
VFlQRV9TVFJJTkcsCisgKiBub3cuCisgKgorICogQHBhcmFtIGNvbnRleHQgY29udGV4dCBvYmpl
Y3QgdG8gcG9zdCBtZXNzYWdlIHRvIGV4dGVuc2lvbnMKICAqIEBwYXJhbSBuYW1lIG1lc3NhZ2Ug
bmFtZQogICogQHBhcmFtIGJvZHkgbWVzc2FnZSBib2R5CisgKgorICogQHJldHVybiBAYyBFSU5B
X1RSVUUgb24gc3VjY2VzcyBvZiBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgb3Igd2hlbiB0aGUg
dHlwZQorICogb2YgQHAgYm9keSBpcyBub3Qgc3VwcG9ydGVkLgogICovCi1FQVBJIHZvaWQgZXdr
X2NvbnRleHRfbWVzc2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZShFd2tfQ29udGV4dCAqY29u
dGV4dCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYm9keSk7CitFQVBJIEVpbmFfQm9v
bCBld2tfY29udGV4dF9tZXNzYWdlX3Bvc3RfdG9fZXh0ZW5zaW9ucyhFd2tfQ29udGV4dCAqY29u
dGV4dCwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSk7CiAKIC8qKgot
ICogU2V0cyBjYWxsYmFjayBmb3IgcmVjZWl2ZWQgaW5qZWN0ZWQgYnVuZGxlIG1lc3NhZ2UuCisg
KiBTZXRzIGNhbGxiYWNrIGZvciByZWNlaXZlZCBleHRlbnNpb24gbWVzc2FnZS4KICAqCiAgKiBD
bGllbnQgY2FuIHBhc3MgQGMgTlVMTCBmb3IgY2FsbGJhY2sgdG8gc3RvcCBsaXN0ZW5pbmcgZm9y
IG1lc3NhZ2VzLgogICoKQEAgLTM4NSw3ICszOTAsNyBAQCBFQVBJIHZvaWQgZXdrX2NvbnRleHRf
bWVzc2FnZV9wb3N0X3RvX2luamVjdGVkX2J1bmRsZShFd2tfQ29udGV4dCAqY29udGV4dCwgY29u
cwogICogQHBhcmFtIGNhbGxiYWNrIGNhbGxiYWNrIGZvciByZWNlaXZlZCBpbmplY3RlZCBidW5k
bGUgbWVzc2FnZSBvciBAYyBOVUxMCiAgKiBAcGFyYW0gdXNlcl9kYXRhIHVzZXIgZGF0YQogICov
Ci1FQVBJIHZvaWQgZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2luamVjdGVkX2J1bmRsZV9jYWxs
YmFja19zZXQoRXdrX0NvbnRleHQgKmNvbnRleHQsIEV3a19Db250ZXh0X01lc3NhZ2VfRnJvbV9J
bmplY3RlZF9CdW5kbGVfQ2IgY2FsbGJhY2ssIHZvaWQgKnVzZXJfZGF0YSk7CitFQVBJIHZvaWQg
ZXdrX2NvbnRleHRfbWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0KEV3a19Db250
ZXh0ICpjb250ZXh0LCBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNhbGxi
YWNrLCB2b2lkICp1c2VyX2RhdGEpOwogCiAvKioKICAqIFNldHMgYSBwcm9jZXNzIG1vZGVsIGZv
ciBAYSBjb250ZXh0LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvZXdrX2NvbnRleHRfcHJpdmF0ZS5oCmluZGV4IDRmZDcwNTNiZjY1NGFhN2E1M2Y5MmI5Yzkz
NjRhM2RmNjNiOTA2YzIuLjM1M2ZkMGY4MDNiYzgxZTAzNjlmMmMwMTFjOGU5NGMyYTM1MjJmNGMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL2V3a19jb250ZXh0
X3ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC9ld2tfY29u
dGV4dF9wcml2YXRlLmgKQEAgLTk5LDEwICs5OSw5IEBAIHB1YmxpYzoKICAgICBKU0dsb2JhbENv
bnRleHRSZWYganNHbG9iYWxDb250ZXh0KCk7CiAKICAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS0NvbnRleHRSZWYsIFdLU3RyaW5nUmVmIG1lc3Nh
Z2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHksIGNvbnN0IHZvaWQqIGNsaWVudEluZm8pOwot
ICAgIHN0YXRpYyB2b2lkIGRpZFJlY2VpdmVTeW5jaHJvbm91c01lc3NhZ2VGcm9tSW5qZWN0ZWRC
dW5kbGUoV0tDb250ZXh0UmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVmIG1l
c3NhZ2VCb2R5LCBXS1R5cGVSZWYqIHJldHVybkRhdGEsIGNvbnN0IHZvaWQqIGNsaWVudEluZm8p
OwogICAgIHN0YXRpYyBXS1R5cGVSZWYgZ2V0SW5qZWN0ZWRCdW5kbGVJbml0aWFsaXphdGlvblVz
ZXJEYXRhKFdLQ29udGV4dFJlZiwgY29uc3Qgdm9pZCogY2xpZW50SW5mbyk7Ci0gICAgdm9pZCBz
ZXRNZXNzYWdlRnJvbUluamVjdGVkQnVuZGxlQ2FsbGJhY2soRXdrX0NvbnRleHRfTWVzc2FnZV9G
cm9tX0luamVjdGVkX0J1bmRsZV9DYiwgdm9pZCopOwotICAgIHZvaWQgcHJvY2Vzc1JlY2VpdmVk
TWVzc2FnZUZyb21JbmplY3RlZEJ1bmRsZShXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBl
UmVmIG1lc3NhZ2VCb2R5LCBXS1R5cGVSZWYqIHJldHVybkRhdGEpOworICAgIHZvaWQgc2V0TWVz
c2FnZUZyb21FeHRlbnNpb25DYWxsYmFjayhFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5z
aW9uX0NiLCB2b2lkKik7CisgICAgdm9pZCBwcm9jZXNzUmVjZWl2ZWRNZXNzYWdlRnJvbUluamVj
dGVkQnVuZGxlKFdLU3RyaW5nUmVmIG1lc3NhZ2VOYW1lLCBXS1R5cGVSZWYgbWVzc2FnZUJvZHkp
OwogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IEV3a0NvbnRleHQoV0tDb250ZXh0UmVmLCBjb25z
dCBTdHJpbmcmIGV4dGVuc2lvbnNQYXRoID0gU3RyaW5nKCkpOwpAQCAtMTI5LDkgKzEyOCw5IEBA
IHByaXZhdGU6CiAgICAgU3RyaW5nIG1fZXh0ZW5zaW9uc1BhdGg7CiAKICAgICBzdHJ1Y3Qgewot
ICAgICAgICBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fSW5qZWN0ZWRfQnVuZGxlX0NiIGNhbGxi
YWNrOworICAgICAgICBFd2tfQ29udGV4dF9NZXNzYWdlX0Zyb21fRXh0ZW5zaW9uX0NiIGNhbGxi
YWNrOwogICAgICAgICB2b2lkKiB1c2VyRGF0YTsKLSAgICB9IG1fY2FsbGJhY2tGb3JNZXNzYWdl
RnJvbUluamVjdGVkQnVuZGxlOworICAgIH0gbV9jYWxsYmFja0Zvck1lc3NhZ2VGcm9tRXh0ZW5z
aW9uOwogfTsKIAogI2VuZGlmIC8vIGV3a19jb250ZXh0X3ByaXZhdGVfaApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0sy
VW5pdFRlc3RCYXNlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3Rz
L1VuaXRUZXN0VXRpbHMvRVdLMlVuaXRUZXN0QmFzZS5jcHAKaW5kZXggMTVmMzZhMDExYThmZDY4
ZTc3MTMxMmVkNTlkZTRkZDRmNTI5YTQ2My4uNDMxNmM2YTc3ZmVhM2VhNWY4NmFiZDJhZDY3NTA4
NTAzMzZmZGM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEJh
c2UuY3BwCkBAIC0zOSw2ICszOSw3IEBAIEVXSzJVbml0VGVzdEJhc2U6OkVXSzJVbml0VGVzdEJh
c2UoKQogICAgICwgbV93ZWJWaWV3KDApCiAgICAgLCBtX2V3a1ZpZXdDbGFzcyhld2syVW5pdFRl
c3RCcm93c2VyVmlld1NtYXJ0Q2xhc3MoKSkKICAgICAsIG1fbXVsdGlwbGVQcm9jZXNzZXMoZmFs
c2UpCisgICAgLCBtX3dpdGhFeHRlbnNpb24oZmFsc2UpCiB7CiAgICAgZXdrX3ZpZXdfc21hcnRf
Y2xhc3Nfc2V0KCZtX2V3a1ZpZXdDbGFzcyk7CiB9CkBAIC02MSw3ICs2MiwxMiBAQCB2b2lkIEVX
SzJVbml0VGVzdEJhc2U6OlNldFVwKCkKIAogICAgIEV2YXNfU21hcnQqIHNtYXJ0ID0gZXZhc19z
bWFydF9jbGFzc19uZXcoJm1fZXdrVmlld0NsYXNzLnNjKTsKIAotICAgIEV3a19Db250ZXh0KiBu
ZXdDb250ZXh0ID0gZXdrX2NvbnRleHRfbmV3KCk7CisgICAgRXdrX0NvbnRleHQqIG5ld0NvbnRl
eHQ7CisgICAgaWYgKG1fd2l0aEV4dGVuc2lvbikKKyAgICAgICAgbmV3Q29udGV4dCA9IGV3a19j
b250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNfcGF0aChURVNUX0xJQl9ESVIpOworICAgIGVsc2UK
KyAgICAgICAgbmV3Q29udGV4dCA9IGV3a19jb250ZXh0X25ldygpOworCiAgICAgaWYgKG1fbXVs
dGlwbGVQcm9jZXNzZXMpCiAgICAgICAgIGV3a19jb250ZXh0X3Byb2Nlc3NfbW9kZWxfc2V0KG5l
d0NvbnRleHQsIEVXS19QUk9DRVNTX01PREVMX01VTFRJUExFX1NFQ09OREFSWSk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRp
bHMvRVdLMlVuaXRUZXN0QmFzZS5oIGIvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwv
dGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmgKaW5kZXggZmI1YzlmNWNmMTYz
Zjg5YzkwMjVjN2ZjNGFjNDkzYmI5NzZkNWE1MS4uMjMzN2RmYTc3NmUwNzcxM2E2M2M0ZTM0ZTMx
MzljYzFhYjgyMzI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9l
ZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RCYXNlLmgKKysrIGIvU291cmNlL1dl
YktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RC
YXNlLmgKQEAgLTQ2LDYgKzQ2LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RhdGljIGNvbnN0ZXhw
ciBkb3VibGUgZGVmYXVsdFRpbWVvdXRTZWNvbmRzID0gMTAuMDsKICAgICBib29sIG1fbXVsdGlw
bGVQcm9jZXNzZXM7CisgICAgYm9vbCBtX3dpdGhFeHRlbnNpb247CiAKICAgICBib29sIGxvYWRV
cmxTeW5jKGNvbnN0IGNoYXIqIHVybCwgZG91YmxlIHRpbWVvdXRTZWNvbmRzID0gZGVmYXVsdFRp
bWVvdXRTZWNvbmRzKTsKICAgICBib29sIHdhaXRVbnRpbExvYWRGaW5pc2hlZChkb3VibGUgdGlt
ZW91dFNlY29uZHMgPSBkZWZhdWx0VGltZW91dFNlY29uZHMpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRl
c3RFbnZpcm9ubWVudC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcAppbmRleCA5ZWFkZjg2
YjRlNGE2ZWRmMGY3OGVmMjIwYzFhMTcxNGU4ZjViMjYxLi5iMDJkNmM3ZmI3Mjc5ZTIzNmFlNzM5
M2MyOTM5M2RiMTA2NTViNTZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3Mv
QVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxz
L0VXSzJVbml0VGVzdEVudmlyb25tZW50LmNwcApAQCAtNDMsMTEgKzQzLDYgQEAgY29uc3QgY2hh
ciogRVdLMlVuaXRUZXN0RW52aXJvbm1lbnQ6OmRlZmF1bHRUaGVtZSgpIGNvbnN0CiAgICAgcmV0
dXJuIERFRkFVTFRfVEhFTUVfRElSICIvZGVmYXVsdC5lZGoiOwogfQogCi1jb25zdCBjaGFyKiBF
V0syVW5pdFRlc3RFbnZpcm9ubWVudDo6ZXh0ZW5zaW9uU2FtcGxlKCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gVEVTVF9MSUJfRElSICIvbGliZXdrMlVuaXRUZXN0RXh0ZW5zaW9uU2FtcGxlLnNvIjsK
LX0KLQogQ1N0cmluZyBFV0syVW5pdFRlc3RFbnZpcm9ubWVudDo6dXJsRm9yUmVzb3VyY2UoY29u
c3QgY2hhciogcmVzb3VyY2UpCiB7CiAgICAgcmV0dXJuIG1ha2VTdHJpbmcoImZpbGU6Ly8iIFRF
U1RfUkVTT1VSQ0VTX0RJUiAiLyIsIHJlc291cmNlKS51dGY4KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0
VGVzdEVudmlyb25tZW50LmggYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0
cy9Vbml0VGVzdFV0aWxzL0VXSzJVbml0VGVzdEVudmlyb25tZW50LmgKaW5kZXggZWI1NWJmOGY5
OTUxZTlhOGFlNTA2Yjc4ZGQ4MmZkMzA5MzNkMGJlNS4uNGRkODkzNWJiNGIyMmU2MjM0Y2E3MTNh
ZmQyZGE2NDE1NmJlZGYwYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQ
SS9lZmwvdGVzdHMvVW5pdFRlc3RVdGlscy9FV0syVW5pdFRlc3RFbnZpcm9ubWVudC5oCisrKyBi
L1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL1VuaXRUZXN0VXRpbHMvRVdL
MlVuaXRUZXN0RW52aXJvbm1lbnQuaApAQCAtMzAsNyArMzAsNiBAQCBwdWJsaWM6CiAKICAgICBj
b25zdCBjaGFyKiBkZWZhdWx0VGVzdFBhZ2VVcmwoKSBjb25zdDsKICAgICBjb25zdCBjaGFyKiBk
ZWZhdWx0VGhlbWUoKSBjb25zdDsKLSAgICBjb25zdCBjaGFyKiBleHRlbnNpb25TYW1wbGUoKSBj
b25zdDsKICAgICBDU3RyaW5nIHVybEZvclJlc291cmNlKGNvbnN0IGNoYXIqIHJlc291cmNlKTsK
ICAgICBDU3RyaW5nIHBhdGhGb3JSZXNvdXJjZShjb25zdCBjaGFyKiByZXNvdXJjZSk7CiAgICAg
Q1N0cmluZyBwYXRoRm9yVGhlbWUoY29uc3QgY2hhciogdGhlbWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvZXh0ZW5zaW9ucy9leHRlbnNpb25f
c2FtcGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL2V4dGVu
c2lvbnMvZXh0ZW5zaW9uX3NhbXBsZS5jcHAKaW5kZXggMmEwM2Q4ZTE4OTIzZTVhNGM0MWJmMzJi
MDAzMTE2ZDA1MDM5NDUwYy4uMjk0MTM0M2VjMmJmYjQwMjdlNDEyNmYyNjM5NGE3ZDJjZTEzZmE5
ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvZXh0
ZW5zaW9ucy9leHRlbnNpb25fc2FtcGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nl
c3MvQVBJL2VmbC90ZXN0cy9leHRlbnNpb25zL2V4dGVuc2lvbl9zYW1wbGUuY3BwCkBAIC0yOSw4
ICsyOSwyMiBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotdm9pZCBld2tfZXh0ZW5zaW9uX2lu
aXQoRXdrX0V4dGVuc2lvbiAqKQorc3RhdGljIHZvaWQgbWVzc2FnZVJlY2VpdmVkKGNvbnN0IGNo
YXIqIG5hbWUsIGNvbnN0IEVpbmFfVmFsdWUqIGJvZHksIHZvaWQqIGRhdGEpCiB7CisgICAgRWlu
YV9WYWx1ZSogdmFsdWUgPSBlaW5hX3ZhbHVlX25ldyhFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HKTsK
KyAgICBlaW5hX3ZhbHVlX3NldCh2YWx1ZSwgIkZyb20gZXh0ZW5zaW9uIik7CisgICAgZXdrX2V4
dGVuc2lvbl9tZXNzYWdlX3Bvc3Qoc3RhdGljX2Nhc3Q8RXdrX0V4dGVuc2lvbio+KGRhdGEpLCAi
cG9uZyIsIHZhbHVlKTsKKyAgICBlaW5hX3ZhbHVlX2ZyZWUodmFsdWUpOworfQorCit2b2lkIGV3
a19leHRlbnNpb25faW5pdChFd2tfRXh0ZW5zaW9uKiBleHRlbnNpb24pCit7CisgICAgc3RhdGlj
IEV3a0V4dGVuc2lvbkNsaWVudCBjbGllbnQ7CisgICAgY2xpZW50LnZlcnNpb24gPSAxOworICAg
IGNsaWVudC5kYXRhID0gKHZvaWQgKilleHRlbnNpb247CisgICAgY2xpZW50Lm1lc3NhZ2VfcmVj
ZWl2ZWQgPSBtZXNzYWdlUmVjZWl2ZWQ7CisKKyAgICBld2tfZXh0ZW5zaW9uX2NsaWVudF9hZGQo
ZXh0ZW5zaW9uLCAmY2xpZW50KTsKIH0KIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJfY29udGV4
dC5jcHAgYi9Tb3VyY2UvV2ViS2l0Mi9VSVByb2Nlc3MvQVBJL2VmbC90ZXN0cy90ZXN0X2V3azJf
Y29udGV4dC5jcHAKaW5kZXggZDU0MTkyMDg2MDBiMjQ0NzEyYmY2MmNjYTRjZDcyNmQ3YzBjNGQz
YS4uMTY1YmQyODc3YzA4YTE5Y2M1NjZmMTg4ZDhjNmQwZWFlMmIxMmQ2YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdDIvVUlQcm9jZXNzL0FQSS9lZmwvdGVzdHMvdGVzdF9ld2syX2NvbnRleHQu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1VJUHJvY2Vzcy9BUEkvZWZsL3Rlc3RzL3Rlc3RfZXdr
Ml9jb250ZXh0LmNwcApAQCAtNjYsNiArNjYsMjMgQEAgcHJvdGVjdGVkOgogICAgIH0KIH07CiAK
K2NsYXNzIEVXSzJDb250ZXh0VGVzdFdpdGhFeHRlbnNpb24gOiBwdWJsaWMgRVdLMlVuaXRUZXN0
QmFzZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHZvaWQgbWVzc2FnZVJlY2VpdmVkQ2FsbGJhY2so
Y29uc3QgY2hhciogbmFtZSwgY29uc3QgRWluYV9WYWx1ZSogYm9keSwgdm9pZCogdXNlckRhdGEp
CisgICAgeworICAgICAgICBib29sKiBoYW5kbGVkID0gc3RhdGljX2Nhc3Q8Ym9vbCo+KHVzZXJE
YXRhKTsKKyAgICAgICAgQVNTRVJUX1NUUkVRKCJwb25nIiwgbmFtZSk7CisKKyAgICAgICAgKmhh
bmRsZWQgPSB0cnVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEVXSzJDb250ZXh0VGVzdFdp
dGhFeHRlbnNpb24oKQorICAgIHsKKyAgICAgICAgbV93aXRoRXh0ZW5zaW9uID0gdHJ1ZTsKKyAg
ICB9Cit9OworCiBURVNUX0YoRVdLMkNvbnRleHRUZXN0LCBld2tfY29udGV4dF9kZWZhdWx0X2dl
dCkKIHsKICAgICBFd2tfQ29udGV4dCogZGVmYXVsdENvbnRleHQgPSBld2tfY29udGV4dF9kZWZh
dWx0X2dldCgpOwpAQCAtMjI4LDExICsyNDUsMjIgQEAgVEVTVF9GKEVXSzJDb250ZXh0VGVzdCwg
ZXdrX2NvbnRleHRfbmV3KQogICAgIGV3a19vYmplY3RfdW5yZWYoY29udGV4dCk7CiB9CiAKLVRF
U1RfRihFV0syQ29udGV4dFRlc3QsIGV3a19jb250ZXh0X25ld193aXRoX2V4dGVuc2lvbnNfcGF0
aCkKK1RFU1RfRihFV0syQ29udGV4dFRlc3RXaXRoRXh0ZW5zaW9uLCBld2tfY29udGV4dF9uZXdf
d2l0aF9leHRlbnNpb25zX3BhdGgpCiB7Ci0gICAgRXdrX0NvbnRleHQqIGNvbnRleHQgPSBld2tf
Y29udGV4dF9uZXdfd2l0aF9leHRlbnNpb25zX3BhdGgoZW52aXJvbm1lbnQtPmV4dGVuc2lvblNh
bXBsZSgpKTsKLSAgICBBU1NFUlRfVFJVRShjb250ZXh0KTsKLSAgICBld2tfb2JqZWN0X3VucmVm
KGNvbnRleHQpOworICAgIGJvb2wgcmVjZWl2ZWQgPSBmYWxzZTsKKyAgICBFd2tfQ29udGV4dCog
Y29udGV4dCA9IGV3a192aWV3X2NvbnRleHRfZ2V0KHdlYlZpZXcoKSk7CisKKyAgICBld2tfY29u
dGV4dF9tZXNzYWdlX2Zyb21fZXh0ZW5zaW9uc19jYWxsYmFja19zZXQoY29udGV4dCwgbWVzc2Fn
ZVJlY2VpdmVkQ2FsbGJhY2ssICZyZWNlaXZlZCk7CisKKyAgICBld2tfdmlld191cmxfc2V0KHdl
YlZpZXcoKSwgZW52aXJvbm1lbnQtPmRlZmF1bHRUZXN0UGFnZVVybCgpKTsKKyAgICBBU1NFUlRf
VFJVRSh3YWl0VW50aWxMb2FkRmluaXNoZWQoKSk7CisKKyAgICBFaW5hX1ZhbHVlKiBib2R5ID0g
ZWluYV92YWx1ZV9uZXcoRUlOQV9WQUxVRV9UWVBFX1NUUklORyk7CisgICAgZWluYV92YWx1ZV9z
ZXQoYm9keSwgIkZyb20gVUlQcm9jZXNzIik7CisgICAgZXdrX2NvbnRleHRfbWVzc2FnZV9wb3N0
X3RvX2V4dGVuc2lvbnMoY29udGV4dCwgInBpbmciLCBib2R5KTsKKyAgICBlaW5hX3ZhbHVlX2Zy
ZWUoYm9keSk7CisKKyAgICBBU1NFUlRfVFJVRSh3YWl0VW50aWxUcnVlKHJlY2VpdmVkLCB0ZXN0
VGltZW91dFNlY29uZHMpKTsKIH0KIAogVEVTVF9GKEVXSzJDb250ZXh0VGVzdCwgZXdrX2NvbnRl
eHRfYWRkaXRpb25hbF9wbHVnaW5fcGF0aF9zZXQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5jcHAgYi9T
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVu
c2lvbi5jcHAKaW5kZXggN2M2YjY3NDlhNjhlODFjNDA1MWE5NGJhOTIyZWYwZTQzMzAwMTlhOC4u
MTZmMzQ0ZjM0ZGM2NjExNDY1MjkyZjMzZTE5MjUxYzhjZmI0OTkzYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNp
b24uY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L2VmbC9ld2tfZXh0ZW5zaW9uLmNwcApAQCAtMjYsMTAgKzI2LDQwIEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiZXdrX2V4dGVuc2lvbi5oIgogCisjaW5jbHVkZSAiSW5qZWN0ZWRC
dW5kbGUuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIldLQnVuZGxl
LmgiCisjaW5jbHVkZSAiV0tCdW5kbGVBUElDYXN0LmgiCisjaW5jbHVkZSAiV0tSZXRhaW5QdHIu
aCIKICNpbmNsdWRlICJld2tfZXh0ZW5zaW9uX3ByaXZhdGUuaCIKKyNpbmNsdWRlIDxXZWJLaXQv
V0tTdHJpbmcuaD4KKyNpbmNsdWRlIDxXZWJLaXQvV0tUeXBlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViS2l0OwogCitzdGF0aWMgaW5saW5l
IEV3a0V4dGVuc2lvbiogdG9Fd2tFeHRlbmRpb24oY29uc3Qgdm9pZCogY2xpZW50SW5mbykKK3sK
KyAgICByZXR1cm4gY29uc3RfY2FzdDxFd2tFeHRlbnNpb24qPihzdGF0aWNfY2FzdDxjb25zdCBF
d2tFeHRlbnNpb24qPihjbGllbnRJbmZvKSk7Cit9CisKK0V3a0V4dGVuc2lvbjo6RXdrRXh0ZW5z
aW9uKEluamVjdGVkQnVuZGxlKiBidW5kbGUpCisgICAgOiBtX2J1bmRsZShidW5kbGUpCit7Cisg
ICAgV0tCdW5kbGVDbGllbnRWMSB3a0J1bmRsZUNsaWVudCA9IHsKKyAgICAgICAgeworICAgICAg
ICAgICAgMSwgLy8gdmVyc2lvbgorICAgICAgICAgICAgdGhpcywgLy8gY2xpZW50SW5mbworICAg
ICAgICB9LAorICAgICAgICBkaWRDcmVhdGVQYWdlLAorICAgICAgICB3aWxsRGVzdHJveVBhZ2Us
CisgICAgICAgIDAsIC8vIGRpZEluaXRpYWxpemVQYWdlR3JvdXAKKyAgICAgICAgZGlkUmVjZWl2
ZU1lc3NhZ2UsCisgICAgICAgIGRpZFJlY2VpdmVNZXNzYWdlVG9QYWdlCisgICAgfTsKKyAgICBX
S0J1bmRsZVNldENsaWVudCh0b0FQSShidW5kbGUpLCAmd2tCdW5kbGVDbGllbnQuYmFzZSk7Cit9
CisKIHZvaWQgRXdrRXh0ZW5zaW9uOjphcHBlbmQoRXdrX0V4dGVuc2lvbl9DbGllbnQqIGNsaWVu
dCkKIHsKICAgICBtX2NsaWVudHMuYXBwZW5kKGNsaWVudCk7CkBAIC00MCw2ICs3MCw0NCBAQCB2
b2lkIEV3a0V4dGVuc2lvbjo6cmVtb3ZlKEV3a19FeHRlbnNpb25fQ2xpZW50KiBjbGllbnQpCiAg
ICAgbV9jbGllbnRzLnJlbW92ZUZpcnN0KGNsaWVudCk7CiB9CiAKK3ZvaWQgRXdrRXh0ZW5zaW9u
OjpkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmLCBXS0J1bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQq
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRXdrRXh0ZW5zaW9uOjp3aWxs
RGVzdHJveVBhZ2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBFd2tFeHRlbnNpb246OmRpZFJlY2Vp
dmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiBtZXNzYWdlTmFtZSwgV0tUeXBlUmVm
IG1lc3NhZ2VCb2R5LCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKQoreworICAgIEV3a0V4dGVuc2lv
biogc2VsZiA9IHRvRXdrRXh0ZW5kaW9uKGNsaWVudEluZm8pOworICAgIENTdHJpbmcgbmFtZSA9
IHRvSW1wbChtZXNzYWdlTmFtZSktPnN0cmluZygpLnV0ZjgoKTsKKyAgICBFaW5hX1ZhbHVlKiB2
YWx1ZSA9IG51bGxwdHI7CisKKyAgICAvLyBGSVhNRTogTmVlZCB0byBzdXBwb3J0IG90aGVyIHR5
cGVzLgorICAgIGlmIChtZXNzYWdlQm9keSAmJiBXS1N0cmluZ0dldFR5cGVJRCgpID09IFdLR2V0
VHlwZUlEKG1lc3NhZ2VCb2R5KSkgeworICAgICAgICB2YWx1ZSA9IGVpbmFfdmFsdWVfbmV3KEVJ
TkFfVkFMVUVfVFlQRV9TVFJJTkcpOworICAgICAgICBDU3RyaW5nIGJvZHkgPSB0b0ltcGwoc3Rh
dGljX2Nhc3Q8V0tTdHJpbmdSZWY+KG1lc3NhZ2VCb2R5KSktPnN0cmluZygpLnV0ZjgoKTsKKwor
ICAgICAgICBlaW5hX3ZhbHVlX3NldCh2YWx1ZSwgYm9keS5kYXRhKCkpOworICAgIH0KKworICAg
IGZvciAoYXV0byYgaXQgOiBzZWxmLT5tX2NsaWVudHMpIHsKKyAgICAgICAgaWYgKGl0LT5tZXNz
YWdlX3JlY2VpdmVkKQorICAgICAgICAgICAgaXQtPm1lc3NhZ2VfcmVjZWl2ZWQobmFtZS5kYXRh
KCksIHZhbHVlLCBpdC0+ZGF0YSk7CisgICAgfQorCisgICAgaWYgKHZhbHVlKQorICAgICAgICBl
aW5hX3ZhbHVlX2ZyZWUodmFsdWUpOworfQorCit2b2lkIEV3a0V4dGVuc2lvbjo6ZGlkUmVjZWl2
ZU1lc3NhZ2VUb1BhZ2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgV0tTdHJpbmdSZWYs
IFdLVHlwZVJlZiwgY29uc3Qgdm9pZCopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwog
RWluYV9Cb29sIGV3a19leHRlbnNpb25fY2xpZW50X2FkZChFd2tfRXh0ZW5zaW9uKiBleHRlbnNp
b24sIEV3a19FeHRlbnNpb25fQ2xpZW50KiBjbGllbnQpCiB7CiAgICAgRUlOQV9TQUZFVFlfT05f
TlVMTF9SRVRVUk5fVkFMKGV4dGVuc2lvbiwgZmFsc2UpOwpAQCAtNTksMyArMTI3LDIxIEBAIEVp
bmFfQm9vbCBld2tfZXh0ZW5zaW9uX2NsaWVudF9kZWwoRXdrX0V4dGVuc2lvbiogZXh0ZW5zaW9u
LCBFd2tfRXh0ZW5zaW9uX0NsaWVuCiAKICAgICByZXR1cm4gdHJ1ZTsKIH0KKworRWluYV9Cb29s
IGV3a19leHRlbnNpb25fbWVzc2FnZV9wb3N0KEV3a19FeHRlbnNpb24gKmV4dGVuc2lvbiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSkKK3sKKyAgICBFSU5BX1NBRkVU
WV9PTl9OVUxMX1JFVFVSTl9WQUwoZXh0ZW5zaW9uLCBmYWxzZSk7CisKKyAgICBjb25zdCBFaW5h
X1ZhbHVlX1R5cGUqIHR5cGUgPSBlaW5hX3ZhbHVlX3R5cGVfZ2V0KGJvZHkpOworICAgIGlmICh0
eXBlICE9IEVJTkFfVkFMVUVfVFlQRV9TVFJJTkdTSEFSRSAmJiB0eXBlICE9IEVJTkFfVkFMVUVf
VFlQRV9TVFJJTkcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGNvbnN0IGNoYXIqIHZh
bHVlOworICAgIGVpbmFfdmFsdWVfZ2V0KGJvZHksICZ2YWx1ZSk7CisKKyAgICBXS1JldGFpblB0
cjxXS1R5cGVSZWY+IG1lc3NhZ2VCb2R5ID0gYWRvcHRXSyhXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4
Q1N0cmluZyh2YWx1ZSkpOworICAgIFdLUmV0YWluUHRyPFdLU3RyaW5nUmVmPiBtZXNzYWdlTmFt
ZShBZG9wdFdLLCBXS1N0cmluZ0NyZWF0ZVdpdGhVVEY4Q1N0cmluZyhuYW1lKSk7CisgICAgV0tC
dW5kbGVQb3N0TWVzc2FnZSh0b0FQSShleHRlbnNpb24tPmJ1bmRsZSgpKSwgbWVzc2FnZU5hbWUu
Z2V0KCksIG1lc3NhZ2VCb2R5LmdldCgpKTsKKworICAgIHJldHVybiB0cnVlOworfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3
a19leHRlbnNpb24uaCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uLmgKaW5kZXggODNjNTIyOWU2MDY0N2M0YjlhNjk0ZGE2YzI4
MjE0YWRjMzJlMmIxNi4uNGZhM2FkMThjOTJkMjliYjI4YmUyMTE5YzUyYjgxZjlkN2IyOTYyMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
ZWZsL2V3a19leHRlbnNpb24uaAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbi5oCkBAIC01Niw2ICs1NiwxNCBAQCB0eXBl
ZGVmIHZvaWQgKigqRXdrX0V4dGVuc2lvbl9Jbml0aWFsaXplX0Z1bmN0aW9uKShFd2tfRXh0ZW5z
aW9uICpleHRlbnNpb24sIHZvaQogc3RydWN0IEV3a0V4dGVuc2lvbkNsaWVudCB7CiAgICAgaW50
IHZlcnNpb247CiAgICAgdm9pZCAqZGF0YTsKKworICAgIC8qKgorICAgICAqIENhbGxiYWNrcyB0
byByZWNlaXZlIG1lc3NhZ2UgZnJvbSBld2tfY29udGV4dC4KKyAgICAgKgorICAgICAqIEBwYXJh
bSBuYW1lIG5hbWUgb2YgbWVzc2FnZSBmcm9tIGV3a19jb250ZXh0CisgICAgICogQHBhcmFtIGJv
ZHkgYm9keSBvZiBtZXNzYWdlIGZyb20gZXdrX2NvbnRleHQKKyAgICAgKi8KKyAgICB2b2lkICgq
bWVzc2FnZV9yZWNlaXZlZCkoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9k
eSwgdm9pZCAqZGF0YSk7CiB9OwogdHlwZWRlZiBzdHJ1Y3QgRXdrRXh0ZW5zaW9uQ2xpZW50IEV3
a19FeHRlbnNpb25fQ2xpZW50OwogCkBAIC04MCw2ICs4OCwyNCBAQCBFQVBJIEVpbmFfQm9vbCBl
d2tfZXh0ZW5zaW9uX2NsaWVudF9hZGQoRXdrX0V4dGVuc2lvbiAqZXh0ZW5zaW9uLCBFd2tfRXh0
ZW5zaW9uXwogICovCiBFQVBJIEVpbmFfQm9vbCBld2tfZXh0ZW5zaW9uX2NsaWVudF9kZWwoRXdr
X0V4dGVuc2lvbiAqZXh0ZW5zaW9uLCBFd2tfRXh0ZW5zaW9uX0NsaWVudCAqY2xpZW50KTsKIAor
LyoqCisgKiBQb3N0cyBtZXNzYWdlIHRvIGV3a19jb250ZXh0IGFzeW5jaHJvbm91c2x5LgorICoK
KyAqIEBub3RlIGJvZHkgb25seSBzdXBwb3J0cyBAYyBFSU5BX1ZBTFVFX1RZUEVfU1RSSU5HU0hB
UkUgb3IgQGMgRUlOQV9WQUxVRV9UWVBFX1NUUklORywKKyAqIG5vdy4KKyAqCisgKiBAcGFyYW0g
ZXh0ZW5zaW9uIGV4dGVuc2lvbiB0byBwb3N0IG1lc3NhZ2UKKyAqIEBwYXJhbSBuYW1lIG1lc3Nh
Z2UgbmFtZQorICogQHBhcmFtIGJvZHkgbWVzc2FnZSBib2R5CisgKgorICogQHJldHVybiBAYyBF
SU5BX1RSVUUgb24gc3VjY2VzcyBvZiBAYyBFSU5BX0ZBTFNFIG9uIGZhaWx1cmUgb3Igd2hlbiB0
aGUgdHlwZQorICogb2YgQHAgYm9keSBpcyBub3Qgc3VwcG9ydGVkLgorICoKKyAqIEBzZWUgZXdr
X2NvbnRleHRfbWVzc2FnZV9wb3N0X3RvX2V4dGVuc2lvbnMKKyAqIEBzZWUgZXdrX2NvbnRleHRf
bWVzc2FnZV9mcm9tX2V4dGVuc2lvbnNfY2FsbGJhY2tfc2V0CisgKi8KK0VBUEkgRWluYV9Cb29s
IGV3a19leHRlbnNpb25fbWVzc2FnZV9wb3N0KEV3a19FeHRlbnNpb24gKmV4dGVuc2lvbiwgY29u
c3QgY2hhciAqbmFtZSwgY29uc3QgRWluYV9WYWx1ZSAqYm9keSk7CisKICNpZmRlZiBfX2NwbHVz
cGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbl9wcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9lZmwvZXdrX2V4dGVuc2lvbl9wcml2
YXRlLmgKaW5kZXggZjNiMDE5NWQ3NDZjN2MwY2JiOTAxM2M1YjU5MjMyODA0Y2NiZTQwNi4uZDQ3
Mjc2OTQ2ZTM5ODU4MjEwY2M3MTk3YWI0ZmU5OTRhMGM1ZjA1ZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZWZsL2V3a19leHRlbnNpb25f
cHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2VmbC9ld2tfZXh0ZW5zaW9uX3ByaXZhdGUuaApAQCAtMzQsMTMgKzM0LDIyIEBAIGNsYXNz
IEluamVjdGVkQnVuZGxlOwogCiBjbGFzcyBFd2tFeHRlbnNpb24gewogcHVibGljOgotICAgIGV4
cGxpY2l0IEV3a0V4dGVuc2lvbihXZWJLaXQ6OkluamVjdGVkQnVuZGxlKikgeyB9CisgICAgZXhw
bGljaXQgRXdrRXh0ZW5zaW9uKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGUqKTsKICAgICB+RXdrRXh0
ZW5zaW9uKCkgeyB9CiAKICAgICB2b2lkIGFwcGVuZChFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xp
ZW50KTsKICAgICB2b2lkIHJlbW92ZShFd2tfRXh0ZW5zaW9uX0NsaWVudCogY2xpZW50KTsKIAor
ICAgIFdlYktpdDo6SW5qZWN0ZWRCdW5kbGUqIGJ1bmRsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnVu
ZGxlOyB9CisKKyAgICBzdGF0aWMgdm9pZCBkaWRDcmVhdGVQYWdlKFdLQnVuZGxlUmVmLCBXS0J1
bmRsZVBhZ2VSZWYsIGNvbnN0IHZvaWQqKTsKKyAgICBzdGF0aWMgdm9pZCB3aWxsRGVzdHJveVBh
Z2UoV0tCdW5kbGVSZWYsIFdLQnVuZGxlUGFnZVJlZiwgY29uc3Qgdm9pZCopOworICAgIHN0YXRp
YyB2b2lkIGRpZFJlY2VpdmVNZXNzYWdlKFdLQnVuZGxlUmVmLCBXS1N0cmluZ1JlZiwgV0tUeXBl
UmVmLCBjb25zdCB2b2lkKiBjbGllbnRJbmZvKTsKKyAgICBzdGF0aWMgdm9pZCBkaWRSZWNlaXZl
TWVzc2FnZVRvUGFnZShXS0J1bmRsZVJlZiwgV0tCdW5kbGVQYWdlUmVmLCBXS1N0cmluZ1JlZiwg
V0tUeXBlUmVmLCBjb25zdCB2b2lkKik7CisKIHByaXZhdGU6CisgICAgV2ViS2l0OjpJbmplY3Rl
ZEJ1bmRsZSogbV9idW5kbGU7CisKICAgICBWZWN0b3I8RXdrX0V4dGVuc2lvbl9DbGllbnQqPiBt
X2NsaWVudHM7CiB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL2Vm
bC9FeHRlbnNpb25NYW5hZ2VyRWZsLmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZs
L0V4dGVuc2lvbk1hbmFnZXJFZmwuY3BwCmluZGV4IDcxYzA3MGNiYjAxYjYzMWVlMGZiOWNiMWRk
MmJhMGRlNDcxZjdhNjMuLjBmMjlhYjc3ZmJhMzNiZDUzMGNhMWNjMDNmZWI1NjQ0ZWEyMjE4MmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1hbmFn
ZXJFZmwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvZWZsL0V4dGVuc2lvbk1h
bmFnZXJFZmwuY3BwCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgRXh0ZW5zaW9uTWFuYWdlckVmbDo6
aW5pdGlhbGl6ZShXS0J1bmRsZVJlZiBidW5kbGUsIFdLVHlwZVJlZiB1c2VyRGF0YSkKIAogICAg
ICAgICAgICAgRXdrX0V4dGVuc2lvbl9Jbml0aWFsaXplX0Z1bmN0aW9uIGluaXRpYWxpemVGdW5j
dGlvbiA9IG1vZHVsZS0+ZnVuY3Rpb25Qb2ludGVyPEV3a19FeHRlbnNpb25fSW5pdGlhbGl6ZV9G
dW5jdGlvbj4oImV3a19leHRlbnNpb25faW5pdCIpOwogICAgICAgICAgICAgaWYgKCFpbml0aWFs
aXplRnVuY3Rpb24pCi0gICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogCiAgICAgICAgICAgICBpbml0aWFsaXplRnVuY3Rpb24obV9leHRlbnNpb24uZ2V0
KCksIG51bGxwdHIgLyogcmVzZXJ2ZWQgZm9yIHRoZSBmdXR1cmUgKi8pOwogICAgICAgICAgICAg
bV9leHRlbnNpb25Nb2R1bGVzLmFwcGVuZChtb2R1bGUucmVsZWFzZSgpKTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>