<?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>93002</bug_id>
          
          <creation_ts>2012-08-02 09:34:12 -0700</creation_ts>
          <short_desc>[GTK] webkit_dom_document_create_tree_walker impossible to use due to WebKitDOMNodeFilter</short_desc>
          <delta_ts>2014-06-19 23:44:55 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>133724</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Charles Salvia">charles</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bunhere</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>commit-queue</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>mrobinson</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>685488</commentid>
    <comment_count>0</comment_count>
    <who name="Charles Salvia">charles</who>
    <bug_when>2012-08-02 09:34:12 -0700</bug_when>
    <thetext>As per http://lists.webkit.org/pipermail/webkit-gtk/2012-August/001186.html, the following bug (incomplete functionality) exists with the WebKitDOMTreeWalker API:

webkit_dom_document_create_tree_walker is not possible to use, because:

1) It requires a non-NULL WebKitDOMNodeFilter pointer

As per the usage of document.createTreeWalker in Javascript, this is a bug because you are allowed to pass &quot;null&quot; for the Filter parameter in Javascript.  In WebKitDOMDocument.cpp, in the function body for webkit_dom_document_create_tree_walker, the line g_return_val_if_fail(filter, 0) should be removed, because WebCore::Document::createTreeWalker() will accept a NULL filter.  The Document::createTreeWalker() function will convert the null raw pointer to a smart pointer, and pass it to a WebCore::Traversal instance.  WebCore::Traversal will then check for a NULL filter in Traversal::acceptNode.  So there is no reason for the GTK layer to check for a NULL with g_return_val_if_fail(filter, 0).

2) The Webkit GTK API does not expose any means to create a WebKitDOMNodeFilter object.  (The header file WebKitDOMNodeFilter.h does not expose a constructor.)

In combination with (1), this second bug makes WebKitDOMTreeWalker impossible to use at all, since the Webkit GTK API exposes no way to instantiate a WebKitDOMNodeFilter instance.  In WebKitDOMNodeFilter.h there needs to be a constructor function exposed, which wraps a WebCore::NodeFilter object.  It&apos;s also unclear how the WebKit GTK API handles user-provided Node Filters (which are handled using the virtual function NodeFilterCondition::acceptNode() in WebCore.)  Presumably, a derived class of webCore::NodeFilterCondition would need to be created which just defers to a wrapped C function provided at the Webkit-GTK layer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>685493</commentid>
    <comment_count>1</comment_count>
    <who name="Charles Salvia">charles</who>
    <bug_when>2012-08-02 09:39:29 -0700</bug_when>
    <thetext>This bug should have been filed under the WebKit Gtk component, rather than HTML DOM.  Sorry about the mistake.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1015847</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-16 05:40:53 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; As per http://lists.webkit.org/pipermail/webkit-gtk/2012-August/001186.html, the following bug (incomplete functionality) exists with the WebKitDOMTreeWalker API:
&gt; 
&gt; webkit_dom_document_create_tree_walker is not possible to use, because:
&gt; 
&gt; 1) It requires a non-NULL WebKitDOMNodeFilter pointer
&gt; 
&gt; As per the usage of document.createTreeWalker in Javascript, this is a bug because you are allowed to pass &quot;null&quot; for the Filter parameter in Javascript.  In WebKitDOMDocument.cpp, in the function body for webkit_dom_document_create_tree_walker, the line g_return_val_if_fail(filter, 0) should be removed, because WebCore::Document::createTreeWalker() will accept a NULL filter.  The Document::createTreeWalker() function will convert the null raw pointer to a smart pointer, and pass it to a WebCore::Traversal instance.  WebCore::Traversal will then check for a NULL filter in Traversal::acceptNode.  So there is no reason for the GTK layer to check for a NULL with g_return_val_if_fail(filter, 0).

We should add this method to canBeNullParams variable to indicate that the node filter can be NULL.

&gt; 2) The Webkit GTK API does not expose any means to create a WebKitDOMNodeFilter object.  (The header file WebKitDOMNodeFilter.h does not expose a constructor.)
&gt; 
&gt; In combination with (1), this second bug makes WebKitDOMTreeWalker impossible to use at all, since the Webkit GTK API exposes no way to instantiate a WebKitDOMNodeFilter instance.  In WebKitDOMNodeFilter.h there needs to be a constructor function exposed, which wraps a WebCore::NodeFilter object.  It&apos;s also unclear how the WebKit GTK API handles user-provided Node Filters (which are handled using the virtual function NodeFilterCondition::acceptNode() in WebCore.)  Presumably, a derived class of webCore::NodeFilterCondition would need to be created which just defers to a wrapped C function provided at the Webkit-GTK layer.

The problem is that WebKitDOMNodeFilter shouldn&apos;t be a class but an interface, since the method accept_node needs to be implemented by the user.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016092</commentid>
    <comment_count>3</comment_count>
      <attachid>233223</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-17 02:41:20 -0700</bug_when>
    <thetext>Created attachment 233223
Patch

I suspect we have the same problem with XPathNSResolver</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016743</commentid>
    <comment_count>4</comment_count>
      <attachid>233223</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-06-19 13:34:19 -0700</bug_when>
    <thetext>Comment on attachment 233223
Patch

Nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1016857</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-06-19 23:44:55 -0700</bug_when>
    <thetext>Committed r170174: &lt;http://trac.webkit.org/changeset/170174&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>233223</attachid>
            <date>2014-06-17 02:41:20 -0700</date>
            <delta_ts>2014-06-19 13:34:18 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wkdom-node-filter.diff</filename>
            <type>text/plain</type>
            <size>40245</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBiYTU2ZjYyLi4yYmJhMGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMTQtMDYtMTcgIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRlX3RyZWVfd2Fsa2Vy
IGltcG9zc2libGUgdG8gdXNlIGR1ZSB0byBXZWJLaXRET01Ob2RlRmlsdGVyCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05MzAwMgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBjdXN0b20gaW1wbGVtZW50
YXRpb24gb2YgV2ViS2l0RE9NTm9kZUZpbHRlciB0byBleHBvc2UgaXQgYXMKKyAgICAgICAgYW4g
aW50ZXJmYWNlIGluc3RlYWQgb2YgYSBjbGFzcy4KKworICAgICAgICAqIFBsYXRmb3JtR1RLLmNt
YWtlOiBBZGQgbmV3IGZpbGVzIHRvIGNvbXBpbGF0aW9uLgorICAgICAgICAqIGJpbmRpbmdzL2dv
YmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uOjp+R09iamVjdE5vZGVGaWx0ZXJDb25k
aXRpb24pOgorICAgICAgICBSZXNldCB0aGUgTm9kZUZpbHRlciBXZWJDb3JlIG9iamVjdCBhc3Nv
Y2lhdGVkIHRvIHRoZQorICAgICAgICBXZWJLaXRET01Ob2RlRmlsdGVyIG9iamVjdC4KKyAgICAg
ICAgKFdlYkNvcmU6OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uOjphY2NlcHROb2RlKTogQ2Fs
bCB3ZWJraXRfZG9tX25vZGVfZmlsdGVyX2FjY2VwdF9ub2RlKCkuCisgICAgICAgICogYmluZGlu
Z3MvZ29iamVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uOjpjcmVhdGUpOiBDcmVhdGUgYSBu
ZXcKKyAgICAgICAgR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24gZm9yIHRoZSBnaXZlbiBXZWJL
aXRET01Ob2RlRmlsdGVyLgorICAgICAgICAoV2ViQ29yZTo6R09iamVjdE5vZGVGaWx0ZXJDb25k
aXRpb246OkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKHdlYmtpdF9k
b21fbm9kZV9maWx0ZXJfZGVmYXVsdF9pbml0KToKKyAgICAgICAgKHdlYmtpdF9kb21fbm9kZV9m
aWx0ZXJfYWNjZXB0X25vZGUpOgorICAgICAgICAoV2ViS2l0Ojpub2RlRmlsdGVyTWFwKTogTWFw
IE5vZGVGaWx0ZXIgV2ViQ29yZSBvYmplY3RzIHRvCisgICAgICAgIFdlYktpdERPTU5vZGVGaWx0
ZXIgb2JqZWN0cy4KKyAgICAgICAgKFdlYktpdDo6bm9kZUZpbHRlck9iamVjdERlc3Ryb3llZENh
bGxiYWNrKTogUmVtb3ZlIHRoZSBub2RlCisgICAgICAgIGZpbHRlciBmb3JtIHRoZSBtYXAgd2hl
biB0aGUgV2ViS2l0RE9NTm9kZUZpbHRlciBvYmplY3J0IGlzIGRlc3Ryb3llZC4KKyAgICAgICAg
KFdlYktpdDo6a2l0KTogUmV0dXJuIHRoZSBXZWJLaXRET01Ob2RlRmlsdGVyIG9iamVjdCBmb3Ig
dGhlIGdpdmVuCisgICAgICAgIE5vZGVGaWx0ZXIgV2ViQ29yZSBvYmplY3QuCisgICAgICAgIChX
ZWJLaXQ6OmNvcmUpOiBHZXQgb3IgY3JlYXRlIGEgTm9kZUZpbHRlciBXZWJDb3JlIG9iamVjdAor
ICAgICAgICBhc3NvY2lhdGVkIHRvIHRoZSBnaXZlbiBXZWJLaXRET01Ob2RlRmlsdGVyLgorICAg
ICAgICAqIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5oOiBBZGRlZC4KKyAg
ICAgICAgKiBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9sczogQWRk
ZWQuCisgICAgICAgICogYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0
ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2Jq
ZWN0LnBtOgorICAgICAgICAoR2VuZXJhdGVGdW5jdGlvbik6IEFkZCBleGNlcHRpb25zIGZvciBO
b2RlRmlsdGVyIHBhcmFtZXRlcnMgc2luY2UKKyAgICAgICAgdGhlIGNvcmUgbWV0aG9kIHJldHVy
bnMgYSBQYXNzUmVmUHRyLgorCiAyMDE0LTA2LTE2ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVl
dWVAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMTcwMDAz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvUGxhdGZvcm1HVEsuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCA0ZjY3MzY0Li4zYjdkYmM2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9QbGF0Zm9ybUdUSy5jbWFrZQpAQCAtNDM1LDkgKzQzNSwxMSBAQCBsaXN0KEFQUEVORCBHT2Jq
ZWN0RE9NQmluZGluZ3NfU09VUkNFUwogICAgIGJpbmRpbmdzL2dvYmplY3QvQ29udmVydFRvVVRG
OFN0cmluZy5jcHAKICAgICBiaW5kaW5ncy9nb2JqZWN0L0RPTU9iamVjdENhY2hlLmNwcAogICAg
IGJpbmRpbmdzL2dvYmplY3QvR09iamVjdEV2ZW50TGlzdGVuZXIuY3BwCisgICAgYmluZGluZ3Mv
Z29iamVjdC9HT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbi5jcHAKICAgICBiaW5kaW5ncy9nb2Jq
ZWN0L1dlYktpdERPTUN1c3RvbS5jcHAKICAgICBiaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2
ZW50VGFyZ2V0LmNwcAogICAgIGJpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NSFRNTFByaXZhdGUu
Y3BwCisgICAgYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcAogICAgIGJp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LmNwcAogICAgIGJpbmRpbmdzL2dvYmplY3Qv
V2ViS2l0RE9NUHJpdmF0ZS5jcHAKICAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9C
SU5ESU5HU19ESVJ9L3dlYmtpdGRvbWRlZmluZXMuaApAQCAtNDkwLDcgKzQ5Miw2IEBAIGxpc3Qo
QVBQRU5EIEdPYmplY3RET01CaW5kaW5nc19JRExfRklMRVMKICAgICBkb20vTW91c2VFdmVudC5p
ZGwKICAgICBkb20vTmFtZWROb2RlTWFwLmlkbAogICAgIGRvbS9Ob2RlLmlkbAotICAgIGRvbS9O
b2RlRmlsdGVyLmlkbAogICAgIGRvbS9Ob2RlSXRlcmF0b3IuaWRsCiAgICAgZG9tL05vZGVMaXN0
LmlkbAogICAgIGRvbS9Qcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaWRsCkBAIC02MjIsMTIgKzYyMywx
MyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgKQogZW5kaWYg
KCkKIAotc2V0KEdPYmplY3RET01CaW5kaW5nc19DTEFTU19MSVNUIEN1c3RvbSBFdmVudFRhcmdl
dCBPYmplY3QpCitzZXQoR09iamVjdERPTUJpbmRpbmdzX0NMQVNTX0xJU1QgQ3VzdG9tIEV2ZW50
VGFyZ2V0IE5vZGVGaWx0ZXIgT2JqZWN0KQogc2V0KEdPYmplY3RET01CaW5kaW5nc19JTlNUQUxM
RURfSEVBREVSUwogICAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RPTV9CSU5ESU5HU19E
SVJ9L3dlYmtpdGRvbWRlZmluZXMuaAogICAgICAke0RFUklWRURfU09VUkNFU19HT0JKRUNUX0RP
TV9CSU5ESU5HU19ESVJ9L3dlYmtpdGRvbS5oCiAgICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NQ3VzdG9tLmgKICAgICAgJHtXRUJDT1JFX0RJUn0vYmluZGluZ3Mv
Z29iamVjdC9XZWJLaXRET01FdmVudFRhcmdldC5oCisgICAgICR7V0VCQ09SRV9ESVJ9L2JpbmRp
bmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5oCiAgICAgICR7V0VCQ09SRV9ESVJ9L2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NT2JqZWN0LmgKICkKIGZpbGUoR0xPQiBHT2JqZWN0RE9N
QmluZGluZ3NTeW1ib2xzRmlsZXMKQEAgLTcwOCw2ICs3MTAsNyBAQCBpbnN0YWxsKEZJTEVTICR7
R09iamVjdERPTUJpbmRpbmdzX0lOU1RBTExFRF9IRUFERVJTfQogc2V0KEdPYmplY3RET01CaW5k
aW5nc19HSVJfSEVBREVSUyAke0dPYmplY3RET01CaW5kaW5nc19JTlNUQUxMRURfSEVBREVSU30p
CiBsaXN0KFJFTU9WRV9JVEVNIEdPYmplY3RET01CaW5kaW5nc19HSVJfSEVBREVSUwogICAgICBi
aW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUV2ZW50VGFyZ2V0LmgKKyAgICAgYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmgKICAgICAgYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01PYmplY3QuaAogKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2Jq
ZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZmQ4YzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmNwcApA
QCAtMCwwICsxLDM5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgiCisKKyNpbmNsdWRlICJOb2RlRmls
dGVyLmgiCisjaW5jbHVkZSAiV2ViS2l0RE9NTm9kZVByaXZhdGUuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbjo6fkdPYmplY3ROb2RlRmlsdGVy
Q29uZGl0aW9uKCkKK3sKKyAgICBnX29iamVjdF9zZXRfZGF0YShHX09CSkVDVChtX2ZpbHRlci5n
ZXQoKSksICJ3ZWJraXQtY29yZS1ub2RlLWZpbHRlciIsIG51bGxwdHIpOworfQorCitzaG9ydCBH
T2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbjo6YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5v
ZGUqIG5vZGUpIGNvbnN0Cit7CisgICAgaWYgKCFub2RlKQorICAgICAgICByZXR1cm4gTm9kZUZp
bHRlcjo6RklMVEVSX1JFSkVDVDsKKyAgICByZXR1cm4gd2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9h
Y2NlcHRfbm9kZShtX2ZpbHRlci5nZXQoKSwgV2ViS2l0OjpraXQobm9kZSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9nb2JqZWN0L0dPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWQyMWJmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvR09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24uaApAQCAt
MCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lmbmRlZiBHT2JqZWN0Tm9kZUZpbHRlckNv
bmRpdGlvbl9oCisjZGVmaW5lIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uX2gKKworI2luY2x1
ZGUgIk5vZGVGaWx0ZXJDb25kaXRpb24uaCIKKworI2luY2x1ZGUgIldlYktpdERPTU5vZGVGaWx0
ZXIuaCIKKyNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KKyNpbmNsdWRlIDx3dGYvZ29iamVjdC9HUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKK2NsYXNzIE5vZGU7CisKK2NsYXNzIEdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9uIDog
cHVibGljIE5vZGVGaWx0ZXJDb25kaXRpb24geworcHVibGljOgorCisgICAgc3RhdGljIFBhc3NS
ZWZQdHI8R09iamVjdE5vZGVGaWx0ZXJDb25kaXRpb24+IGNyZWF0ZShXZWJLaXRET01Ob2RlRmls
dGVyKiBmaWx0ZXIpCisgICAgeworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdPYmplY3RO
b2RlRmlsdGVyQ29uZGl0aW9uKGZpbHRlcikpOworICAgIH0KKworICAgIHZpcnR1YWwgc2hvcnQg
YWNjZXB0Tm9kZShKU0M6OkV4ZWNTdGF0ZSosIE5vZGUqKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBHT2JqZWN0Tm9kZUZpbHRlckNvbmRpdGlvbihXZWJLaXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIp
CisgICAgICAgIDogbV9maWx0ZXIoZmlsdGVyKQorICAgIHsKKyAgICB9CisgICAgfkdPYmplY3RO
b2RlRmlsdGVyQ29uZGl0aW9uKCk7CisKKyAgICBHUmVmUHRyPFdlYktpdERPTU5vZGVGaWx0ZXI+
IG1fZmlsdGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gR09i
amVjdE5vZGVGaWx0ZXJDb25kaXRpb25faApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmlu
ZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uNzllOGI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5jcHAKQEAgLTAsMCArMSw4
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNCBJZ2FsaWEgUy5MLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYktp
dERPTU5vZGVGaWx0ZXIuaCIKKworI2luY2x1ZGUgIkdPYmplY3ROb2RlRmlsdGVyQ29uZGl0aW9u
LmgiCisjaW5jbHVkZSAiTm9kZUZpbHRlci5oIgorI2luY2x1ZGUgIldlYktpdERPTU5vZGUuaCIK
KyNpbmNsdWRlICJXZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+CisKK3R5cGVkZWYgV2Vi
S2l0RE9NTm9kZUZpbHRlcklmYWNlIFdlYktpdERPTU5vZGVGaWx0ZXJJbnRlcmZhY2U7CisKK0df
REVGSU5FX0lOVEVSRkFDRShXZWJLaXRET01Ob2RlRmlsdGVyLCB3ZWJraXRfZG9tX25vZGVfZmls
dGVyLCBHX1RZUEVfT0JKRUNUKQorCitzdGF0aWMgdm9pZCB3ZWJraXRfZG9tX25vZGVfZmlsdGVy
X2RlZmF1bHRfaW5pdChXZWJLaXRET01Ob2RlRmlsdGVySWZhY2UqKQoreworfQorCitnc2hvcnQg
d2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9hY2NlcHRfbm9kZShXZWJLaXRET01Ob2RlRmlsdGVyKiBm
aWx0ZXIsIFdlYktpdERPTU5vZGUqIG5vZGUpCit7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwo
V0VCS0lUX0RPTV9JU19OT0RFX0ZJTFRFUihmaWx0ZXIpLCBXRUJLSVRfRE9NX05PREVfRklMVEVS
X1JFSkVDVCk7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwoV0VCS0lUX0RPTV9JU19OT0RFKG5v
ZGUpLCBXRUJLSVRfRE9NX05PREVfRklMVEVSX1JFSkVDVCk7CisKKyAgICByZXR1cm4gV0VCS0lU
X0RPTV9OT0RFX0ZJTFRFUl9HRVRfSUZBQ0UoZmlsdGVyKS0+YWNjZXB0X25vZGUoZmlsdGVyLCBu
b2RlKTsKK30KKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3N0YXRpYyBIYXNoTWFwPFdlYkNvcmU6
Ok5vZGVGaWx0ZXIqLCBXZWJLaXRET01Ob2RlRmlsdGVyKj4mIG5vZGVGaWx0ZXJNYXAoKQorewor
ICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxIYXNoTWFwPFdlYkNvcmU6Ok5vZGVGaWx0ZXIqLCBX
ZWJLaXRET01Ob2RlRmlsdGVyKj4+IG5vZGVGaWx0ZXJNYXA7CisgICAgcmV0dXJuIG5vZGVGaWx0
ZXJNYXA7Cit9CisKK3N0YXRpYyB2b2lkIG5vZGVGaWx0ZXJPYmplY3REZXN0cm95ZWRDYWxsYmFj
ayhncG9pbnRlciBjb3JlTm9kZUZpbHRlciwgR09iamVjdCogbm9kZUZpbHRlcikKK3sKKyAgICBX
ZWJLaXRET01Ob2RlRmlsdGVyKiBmaWx0ZXIgPSBub2RlRmlsdGVyTWFwKCkudGFrZShzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpOb2RlRmlsdGVyKj4oY29yZU5vZGVGaWx0ZXIpKTsKKyAgICBVTlVTRURf
UEFSQU0obm9kZUZpbHRlcik7CisgICAgQVNTRVJUX1VOVVNFRChmaWx0ZXIsIGZpbHRlciA9PSBu
b2RlRmlsdGVyKTsKK30KKworV2ViS2l0RE9NTm9kZUZpbHRlcioga2l0KFdlYkNvcmU6Ok5vZGVG
aWx0ZXIqIGNvcmVOb2RlRmlsdGVyKQoreworICAgIGlmICghY29yZU5vZGVGaWx0ZXIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIG5vZGVGaWx0ZXJNYXAoKS5nZXQoY29y
ZU5vZGVGaWx0ZXIpOworfQorCitQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0ZXI+IGNvcmUo
V2ViS2l0RE9NTm9kZUZpbHRlciogbm9kZUZpbHRlcikKK3sKKyAgICBpZiAoIW5vZGVGaWx0ZXIp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0
ZXI+IGNvcmVOb2RlRmlsdGVyID0gc3RhdGljX2Nhc3Q8V2ViQ29yZTo6Tm9kZUZpbHRlcio+KGdf
b2JqZWN0X2dldF9kYXRhKEdfT0JKRUNUKG5vZGVGaWx0ZXIpLCAid2Via2l0LWNvcmUtbm9kZS1m
aWx0ZXIiKSk7CisgICAgaWYgKCFjb3JlTm9kZUZpbHRlcikgeworICAgICAgICBjb3JlTm9kZUZp
bHRlciA9IFdlYkNvcmU6Ok5vZGVGaWx0ZXI6OmNyZWF0ZShXZWJDb3JlOjpHT2JqZWN0Tm9kZUZp
bHRlckNvbmRpdGlvbjo6Y3JlYXRlKG5vZGVGaWx0ZXIpKTsKKyAgICAgICAgbm9kZUZpbHRlck1h
cCgpLmFkZChjb3JlTm9kZUZpbHRlci5nZXQoKSwgbm9kZUZpbHRlcik7CisgICAgICAgIGdfb2Jq
ZWN0X3dlYWtfcmVmKEdfT0JKRUNUKG5vZGVGaWx0ZXIpLCBub2RlRmlsdGVyT2JqZWN0RGVzdHJv
eWVkQ2FsbGJhY2ssIGNvcmVOb2RlRmlsdGVyLmdldCgpKTsKKyAgICAgICAgZ19vYmplY3Rfc2V0
X2RhdGEoR19PQkpFQ1Qobm9kZUZpbHRlciksICJ3ZWJraXQtY29yZS1ub2RlLWZpbHRlciIsIGNv
cmVOb2RlRmlsdGVyLmdldCgpKTsKKyAgICB9CisgICAgcmV0dXJuIGNvcmVOb2RlRmlsdGVyLnJl
bGVhc2UoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOThhNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuaApAQCAtMCww
ICsxLDIxMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTm9kZUZpbHRlcl9o
CisjZGVmaW5lIFdlYktpdERPTU5vZGVGaWx0ZXJfaAorCisjaW5jbHVkZSA8Z2xpYi1vYmplY3Qu
aD4KKyNpbmNsdWRlIDx3ZWJraXRkb20vd2Via2l0ZG9tZGVmaW5lcy5oPgorCitHX0JFR0lOX0RF
Q0xTCisKKyNkZWZpbmUgV0VCS0lUX1RZUEVfRE9NX05PREVfRklMVEVSICAgICAgICAgICAgKHdl
YmtpdF9kb21fbm9kZV9maWx0ZXJfZ2V0X3R5cGUgKCkpCisjZGVmaW5lIFdFQktJVF9ET01fTk9E
RV9GSUxURVIob2JqKSAgICAgICAgICAgIChHX1RZUEVfQ0hFQ0tfSU5TVEFOQ0VfQ0FTVCAoKG9i
aiksIFdFQktJVF9UWVBFX0RPTV9OT0RFX0ZJTFRFUiwgV2ViS2l0RE9NTm9kZUZpbHRlcikpCisj
ZGVmaW5lIFdFQktJVF9ET01fTk9ERV9GSUxURVJfQ0xBU1Mob2JqKSAgICAgIChHX1RZUEVfQ0hF
Q0tfQ0xBU1NfQ0FTVCAoKG9iaiksIFdFQktJVF9UWVBFX0RPTV9OT0RFX0ZJTFRFUiwgV2ViS2l0
RE9NTm9kZUZpbHRlcklmYWNlKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9JU19OT0RFX0ZJTFRFUihv
YmopICAgICAgICAgKEdfVFlQRV9DSEVDS19JTlNUQU5DRV9UWVBFICgob2JqKSwgV0VCS0lUX1RZ
UEVfRE9NX05PREVfRklMVEVSKSkKKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9HRVRf
SUZBQ0Uob2JqKSAgKEdfVFlQRV9JTlNUQU5DRV9HRVRfSU5URVJGQUNFICgob2JqKSwgV0VCS0lU
X1RZUEVfRE9NX05PREVfRklMVEVSLCBXZWJLaXRET01Ob2RlRmlsdGVySWZhY2UpKQorCisvKioK
KyAqIFdFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBUOgorICoKKyAqIEFjY2VwdCB0aGUgbm9k
ZS4gVXNlIHRoaXMgbWFjcm8gYXMgcmV0dXJuIHZhbHVlIG9mIHdlYmtpdF9kb21fbm9kZV9maWx0
ZXJfYWNjZXB0X25vZGUoKQorICogaW1wbGVtZW50YXRpb24gdG8gYWNjZXB0IHRoZSBnaXZlbiAj
V2ViS2l0RE9NTm9kZQorICoKKyAqIFNpbmNlOiAyLjYKKyAqLworI2RlZmluZSBXRUJLSVRfRE9N
X05PREVfRklMVEVSX0FDQ0VQVCAxCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9S
RUpFQ1Q6CisgKgorICogUmVqZWN0IHRoZSBub2RlLiBVc2UgdGhpcyBtYWNybyBhcyByZXR1cm4g
dmFsdWUgb2Ygd2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9hY2NlcHRfbm9kZSgpCisgKiBpbXBsZW1l
bnRhdGlvbiB0byByZWplY3QgdGhlIGdpdmVuICNXZWJLaXRET01Ob2RlLiBUaGUgY2hpbGRyZW4g
b2YgdGhlIGdpdmVuIG5vZGUgd2lsbAorICogYmUgcmVqZWN0ZWQgdG9vLgorICoKKyAqIFNpbmNl
OiAyLjYKKyAqLworI2RlZmluZSBXRUJLSVRfRE9NX05PREVfRklMVEVSX1JFSkVDVCAyCisKKy8q
KgorICogV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TS0lQOgorICoKKyAqIFNraXAgdGhlIG5vZGUu
IFVzZSB0aGlzIG1hY3JvIGFzIHJldHVybiB2YWx1ZSBvZiB3ZWJraXRfZG9tX25vZGVfZmlsdGVy
X2FjY2VwdF9ub2RlKCkKKyAqIGltcGxlbWVudGF0aW9uIHRvIHNraXAgdGhlIGdpdmVuICNXZWJL
aXRET01Ob2RlLiBUaGUgY2hpbGRyZW4gb2YgdGhlIGdpdmVuIG5vZGUgd2lsbAorICogbm90IGJl
IHNraXBwZWQuCisgKgorICogU2luY2U6IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9E
RV9GSUxURVJfU0tJUCAgIDMKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1df
QUxMOgorICoKKyAqIFNob3cgYWxsIG5vZGVzLgorICoKKyAqIFNpbmNlOiAyLjYKKyAqLworI2Rl
ZmluZSBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQUxMICAgICAgICAgICAgICAgICAgICAw
eEZGRkZGRkZGCisKKy8qKgorICogV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VMRU1FTlQ6
CisgKgorICogU2hvdyAjV2ViS2l0RE9NRWxlbWVudCBub2Rlcy4KKyAqCisgKiBTaW5jZTogMi42
CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VMRU1FTlQgICAgICAg
ICAgICAgICAgMHgwMDAwMDAwMQorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hP
V19BVFRSSUJVVEU6CisgKgorICogU2hvdyAjV2ViS2l0RE9NQXR0ciBub2Rlcy4KKyAqCisgKiBT
aW5jZTogMi42CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FUVFJJ
QlVURSAgICAgICAgICAgICAgMHgwMDAwMDAwMgorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9G
SUxURVJfU0hPV19URVhUOgorICoKKyAqIFNob3cgI1dlYktpdERPTVRleHQgbm9kZXMuCisgKgor
ICogU2luY2U6IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19U
RVhUICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDQKKworLyoqCisgKiBXRUJLSVRfRE9NX05P
REVfRklMVEVSX1NIT1dfQ0RBVEFfU0VDVElPTjoKKyAqCisgKiBTaG93ICNXZWJLaXRET01DRGF0
YVNlY3Rpb24gbm9kZXMuCisgKgorICogU2luY2U6IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9E
T01fTk9ERV9GSUxURVJfU0hPV19DREFUQV9TRUNUSU9OICAgICAgICAgIDB4MDAwMDAwMDgKKwor
LyoqCisgKiBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRU5USVRZX1JFRkVSRU5DRToKKyAq
CisgKiBTaG93ICNXZWJLaXRET01FbnRpdHlSZWZlcmVuY2Ugbm9kZXMuCisgKgorICogU2luY2U6
IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTlRJVFlfUkVG
RVJFTkNFICAgICAgIDB4MDAwMDAwMTAKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRklMVEVS
X1NIT1dfRU5USVRZOgorICoKKyAqIFNob3cgI1dlYktpdERPTUVudGl0eSBub2Rlcy4KKyAqCisg
KiBTaW5jZTogMi42CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VO
VElUWSAgICAgICAgICAgICAgICAgMHgwMDAwMDAyMAorCisvKioKKyAqIFdFQktJVF9ET01fTk9E
RV9GSUxURVJfU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OOgorICoKKyAqIFNob3cgI1dlYktp
dERPTVByb2Nlc3NpbmdJbnN0cnVjdGlvbiBub2Rlcy4KKyAqCisgKiBTaW5jZTogMi42CisgKi8K
KyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX1BST0NFU1NJTkdfSU5TVFJVQ1RJ
T04gMHgwMDAwMDA0MAorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19DT01N
RU5UOgorICoKKyAqIFNob3cgI1dlYktpdERPTUNvbW1lbnQgbm9kZXMuCisgKgorICogU2luY2U6
IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19DT01NRU5UICAg
ICAgICAgICAgICAgIDB4MDAwMDAwODAKKworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRklMVEVS
X1NIT1dfRE9DVU1FTlQ6CisgKgorICogU2hvdyAjV2ViS2l0RE9NRG9jdW1lbnQgbm9kZXMuCisg
KgorICogU2luY2U6IDIuNgorICovCisjZGVmaW5lIFdFQktJVF9ET01fTk9ERV9GSUxURVJfU0hP
V19ET0NVTUVOVCAgICAgICAgICAgICAgIDB4MDAwMDAxMDAKKworLyoqCisgKiBXRUJLSVRfRE9N
X05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlRfVFlQRToKKyAqCisgKiBTaG93ICNXZWJLaXRET01E
b2N1bWVudFR5cGUgbm9kZXMuCisgKgorICogU2luY2U6IDIuNgorICovCisjZGVmaW5lIFdFQktJ
VF9ET01fTk9ERV9GSUxURVJfU0hPV19ET0NVTUVOVF9UWVBFICAgICAgICAgIDB4MDAwMDAyMDAK
KworLyoqCisgKiBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlRfRlJBR01FTlQ6
CisgKgorICogU2hvdyAjV2ViS2l0RE9NRG9jdW1lbnRGcmFnbWVudCBub2Rlcy4KKyAqCisgKiBT
aW5jZTogMi42CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0RPQ1VN
RU5UX0ZSQUdNRU5UICAgICAgMHgwMDAwMDQwMAorCisvKioKKyAqIFdFQktJVF9ET01fTk9ERV9G
SUxURVJfU0hPV19OT1RBVElPTjoKKyAqCisgKiBTaG93ICNXZWJLaXRET01Ob3RhdGlvbiBub2Rl
cy4KKyAqCisgKiBTaW5jZTogMi42CisgKi8KKyNkZWZpbmUgV0VCS0lUX0RPTV9OT0RFX0ZJTFRF
Ul9TSE9XX05PVEFUSU9OICAgICAgICAgICAgICAgMHgwMDAwMDgwMAorCit0eXBlZGVmIHN0cnVj
dCBfV2ViS2l0RE9NTm9kZUZpbHRlcklmYWNlIFdlYktpdERPTU5vZGVGaWx0ZXJJZmFjZTsKKwor
c3RydWN0IF9XZWJLaXRET01Ob2RlRmlsdGVySWZhY2UgeworICAgIEdUeXBlSW50ZXJmYWNlIGdJ
ZmFjZTsKKworICAgIC8qIHZpcnR1YWwgdGFibGUgKi8KKyAgICBnc2hvcnQgKCogYWNjZXB0X25v
ZGUpKFdlYktpdERPTU5vZGVGaWx0ZXIgKmZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIFdlYktpdERPTU5vZGUgICAgICAgKm5vZGUpOworCisgICAgdm9pZCAoKl93ZWJraXRkb21f
cmVzZXJ2ZWQwKSAodm9pZCk7CisgICAgdm9pZCAoKl93ZWJraXRkb21fcmVzZXJ2ZWQxKSAodm9p
ZCk7CisgICAgdm9pZCAoKl93ZWJraXRkb21fcmVzZXJ2ZWQyKSAodm9pZCk7CisgICAgdm9pZCAo
Kl93ZWJraXRkb21fcmVzZXJ2ZWQzKSAodm9pZCk7Cit9OworCisKK1dFQktJVF9BUEkgR1R5cGUg
d2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9nZXRfdHlwZSh2b2lkKSBHX0dOVUNfQ09OU1Q7CisKKy8q
KgorICogd2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9hY2NlcHRfbm9kZToKKyAqIEBmaWx0ZXI6IEEg
I1dlYktpdERPTU5vZGVGaWx0ZXIKKyAqIEBub2RlOiBBICNXZWJLaXRET01Ob2RlCisgKgorICog
UmV0dXJuczogYSAjZ3Nob3J0CisgKi8KK1dFQktJVF9BUEkgZ3Nob3J0IHdlYmtpdF9kb21fbm9k
ZV9maWx0ZXJfYWNjZXB0X25vZGUoV2ViS2l0RE9NTm9kZUZpbHRlciAqZmlsdGVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJLaXRET01O
b2RlICAgICAgICpub2RlKTsKKworR19FTkRfREVDTFMKKworI2VuZGlmIC8qIFdlYktpdERPTU5v
ZGVGaWx0ZXJfaCAqLwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVj
dC9XZWJLaXRET01Ob2RlRmlsdGVyLnN5bWJvbHMgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9n
b2JqZWN0L1dlYktpdERPTU5vZGVGaWx0ZXIuc3ltYm9scwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4zOWRkM2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLnN5bWJvbHMKQEAgLTAsMCArMSwx
OCBAQAorR1R5cGUgd2Via2l0X2RvbV9ub2RlX2ZpbHRlcl9nZXRfdHlwZSh2b2lkKQorV0VCS0lU
X0RPTV9OT0RFX0ZJTFRFUl9BQ0NFUFQKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfUkVKRUNUCitX
RUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQUxMCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NI
T1dfQVRUUklCVVRFCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQ0RBVEFfU0VDVElPTgor
V0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0NPTU1FTlQKK1dFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0hPV19ET0NVTUVOVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0RPQ1VNRU5UX0ZS
QUdNRU5UCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRE9DVU1FTlRfVFlQRQorV0VCS0lU
X0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0VMRU1FTlQKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hP
V19FTlRJVFkKK1dFQktJVF9ET01fTk9ERV9GSUxURVJfU0hPV19FTlRJVFlfUkVGRVJFTkNFCitX
RUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfTk9UQVRJT04KK1dFQktJVF9ET01fTk9ERV9GSUxU
RVJfU0hPV19QUk9DRVNTSU5HX0lOU1RSVUNUSU9OCitXRUJLSVRfRE9NX05PREVfRklMVEVSX1NI
T1dfVEVYVAorV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TS0lQCitnc2hvcnQgd2Via2l0X2RvbV9u
b2RlX2ZpbHRlcl9hY2NlcHRfbm9kZShXZWJLaXRET01Ob2RlRmlsdGVyKiwgV2ViS2l0RE9NTm9k
ZSopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERP
TU5vZGVGaWx0ZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dl
YktpdERPTU5vZGVGaWx0ZXJQcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uNzE1OWM3NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L2dvYmplY3QvV2ViS2l0RE9NTm9kZUZpbHRlclByaXZhdGUuaApAQCAtMCwwICsxLDM1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE0IElnYWxpYSBTLkwuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpZm5kZWYgV2ViS2l0RE9NTm9k
ZUZpbHRlclByaXZhdGVfaAorI2RlZmluZSBXZWJLaXRET01Ob2RlRmlsdGVydFByaXZhdGVfaAor
CisjaW5jbHVkZSA8d2Via2l0ZG9tL1dlYktpdERPTU5vZGVGaWx0ZXIuaD4KKyNpbmNsdWRlIDx3
dGYvUGFzc1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBOb2RlRmlsdGVy
OworfQorCituYW1lc3BhY2UgV2ViS2l0IHsKK1dlYktpdERPTU5vZGVGaWx0ZXIqIGtpdChXZWJD
b3JlOjpOb2RlRmlsdGVyKik7CitQYXNzUmVmUHRyPFdlYkNvcmU6Ok5vZGVGaWx0ZXI+IGNvcmUo
V2ViS2l0RE9NTm9kZUZpbHRlciopOworfSAvLyBuYW1lc3BhY2UgV2ViS2l0CisKKyNlbmRpZiAv
KiBXZWJLaXRET01Ob2RlRmlsdGVyUHJpdmF0ZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJhdG9yR09iamVjdC5wbQppbmRleCBhMTkx
ZDgyLi5mZDlhODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JHT2JqZWN0LnBtCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Nj
cmlwdHMvQ29kZUdlbmVyYXRvckdPYmplY3QucG0KQEAgLTUwLDYgKzUwLDggQEAgbXkgJGNhbkJl
TnVsbFBhcmFtcyA9IHsKICAgICAnd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfYXR0cmlidXRl
X25zJyA9PiBbJ25hbWVzcGFjZVVSSSddLAogICAgICd3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0
ZV9lbGVtZW50X25zJyA9PiBbJ25hbWVzcGFjZVVSSSddLAogICAgICd3ZWJraXRfZG9tX2RvY3Vt
ZW50X2NyZWF0ZV9lbnRpdHlfcmVmZXJlbmNlJyA9PiBbJ25hbWUnXSwKKyAgICAnd2Via2l0X2Rv
bV9kb2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcicgPT4gWydmaWx0ZXInXSwKKyAgICAnd2Vi
a2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxrZXInID0+IFsnZmlsdGVyJ10sCiAgICAg
J3dlYmtpdF9kb21fZG9jdW1lbnRfZXZhbHVhdGUnID0+IFsnaW5SZXN1bHQnLCAncmVzb2x2ZXIn
XSwKICAgICAnd2Via2l0X2RvbV9kb2N1bWVudF9nZXRfb3ZlcnJpZGVfc3R5bGUnID0+IFsncHNl
dWRvRWxlbWVudCddLAogICAgICd3ZWJraXRfZG9tX2RvbV9pbXBsZW1lbnRhdGlvbl9jcmVhdGVf
ZG9jdW1lbnQnID0+IFsnbmFtZXNwYWNlVVJJJywgJ2RvY3R5cGUnXSwKQEAgLTk0Nyw2ICs5NDks
OSBAQCBzdWIgR2VuZXJhdGVGdW5jdGlvbiB7CiAgICAgICAgIGlmICgkcGFyYW1Jc0dET01UeXBl
IHx8ICgkcGFyYW1JRExUeXBlIGVxICJET01TdHJpbmciKSB8fCAoJHBhcmFtSURMVHlwZSBlcSAi
Q29tcGFyZUhvdyIpKSB7CiAgICAgICAgICAgICAkcGFyYW1OYW1lID0gImNvbnZlcnRlZCIgLiAk
Y29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkcGFyYW1OYW1lKTsKICAgICAgICAgfQorICAgICAg
ICBpZiAoJHBhcmFtSURMVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAgICAgICAgICAgICRwYXJh
bU5hbWUgPSAiV1RGOjpnZXRQdHIoIiAuICRwYXJhbU5hbWUgLiAiKSI7CisgICAgICAgIH0KICAg
ICAgICAgcHVzaChAY2FsbEltcGxQYXJhbXMsICRwYXJhbU5hbWUpOwogICAgIH0KIApAQCAtMTAy
OCw2ICsxMDMzLDggQEAgc3ViIEdlbmVyYXRlRnVuY3Rpb24gewogICAgICAgICAgICAgcHVzaChA
Y0JvZHksICIgICAgV1RGOjpTdHJpbmcgJHtjb252ZXJ0ZWRQYXJhbU5hbWV9ID0gV1RGOjpTdHJp
bmc6OmZyb21VVEY4KCRwYXJhbU5hbWUpO1xuIik7CiAgICAgICAgIH0gZWxzaWYgKCRwYXJhbUlE
TFR5cGUgZXEgIkNvbXBhcmVIb3ciKSB7CiAgICAgICAgICAgICBwdXNoKEBjQm9keSwgIiAgICBX
ZWJDb3JlOjpSYW5nZTo6Q29tcGFyZUhvdyAke2NvbnZlcnRlZFBhcmFtTmFtZX0gPSBzdGF0aWNf
Y2FzdDxXZWJDb3JlOjpSYW5nZTo6Q29tcGFyZUhvdz4oJHBhcmFtTmFtZSk7XG4iKTsKKyAgICAg
ICAgfSBlbHNpZiAoJHBhcmFtSURMVHlwZSBlcSAiTm9kZUZpbHRlciIpIHsKKyAgICAgICAgICAg
IHB1c2goQGNCb2R5LCAiICAgIFJlZlB0cjxXZWJDb3JlOjokcGFyYW1JRExUeXBlPiAke2NvbnZl
cnRlZFBhcmFtTmFtZX0gPSBXZWJLaXQ6OmNvcmUoJHBhcmFtTmFtZSk7XG4iKTsKICAgICAgICAg
fSBlbHNpZiAoJHBhcmFtSXNHRE9NVHlwZSkgewogICAgICAgICAgICAgcHVzaChAY0JvZHksICIg
ICAgV2ViQ29yZTo6JHtwYXJhbUlETFR5cGV9KiAke2NvbnZlcnRlZFBhcmFtTmFtZX0gPSBXZWJL
aXQ6OmNvcmUoJHBhcmFtTmFtZSk7XG4iKTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
Q2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGIyOTg0MzUuLjdlOTAyODIgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwz
OCBAQAorMjAxNC0wNi0xNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dUS10gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxr
ZXIgaW1wb3NzaWJsZSB0byB1c2UgZHVlIHRvIFdlYktpdERPTU5vZGVGaWx0ZXIKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTkzMDAyCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIHVuaXQgdGVzdHMgdG8g
Y2hlY2sgV2ViS2l0RE9NTm9kZWZpbHRlciBBUEkgdXNlZCBmcm9tIGJvdGgKKyAgICAgICAgVHJl
ZVdhbGtlciBhbmQgTm9kZUl0ZXJhdG9yLgorCisgICAgICAgICogU2NyaXB0cy93ZWJraXRweS9z
dHlsZS9jaGVja2VyLnB5OiBBZGQgZXhjZXB0aW9ucyBmb3IgR1RLKworICAgICAgICBwdWJsaWMg
aGVhZGVycyBhbmQgYWRkIFdlYktpdERPTU5vZGVGaWx0ZXIgdG8gdGhlIGxpc3Qgb2YgZXhjZXB0
aW9ucy4KKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvQ01ha2VMaXN0
cy50eHQ6IEFkZCBuZXcgZmlsZXMgdG8gY29tcGlsYXRpb24uCisgICAgICAgICogVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVGaWx0ZXJUZXN0LmNwcDogQWRkZWQuCisgICAg
ICAgICh3ZWJraXROb2RlRmlsdGVyQWNjZXB0Tm9kZSk6CisgICAgICAgICh3ZWJraXROb2RlRmls
dGVyRE9NTm9kZUZpbHRlcklmYWNlSW5pdCk6CisgICAgICAgICh3ZWJraXRfbm9kZV9maWx0ZXJf
aW5pdCk6CisgICAgICAgICh3ZWJraXRfbm9kZV9maWx0ZXJfY2xhc3NfaW5pdCk6CisgICAgICAg
IChXZWJLaXRET01Ob2RlRmlsdGVyVGVzdDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdERPTU5v
ZGVGaWx0ZXJUZXN0Ojp3ZWJQYWdlRnJvbUFyZ3MpOgorICAgICAgICAoV2ViS2l0RE9NTm9kZUZp
bHRlclRlc3Q6OnRlc3RUcmVlV2Fsa2VyKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVGaWx0ZXJU
ZXN0Ojp0ZXN0Tm9kZUl0ZXJhdG9yKToKKyAgICAgICAgKFdlYktpdERPTU5vZGVGaWx0ZXJUZXN0
OjpydW5UZXN0KToKKyAgICAgICAgKHJlZ2lzdGVyVGVzdHMpOgorICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9NTm9kZUZpbHRlci5jcHA6IEFkZGVkLgorICAg
ICAgICAocnVuVGVzdCk6CisgICAgICAgICh0ZXN0V2ViS2l0RE9NTm9kZUZpbHRlclRyZWVXYWxr
ZXIpOgorICAgICAgICAodGVzdFdlYktpdERPTU5vZGVGaWx0ZXJOb2RlSXRlcmF0b3IpOgorICAg
ICAgICAoYmVmb3JlQWxsKToKKyAgICAgICAgKGFmdGVyQWxsKToKKyAgICAgICAgKiBndGsvd2Vi
a2l0ZG9tLnB5OgorICAgICAgICAoV2ViS2l0RE9NRG9jR2VuZXJhdG9yU2VjdGlvbnMuX19pbml0
X18pOgorICAgICAgICAoV2ViS2l0RE9NRG9jR2VuZXJhdG9yU2VjdGlvbnMuX3N5bWJvbF9saXN0
KToKKyAgICAgICAgKFdlYktpdERPTURvY0dlbmVyYXRvclNlY3Rpb25zLndyaXRlX3NlY3Rpb24p
OgorCiAyMDE0LTA2LTE1ICBSeXVhbiBDaG9pICA8cnl1YW4uY2hvaUBzYW1zdW5nLmNvbT4KIAog
ICAgICAgICBbRUZMXVtXSzJdIENoYW5nZSBld2tfdmlld19zZXR0aW5nc19nZXQgdG8gZXdrX3Bh
Z2VfZ3JvdXBfc2V0dGluZ3NfZ2V0CmRpZmYgLS1naXQgYS9Ub29scy9TY3JpcHRzL3dlYmtpdHB5
L3N0eWxlL2NoZWNrZXIucHkgYi9Ub29scy9TY3JpcHRzL3dlYmtpdHB5L3N0eWxlL2NoZWNrZXIu
cHkKaW5kZXggMzMwYTM0OS4uNmRhZTkzMiAxMDA2NDQKLS0tIGEvVG9vbHMvU2NyaXB0cy93ZWJr
aXRweS9zdHlsZS9jaGVja2VyLnB5CisrKyBiL1Rvb2xzL1NjcmlwdHMvd2Via2l0cHkvc3R5bGUv
Y2hlY2tlci5weQpAQCAtMTUzLDYgKzE1Myw3IEBAIF9QQVRIX1JVTEVTX1NQRUNJRklFUiA9IFsK
ICAgICAgICJTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTUN1c3RvbS5o
IiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJl
Y2F0ZWQuaCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRE
T01FdmVudFRhcmdldC5oIiwKKyAgICAgICJTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0
L1dlYktpdERPTU5vZGVGaWx0ZXIuaCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0dPYmplY3QiLAogICAgICAgIlNvdXJjZS9XZWJLaXQvZ3RrL3dlYmtpdC8i
LAogICAgICAgIlRvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay8iXSwKQEAgLTE2MCw2ICsxNjEsOCBA
QCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAgICAgICAiLXJlYWRhYmlsaXR5L3BhcmFtZXRl
cl9uYW1lIiwKICAgICAgICItcmVhZGFiaWxpdHkvbnVsbCIsCiAgICAgICAiLXJlYWRhYmlsaXR5
L2VudW1fY2FzaW5nIiwKKyAgICAgICItd2hpdGVzcGFjZS9kZWNsYXJhdGlvbiIsCisgICAgICAi
LXdoaXRlc3BhY2UvaW5kZW50IiwKICAgICAgICItd2hpdGVzcGFjZS9wYXJlbnMiXSksCiAKICAg
ICAoWyMgVGhlIEdUSysgQVBJIHVzZSB1cHBlciBjYXNlLCB1bmRlcnNjb3JlIHNlcGFyYXRlZCwg
d29yZHMgaW4KQEAgLTIyMSw2ICsyMjQsNyBAQCBfUEFUSF9SVUxFU19TUEVDSUZJRVIgPSBbCiAg
ICAgICAiU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29iamVjdC9XZWJLaXRET01DdXN0b20uY3Bw
IiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktpdERPTURlcHJl
Y2F0ZWQuY3BwIiwKICAgICAgICJTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9nb2JqZWN0L1dlYktp
dERPTUV2ZW50VGFyZ2V0LmNwcCIsCisgICAgICAiU291cmNlL1dlYkNvcmUvYmluZGluZ3MvZ29i
amVjdC9XZWJLaXRET01Ob2RlRmlsdGVyLmNwcCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL1ZpZGVvU2lua0dTdHJlYW1lcjEuY3BwIiwKICAgICAg
ICJTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvVmlkZW9TaW5rR1N0
cmVhbWVyLmNwcCIsCiAgICAgICAiU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL1dlYktpdFdlYlNvdXJjZUdTdHJlYW1lci5jcHAiLApkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0IGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0NNYWtlTGlzdHMudHh0CmluZGV4IDdhNDliZWUu
Ljk3MDg1M2EgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0
ay9DTWFrZUxpc3RzLnR4dAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJH
dGsvQ01ha2VMaXN0cy50eHQKQEAgLTgyLDcgKzgyLDcgQEAgbWFjcm8oQUREX1dLMl9URVNUIHRl
c3RfbmFtZSkKIGVuZG1hY3JvKCkKIAogQUREX1dLMl9URVNUX1dFQl9FWFRFTlNJT04oV2ViRXh0
ZW5zaW9uVGVzdCBXZWJFeHRlbnNpb25UZXN0LmNwcCkKLUFERF9XSzJfVEVTVF9XRUJfRVhURU5T
SU9OKFdlYlByb2Nlc3NUZXN0IERPTU5vZGVUZXN0LmNwcCBGcmFtZVRlc3QuY3BwIFdlYlByb2Nl
c3NUZXN0LmNwcCkKK0FERF9XSzJfVEVTVF9XRUJfRVhURU5TSU9OKFdlYlByb2Nlc3NUZXN0IERP
TU5vZGVUZXN0LmNwcCBET01Ob2RlRmlsdGVyVGVzdC5jcHAgRnJhbWVUZXN0LmNwcCBXZWJQcm9j
ZXNzVGVzdC5jcHApCiAKIEFERF9XSzJfVEVTVChJbnNwZWN0b3JUZXN0U2VydmVyIEluc3BlY3Rv
clRlc3RTZXJ2ZXIuY3BwKQogQUREX1dLMl9URVNUKFRlc3RBdXRoZW50aWNhdGlvbiBUZXN0QXV0
aGVudGljYXRpb24uY3BwKQpAQCAtOTAsNiArOTAsNyBAQCBBRERfV0syX1RFU1QoVGVzdEJhY2tG
b3J3YXJkTGlzdCBUZXN0QmFja0ZvcndhcmRMaXN0LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0Q29u
dGV4dE1lbnUgVGVzdENvbnRleHRNZW51LmNwcCkKIEFERF9XSzJfVEVTVChUZXN0Q29va2llTWFu
YWdlciBUZXN0Q29va2llTWFuYWdlci5jcHApCiBBRERfV0syX1RFU1QoVGVzdERPTU5vZGUgVGVz
dERPTU5vZGUuY3BwKQorQUREX1dLMl9URVNUKFRlc3RET01Ob2RlRmlsdGVyIFRlc3RET01Ob2Rl
RmlsdGVyLmNwcCkKIEFERF9XSzJfVEVTVChUZXN0RG93bmxvYWRzIFRlc3REb3dubG9hZHMuY3Bw
KQogQUREX1dLMl9URVNUKFRlc3RXZWJLaXRGYXZpY29uRGF0YWJhc2UgVGVzdFdlYktpdEZhdmlj
b25EYXRhYmFzZS5jcHApCiBBRERfV0syX1RFU1QoVGVzdFdlYktpdEZpbmRDb250cm9sbGVyIFRl
c3RXZWJLaXRGaW5kQ29udHJvbGxlci5jcHApCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdDJHdGsvRE9NTm9kZUZpbHRlclRlc3QuY3BwIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVGaWx0ZXJUZXN0LmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmNmNTMxCi0tLSAvZGV2L251bGwKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXQyR3RrL0RPTU5vZGVGaWx0ZXJUZXN0LmNwcApA
QCAtMCwwICsxLDIwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJZ2FsaWEgUy5MLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJXZWJQcm9jZXNzVGVzdC5oIgorI2luY2x1
ZGUgPGdpby9naW8uaD4KKyNpbmNsdWRlIDx3ZWJraXQyL3dlYmtpdC13ZWItZXh0ZW5zaW9uLmg+
CisjaW5jbHVkZSA8d3RmL2dvYmplY3QvR1VuaXF1ZVB0ci5oPgorCit0eXBlZGVmIHN0cnVjdCBf
V2ViS2l0Tm9kZUZpbHRlciB7CisgICAgR09iamVjdCBwYXJlbnQ7Cit9IFdlYktpdE5vZGVGaWx0
ZXI7CisKK3R5cGVkZWYgc3RydWN0IF9XZWJLaXROb2RlRmlsdGVyQ2xhc3MgeworICAgIEdPYmpl
Y3RDbGFzcyBwYXJlbnRDbGFzczsKK30gV2ViS2l0Tm9kZUZpbHRlckNsYXNzOworCitzdGF0aWMg
c2hvcnQgd2Via2l0Tm9kZUZpbHRlckFjY2VwdE5vZGUoV2ViS2l0RE9NTm9kZUZpbHRlciosIFdl
YktpdERPTU5vZGUqIG5vZGUpCit7CisgICAgLy8gRmlsdGVyIG91dCBpbnB1dCBlbGVtZW50cy4K
KyAgICByZXR1cm4gV0VCS0lUX0RPTV9JU19IVE1MX0lOUFVUX0VMRU1FTlQobm9kZSkgPyBXRUJL
SVRfRE9NX05PREVfRklMVEVSX1JFSkVDVCA6IFdFQktJVF9ET01fTk9ERV9GSUxURVJfQUNDRVBU
OworfQorCitzdGF0aWMgdm9pZCB3ZWJraXROb2RlRmlsdGVyRE9NTm9kZUZpbHRlcklmYWNlSW5p
dChXZWJLaXRET01Ob2RlRmlsdGVySWZhY2UqIGlmYWNlKQoreworICAgIGlmYWNlLT5hY2NlcHRf
bm9kZSA9IHdlYmtpdE5vZGVGaWx0ZXJBY2NlcHROb2RlOworfQorCitHX0RFRklORV9UWVBFX1dJ
VEhfQ09ERShXZWJLaXROb2RlRmlsdGVyLCB3ZWJraXRfbm9kZV9maWx0ZXIsIEdfVFlQRV9PQkpF
Q1QsIEdfSU1QTEVNRU5UX0lOVEVSRkFDRShXRUJLSVRfVFlQRV9ET01fTk9ERV9GSUxURVIsIHdl
YmtpdE5vZGVGaWx0ZXJET01Ob2RlRmlsdGVySWZhY2VJbml0KSkKKworc3RhdGljIHZvaWQgd2Vi
a2l0X25vZGVfZmlsdGVyX2luaXQoV2ViS2l0Tm9kZUZpbHRlciopCit7Cit9CisKK3N0YXRpYyB2
b2lkIHdlYmtpdF9ub2RlX2ZpbHRlcl9jbGFzc19pbml0KFdlYktpdE5vZGVGaWx0ZXJDbGFzcyop
Cit7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZE5vZGVzQWxsW10gPSB7ICJIVE1M
IiwgIkhFQUQiLCAiVElUTEUiLCAiI3RleHQiLCAiQk9EWSIsICJJTlBVVCIsICJJTlBVVCIsICJC
UiIgfTsKK3N0YXRpYyBjb25zdCBjaGFyKiBleHBlY3RlZE5vZGVzTm9JbnB1dFtdID0geyAiSFRN
TCIsICJIRUFEIiwgIlRJVExFIiwgIiN0ZXh0IiwgIkJPRFkiLCAiQlIiIH07CitzdGF0aWMgY29u
c3QgY2hhciogZXhwZWN0ZWRFbGVtZW50c05vSW5wdXRbXSA9IHsgIkhUTUwiLCAiSEVBRCIsICJU
SVRMRSIsICJCT0RZIiwgIkJSIiB9OworCitjbGFzcyBXZWJLaXRET01Ob2RlRmlsdGVyVGVzdCA6
IHB1YmxpYyBXZWJQcm9jZXNzVGVzdCB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NPd25QdHI8
V2ViUHJvY2Vzc1Rlc3Q+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBXZWJLaXRET01O
b2RlRmlsdGVyVGVzdCgpKTsgfQorCitwcml2YXRlOgorICAgIGd1aW50NjQgd2ViUGFnZUZyb21B
cmdzKEdWYXJpYW50KiBhcmdzKQorICAgIHsKKyAgICAgICAgR1ZhcmlhbnRJdGVyIGl0ZXI7Cisg
ICAgICAgIGdfdmFyaWFudF9pdGVyX2luaXQoJml0ZXIsIGFyZ3MpOworCisgICAgICAgIGNvbnN0
IGNoYXIqIGtleTsKKyAgICAgICAgR1ZhcmlhbnQqIHZhbHVlOworICAgICAgICB3aGlsZSAoZ192
YXJpYW50X2l0ZXJfbG9vcCgmaXRlciwgInsmc3Z9IiwgJmtleSwgJnZhbHVlKSkgeworICAgICAg
ICAgICAgaWYgKCFzdHJjbXAoa2V5LCAicGFnZUlEIikgJiYgZ192YXJpYW50X2NsYXNzaWZ5KHZh
bHVlKSA9PSBHX1ZBUklBTlRfQ0xBU1NfVUlOVDY0KQorICAgICAgICAgICAgICAgIHJldHVybiBn
X3ZhcmlhbnRfZ2V0X3VpbnQ2NCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBnX2Fzc2Vy
dF9ub3RfcmVhY2hlZCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBib29sIHRl
c3RUcmVlV2Fsa2VyKFdlYktpdFdlYkV4dGVuc2lvbiogZXh0ZW5zaW9uLCBHVmFyaWFudCogYXJn
cykKKyAgICB7CisgICAgICAgIFdlYktpdFdlYlBhZ2UqIHBhZ2UgPSB3ZWJraXRfd2ViX2V4dGVu
c2lvbl9nZXRfcGFnZShleHRlbnNpb24sIHdlYlBhZ2VGcm9tQXJncyhhcmdzKSk7CisgICAgICAg
IGdfYXNzZXJ0KFdFQktJVF9JU19XRUJfUEFHRShwYWdlKSk7CisgICAgICAgIFdlYktpdERPTURv
Y3VtZW50KiBkb2N1bWVudCA9IHdlYmtpdF93ZWJfcGFnZV9nZXRfZG9tX2RvY3VtZW50KHBhZ2Up
OworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX0RPQ1VNRU5UKGRvY3VtZW50KSk7CisK
KyAgICAgICAgV2ViS2l0RE9NRWxlbWVudCogcm9vdCA9IHdlYmtpdF9kb21fZG9jdW1lbnRfZ2V0
X2VsZW1lbnRfYnlfaWQoZG9jdW1lbnQsICJyb290Iik7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJ
VF9ET01fSVNfTk9ERShyb290KSk7CisKKyAgICAgICAgLy8gTm8gZmlsdGVyLgorICAgICAgICBX
ZWJLaXRET01UcmVlV2Fsa2VyKiB3YWxrZXIgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90
cmVlX3dhbGtlcihkb2N1bWVudCwgV0VCS0lUX0RPTV9OT0RFKHJvb3QpLCBXRUJLSVRfRE9NX05P
REVfRklMVEVSX1NIT1dfQUxMLCBudWxscHRyLCBGQUxTRSwgbnVsbHB0cik7CisgICAgICAgIGdf
YXNzZXJ0KFdFQktJVF9ET01fSVNfVFJFRV9XQUxLRVIod2Fsa2VyKSk7CisgICAgICAgIGdfYXNz
ZXJ0KCF3ZWJraXRfZG9tX3RyZWVfd2Fsa2VyX2dldF9maWx0ZXIod2Fsa2VyKSk7CisKKyAgICAg
ICAgdW5zaWduZWQgaSA9IDA7CisgICAgICAgIGZvciAoV2ViS2l0RE9NTm9kZSogbm9kZSA9IFdF
QktJVF9ET01fTk9ERShyb290KTsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fdHJlZV93YWxrZXJf
bmV4dF9ub2RlKHdhbGtlciksICsraSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wdWludChp
LCA8LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWROb2Rlc0FsbCkpOworICAgICAgICAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBub2RlTmFtZSh3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShub2RlKSk7
CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIobm9kZU5hbWUuZ2V0KCksID09LCBleHBlY3Rl
ZE5vZGVzQWxsW2ldKTsKKyAgICAgICAgfQorICAgICAgICBnX2Fzc2VydF9jbXB1aW50KGksID09
LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWROb2Rlc0FsbCkpOworCisgICAgICAgIC8vIElucHV0IGVs
ZW1lbnRzIGZpbHRlci4KKyAgICAgICAgR1JlZlB0cjxXZWJLaXRET01Ob2RlRmlsdGVyPiBmaWx0
ZXIgPSBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8V2ViS2l0RE9NTm9kZUZpbHRlcio+KGdfb2JqZWN0
X25ldyh3ZWJraXRfbm9kZV9maWx0ZXJfZ2V0X3R5cGUoKSwgbnVsbHB0cikpKTsKKyAgICAgICAg
d2Fsa2VyID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfdHJlZV93YWxrZXIoZG9jdW1lbnQs
IFdFQktJVF9ET01fTk9ERShyb290KSwgV0VCS0lUX0RPTV9OT0RFX0ZJTFRFUl9TSE9XX0FMTCwg
ZmlsdGVyLmdldCgpLCBGQUxTRSwgbnVsbHB0cik7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9E
T01fSVNfVFJFRV9XQUxLRVIod2Fsa2VyKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21f
dHJlZV93YWxrZXJfZ2V0X2ZpbHRlcih3YWxrZXIpID09IGZpbHRlci5nZXQoKSk7CisKKyAgICAg
ICAgaSA9IDA7CisgICAgICAgIGZvciAoV2ViS2l0RE9NTm9kZSogbm9kZSA9IFdFQktJVF9ET01f
Tk9ERShyb290KTsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9ub2Rl
KHdhbGtlciksICsraSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBHX05f
RUxFTUVOVFMoZXhwZWN0ZWROb2Rlc05vSW5wdXQpKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8
Y2hhcj4gbm9kZU5hbWUod2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOworICAg
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKG5vZGVOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROb2Rl
c05vSW5wdXRbaV0pOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwgPT0s
IEdfTl9FTEVNRU5UUyhleHBlY3RlZE5vZGVzTm9JbnB1dCkpOworCisgICAgICAgIC8vIFNob3cg
b25seSBlbGVtZW50cywgcmV1c2luZyB0aGUgaW5wdXQgZmlsdGVyLgorICAgICAgICB3YWxrZXIg
PSB3ZWJraXRfZG9tX2RvY3VtZW50X2NyZWF0ZV90cmVlX3dhbGtlcihkb2N1bWVudCwgV0VCS0lU
X0RPTV9OT0RFKHJvb3QpLCBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfRUxFTUVOVCwgZmls
dGVyLmdldCgpLCBGQUxTRSwgbnVsbHB0cik7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01f
SVNfVFJFRV9XQUxLRVIod2Fsa2VyKSk7CisgICAgICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fdHJl
ZV93YWxrZXJfZ2V0X2ZpbHRlcih3YWxrZXIpID09IGZpbHRlci5nZXQoKSk7CisKKyAgICAgICAg
aSA9IDA7CisgICAgICAgIGZvciAoV2ViS2l0RE9NTm9kZSogbm9kZSA9IFdFQktJVF9ET01fTk9E
RShyb290KTsgbm9kZTsgbm9kZSA9IHdlYmtpdF9kb21fdHJlZV93YWxrZXJfbmV4dF9ub2RlKHdh
bGtlciksICsraSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBHX05fRUxF
TUVOVFMoZXhwZWN0ZWRFbGVtZW50c05vSW5wdXQpKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8
Y2hhcj4gbm9kZU5hbWUod2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOworICAg
ICAgICAgICAgZ19hc3NlcnRfY21wc3RyKG5vZGVOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRFbGVt
ZW50c05vSW5wdXRbaV0pOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwg
PT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZEVsZW1lbnRzTm9JbnB1dCkpOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdGVzdE5vZGVJdGVyYXRvcihXZWJLaXRXZWJF
eHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3MpCisgICAgeworICAgICAgICBXZWJL
aXRXZWJQYWdlKiBwYWdlID0gd2Via2l0X3dlYl9leHRlbnNpb25fZ2V0X3BhZ2UoZXh0ZW5zaW9u
LCB3ZWJQYWdlRnJvbUFyZ3MoYXJncykpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfSVNfV0VC
X1BBR0UocGFnZSkpOworICAgICAgICBXZWJLaXRET01Eb2N1bWVudCogZG9jdW1lbnQgPSB3ZWJr
aXRfd2ViX3BhZ2VfZ2V0X2RvbV9kb2N1bWVudChwYWdlKTsKKyAgICAgICAgZ19hc3NlcnQoV0VC
S0lUX0RPTV9JU19ET0NVTUVOVChkb2N1bWVudCkpOworCisgICAgICAgIFdlYktpdERPTUVsZW1l
bnQqIHJvb3QgPSB3ZWJraXRfZG9tX2RvY3VtZW50X2dldF9lbGVtZW50X2J5X2lkKGRvY3VtZW50
LCAicm9vdCIpOworICAgICAgICBnX2Fzc2VydChXRUJLSVRfRE9NX0lTX05PREUocm9vdCkpOwor
CisgICAgICAgIC8vIE5vIGZpbHRlci4KKyAgICAgICAgV2ViS2l0RE9NTm9kZUl0ZXJhdG9yKiBp
dGVyID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcihkb2N1bWVudCwg
V0VCS0lUX0RPTV9OT0RFKHJvb3QpLCBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1dfQUxMLCBu
dWxscHRyLCBGQUxTRSwgbnVsbHB0cik7CisgICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNf
Tk9ERV9JVEVSQVRPUihpdGVyKSk7CisgICAgICAgIGdfYXNzZXJ0KCF3ZWJraXRfZG9tX25vZGVf
aXRlcmF0b3JfZ2V0X2ZpbHRlcihpdGVyKSk7CisKKyAgICAgICAgdW5zaWduZWQgaSA9IDA7Cisg
ICAgICAgIHdoaWxlIChXZWJLaXRET01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2l0ZXJh
dG9yX25leHRfbm9kZShpdGVyLCBudWxscHRyKSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21w
dWludChpLCA8LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWROb2Rlc0FsbCkpOworICAgICAgICAgICAg
R1VuaXF1ZVB0cjxjaGFyPiBub2RlTmFtZSh3ZWJraXRfZG9tX25vZGVfZ2V0X25vZGVfbmFtZShu
b2RlKSk7CisgICAgICAgICAgICBnX2Fzc2VydF9jbXBzdHIobm9kZU5hbWUuZ2V0KCksID09LCBl
eHBlY3RlZE5vZGVzQWxsW2ldKTsKKyAgICAgICAgICAgIGkrKzsKKyAgICAgICAgfQorICAgICAg
ICBnX2Fzc2VydF9jbXB1aW50KGksID09LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWROb2Rlc0FsbCkp
OworCisgICAgICAgIC8vIElucHV0IGVsZW1lbnRzIGZpbHRlci4KKyAgICAgICAgR1JlZlB0cjxX
ZWJLaXRET01Ob2RlRmlsdGVyPiBmaWx0ZXIgPSBhZG9wdEdSZWYoc3RhdGljX2Nhc3Q8V2ViS2l0
RE9NTm9kZUZpbHRlcio+KGdfb2JqZWN0X25ldyh3ZWJraXRfbm9kZV9maWx0ZXJfZ2V0X3R5cGUo
KSwgbnVsbHB0cikpKTsKKyAgICAgICAgaXRlciA9IHdlYmtpdF9kb21fZG9jdW1lbnRfY3JlYXRl
X25vZGVfaXRlcmF0b3IoZG9jdW1lbnQsIFdFQktJVF9ET01fTk9ERShyb290KSwgV0VCS0lUX0RP
TV9OT0RFX0ZJTFRFUl9TSE9XX0FMTCwgZmlsdGVyLmdldCgpLCBGQUxTRSwgbnVsbHB0cik7Cisg
ICAgICAgIGdfYXNzZXJ0KFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihpdGVyKSk7CisgICAg
ICAgIGdfYXNzZXJ0KHdlYmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfZmlsdGVyKGl0ZXIpID09
IGZpbHRlci5nZXQoKSk7CisKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlIChXZWJLaXRE
T01Ob2RlKiBub2RlID0gd2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX25leHRfbm9kZShpdGVyLCBu
dWxscHRyKSkgeworICAgICAgICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBHX05fRUxFTUVO
VFMoZXhwZWN0ZWROb2Rlc05vSW5wdXQpKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4g
bm9kZU5hbWUod2Via2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOworICAgICAgICAg
ICAgZ19hc3NlcnRfY21wc3RyKG5vZGVOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWROb2Rlc05vSW5w
dXRbaV0pOworICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X2Nt
cHVpbnQoaSwgPT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZE5vZGVzTm9JbnB1dCkpOworCisgICAg
ICAgIC8vIFNob3cgb25seSBlbGVtZW50cywgcmV1c2luZyB0aGUgaW5wdXQgZmlsdGVyLgorICAg
ICAgICBpdGVyID0gd2Via2l0X2RvbV9kb2N1bWVudF9jcmVhdGVfbm9kZV9pdGVyYXRvcihkb2N1
bWVudCwgV0VCS0lUX0RPTV9OT0RFKHJvb3QpLCBXRUJLSVRfRE9NX05PREVfRklMVEVSX1NIT1df
RUxFTUVOVCwgZmlsdGVyLmdldCgpLCBGQUxTRSwgbnVsbHB0cik7CisgICAgICAgIGdfYXNzZXJ0
KFdFQktJVF9ET01fSVNfTk9ERV9JVEVSQVRPUihpdGVyKSk7CisgICAgICAgIGdfYXNzZXJ0KHdl
YmtpdF9kb21fbm9kZV9pdGVyYXRvcl9nZXRfZmlsdGVyKGl0ZXIpID09IGZpbHRlci5nZXQoKSk7
CisKKyAgICAgICAgaSA9IDA7CisgICAgICAgIHdoaWxlIChXZWJLaXRET01Ob2RlKiBub2RlID0g
d2Via2l0X2RvbV9ub2RlX2l0ZXJhdG9yX25leHRfbm9kZShpdGVyLCBudWxscHRyKSkgeworICAg
ICAgICAgICAgZ19hc3NlcnRfY21wdWludChpLCA8LCBHX05fRUxFTUVOVFMoZXhwZWN0ZWRFbGVt
ZW50c05vSW5wdXQpKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbm9kZU5hbWUod2Vi
a2l0X2RvbV9ub2RlX2dldF9ub2RlX25hbWUobm9kZSkpOworICAgICAgICAgICAgZ19hc3NlcnRf
Y21wc3RyKG5vZGVOYW1lLmdldCgpLCA9PSwgZXhwZWN0ZWRFbGVtZW50c05vSW5wdXRbaV0pOwor
ICAgICAgICAgICAgaSsrOworICAgICAgICB9CisgICAgICAgIGdfYXNzZXJ0X2NtcHVpbnQoaSwg
PT0sIEdfTl9FTEVNRU5UUyhleHBlY3RlZEVsZW1lbnRzTm9JbnB1dCkpOworCisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKworICAgIHZpcnR1YWwgYm9vbCBydW5UZXN0KGNvbnN0IGNoYXIq
IHRlc3ROYW1lLCBXZWJLaXRXZWJFeHRlbnNpb24qIGV4dGVuc2lvbiwgR1ZhcmlhbnQqIGFyZ3Mp
CisgICAgeworICAgICAgICBpZiAoIXN0cmNtcCh0ZXN0TmFtZSwgInRyZWUtd2Fsa2VyIikpCisg
ICAgICAgICAgICByZXR1cm4gdGVzdFRyZWVXYWxrZXIoZXh0ZW5zaW9uLCBhcmdzKTsKKyAgICAg
ICAgaWYgKCFzdHJjbXAodGVzdE5hbWUsICJub2RlLWl0ZXJhdG9yIikpCisgICAgICAgICAgICBy
ZXR1cm4gdGVzdE5vZGVJdGVyYXRvcihleHRlbnNpb24sIGFyZ3MpOworCisgICAgICAgIGdfYXNz
ZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9OworCitz
dGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fKChjb25zdHJ1Y3RvcikpIHJlZ2lzdGVyVGVzdHMoKQor
eworICAgIFJFR0lTVEVSX1RFU1QoV2ViS2l0RE9NTm9kZUZpbHRlclRlc3QsICJXZWJLaXRET01O
b2RlRmlsdGVyL3RyZWUtd2Fsa2VyIik7CisgICAgUkVHSVNURVJfVEVTVChXZWJLaXRET01Ob2Rl
RmlsdGVyVGVzdCwgIldlYktpdERPTU5vZGVGaWx0ZXIvbm9kZS1pdGVyYXRvciIpOworfQorCisK
ZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Mkd0ay9UZXN0RE9N
Tm9kZUZpbHRlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdDJHdGsvVGVz
dERPTU5vZGVGaWx0ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQw
MzYwMjEKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktp
dDJHdGsvVGVzdERPTU5vZGVGaWx0ZXIuY3BwCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTQgSWdhbGlhIFMuTC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiwxIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1
ZGUgIldlYlByb2Nlc3NUZXN0UnVubmVyLmgiCisjaW5jbHVkZSAiV2ViVmlld1Rlc3QuaCIKKyNp
bmNsdWRlIDxndGsvZ3RrLmg+CisjaW5jbHVkZSA8d2Via2l0Mi93ZWJraXQyLmg+CisKK3N0YXRp
YyBXZWJQcm9jZXNzVGVzdFJ1bm5lciogdGVzdFJ1bm5lcjsKKworc3RhdGljIGNvbnN0IGNoYXIq
IHRlc3RIVE1MID0gIjxodG1sIGlkPSdyb290Jz48aGVhZD48dGl0bGU+RE9NTm9kZVRyZWVXYWxr
ZXI8L3RpdGxlPjwvaGVhZD4iCisgICAgIjxib2R5PjxpbnB1dCB0eXBlPSdidXR0b24nIG5hbWU9
J3B1c2gnIHZhbHVlPSdwdXNoJz48aW5wdXQgdHlwZT0nYnV0dG9uJyBuYW1lPSdjbGVhcicgdmFs
dWU9J2NsZWFyJz48YnI+PC9ib2R5PjwvaHRtbD4iOworCitzdGF0aWMgdm9pZCBydW5UZXN0KFdl
YlZpZXdUZXN0KiB0ZXN0LCBjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHRlc3QtPmxvYWRIdG1s
KHRlc3RIVE1MLCBudWxscHRyKTsKKyAgICB0ZXN0LT53YWl0VW50aWxMb2FkRmluaXNoZWQoKTsK
KworICAgIEdWYXJpYW50QnVpbGRlciBidWlsZGVyOworICAgIGdfdmFyaWFudF9idWlsZGVyX2lu
aXQoJmJ1aWxkZXIsIEdfVkFSSUFOVF9UWVBFX1ZBUkRJQ1QpOworICAgIGdfdmFyaWFudF9idWls
ZGVyX2FkZCgmYnVpbGRlciwgIntzdn0iLCAicGFnZUlEIiwgZ192YXJpYW50X25ld191aW50NjQo
d2Via2l0X3dlYl92aWV3X2dldF9wYWdlX2lkKHRlc3QtPm1fd2ViVmlldykpKTsKKyAgICBnX2Fz
c2VydCh0ZXN0UnVubmVyLT5ydW5UZXN0KCJXZWJLaXRET01Ob2RlRmlsdGVyIiwgbmFtZSwgZ192
YXJpYW50X2J1aWxkZXJfZW5kKCZidWlsZGVyKSkpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0V2Vi
S2l0RE9NTm9kZUZpbHRlclRyZWVXYWxrZXIoV2ViVmlld1Rlc3QqIHRlc3QsIGdjb25zdHBvaW50
ZXIpCit7CisgICAgcnVuVGVzdCh0ZXN0LCAidHJlZS13YWxrZXIiKTsKK30KKworc3RhdGljIHZv
aWQgdGVzdFdlYktpdERPTU5vZGVGaWx0ZXJOb2RlSXRlcmF0b3IoV2ViVmlld1Rlc3QqIHRlc3Qs
IGdjb25zdHBvaW50ZXIpCit7CisgICAgcnVuVGVzdCh0ZXN0LCAibm9kZS1pdGVyYXRvciIpOwor
fQorCit2b2lkIGJlZm9yZUFsbCgpCit7CisgICAgdGVzdFJ1bm5lciA9IG5ldyBXZWJQcm9jZXNz
VGVzdFJ1bm5lcigpOworICAgIHdlYmtpdF93ZWJfY29udGV4dF9zZXRfd2ViX2V4dGVuc2lvbnNf
ZGlyZWN0b3J5KHdlYmtpdF93ZWJfY29udGV4dF9nZXRfZGVmYXVsdCgpLCBXRUJLSVRfVEVTVF9X
RUJfRVhURU5TSU9OU19ESVIpOworCisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9k
ZUZpbHRlciIsICJ0cmVlLXdhbGtlciIsIHRlc3RXZWJLaXRET01Ob2RlRmlsdGVyVHJlZVdhbGtl
cik7CisgICAgV2ViVmlld1Rlc3Q6OmFkZCgiV2ViS2l0RE9NTm9kZUZpbHRlciIsICJub2RlLWl0
ZXJhdG9yIiwgdGVzdFdlYktpdERPTU5vZGVGaWx0ZXJOb2RlSXRlcmF0b3IpOworfQorCit2b2lk
IGFmdGVyQWxsKCkKK3sKKyAgICBkZWxldGUgdGVzdFJ1bm5lcjsKK30KZGlmZiAtLWdpdCBhL1Rv
b2xzL2d0ay93ZWJraXRkb20ucHkgYi9Ub29scy9ndGsvd2Via2l0ZG9tLnB5CmluZGV4IDEwZGIw
NDAuLmZhMzkxOGMgMTAwNzU1Ci0tLSBhL1Rvb2xzL2d0ay93ZWJraXRkb20ucHkKKysrIGIvVG9v
bHMvZ3RrL3dlYmtpdGRvbS5weQpAQCAtOTIsNiArOTIsNyBAQCBjbGFzcyBXZWJLaXRET01Eb2NH
ZW5lcmF0b3JTZWN0aW9ucyhXZWJLaXRET01Eb2NHZW5lcmF0b3IpOgogICAgICAgICBzZWxmLl9z
ZWNvbmRfZGVjYW1lbGl6ZV9yZSA9IHJlLmNvbXBpbGUoJyhbYS16MC05XSkoW0EtWl0pJykKICAg
ICAgICAgc2VsZi5fZG9tX2NsYXNzX3JlID0gcmUuY29tcGlsZSgnKF5XZWJLaXRET00pKC4rKSQn
KQogICAgICAgICBzZWxmLl9mdW5jdGlvbl9yZSA9IHJlLmNvbXBpbGUoJ14uKyAoLispXCgoLisp
XCkkJykKKyAgICAgICAgc2VsZi5fY29uc3RhbnRfcmUgPSByZS5jb21waWxlKCdeW0EtWl9dKyQn
KQogCiAgICAgZGVmIF9kb21fY2xhc3Moc2VsZiwgY2xhc3NfbmFtZSk6CiAgICAgICAgIHJldHVy
biBzZWxmLl9kb21fY2xhc3NfcmUuc3ViKHInXDInLCBjbGFzc19uYW1lKQpAQCAtMTExLDYgKzEx
MiwxMSBAQCBjbGFzcyBXZWJLaXRET01Eb2NHZW5lcmF0b3JTZWN0aW9ucyhXZWJLaXRET01Eb2NH
ZW5lcmF0b3IpOgogICAgICAgICByZXR2YWwgPSBbXQogICAgICAgICBmID0gb3BlbihzeW1ib2xf
ZmlsZSwgJ3InKQogICAgICAgICBmb3IgbGluZSBpbiBmLnJlYWRsaW5lcygpOgorICAgICAgICAg
ICAgbWF0Y2ggPSBzZWxmLl9jb25zdGFudF9yZS5tYXRjaChsaW5lKQorICAgICAgICAgICAgaWYg
bWF0Y2g6CisgICAgICAgICAgICAgICAgcmV0dmFsLmFwcGVuZChsaW5lLnN0cmlwKCdcbicpKQor
ICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKICAgICAgICAgICAgIG1hdGNoID0gc2VsZi5fZnVu
Y3Rpb25fcmUubWF0Y2gobGluZSkKICAgICAgICAgICAgIGlmIG5vdCBtYXRjaCBvciBtYXRjaC5n
cm91cCgxKS5lbmRzd2l0aCgnZ2V0X3R5cGUnKToKICAgICAgICAgICAgICAgICBjb250aW51ZQpA
QCAtMTIxLDcgKzEyNyw3IEBAIGNsYXNzIFdlYktpdERPTURvY0dlbmVyYXRvclNlY3Rpb25zKFdl
YktpdERPTURvY0dlbmVyYXRvcik6CiAgICAgZGVmIHdyaXRlX3NlY3Rpb24oc2VsZiwgc3ltYm9s
X2ZpbGUpOgogICAgICAgICBjbGFzc19uYW1lID0gb3MucGF0aC5iYXNlbmFtZShzeW1ib2xfZmls
ZSkucmVwbGFjZSgiLnN5bWJvbHMiLCAiIikKICAgICAgICAgaXNfY3VzdG9tID0gY2xhc3NfbmFt
ZSA9PSAnV2ViS2l0RE9NQ3VzdG9tJwotICAgICAgICBpc19pbnRlcmZhY2UgPSBjbGFzc19uYW1l
ID09ICdXZWJLaXRET01FdmVudFRhcmdldCcKKyAgICAgICAgaXNfaW50ZXJmYWNlID0gY2xhc3Nf
bmFtZSBpbiBbJ1dlYktpdERPTUV2ZW50VGFyZ2V0JywgJ1dlYktpdERPTU5vZGVGaWx0ZXInXQog
ICAgICAgICBpc19vYmplY3QgPSBjbGFzc19uYW1lID09ICdXZWJLaXRET01PYmplY3QnCiAgICAg
ICAgIHNlbGYud3JpdGUoJzxTRUNUSU9OPlxuJykKICAgICAgICAgc2VsZi53cml0ZSgnPEZJTEU+
JXM8L0ZJTEU+XG48VElUTEU+JXM8L1RJVExFPlxuJyAlIChjbGFzc19uYW1lLCBjbGFzc19uYW1l
KSkK
</data>
<flag name="review"
          id="257708"
          type_id="1"
          status="+"
          setter="gustavo"
    />
          </attachment>
      

    </bug>

</bugzilla>