<?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>35401</bug_id>
          
          <creation_ts>2010-02-25 13:18:27 -0800</creation_ts>
          <short_desc>Fix handling of errors in handling calls over bridge, where base object bridge-type does not match method bridge-type.</short_desc>
          <delta_ts>2010-02-26 14:21:56 -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>WebCore JavaScript</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>ap</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>193863</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-25 13:18:27 -0800</bug_when>
    <thetext>The code assumes users will only attempt to invoke a Java method on a Java base object, etc.  This leads to unsafe casting, and crashiosity.  Should type check that the method &amp; this object match before embarking on the method invocation, throw an exception on type mismatch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193869</commentid>
    <comment_count>1</comment_count>
      <attachid>49530</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-25 13:44:51 -0800</bug_when>
    <thetext>Created attachment 49530
The patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193871</commentid>
    <comment_count>2</comment_count>
      <attachid>49530</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-25 14:01:08 -0800</bug_when>
    <thetext>Comment on attachment 49530
The patch

&gt; +    if (!asObject(runtimeMethod)-&gt;inherits(&amp;CRuntimeMethod::info))
&gt; +        return throwError(exec, TypeError, &quot;Attempt to invoke non-C method on C object.&quot;);

The &quot;C&quot; hierarchy of classes is a huge misnomer, it&apos;s bindings for NPAPI plug-ins. Please don&apos;t call it &quot;C&quot; in text visible to Web developers.

+    const MethodList &amp;methodList = *runtimeMethod-&gt;methods();

Misplaced &amp;. Repeated several times in the patch.

+class ObjcRuntimeMethod : public RuntimeMethod {

The modern spelling is &quot;ObjC&quot;. I used that for RuntimeObject, even though old code used &quot;Objc&quot;.

+        (WebKit::):

This is just a result of a bug in the script, please delete it. Per-function comments would be even better.

+class PluginRuntimeMethod : public RuntimeMethod {

Maybe &quot;ProxyRuntimeMethod&quot;, to match ProxyInstance and ProxyRuntimeObject?

+public:
+    PluginRuntimeMethod(ExecState* exec, const Identifier&amp; name, Bindings::MethodList&amp; list)
+        : RuntimeMethod(exec, name, list)
+    {
+    }
+
+    static const ClassInfo s_info;
+};

Don&apos;t you need to override classInfo() in all those classes?

Looks good, r- for lack of tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193873</commentid>
    <comment_count>3</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-25 14:02:10 -0800</bug_when>
    <thetext>&gt; The &quot;C&quot; hierarchy of classes is a huge misnomer, it&apos;s bindings for NPAPI
&gt; plug-ins. Please don&apos;t call it &quot;C&quot; in text visible to Web developers.

The text should be the same as the one in WebKit, as it&apos;s the same plug-ins we are dealing with, just in-process vs. out of process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194179</commentid>
    <comment_count>4</comment_count>
      <attachid>49603</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-26 11:23:20 -0800</bug_when>
    <thetext>Created attachment 49603
New awesomier patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194202</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-26 12:11:17 -0800</bug_when>
    <thetext>Attachment 49603 did not build on qt:
Build output: http://webkit-commit-queue.appspot.com/results/314585</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194204</commentid>
    <comment_count>6</comment_count>
      <attachid>49603</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-26 12:16:15 -0800</bug_when>
    <thetext>Comment on attachment 49603
New awesomier patch.

 __ZN7WebCore6String8fromUTF8EPKcm
+__ZTVN3JSC13RuntimeMethodE
 __ZNK3JSC8Bindings13RuntimeObject12defaultValueEPNS_9ExecStateENS_22PreferredPrimitiveTypeE

This doesn&apos;t look sorted properly.

+    virtual const ClassInfo* classInfo() const { return &amp;info; }

In RuntimeMethod, it&apos;s s_info. Why does this work (or what is broken)?

+class CRuntimeMethod : public RuntimeMethod {

I didn&apos;t notice it last time, but we really prefer to have classes in their own files in new code.

+#import &quot;JavaScriptCore/Error.h&quot;
 #import &quot;NetscapePluginHostProxy.h&quot;
 #import &quot;ProxyRuntimeObject.h&quot;
 #import &lt;WebCore/IdentifierRep.h&gt;
 #import &lt;WebCore/JSDOMWindow.h&gt;
 #import &lt;WebCore/npruntime_impl.h&gt;
 #import &lt;runtime/PropertyNameArray.h&gt;
+#import &quot;WebCore/runtime_method.h&quot;
 
This looks like a mess. I think it should be &quot;runtime/Error.h&quot; and &lt;WebCore/runtime_method.h&gt;.

+        * java/java-and-plugins.html: Add tests for passing mismatched this objects to methdods.

The patch and ChangeLog don&apos;t include changes for expected results.

With the exception of &quot;one class per file&quot;, the comments above clearly must be addressed before landing, r=me assuming you make the appropriate changes, and also fix Qt build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194293</commentid>
    <comment_count>7</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-02-26 14:21:56 -0800</bug_when>
    <thetext>Fixed all review issues other than the one-class-per-file one.

I strongly disagree with this change.  I believe the purpose of this rule is to make the code easier to maintain by making it simple for developers to find the definitions of classes.  However in the case of a scaffolding class only used within one .cpp I don&apos;t believe that moving this out into a header benefits anyone.  It inflates the size of the codebase, and unnecessarily hides from developers the fact that the scope of the class is constrained (the header is only included in one place, but there is no way for a future engineer coming along to know that).  I think this is a bad application of the rule, which only serves to obfuscate.

Landed in r55312</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49530</attachid>
            <date>2010-02-25 13:44:51 -0800</date>
            <delta_ts>2010-02-26 11:23:20 -0800</delta_ts>
            <desc>The patch</desc>
            <filename>patch.invokeMethod.txt</filename>
            <type>text/plain</type>
            <size>19162</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI1MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDIgQEAKKzIwMTAtMDItMjUgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAzNTQwMSAtIFVuc2FmZSBjYXN0aW5nIG9mIE1ldGhvZCB0eXBlcyBpbiBicmlk
Z2UgY29kZS4KKworICAgICAgICBUaGUgY29kZSBhc3N1bWVzIHVzZXJzIHdpbGwgb25seSBhdHRl
bXB0IHRvIGludm9rZSBhIEphdmEgbWV0aG9kCisgICAgICAgIG9uIGEgSmF2YSBiYXNlIG9iamVj
dCwgZXRjLiAgVGhpcyBsZWFkcyB0byB1bnNhZmUgY2FzdGluZy4KKyAgICAgICAgQWRkIGxhbmd1
YWdlIHNwZWNpZmljIHN1YmNsYXNzZXMgb2YgUnVudGltZU1ldGhvZCwgYW5kIHBhc3MgdGhlCisg
ICAgICAgIFJ1bnRpbWVNZXRob2QgaW50byBpbnZva2VNZXRob2QsIHNvIHdlIGNhbiB0eXBlY2hl
Y2sgYmVmb3JlCisgICAgICAgIGNhc3RpbmcuICBUaHJvdyBhbiBleGNlcHRpb24gb24gdHlwZSBt
aXNtYXRjaC4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OkNSdW50aW1l
TWV0aG9kKToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Oik6CisgICAgICAgIChKU0M6OkJpbmRp
bmdzOjpDSW5zdGFuY2U6OmdldE1ldGhvZCk6CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5z
dGFuY2U6Omludm9rZU1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL2MvY19pbnN0YW5jZS5oOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHA6CisgICAgICAgIChK
YXZhUnVudGltZU1ldGhvZDo6SmF2YVJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoSmF2YUluc3Rh
bmNlOjpnZXRNZXRob2QpOgorICAgICAgICAoSmF2YUluc3RhbmNlOjppbnZva2VNZXRob2QpOgor
ICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oOgorICAgICAgICAqIGJy
aWRnZS9qc2MvQnJpZGdlSlNDLmg6CisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5j
ZS5oOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW06CisgICAgICAgIChP
YmpjUnVudGltZU1ldGhvZDo6T2JqY1J1bnRpbWVNZXRob2QpOgorICAgICAgICAoT2JqY0luc3Rh
bmNlOjpnZXRNZXRob2QpOgorICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOgor
ICAgICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKToKKyAgICAgICAgKiBicmlk
Z2Uvb2JqYy9vYmpjX3J1bnRpbWUubW06CisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpjYWxsT2Jq
Q0ZhbGxiYWNrT2JqZWN0KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9tZXRob2QuY3BwOgor
ICAgICAgICAoSlNDOjpjYWxsUnVudGltZU1ldGhvZCk6CisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU9iamVjdDo6bWV0aG9kR2V0dGVy
KToKKwogMjAxMC0wMi0yNSAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAog
ICAgICAgICBRdCBhbmQgR3RrIGJ1aWxkIGZpeGVzLgpJbmRleDogV2ViQ29yZS9XZWJDb3JlLmJh
c2UuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5iYXNlLmV4cAkocmV2aXNpb24g
NTUxNjMpCisrKyBXZWJDb3JlL1dlYkNvcmUuYmFzZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NCw2ICsxMzQsNyBAQCBfX1o0Y29yZVAxOURPTURvY3VtZW50RnJhZ21lbnQKIF9fWjRjb3JlUDIy
RE9NQ1NTU3R5bGVEZWNsYXJhdGlvbgogX19aNGNvcmVQN0RPTU5vZGUKIF9fWjRjb3JlUDhET01S
YW5nZQorX19aTjNKU0MxM1J1bnRpbWVNZXRob2RDMUVQTlNfOUV4ZWNTdGF0ZUVSS05TXzEwSWRl
bnRpZmllckVSTjNXVEY2VmVjdG9ySVBOU184QmluZGluZ3M2TWV0aG9kRUxtMEVFRQogX19aTjNK
U0M4QmluZGluZ3M4SW5zdGFuY2UxNm5ld1J1bnRpbWVPYmplY3RFUE5TXzlFeGVjU3RhdGVFCiBf
X1pON1dlYkNvcmUxME1vdXNlRXZlbnRDMUVSS05TXzEyQXRvbWljU3RyaW5nRWJiTjNXVEYxMFBh
c3NSZWZQdHJJTlNfOURPTVdpbmRvd0VFRWlpaWlpYmJiYnROUzVfSU5TXzExRXZlbnRUYXJnZXRF
RUVOUzVfSU5TXzlDbGlwYm9hcmRFRUViCiBfX1pON1dlYkNvcmUxMFNjcm9sbFZpZXcxN3NldFNj
cm9sbGJhck1vZGVzRU5TXzEzU2Nyb2xsYmFyTW9kZUVTMV8KSW5kZXg6IFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zMzUs
NyArMzM1LDcgQEAKIAkJMUE1NjlEMUUwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXku
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlD
RUYwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfYXJyYXkuY3BwICovOyB9OwogCQkxQTU2OUQx
RjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1
bnRpbWVfYXJyYXkuaCAqLzsgfTsKIAkJMUE1NjlEMjAwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRp
bWVfbWV0aG9kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNTY5Q0YxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5jcHAgKi87IH07
Ci0JCTFBNTY5RDIxMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX21ldGhvZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRjIwRDdFMkI4MjAw
N0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmggKi87IH07CisJCTFBNTY5RDIxMEQ3RTJCODIwMDdD
Mzk4MyAvKiBydW50aW1lX21ldGhvZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMUE1NjlDRjIwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9k
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE1
NjlEMjIwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0YzMEQ3RTJCODIwMDdDMzk4
MyAvKiBydW50aW1lX29iamVjdC5jcHAgKi87IH07CiAJCTFBNTY5RDIzMEQ3RTJCODIwMDdDMzk4
MyAvKiBydW50aW1lX29iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE1NjlDRjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0Lmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE1NjlE
MjQwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfcm9vdC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNGNTBEN0UyQjgyMDA3QzM5ODMgLyog
cnVudGltZV9yb290LmNwcCAqLzsgfTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfbWV0
aG9kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21ldGhvZC5jcHAJ
KHJldmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBjYWxsUnVudGltZQogICAgIEFTU0VSVChpbnN0YW5jZSk7CiAKICAgICBpbnN0YW5jZS0+
YmVnaW4oKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhl
YywgKm1ldGhvZC0+bWV0aG9kcygpLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3Rh
bmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kLCBhcmdzKTsKICAgICBpbnN0YW5jZS0+ZW5k
KCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVf
b2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5j
cHAJKHJldmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsMTMgKzExNCwxMSBAQCBKU1ZhbHVlIFJ1bnRpbWVPYmpl
Y3Q6Om1ldGhvZEdldHRlcihFeGVjCiAgICAgCiAgICAgaW5zdGFuY2UtPmJlZ2luKCk7CiAKLSAg
ICBDbGFzcyAqYUNsYXNzID0gaW5zdGFuY2UtPmdldENsYXNzKCk7Ci0gICAgTWV0aG9kTGlzdCBt
ZXRob2RMaXN0ID0gYUNsYXNzLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCBpbnN0YW5jZS5n
ZXQoKSk7Ci0gICAgSlNWYWx1ZSByZXN1bHQgPSBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRob2QoZXhl
YywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKKyAgICBKU1ZhbHVlIG1ldGhvZCA9IGluc3Rh
bmNlLT5nZXRNZXRob2QoZXhlYywgcHJvcGVydHlOYW1lKTsKIAogICAgIGluc3RhbmNlLT5lbmQo
KTsKICAgICAgICAgICAgIAotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1ldGhvZDsK
IH0KIAogYm9vbCBSdW50aW1lT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlICpl
eGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkocmV2aXNpb24gNTUxNjMpCisrKyBXZWJDb3Jl
L2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBA
CiAjaW5jbHVkZSAiY191dGlsaXR5LmgiCiAjaW5jbHVkZSAiSWRlbnRpZmllclJlcC5oIgogI2lu
Y2x1ZGUgIm5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKICNp
bmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KICNp
bmNsdWRlIDxydW50aW1lL0Vycm9yLmg+CkBAIC0xMDEsOCArMTAyLDMxIEBAIGJvb2wgQ0luc3Rh
bmNlOjpzdXBwb3J0c0ludm9rZURlZmF1bHRNZXQKICAgICByZXR1cm4gX29iamVjdC0+X2NsYXNz
LT5pbnZva2VEZWZhdWx0OwogfQogCi1KU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlz
dCYgYXJncykKK2NsYXNzIENSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2Qgewor
cHVibGljOgorICAgIENSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRp
ZmllciYgbmFtZSwgQmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCisgICAgICAgIDogUnVudGlt
ZU1ldGhvZChleGVjLCBuYW1lLCBsaXN0KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgY29u
c3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NvbnN0IENsYXNzSW5mbyBDUnVudGltZU1ldGhv
ZDo6c19pbmZvID0geyAiQ1J1bnRpbWVNZXRob2QiLCAmUnVudGltZU1ldGhvZDo6c19pbmZvLCAw
LCAwIH07CisKK0pTVmFsdWUgQ0luc3RhbmNlOjpnZXRNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CisgICAgTWV0aG9kTGlzdCBtZXRob2RM
aXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgdGhpcyk7CisgICAg
cmV0dXJuIG5ldyAoZXhlYykgUnVudGltZU1ldGhvZChleGVjLCBwcm9wZXJ0eU5hbWUsIG1ldGhv
ZExpc3QpOworfQorCitKU1ZhbHVlIENJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSog
ZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncykK
K3sKKyAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5pbmhlcml0cygmQ1J1bnRpbWVN
ZXRob2Q6OmluZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBUeXBlRXJyb3Is
ICJBdHRlbXB0IHRvIGludm9rZSBub24tQyBtZXRob2Qgb24gQyBvYmplY3QuIik7CisKKyAgICBj
b25zdCBNZXRob2RMaXN0ICZtZXRob2RMaXN0ID0gKnJ1bnRpbWVNZXRob2QtPm1ldGhvZHMoKTsK
KwogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgYXJlIG5vdCBhbGxvd2VkIGJ5IE5QT2JqZWN0
cy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAgIC8vIG5hbWUgbWF0Y2ggZm9yIGEgcGFydGljdWxh
ciBtZXRob2QuCiAgICAgQVNTRVJUKG1ldGhvZExpc3Quc2l6ZSgpID09IDEpOwpJbmRleDogV2Vi
Q29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uv
Yy9jX2luc3RhbmNlLmgJKHJldmlzaW9uIDU1MTYzKQorKysgV2ViQ29yZS9icmlkZ2UvYy9jX2lu
c3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHZp
cnR1YWwgSlNWYWx1ZSB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNW
YWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0
IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGdldE1l
dGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0aG9k
KiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZv
a2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1
bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCkluZGV4OiBXZWJDb3JlL2Jy
aWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuY3BwCShyZXZpc2lvbiA1NTE2MykKKysrIFdl
YkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkpOSVV0aWxpdHlQcml2YXRlLmgiCiAjaW5jbHVk
ZSAiSmF2YUNsYXNzSlNDLmgiCiAjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgInJ1bnRp
bWVfbWV0aG9kLmgiCiAjaW5jbHVkZSAicnVudGltZV9vYmplY3QuaCIKICNpbmNsdWRlICJydW50
aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KQEAgLTEwMyw4ICsxMDQs
MzEgQEAgSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmJvb2xlYW5WYWx1ZSgpIGNvbgogICAgIHJldHVy
biBqc0Jvb2xlYW4oYm9vbGVhblZhbHVlKTsKIH0KIAotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omlu
dm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZExpc3Qs
IGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitjbGFzcyBKYXZhUnVudGltZU1ldGhvZCA6IHB1YmxpYyBS
dW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBKYXZhUnVudGltZU1ldGhvZChFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0
KQorICAgICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgbmFtZSwgbGlzdCkKKyAgICB7CisgICAg
fQorCisgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjb25zdCBDbGFz
c0luZm8gSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIkphdmFSdW50aW1lTWV0aG9kIiwg
JlJ1bnRpbWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OworCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6
Z2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1l
KQogeworICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1l
ZChwcm9wZXJ0eU5hbWUsIHRoaXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVNZXRo
b2QoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKK30KKworSlNWYWx1ZSBKYXZhSW5z
dGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRp
bWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCit7CisgICAgaWYgKCFhc09iamVjdChydW50
aW1lTWV0aG9kKS0+aW5oZXJpdHMoJkphdmFSdW50aW1lTWV0aG9kOjppbmZvKSkKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9u
LUphdmEgbWV0aG9kIG9uIEphdmEgb2JqZWN0LiIpOworCisgICAgY29uc3QgTWV0aG9kTGlzdCAm
bWV0aG9kTGlzdCA9ICpydW50aW1lTWV0aG9kLT5tZXRob2RzKCk7CisKICAgICBpbnQgaTsKICAg
ICBpbnQgY291bnQgPSBhcmdzLnNpemUoKTsKICAgICBKU1ZhbHVlIHJlc3VsdFZhbHVlOwpJbmRl
eDogV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oCShyZXZpc2lvbiA1NTE2
MykKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTgyLDcgKzgyLDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1
ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUo
RXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFs
IEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYg
bWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1l
dGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdzKTsKIAogICAgIGpvYmplY3QgamF2YUlu
c3RhbmNlKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0YW5jZS0+bV9pbnN0YW5jZTsgfQogCkluZGV4
OiBXZWJDb3JlL2JyaWRnZS9qc2MvQnJpZGdlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
cmlkZ2UvanNjL0JyaWRnZUpTQy5oCShyZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUvYnJpZGdl
L2pzYy9CcmlkZ2VKU0MuaAkod29ya2luZyBjb3B5KQpAQCAtNDAsNiArNDAsNyBAQCBjbGFzcyBB
cmdMaXN0OwogY2xhc3MgSWRlbnRpZmllcjsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3Mg
UHJvcGVydHlOYW1lQXJyYXk7CitjbGFzcyBSdW50aW1lTWV0aG9kOwogY2xhc3MgUnVudGltZU9i
amVjdDsKIAogbmFtZXNwYWNlIEJpbmRpbmdzIHsKQEAgLTkwLDcgKzkxLDggQEAgcHVibGljOgog
ICAgIC8vIFJldHVybnMgZmFsc2UgaWYgdGhlIHZhbHVlIHdhcyBub3Qgc2V0IHN1Y2Nlc3NmdWxs
eS4KICAgICB2aXJ0dWFsIGJvb2wgc2V0VmFsdWVPZlVuZGVmaW5lZEZpZWxkKEV4ZWNTdGF0ZSos
IGNvbnN0IElkZW50aWZpZXImLCBKU1ZhbHVlKSB7IHJldHVybiBmYWxzZTsgfQogCi0gICAgdmly
dHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0Jiwg
Y29uc3QgQXJnTGlzdCYgYXJncykgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZSBnZXRNZXRob2Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpID0gMDsKKyAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2Qq
IG1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncykgPSAwOwogCiAgICAgdmlydHVhbCBib29sIHN1
cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhvZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg
dmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJn
TGlzdCYpIHsgcmV0dXJuIGpzVW5kZWZpbmVkKCk7IH0KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29i
amMvb2JqY19pbnN0YW5jZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5oCShyZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2Jq
Y19pbnN0YW5jZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0NiwxMCBAQCBwdWJsaWM6CiAg
ICAgICAgIAogICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZU9mKEV4ZWNTdGF0ZSopIGNvbnN0Owog
ICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJp
bWl0aXZlVHlwZSkgY29uc3Q7Ci0gICAgCi0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhv
ZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYpOworCisgICAg
dmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSk7CisgICAgSlNWYWx1ZSBpbnZva2VPYmpjTWV0aG9kKEV4ZWNTdGF0
ZSosIE9iamNNZXRob2QqIG1ldGhvZCwgY29uc3QgQXJnTGlzdCYpOworICAgIHZpcnR1YWwgSlNW
YWx1ZSBpbnZva2VNZXRob2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25z
dCBBcmdMaXN0Jik7CiAgICAgdmlydHVhbCBib29sIHN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldGhv
ZCgpIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VEZWZhdWx0TWV0aG9kKEV4ZWNT
dGF0ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIApJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpj
X2luc3RhbmNlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0
YW5jZS5tbQkocmV2aXNpb24gNTUxNjMpCisrKyBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5z
dGFuY2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpbXBvcnQgImNvbmZp
Zy5oIgogI2ltcG9ydCAib2JqY19pbnN0YW5jZS5oIgogCisjaW1wb3J0ICJydW50aW1lX21ldGhv
ZC5oIgogI2ltcG9ydCAiRm91bmRhdGlvbkV4dHJhcy5oIgogI2ltcG9ydCAiV2ViU2NyaXB0T2Jq
ZWN0LmgiCiAjaW1wb3J0IDxvYmpjL29iamMtYXV0by5oPgpAQCAtMTY3LDcgKzE2OCwzOSBAQCBi
b29sIE9iamNJbnN0YW5jZTo6c3VwcG9ydHNJbnZva2VEZWZhdWx0CiAgICAgcmV0dXJuIFtfaW5z
dGFuY2UuZ2V0KCkgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihpbnZva2VEZWZhdWx0TWV0
aG9kV2l0aEFyZ3VtZW50czopXTsKIH0KIAotSlNWYWx1ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1l
dGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QsIGNvbnN0
IEFyZ0xpc3QgJmFyZ3MpCitjbGFzcyBPYmpjUnVudGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1l
TWV0aG9kIHsKK3B1YmxpYzoKKyAgICBPYmpjUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQorICAg
ICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgbmFtZSwgbGlzdCkKKyAgICB7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjb25zdCBDbGFzc0luZm8g
T2JqY1J1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsgIk9iamNSdW50aW1lTWV0aG9kIiwgJlJ1bnRp
bWVNZXRob2Q6OnNfaW5mbywgMCwgMCB9OworCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0TWV0
aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQorewor
ICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9w
ZXJ0eU5hbWUsIHRoaXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIE9iamNSdW50aW1lTWV0aG9k
KGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7Cit9CisKK0pTVmFsdWUgT2JqY0luc3Rh
bmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1l
TWV0aG9kLCBjb25zdCBBcmdMaXN0ICZhcmdzKQoreworICAgIGlmICghYXNPYmplY3QocnVudGlt
ZU1ldGhvZCktPmluaGVyaXRzKCZPYmpjUnVudGltZU1ldGhvZDo6aW5mbykpCisgICAgICAgIHJl
dHVybiB0aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1P
YmpjIG1ldGhvZCBvbiBPYmpjIG9iamVjdC4iKTsKKworICAgIGNvbnN0IE1ldGhvZExpc3QgJm1l
dGhvZExpc3QgPSAqcnVudGltZU1ldGhvZC0+bWV0aG9kcygpOworCisgICAgLy8gT3ZlcmxvYWRp
bmcgbWV0aG9kcyBpcyBub3QgYWxsb3dlZCBpbiBPYmplY3RpdmVDLiAgU2hvdWxkIG9ubHkgYmUg
b25lCisgICAgLy8gbmFtZSBtYXRjaCBmb3IgYSBwYXJ0aWN1bGFyIG1ldGhvZC4KKyAgICBBU1NF
UlQobWV0aG9kTGlzdC5zaXplKCkgPT0gMSk7CisKKyAgICByZXR1cm4gaW52b2tlT2JqY01ldGhv
ZChleGVjLCBzdGF0aWNfY2FzdDxPYmpjTWV0aG9kKj4obWV0aG9kTGlzdFswXSksIGFyZ3MpOwor
fQorCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlT2JqY01ldGhvZChFeGVjU3RhdGUqIGV4
ZWMsIE9iamNNZXRob2QqIG1ldGhvZCwgY29uc3QgQXJnTGlzdCAmYXJncykKIHsKICAgICBKU1Zh
bHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CiAgICAgCkBAIC0xNzUsMTMgKzIwOCw3IEBAIEpT
VmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1MKIAogICAgIHNldEdsb2JhbEV4
Y2VwdGlvbihuaWwpOwogICAgIAotICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhvZHMgaXMgbm90IGFs
bG93ZWQgaW4gT2JqZWN0aXZlQy4gIFNob3VsZCBvbmx5IGJlIG9uZQotICAgIC8vIG5hbWUgbWF0
Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCi0gICAgQVNTRVJUKG1ldGhvZExpc3Quc2l6ZSgp
ID09IDEpOwotCiBAdHJ5IHsKLSAgICBPYmpjTWV0aG9kKiBtZXRob2QgPSAwOwotICAgIG1ldGhv
ZCA9IHN0YXRpY19jYXN0PE9iamNNZXRob2QqPihtZXRob2RMaXN0WzBdKTsKICAgICBOU01ldGhv
ZFNpZ25hdHVyZSogc2lnbmF0dXJlID0gbWV0aG9kLT5nZXRNZXRob2RTaWduYXR1cmUoKTsKICAg
ICBOU0ludm9jYXRpb24qIGludm9jYXRpb24gPSBbTlNJbnZvY2F0aW9uIGludm9jYXRpb25XaXRo
TWV0aG9kU2lnbmF0dXJlOnNpZ25hdHVyZV07CiAgICAgW2ludm9jYXRpb24gc2V0U2VsZWN0b3I6
bWV0aG9kLT5zZWxlY3RvcigpXTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50
aW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CShyZXZpc2lvbiA1NTE2MykKKysrIFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzgsOSArMjM4LDcgQEAgc3RhdGljIEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBjYWxsT2JqQ0ZhbAogICAgICAgICBjb25zdCBJZGVudGlmaWVyJiBuYW1lSWRlbnRp
ZmllciA9IHN0YXRpY19jYXN0PE9iamNGYWxsYmFja09iamVjdEltcCo+KGZ1bmN0aW9uKS0+cHJv
cGVydHlOYW1lKCk7CiAgICAgICAgIFJldGFpblB0cjxDRlN0cmluZ1JlZj4gbmFtZShBZG9wdENG
LCBDRlN0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKDAsIG5hbWVJZGVudGlmaWVyLmRhdGEoKSwg
bmFtZUlkZW50aWZpZXIuc2l6ZSgpKSk7CiAgICAgICAgIGZhbGxiYWNrTWV0aG9kLT5zZXRKYXZh
U2NyaXB0TmFtZShuYW1lLmdldCgpKTsKLSAgICAgICAgTWV0aG9kTGlzdCBtZXRob2RMaXN0Owot
ICAgICAgICBtZXRob2RMaXN0LmFwcGVuZChmYWxsYmFja01ldGhvZC5nZXQoKSk7Ci0gICAgICAg
IHJlc3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kTGlzdCwgYXJncyk7
CisgICAgICAgIHJlc3VsdCA9IG9iamNJbnN0YW5jZS0+aW52b2tlT2JqY01ldGhvZChleGVjLCBm
YWxsYmFja01ldGhvZC5nZXQoKSwgYXJncyk7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgaW5z
dGFuY2UtPmVuZCgpOwpJbmRleDogV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViS2l0L21hYy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU1MjUzKQorKysgV2ViS2l0L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAxMC0wMi0yNSAgR2F2aW4g
QmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CisKKyAgICAgICAgQnVnIDM1NDAx
IC0gVW5zYWZlIGNhc3Rpbmcgb2YgTWV0aG9kIHR5cGVzIGluIGJyaWRnZSBjb2RlLgorCisgICAg
ICAgIFRoZSBjb2RlIGFzc3VtZXMgdXNlcnMgd2lsbCBvbmx5IGF0dGVtcHQgdG8gaW52b2tlIGEg
SmF2YSBtZXRob2QKKyAgICAgICAgb24gYSBKYXZhIGJhc2Ugb2JqZWN0LCBldGMuICBUaGlzIGxl
YWRzIHRvIHVuc2FmZSBjYXN0aW5nLgorICAgICAgICBBZGQgbGFuZ3VhZ2Ugc3BlY2lmaWMgc3Vi
Y2xhc3NlcyBvZiBSdW50aW1lTWV0aG9kLCBhbmQgcGFzcyB0aGUKKyAgICAgICAgUnVudGltZU1l
dGhvZCBpbnRvIGludm9rZU1ldGhvZCwgc28gd2UgY2FuIHR5cGVjaGVjayBiZWZvcmUKKyAgICAg
ICAgY2FzdGluZy4gIFRocm93IGFuIGV4Y2VwdGlvbiBvbiB0eXBlIG1pc21hdGNoLgorCisgICAg
ICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5oOgorICAgICAgICAqIFBsdWdpbnMv
SG9zdGVkL1Byb3h5SW5zdGFuY2UubW06CisgICAgICAgIChXZWJLaXQ6OlBsdWdpblJ1bnRpbWVN
ZXRob2Q6OlBsdWdpblJ1bnRpbWVNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjopOgorICAgICAg
ICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjpnZXRNZXRob2QpOgorICAgICAgICAoV2ViS2l0OjpQ
cm94eUluc3RhbmNlOjppbnZva2VNZXRob2QpOgorCiAyMDEwLTAyLTI1ICBBbGV4ZXkgUHJvc2t1
cnlha292ICA8YXBAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmcmV5IEdh
cmVuLgpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmgJKHJl
dmlzaW9uIDU1MTYzKQorKysgV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYxLDggQEAgcHJpdmF0ZToKICAgICAKICAgICB2
aXJ0dWFsIEpTQzo6QmluZGluZ3M6OkNsYXNzICpnZXRDbGFzcygpIGNvbnN0OwogCi0gICAgdmly
dHVhbCBKU0M6OkpTVmFsdWUgaW52b2tlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlND
OjpCaW5kaW5nczo6TWV0aG9kTGlzdCYsIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncyk7CisgICAg
dmlydHVhbCBKU0M6OkpTVmFsdWUgZ2V0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKiBleGVjLCBjb25z
dCBKU0M6OklkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBKU0M6OkpTVmFs
dWUgaW52b2tlTWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgSlNDOjpSdW50aW1lTWV0aG9kKiwgY29u
c3QgSlNDOjpBcmdMaXN0JiBhcmdzKTsKIAogICAgIHZpcnR1YWwgYm9vbCBzdXBwb3J0c0ludm9r
ZURlZmF1bHRNZXRob2QoKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTQzo6SlNWYWx1ZSBpbnZva2VE
ZWZhdWx0TWV0aG9kKEpTQzo6RXhlY1N0YXRlKiwgY29uc3QgSlNDOjpBcmdMaXN0Jik7CkluZGV4
OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFuY2UubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCShyZXZpc2lvbiA1
NTE2MykKKysrIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMjcsNyArMjcsOSBAQAogCiAjaW1wb3J0ICJQcm94eUluc3RhbmNlLmgi
CiAKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlL0Vycm9yLmgiCiAjaW1wb3J0ICJOZXRzY2FwZVBs
dWdpbkhvc3RQcm94eS5oIgorI2ltcG9ydCAiV2ViQ29yZS9ydW50aW1lX21ldGhvZC5oIgogI2lt
cG9ydCA8V2ViQ29yZS9JZGVudGlmaWVyUmVwLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0pTRE9NV2lu
ZG93Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL25wcnVudGltZV9pbXBsLmg+CkBAIC0xNjQsOCArMTY2
LDMxIEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6RXhlY1MKICAgICByZXR1
cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNoYWxWYWx1ZShleGVjLCAoY2hhciopQ0ZEYXRhR2V0
Qnl0ZVB0cihyZXBseS0+bV9yZXN1bHQuZ2V0KCkpLCBDRkRhdGFHZXRMZW5ndGgocmVwbHktPm1f
cmVzdWx0LmdldCgpKSk7CiB9CiAKLUpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlTWV0aG9k
KEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9kTGlzdCwgY29uc3QgQXJn
TGlzdCYgYXJncykKK2NsYXNzIFBsdWdpblJ1bnRpbWVNZXRob2QgOiBwdWJsaWMgUnVudGltZU1l
dGhvZCB7CitwdWJsaWM6CisgICAgUGx1Z2luUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IElkZW50aWZpZXImIG5hbWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQorICAg
ICAgICA6IFJ1bnRpbWVNZXRob2QoZXhlYywgbmFtZSwgbGlzdCkKKyAgICB7CisgICAgfQorCisg
ICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjb25zdCBDbGFzc0luZm8g
UGx1Z2luUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiUGx1Z2luUnVudGltZU1ldGhvZCIsICZS
dW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKKworSlNWYWx1ZSBQcm94eUluc3RhbmNlOjpn
ZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEpTQzo6SWRlbnRpZmllciYgcHJv
cGVydHlOYW1lKQoreworICAgIE1ldGhvZExpc3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1l
dGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIFJ1
bnRpbWVNZXRob2QoZXhlYywgcHJvcGVydHlOYW1lLCBtZXRob2RMaXN0KTsKK30KKworSlNWYWx1
ZSBQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBKU0M6OlJ1bnRp
bWVNZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7CisgICAgaWYg
KCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5oZXJpdHMoJlBsdWdpblJ1bnRpbWVNZXRob2Q6
OmluZm8pKQorICAgICAgICByZXR1cm4gSlNDOjp0aHJvd0Vycm9yKGV4ZWMsIEpTQzo6VHlwZUVy
cm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLVBsdWdpbiBtZXRob2Qgb24gUGx1Z2luIG9iamVj
dC4iKTsKKworICAgIGNvbnN0IE1ldGhvZExpc3QgJm1ldGhvZExpc3QgPSAqcnVudGltZU1ldGhv
ZC0+bWV0aG9kcygpOworCiAgICAgQVNTRVJUKG1ldGhvZExpc3Quc2l6ZSgpID09IDEpOwogCiAg
ICAgUHJveHlNZXRob2QqIG1ldGhvZCA9IHN0YXRpY19jYXN0PFByb3h5TWV0aG9kKj4obWV0aG9k
TGlzdFswXSk7Cg==
</data>
<flag name="review"
          id="32436"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49603</attachid>
            <date>2010-02-26 11:23:20 -0800</date>
            <delta_ts>2010-02-26 12:16:15 -0800</delta_ts>
            <desc>New awesomier patch.</desc>
            <filename>patch.invokeMethod.3.txt</filename>
            <type>text/plain</type>
            <size>27769</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NTI2OCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDEgQEAKKzIwMTAtMDItMjYgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91
Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAzNTQwMSAtIFVuc2FmZSBjYXN0aW5nIG9mIE1ldGhvZCB0eXBlcyBpbiBicmlk
Z2UgY29kZS4KKworICAgICAgICBUaGUgY29kZSBhc3N1bWVzIHVzZXJzIHdpbGwgb25seSBhdHRl
bXB0IHRvIGludm9rZSBhIEphdmEgbWV0aG9kCisgICAgICAgIG9uIGEgSmF2YSBiYXNlIG9iamVj
dCwgZXRjLiAgVGhpcyBsZWFkcyB0byB1bnNhZmUgY2FzdGluZy4KKyAgICAgICAgQWRkIGxhbmd1
YWdlIHNwZWNpZmljIHN1YmNsYXNzZXMgb2YgUnVudGltZU1ldGhvZCwgYW5kIHBhc3MgdGhlCisg
ICAgICAgIFJ1bnRpbWVNZXRob2QgaW50byBpbnZva2VNZXRob2QsIHNvIHdlIGNhbiB0eXBlY2hl
Y2sgYmVmb3JlCisgICAgICAgIGNhc3RpbmcuICBUaHJvdyBhbiBleGNlcHRpb24gb24gdHlwZSBt
aXNtYXRjaC4KKworICAgICAgICAqIFdlYkNvcmUuYmFzZS5leHA6CisgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJyaWRnZS9jL2NfaW5zdGFu
Y2UuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Q1J1bnRpbWVNZXRob2Q6OkNSdW50aW1l
TWV0aG9kKTpuZXcgY2xhc3MgdG8gZGlzdGluZ3Vpc2ggdGhpcyB0eXBlIG9mIFJ1bnRpbWVNZXRo
b2QuCisgICAgICAgIChKU0M6OkJpbmRpbmdzOjpDSW5zdGFuY2U6OmdldE1ldGhvZCk6IGNyZWF0
ZSBhbiBhcHByb3ByaWF0ZSBzdWJsY2xhc3Mgb2YgUnVudGltZU1ldGhvZC4KKyAgICAgICAgKEpT
Qzo6QmluZGluZ3M6OkNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKTogZHluYW1pY2FsbHkgY2hlY2sg
dGhlIHR5cGUgb2YgdGhlIFJ1bnRpbWVNZXRob2QuCisgICAgICAgICogYnJpZGdlL2MvY19pbnN0
YW5jZS5oOgorICAgICAgICAqIGJyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5jcHA6Cisg
ICAgICAgIChKYXZhUnVudGltZU1ldGhvZDo6SmF2YVJ1bnRpbWVNZXRob2QpOiBuZXcgY2xhc3Mg
dG8gZGlzdGluZ3Vpc2ggdGhpcyB0eXBlIG9mIFJ1bnRpbWVNZXRob2QuCisgICAgICAgIChKYXZh
SW5zdGFuY2U6OmdldE1ldGhvZCk6IGNyZWF0ZSBhbiBhcHByb3ByaWF0ZSBzdWJsY2xhc3Mgb2Yg
UnVudGltZU1ldGhvZC4KKyAgICAgICAgKEphdmFJbnN0YW5jZTo6aW52b2tlTWV0aG9kKTogZHlu
YW1pY2FsbHkgY2hlY2sgdGhlIHR5cGUgb2YgdGhlIFJ1bnRpbWVNZXRob2QuCisgICAgICAgICog
YnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmg6CisgICAgICAgICogYnJpZGdlL2pzYy9C
cmlkZ2VKU0MuaDoKKyAgICAgICAgKiBicmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmg6CisgICAg
ICAgICogYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbToKKyAgICAgICAgKE9iamNSdW50aW1l
TWV0aG9kOjpPYmpjUnVudGltZU1ldGhvZCk6IG5ldyBjbGFzcyB0byBkaXN0aW5ndWlzaCB0aGlz
IHR5cGUgb2YgUnVudGltZU1ldGhvZC4KKyAgICAgICAgKE9iamNJbnN0YW5jZTo6Z2V0TWV0aG9k
KTogY3JlYXRlIGFuIGFwcHJvcHJpYXRlIHN1YmxjbGFzcyBvZiBSdW50aW1lTWV0aG9kLgorICAg
ICAgICAoT2JqY0luc3RhbmNlOjppbnZva2VNZXRob2QpOiBkeW5hbWljYWxseSBjaGVjayB0aGUg
dHlwZSBvZiB0aGUgUnVudGltZU1ldGhvZC4KKyAgICAgICAgKE9iamNJbnN0YW5jZTo6aW52b2tl
T2JqY01ldGhvZCk6IG5ldyBtZXRob2QsIHRha2VzIGFuIE9iamNNZXRob2QqIGFzIGFuIGFyZ3Vt
ZW50IHNvIHRoYXQgd2UgZG9uJ3QgbmVlZCB0byBkeW5hbWljYWxseSBkZXRlcm1pbmUgdGhlIHR5
cGUuCisgICAgICAgICogYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1tOgorICAgICAgICAoSlND
OjpCaW5kaW5nczo6Y2FsbE9iakNGYWxsYmFja09iamVjdCk6IHVzZSBuZXcgaW52b2tlT2JqY01l
dGhvZCBtZXRob2QuCisgICAgICAgICogYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcDoKKyAgICAg
ICAgKEpTQzo6Y2FsbFJ1bnRpbWVNZXRob2QpOiBwYXNzIFJ1bnRpbWVNZXRob2QgYXMgYXJndW1l
bnQgdG8gaW52b2tlTWV0aG9kLCByYXRoZXIgdGhhbiBpdHMgTWV0aG9kTGlzdC4KKyAgICAgICAg
KiBicmlkZ2UvcnVudGltZV9vYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpSdW50aW1lT2JqZWN0
OjptZXRob2RHZXR0ZXIpOiB1c2UgbmV3IGdldE1ldGhvZCBtZXRob2QuCisKIDIwMTAtMDItMjUg
IE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBT
aW1vbiBGcmFzZXIuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuUGx1Z2luSG9zdFByb2Nlc3MuZXhw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5QbHVnaW5Ib3N0UHJvY2Vzcy5leHAJKHJl
dmlzaW9uIDU1MjY4KQorKysgV2ViQ29yZS9XZWJDb3JlLlBsdWdpbkhvc3RQcm9jZXNzLmV4cAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDExIEBACiAjIFRoaXMgZmlsZSBnZXRzIGFwcGVuZGVk
IHRvIFdlYkNvcmUuZXhwIHdoZW4gVVNFKFBMVUdJTl9IT1NUX1BST0NFU1MpIGlzIDEuCiAKK19f
Wk4zSlNDMTNSdW50aW1lTWV0aG9kMTFnZXRDYWxsRGF0YUVSTlNfOENhbGxEYXRhRQorX19aTjNK
U0MxM1J1bnRpbWVNZXRob2QxOGdldE93blByb3BlcnR5U2xvdEVQTlNfOUV4ZWNTdGF0ZUVSS05T
XzEwSWRlbnRpZmllckVSTlNfMTJQcm9wZXJ0eVNsb3RFCitfX1pOM0pTQzEzUnVudGltZU1ldGhv
ZDI0Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yRVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlm
aWVyRVJOU18xOFByb3BlcnR5RGVzY3JpcHRvckUKK19fWk4zSlNDMTNSdW50aW1lTWV0aG9kNnNf
aW5mb0UKK19fWk4zSlNDMTNSdW50aW1lTWV0aG9kQzFFUE5TXzlFeGVjU3RhdGVFUktOU18xMElk
ZW50aWZpZXJFUk4zV1RGNlZlY3RvcklQTlNfOEJpbmRpbmdzNk1ldGhvZEVMbTBFRUUKK19fWk4z
SlNDMTNSdW50aW1lTWV0aG9kQzJFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFUk4z
V1RGNlZlY3RvcklQTlNfOEJpbmRpbmdzNk1ldGhvZEVMbTBFRUUKIF9fWk4zSlNDOEJpbmRpbmdz
MTBSb290T2JqZWN0RDFFdgogX19aTjNKU0M4QmluZGluZ3MxM1J1bnRpbWVPYmplY3QxMWdldENh
bGxEYXRhRVJOU184Q2FsbERhdGFFCiBfX1pOM0pTQzhCaW5kaW5nczEzUnVudGltZU9iamVjdDE0
ZGVsZXRlUHJvcGVydHlFUE5TXzlFeGVjU3RhdGVFUktOU18xMElkZW50aWZpZXJFCkBAIC0yMiw0
ICsyOCw1IEBAIF9fWk43V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjE3Y2FuRXhlY3UKIF9fWk43
V2ViQ29yZTE2U2NyaXB0Q29udHJvbGxlcjI0anNPYmplY3RGb3JQbHVnaW5FbGVtZW50RVBOU18x
N0hUTUxQbHVnSW5FbGVtZW50RQogX19aTjdXZWJDb3JlNlN0cmluZzI2ZnJvbVVURjhXaXRoTGF0
aW4xRmFsbGJhY2tFUEtjbQogX19aTjdXZWJDb3JlNlN0cmluZzhmcm9tVVRGOEVQS2NtCitfX1pU
Vk4zSlNDMTNSdW50aW1lTWV0aG9kRQogX19aTkszSlNDOEJpbmRpbmdzMTNSdW50aW1lT2JqZWN0
MTJkZWZhdWx0VmFsdWVFUE5TXzlFeGVjU3RhdGVFTlNfMjJQcmVmZXJyZWRQcmltaXRpdmVUeXBl
RQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDU1MjY4KQorKysgV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMzNyw3ICszMzcsNyBAQAogCQkxQTU2OUQxRTBEN0UyQjgyMDA3
QzM5ODMgLyogcnVudGltZV9hcnJheS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNFRjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJh
eS5jcHAgKi87IH07CiAJCTFBNTY5RDFGMEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX2FycmF5
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNG
MDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9hcnJheS5oICovOyB9OwogCQkxQTU2OUQyMDBE
N0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1
bnRpbWVfbWV0aG9kLmNwcCAqLzsgfTsKLQkJMUE1NjlEMjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1
bnRpbWVfbWV0aG9kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAxQTU2OUNGMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9tZXRob2QuaCAqLzsgfTsK
KwkJMUE1NjlEMjEwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfbWV0aG9kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNGMjBEN0UyQjgyMDA3
QzM5ODMgLyogcnVudGltZV9tZXRob2QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkxQTU2OUQyMjBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9v
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MUE1NjlDRjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmNwcCAqLzsgfTsKIAkJ
MUE1NjlEMjMwRDdFMkI4MjAwN0MzOTgzIC8qIHJ1bnRpbWVfb2JqZWN0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxQTU2OUNGNDBEN0UyQjgyMDA3QzM5
ODMgLyogcnVudGltZV9vYmplY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQkxQTU2OUQyNDBEN0UyQjgyMDA3QzM5ODMgLyogcnVudGltZV9yb290
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5
Q0Y1MEQ3RTJCODIwMDdDMzk4MyAvKiBydW50aW1lX3Jvb3QuY3BwICovOyB9OwpJbmRleDogV2Vi
Q29yZS9icmlkZ2UvcnVudGltZV9tZXRob2QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJDb3JlL2JyaWRn
ZS9ydW50aW1lX21ldGhvZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgdXNp
bmcgbmFtZXNwYWNlIEJpbmRpbmdzOwogCiBBU1NFUlRfQ0xBU1NfRklUU19JTl9DRUxMKFJ1bnRp
bWVNZXRob2QpOwogCi1jb25zdCBDbGFzc0luZm8gUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAi
UnVudGltZU1ldGhvZCIsIDAsIDAsIDAgfTsKK2NvbnN0IENsYXNzSW5mbyBSdW50aW1lTWV0aG9k
OjpzX2luZm8gPSB7ICJSdW50aW1lTWV0aG9kIiwgJkludGVybmFsRnVuY3Rpb246OmluZm8sIDAs
IDAgfTsKIAogUnVudGltZU1ldGhvZDo6UnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IElkZW50aWZpZXImIGlkZW50LCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbSkKICAgICAvLyBG
SVhNRTogZGVwcmVjYXRlZEdldERPTVN0cnVjdHVyZSB1c2VzIHRoZSBwcm90b3R5cGUgb2ZmIG9m
IHRoZSB3cm9uZyBnbG9iYWwgb2JqZWN0CkBAIC0xMTMsNyArMTEzLDcgQEAgc3RhdGljIEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBjYWxsUnVudGltZQogICAgIEFTU0VSVChpbnN0YW5jZSk7CiAKICAg
ICBpbnN0YW5jZS0+YmVnaW4oKTsKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGluc3RhbmNlLT5pbnZv
a2VNZXRob2QoZXhlYywgKm1ldGhvZC0+bWV0aG9kcygpLCBhcmdzKTsKKyAgICBKU1ZhbHVlIHJl
c3VsdCA9IGluc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kLCBhcmdzKTsKICAgICBp
bnN0YW5jZS0+ZW5kKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfbWV0aG9kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGlt
ZV9tZXRob2QuaAkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX21l
dGhvZC5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSwg
U3RydWN0dXJlRmxhZ3MpLCBBbm9ueW1vdXNTbG90Q291bnQpOwogICAgIH0KIAorICAgIHZpcnR1
YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmaW5mbzsgfQor
CiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92
ZXJyaWRlc0dldE93blByb3BlcnR5U2xvdCB8IEltcGxlbWVudHNIYXNJbnN0YW5jZSB8IE92ZXJy
aWRlc01hcmtDaGlsZHJlbiB8IEludGVybmFsRnVuY3Rpb246OlN0cnVjdHVyZUZsYWdzOwogICAg
IHN0YXRpYyBKU1ZhbHVlIGxlbmd0aEdldHRlcihFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVy
JiwgY29uc3QgUHJvcGVydHlTbG90Jik7CkluZGV4OiBXZWJDb3JlL2JyaWRnZS9ydW50aW1lX29i
amVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcnVudGltZV9vYmplY3QuY3Bw
CShyZXZpc2lvbiA1NTI2OCkKKysrIFdlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTEzLDEzICsxMTMsMTEgQEAgSlNWYWx1ZSBSdW50aW1lT2JqZWN0
OjptZXRob2RHZXR0ZXIoRXhlYwogICAgIAogICAgIGluc3RhbmNlLT5iZWdpbigpOwogCi0gICAg
Q2xhc3MgKmFDbGFzcyA9IGluc3RhbmNlLT5nZXRDbGFzcygpOwotICAgIE1ldGhvZExpc3QgbWV0
aG9kTGlzdCA9IGFDbGFzcy0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFtZSwgaW5zdGFuY2UuZ2V0
KCkpOwotICAgIEpTVmFsdWUgcmVzdWx0ID0gbmV3IChleGVjKSBSdW50aW1lTWV0aG9kKGV4ZWMs
IHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7CisgICAgSlNWYWx1ZSBtZXRob2QgPSBpbnN0YW5j
ZS0+Z2V0TWV0aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSk7CiAKICAgICBpbnN0YW5jZS0+ZW5kKCk7
CiAgICAgICAgICAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtZXRob2Q7CiB9
CiAKIGJvb2wgUnVudGltZU9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSAqZXhl
YywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9jL2NfaW5zdGFuY2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvYnJpZGdlL2MvY19pbnN0YW5jZS5jcHAJKHJldmlzaW9uIDU1MjY4KQorKysgV2ViQ29yZS9i
cmlkZ2UvYy9jX2luc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQAog
I2luY2x1ZGUgImNfcnVudGltZS5oIgogI2luY2x1ZGUgImNfdXRpbGl0eS5oIgogI2luY2x1ZGUg
Im5wcnVudGltZV9pbXBsLmgiCisjaW5jbHVkZSAicnVudGltZV9tZXRob2QuaCIKICNpbmNsdWRl
ICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxpbnRlcnByZXRlci9DYWxsRnJhbWUuaD4KICNp
bmNsdWRlIDxydW50aW1lL0FyZ0xpc3QuaD4KQEAgLTEwNyw4ICsxMDgsMzMgQEAgYm9vbCBDSW5z
dGFuY2U6OnN1cHBvcnRzSW52b2tlRGVmYXVsdE1ldAogICAgIHJldHVybiBfb2JqZWN0LT5fY2xh
c3MtPmludm9rZURlZmF1bHQ7CiB9CiAKLUpTVmFsdWUgQ0luc3RhbmNlOjppbnZva2VNZXRob2Qo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0LCBjb25zdCBBcmdM
aXN0JiBhcmdzKQorY2xhc3MgQ1J1bnRpbWVNZXRob2QgOiBwdWJsaWMgUnVudGltZU1ldGhvZCB7
CitwdWJsaWM6CisgICAgQ1J1bnRpbWVNZXRob2QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVu
dGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlzdCYgbGlzdCkKKyAgICAgICAgOiBSdW50
aW1lTWV0aG9kKGV4ZWMsIG5hbWUsIGxpc3QpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwg
Y29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25zdCB7IHJldHVybiAmc19pbmZvOyB9CisK
KyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5mbzsKK307CisKK2NvbnN0IENsYXNzSW5m
byBDUnVudGltZU1ldGhvZDo6c19pbmZvID0geyAiQ1J1bnRpbWVNZXRob2QiLCAmUnVudGltZU1l
dGhvZDo6c19pbmZvLCAwLCAwIH07CisKK0pTVmFsdWUgQ0luc3RhbmNlOjpnZXRNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpCiB7CisgICAgTWV0
aG9kTGlzdCBtZXRob2RMaXN0ID0gZ2V0Q2xhc3MoKS0+bWV0aG9kc05hbWVkKHByb3BlcnR5TmFt
ZSwgdGhpcyk7CisgICAgcmV0dXJuIG5ldyAoZXhlYykgQ1J1bnRpbWVNZXRob2QoZXhlYywgcHJv
cGVydHlOYW1lLCBtZXRob2RMaXN0KTsKK30KKworSlNWYWx1ZSBDSW5zdGFuY2U6Omludm9rZU1l
dGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIHJ1bnRpbWVNZXRob2QsIGNvbnN0
IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAgaWYgKCFhc09iamVjdChydW50aW1lTWV0aG9kKS0+aW5o
ZXJpdHMoJkNSdW50aW1lTWV0aG9kOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBUeXBlRXJyb3IsICJBdHRlbXB0IHRvIGludm9rZSBub24tcGx1Zy1pbiBtZXRob2Qg
b24gcGx1Zy1pbiBvYmplY3QuIik7CisKKyAgICBjb25zdCBNZXRob2RMaXN0JiBtZXRob2RMaXN0
ID0gKnJ1bnRpbWVNZXRob2QtPm1ldGhvZHMoKTsKKwogICAgIC8vIE92ZXJsb2FkaW5nIG1ldGhv
ZHMgYXJlIG5vdCBhbGxvd2VkIGJ5IE5QT2JqZWN0cy4gIFNob3VsZCBvbmx5IGJlIG9uZQogICAg
IC8vIG5hbWUgbWF0Y2ggZm9yIGEgcGFydGljdWxhciBtZXRob2QuCiAgICAgQVNTRVJUKG1ldGhv
ZExpc3Quc2l6ZSgpID09IDEpOwpJbmRleDogV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgJKHJldmlzaW9uIDU1
MjY4KQorKysgV2ViQ29yZS9icmlkZ2UvYy9jX2luc3RhbmNlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU5LDcgKzU5LDggQEAgcHVibGljOgogICAgIHZpcnR1YWwgSlNWYWx1ZSB2YWx1ZU9mKEV4ZWNT
dGF0ZSopIGNvbnN0OwogICAgIHZpcnR1YWwgSlNWYWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRl
KiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUg
aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0
Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1l
dGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsK
ICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3Qg
QXJnTGlzdCYpOwogCkluZGV4OiBXZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpT
Qy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VK
U0MuY3BwCShyZXZpc2lvbiA1NTI2OCkKKysrIFdlYkNvcmUvYnJpZGdlL2puaS9qc2MvSmF2YUlu
c3RhbmNlSlNDLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUg
IkpOSVV0aWxpdHlQcml2YXRlLmgiCiAjaW5jbHVkZSAiSmF2YUNsYXNzSlNDLmgiCiAjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgInJ1bnRpbWVfbWV0aG9kLmgiCiAjaW5jbHVkZSAicnVu
dGltZV9vYmplY3QuaCIKICNpbmNsdWRlICJydW50aW1lX3Jvb3QuaCIKICNpbmNsdWRlIDxydW50
aW1lL0FyZ0xpc3QuaD4KQEAgLTEwOSw4ICsxMTAsMzMgQEAgSlNWYWx1ZSBKYXZhSW5zdGFuY2U6
OmJvb2xlYW5WYWx1ZSgpIGNvbgogICAgIHJldHVybiBqc0Jvb2xlYW4oYm9vbGVhblZhbHVlKTsK
IH0KIAotSlNWYWx1ZSBKYXZhSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZExpc3QsIGNvbnN0IEFyZ0xpc3QgJmFyZ3MpCitjbGFz
cyBKYXZhUnVudGltZU1ldGhvZCA6IHB1YmxpYyBSdW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAg
ICBKYXZhUnVudGltZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIG5h
bWUsIEJpbmRpbmdzOjpNZXRob2RMaXN0JiBsaXN0KQorICAgICAgICA6IFJ1bnRpbWVNZXRob2Qo
ZXhlYywgbmFtZSwgbGlzdCkKKyAgICB7CisgICAgfQorCisgICAgdmlydHVhbCBjb25zdCBDbGFz
c0luZm8qIGNsYXNzSW5mbygpIGNvbnN0IHsgcmV0dXJuICZzX2luZm87IH0KKworICAgIHN0YXRp
YyBjb25zdCBDbGFzc0luZm8gc19pbmZvOworfTsKKworY29uc3QgQ2xhc3NJbmZvIEphdmFSdW50
aW1lTWV0aG9kOjpzX2luZm8gPSB7ICJKYXZhUnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0aG9k
OjpzX2luZm8sIDAsIDAgfTsKKworSlNWYWx1ZSBKYXZhSW5zdGFuY2U6OmdldE1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSkKIHsKKyAgICBNZXRo
b2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1l
LCB0aGlzKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBKYXZhUnVudGltZU1ldGhvZChleGVjLCBw
cm9wZXJ0eU5hbWUsIG1ldGhvZExpc3QpOworfQorCitKU1ZhbHVlIEphdmFJbnN0YW5jZTo6aW52
b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCwg
Y29uc3QgQXJnTGlzdCAmYXJncykKK3sKKyAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2Qp
LT5pbmhlcml0cygmSmF2YVJ1bnRpbWVNZXRob2Q6OnNfaW5mbykpCisgICAgICAgIHJldHVybiB0
aHJvd0Vycm9yKGV4ZWMsIFR5cGVFcnJvciwgIkF0dGVtcHQgdG8gaW52b2tlIG5vbi1KYXZhIG1l
dGhvZCBvbiBKYXZhIG9iamVjdC4iKTsKKworICAgIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZExp
c3QgPSAqcnVudGltZU1ldGhvZC0+bWV0aG9kcygpOworCiAgICAgaW50IGk7CiAgICAgaW50IGNv
dW50ID0gYXJncy5zaXplKCk7CiAgICAgSlNWYWx1ZSByZXN1bHRWYWx1ZTsKSW5kZXg6IFdlYkNv
cmUvYnJpZGdlL2puaS9qc2MvSmF2YUluc3RhbmNlSlNDLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9icmlkZ2Uvam5pL2pzYy9KYXZhSW5zdGFuY2VKU0MuaAkocmV2aXNpb24gNTUyNjgpCisrKyBX
ZWJDb3JlL2JyaWRnZS9qbmkvanNjL0phdmFJbnN0YW5jZUpTQy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Miw3ICs4Miw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEpTVmFsdWUgdmFsdWVPZihFeGVj
U3RhdGUqKSBjb25zdDsKICAgICB2aXJ0dWFsIEpTVmFsdWUgZGVmYXVsdFZhbHVlKEV4ZWNTdGF0
ZSosIFByZWZlcnJlZFByaW1pdGl2ZVR5cGUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBKU1ZhbHVl
IGludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3QmIG1ldGhvZCwg
Y29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7CisgICAgdmlydHVh
bCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIFJ1bnRpbWVNZXRob2QqIG1l
dGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncyk7CiAKICAgICBqb2JqZWN0IGphdmFJbnN0YW5jZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdGFuY2UtPm1faW5zdGFuY2U7IH0KIApJbmRleDogV2ViQ29y
ZS9icmlkZ2UvanNjL0JyaWRnZUpTQy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYnJpZGdlL2pz
Yy9CcmlkZ2VKU0MuaAkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJDb3JlL2JyaWRnZS9qc2MvQnJp
ZGdlSlNDLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgQXJnTGlzdDsK
IGNsYXNzIElkZW50aWZpZXI7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIFByb3BlcnR5
TmFtZUFycmF5OworY2xhc3MgUnVudGltZU1ldGhvZDsKIAogbmFtZXNwYWNlIEJpbmRpbmdzIHsK
IApAQCAtOTAsNyArOTEsOCBAQCBwdWJsaWM6CiAgICAgLy8gUmV0dXJucyBmYWxzZSBpZiB0aGUg
dmFsdWUgd2FzIG5vdCBzZXQgc3VjY2Vzc2Z1bGx5LgogICAgIHZpcnR1YWwgYm9vbCBzZXRWYWx1
ZU9mVW5kZWZpbmVkRmllbGQoRXhlY1N0YXRlKiwgY29uc3QgSWRlbnRpZmllciYsIEpTVmFsdWUp
IHsgcmV0dXJuIGZhbHNlOyB9CiAKLSAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4
ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExpc3QmLCBjb25zdCBBcmdMaXN0JiBhcmdzKSA9IDA7Cisg
ICAgdmlydHVhbCBKU1ZhbHVlIGdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50
aWZpZXImIHByb3BlcnR5TmFtZSkgPSAwOworICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRo
b2QoRXhlY1N0YXRlKiwgUnVudGltZU1ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0JiBhcmdz
KSA9IDA7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlRGVmYXVs
dE1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBBcmdMaXN0JikgeyByZXR1cm4ganNVbmRlZmluZWQo
KTsgfQpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgJKHJldmlzaW9uIDU1MjY4
KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTQ2LDggKzQ2LDEwIEBAIHB1YmxpYzoKICAgICAgICAgCiAgICAgdmlydHVhbCBKU1ZhbHVl
IHZhbHVlT2YoRXhlY1N0YXRlKikgY29uc3Q7CiAgICAgdmlydHVhbCBKU1ZhbHVlIGRlZmF1bHRW
YWx1ZShFeGVjU3RhdGUqLCBQcmVmZXJyZWRQcmltaXRpdmVUeXBlKSBjb25zdDsKLSAgICAKLSAg
ICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIGNvbnN0IE1ldGhvZExp
c3QmLCBjb25zdCBBcmdMaXN0Jik7CisKKyAgICB2aXJ0dWFsIEpTVmFsdWUgZ2V0TWV0aG9kKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKTsKKyAgICBKU1Zh
bHVlIGludm9rZU9iamNNZXRob2QoRXhlY1N0YXRlKiwgT2JqY01ldGhvZCogbWV0aG9kLCBjb25z
dCBBcmdMaXN0Jik7CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUq
LCBSdW50aW1lTWV0aG9kKiBtZXRob2QsIGNvbnN0IEFyZ0xpc3QmKTsKICAgICB2aXJ0dWFsIGJv
b2wgc3VwcG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBKU1Zh
bHVlIGludm9rZURlZmF1bHRNZXRob2QoRXhlY1N0YXRlKiwgY29uc3QgQXJnTGlzdCYpOwogCklu
ZGV4OiBXZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfaW5zdGFuY2UubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX2luc3RhbmNlLm1tCShyZXZpc2lvbiA1NTI2OCkKKysr
IFdlYkNvcmUvYnJpZGdlL29iamMvb2JqY19pbnN0YW5jZS5tbQkod29ya2luZyBjb3B5KQpAQCAt
MjYsNiArMjYsNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJvYmpjX2luc3RhbmNl
LmgiCiAKKyNpbXBvcnQgInJ1bnRpbWVfbWV0aG9kLmgiCiAjaW1wb3J0ICJGb3VuZGF0aW9uRXh0
cmFzLmgiCiAjaW1wb3J0ICJPYmpDUnVudGltZU9iamVjdC5oIgogI2ltcG9ydCAiV2ViU2NyaXB0
T2JqZWN0LmgiCkBAIC0xNzMsNyArMTc0LDQxIEBAIGJvb2wgT2JqY0luc3RhbmNlOjpzdXBwb3J0
c0ludm9rZURlZmF1bHQKICAgICByZXR1cm4gW19pbnN0YW5jZS5nZXQoKSByZXNwb25kc1RvU2Vs
ZWN0b3I6QHNlbGVjdG9yKGludm9rZURlZmF1bHRNZXRob2RXaXRoQXJndW1lbnRzOildOwogfQog
Ci1KU1ZhbHVlIE9iamNJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29u
c3QgTWV0aG9kTGlzdCAmbWV0aG9kTGlzdCwgY29uc3QgQXJnTGlzdCAmYXJncykKK2NsYXNzIE9i
akNSdW50aW1lTWV0aG9kIDogcHVibGljIFJ1bnRpbWVNZXRob2QgeworcHVibGljOgorICAgIE9i
akNSdW50aW1lTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
QmluZGluZ3M6Ok1ldGhvZExpc3QmIGxpc3QpCisgICAgICAgIDogUnVudGltZU1ldGhvZChleGVj
LCBuYW1lLCBsaXN0KQorICAgIHsKKyAgICB9CisKKyAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5m
byogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1cm4gJnNfaW5mbzsgfQorCisgICAgc3RhdGljIGNv
bnN0IENsYXNzSW5mbyBzX2luZm87Cit9OworCitjb25zdCBDbGFzc0luZm8gT2JqQ1J1bnRpbWVN
ZXRob2Q6OnNfaW5mbyA9IHsgIk9iakNSdW50aW1lTWV0aG9kIiwgJlJ1bnRpbWVNZXRob2Q6OnNf
aW5mbywgMCwgMCB9OworCitKU1ZhbHVlIE9iamNJbnN0YW5jZTo6Z2V0TWV0aG9kKEV4ZWNTdGF0
ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIE1ldGhvZExp
c3QgbWV0aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRo
aXMpOworICAgIHJldHVybiBuZXcgKGV4ZWMpIE9iakNSdW50aW1lTWV0aG9kKGV4ZWMsIHByb3Bl
cnR5TmFtZSwgbWV0aG9kTGlzdCk7Cit9CisKK0pTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VN
ZXRob2QoRXhlY1N0YXRlKiBleGVjLCBSdW50aW1lTWV0aG9kKiBydW50aW1lTWV0aG9kLCBjb25z
dCBBcmdMaXN0ICZhcmdzKQoreworICAgIGlmICghYXNPYmplY3QocnVudGltZU1ldGhvZCktPmlu
aGVyaXRzKCZPYmpDUnVudGltZU1ldGhvZDo6c19pbmZvKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgVHlwZUVycm9yLCAiQXR0ZW1wdCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0
aG9kIG9uIHBsdWctaW4gb2JqZWN0LiIpOworCisgICAgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9k
TGlzdCA9ICpydW50aW1lTWV0aG9kLT5tZXRob2RzKCk7CisKKyAgICAvLyBPdmVybG9hZGluZyBt
ZXRob2RzIGlzIG5vdCBhbGxvd2VkIGluIE9iamVjdGl2ZUMuICBTaG91bGQgb25seSBiZSBvbmUK
KyAgICAvLyBuYW1lIG1hdGNoIGZvciBhIHBhcnRpY3VsYXIgbWV0aG9kLgorICAgIEFTU0VSVCht
ZXRob2RMaXN0LnNpemUoKSA9PSAxKTsKKworICAgIHJldHVybiBpbnZva2VPYmpjTWV0aG9kKGV4
ZWMsIHN0YXRpY19jYXN0PE9iamNNZXRob2QqPihtZXRob2RMaXN0WzBdKSwgYXJncyk7Cit9CisK
K0pTVmFsdWUgT2JqY0luc3RhbmNlOjppbnZva2VPYmpjTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywg
T2JqY01ldGhvZCogbWV0aG9kLCBjb25zdCBBcmdMaXN0ICZhcmdzKQogewogICAgIEpTVmFsdWUg
cmVzdWx0ID0ganNVbmRlZmluZWQoKTsKICAgICAKQEAgLTE4MSwxMyArMjE2LDcgQEAgSlNWYWx1
ZSBPYmpjSW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjUwogCiAgICAgc2V0R2xvYmFsRXhjZXB0
aW9uKG5pbCk7CiAgICAgCi0gICAgLy8gT3ZlcmxvYWRpbmcgbWV0aG9kcyBpcyBub3QgYWxsb3dl
ZCBpbiBPYmplY3RpdmVDLiAgU2hvdWxkIG9ubHkgYmUgb25lCi0gICAgLy8gbmFtZSBtYXRjaCBm
b3IgYSBwYXJ0aWN1bGFyIG1ldGhvZC4KLSAgICBBU1NFUlQobWV0aG9kTGlzdC5zaXplKCkgPT0g
MSk7Ci0KIEB0cnkgewotICAgIE9iamNNZXRob2QqIG1ldGhvZCA9IDA7Ci0gICAgbWV0aG9kID0g
c3RhdGljX2Nhc3Q8T2JqY01ldGhvZCo+KG1ldGhvZExpc3RbMF0pOwogICAgIE5TTWV0aG9kU2ln
bmF0dXJlKiBzaWduYXR1cmUgPSBtZXRob2QtPmdldE1ldGhvZFNpZ25hdHVyZSgpOwogICAgIE5T
SW52b2NhdGlvbiogaW52b2NhdGlvbiA9IFtOU0ludm9jYXRpb24gaW52b2NhdGlvbldpdGhNZXRo
b2RTaWduYXR1cmU6c2lnbmF0dXJlXTsKICAgICBbaW52b2NhdGlvbiBzZXRTZWxlY3RvcjptZXRo
b2QtPnNlbGVjdG9yKCldOwpJbmRleDogV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHJl
dmlzaW9uIDU1MjY4KQorKysgV2ViQ29yZS9icmlkZ2Uvb2JqYy9vYmpjX3J1bnRpbWUubW0JKHdv
cmtpbmcgY29weSkKQEAgLTIzOCw5ICsyMzgsNyBAQCBzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGNhbGxPYmpDRmFsCiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIG5hbWVJZGVudGlmaWVy
ID0gc3RhdGljX2Nhc3Q8T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKj4oZnVuY3Rpb24pLT5wcm9wZXJ0
eU5hbWUoKTsKICAgICAgICAgUmV0YWluUHRyPENGU3RyaW5nUmVmPiBuYW1lKEFkb3B0Q0YsIENG
U3RyaW5nQ3JlYXRlV2l0aENoYXJhY3RlcnMoMCwgbmFtZUlkZW50aWZpZXIuZGF0YSgpLCBuYW1l
SWRlbnRpZmllci5zaXplKCkpKTsKICAgICAgICAgZmFsbGJhY2tNZXRob2QtPnNldEphdmFTY3Jp
cHROYW1lKG5hbWUuZ2V0KCkpOwotICAgICAgICBNZXRob2RMaXN0IG1ldGhvZExpc3Q7Ci0gICAg
ICAgIG1ldGhvZExpc3QuYXBwZW5kKGZhbGxiYWNrTWV0aG9kLmdldCgpKTsKLSAgICAgICAgcmVz
dWx0ID0gb2JqY0luc3RhbmNlLT5pbnZva2VNZXRob2QoZXhlYywgbWV0aG9kTGlzdCwgYXJncyk7
CisgICAgICAgIHJlc3VsdCA9IG9iamNJbnN0YW5jZS0+aW52b2tlT2JqY01ldGhvZChleGVjLCBm
YWxsYmFja01ldGhvZC5nZXQoKSwgYXJncyk7CiAgICAgfQogICAgICAgICAgICAgCiAgICAgb2Jq
Y0luc3RhbmNlLT5lbmQoKTsKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3RhbmNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5jcHAJKHJldmlz
aW9uIDU1MjY4KQorKysgV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzQsMTMgKzIzNCwxOCBAQCB2b2lkIFF0SW5zdGFuY2U6OmdldFByb3BlcnR5
TmFtZXMoRXhlY1N0CiAgICAgfQogfQogCi1KU1ZhbHVlIFF0SW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjU3RhdGUqLCBjb25zdCBNZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYpCitKU1ZhbHVl
IFF0SW5zdGFuY2U6OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXIm
IHByb3BlcnR5TmFtZSkKK3sKKyAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygp
LT5tZXRob2RzTmFtZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKKyAgICByZXR1cm4gbmV3IChleGVj
KSBSdW50aW1lTWV0aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7Cit9CisKK0pT
VmFsdWUgUXRJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1bnRpbWVNZXRob2Qq
LCBjb25zdCBBcmdMaXN0JikKIHsKICAgICAvLyBJbXBsZW1lbnRlZCB2aWEgZmFsbGJhY2tNZXRo
b2QgJiBRdFJ1bnRpbWVNZXRhTWV0aG9kOjpjYWxsQXNGdW5jdGlvbgogICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogfQogCi0KIEpTVmFsdWUgUXRJbnN0YW5jZTo6ZGVmYXVsdFZhbHVlKEV4ZWNT
dGF0ZSogZXhlYywgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSBoaW50KSBjb25zdAogewogICAgIGlm
IChoaW50ID09IFByZWZlclN0cmluZykKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL3F0L3F0X2luc3Rh
bmNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvcXQvcXRfaW5zdGFuY2UuaAkocmV2
aXNpb24gNTUyNjgpCisrKyBXZWJDb3JlL2JyaWRnZS9xdC9xdF9pbnN0YW5jZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01MCw3ICs1MCw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbWFya0FnZ3JlZ2F0
ZShNYXJrU3RhY2smKTsKIAotICAgIHZpcnR1YWwgSlNWYWx1ZSBpbnZva2VNZXRob2QoRXhlY1N0
YXRlKiwgY29uc3QgTWV0aG9kTGlzdCYsIGNvbnN0IEFyZ0xpc3QmKTsKKyAgICB2aXJ0dWFsIEpT
VmFsdWUgZ2V0TWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lKTsKKyAgICB2aXJ0dWFsIEpTVmFsdWUgaW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSosIFJ1
bnRpbWVNZXRob2QqLCBjb25zdCBBcmdMaXN0Jik7CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0UHJv
cGVydHlOYW1lcyhFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWVBcnJheSYpOwogCkluZGV4OiBXZWJD
b3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJD
b3JlL2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc3
LDggKzE3NywxNiBAQCBDbGFzcyogUXRQaXhtYXBJbnN0YW5jZTo6Z2V0Q2xhc3MoKSBjb25zCiAg
ICAgcmV0dXJuICZxdF9waXhtYXBfbWV0YURhdGEuY2xzOwogfQogCi1KU1ZhbHVlIFF0UGl4bWFw
SW5zdGFuY2U6Omludm9rZU1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IE1ldGhvZExpc3Qm
IG1ldGhvZHMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCitKU1ZhbHVlIFF0UGl4bWFwSW5zdGFuY2U6
OmdldE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFt
ZSkKIHsKKyAgICBNZXRob2RMaXN0IG1ldGhvZExpc3QgPSBnZXRDbGFzcygpLT5tZXRob2RzTmFt
ZWQocHJvcGVydHlOYW1lLCB0aGlzKTsKKyAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lTWV0
aG9kKGV4ZWMsIHByb3BlcnR5TmFtZSwgbWV0aG9kTGlzdCk7Cit9CisKK0pTVmFsdWUgUXRQaXht
YXBJbnN0YW5jZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgUnVudGltZU1ldGhvZCog
cnVudGltZU1ldGhvZCwgY29uc3QgQXJnTGlzdCYgYXJncykKK3sKKyAgICBjb25zdCBNZXRob2RM
aXN0JiBtZXRob2RMaXN0ID0gKnJ1bnRpbWVNZXRob2QtPm1ldGhvZHMoKTsKKwogICAgIGlmICht
ZXRob2RzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIFF0UGl4bWFwUnVudGltZU1ldGhvZCogbWV0
aG9kID0gc3RhdGljX2Nhc3Q8UXRQaXhtYXBSdW50aW1lTWV0aG9kKj4obWV0aG9kc1swXSk7CiAg
ICAgICAgIHJldHVybiBtZXRob2QtPmludm9rZShleGVjLCB0aGlzLCBhcmdzKTsKSW5kZXg6IFdl
YkNvcmUvYnJpZGdlL3F0L3F0X3BpeG1hcHJ1bnRpbWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JyaWRnZS9xdC9xdF9waXhtYXBydW50aW1lLmgJKHJldmlzaW9uIDU1MjY4KQorKysgV2ViQ29y
ZS9icmlkZ2UvcXQvcXRfcGl4bWFwcnVudGltZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICsz
Miw4IEBAIGNsYXNzIFF0UGl4bWFwSW5zdGFuY2UgOiBwdWJsaWMgSW5zdGFuY2UKIHB1YmxpYzoK
ICAgICBRdFBpeG1hcEluc3RhbmNlKFBhc3NSZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iaiwgY29u
c3QgUVZhcmlhbnQmIG5ld0RhdGEpOwogICAgIHZpcnR1YWwgQ2xhc3MqIGdldENsYXNzKCkgY29u
c3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBjb25zdCBN
ZXRob2RMaXN0JiwgY29uc3QgQXJnTGlzdCYgYXJncyk7CisgICAgdmlydHVhbCBKU1ZhbHVlIGdl
dE1ldGhvZChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSk7
CisgICAgdmlydHVhbCBKU1ZhbHVlIGludm9rZU1ldGhvZChFeGVjU3RhdGUqLCBSdW50aW1lTWV0
aG9kKiwgY29uc3QgQXJnTGlzdCYgYXJncyk7CiAgICAgdmlydHVhbCB2b2lkIGdldFByb3BlcnR5
TmFtZXMoRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lQXJyYXkmKTsKIAogICAgIHZpcnR1YWwgSlNW
YWx1ZSBkZWZhdWx0VmFsdWUoRXhlY1N0YXRlKiwgUHJlZmVycmVkUHJpbWl0aXZlVHlwZSkgY29u
c3Q7CkluZGV4OiBXZWJLaXQvbWFjL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFj
L0NoYW5nZUxvZwkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJLaXQvbWFjL0NoYW5nZUxvZwkod29y
a2luZyBjb3B5KQpAQCAtMSwzICsxLDE5IEBACisyMDEwLTAyLTI2ICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBCdWcgMzU0MDEgLSBVbnNhZmUg
Y2FzdGluZyBvZiBNZXRob2QgdHlwZXMgaW4gYnJpZGdlIGNvZGUuCisKKyAgICAgICAgVGhlIGNv
ZGUgYXNzdW1lcyB1c2VycyB3aWxsIG9ubHkgYXR0ZW1wdCB0byBpbnZva2UgYSBKYXZhIG1ldGhv
ZAorICAgICAgICBvbiBhIEphdmEgYmFzZSBvYmplY3QsIGV0Yy4gIFRoaXMgbGVhZHMgdG8gdW5z
YWZlIGNhc3RpbmcuCisgICAgICAgIEFkZCBsYW5ndWFnZSBzcGVjaWZpYyBzdWJjbGFzc2VzIG9m
IFJ1bnRpbWVNZXRob2QsIGFuZCBwYXNzIHRoZQorICAgICAgICBSdW50aW1lTWV0aG9kIGludG8g
aW52b2tlTWV0aG9kLCBzbyB3ZSBjYW4gdHlwZWNoZWNrIGJlZm9yZQorICAgICAgICBjYXN0aW5n
LiAgVGhyb3cgYW4gZXhjZXB0aW9uIG9uIHR5cGUgbWlzbWF0Y2guCisKKyAgICAgICAgKiBQbHVn
aW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLmg6CisgICAgICAgICogUGx1Z2lucy9Ib3N0ZWQvUHJv
eHlJbnN0YW5jZS5tbToKKyAgICAgICAgKFdlYktpdDo6UGx1Z2luUnVudGltZU1ldGhvZDo6UGx1
Z2luUnVudGltZU1ldGhvZCk6IG5ldyBjbGFzcyB0byBkaXN0aW5ndWlzaCB0aGlzIHR5cGUgb2Yg
UnVudGltZU1ldGhvZC4KKyAgICAgICAgKFdlYktpdDo6UHJveHlJbnN0YW5jZTo6Z2V0TWV0aG9k
KTogY3JlYXRlIGFuIGFwcHJvcHJpYXRlIHN1YmxjbGFzcyBvZiBSdW50aW1lTWV0aG9kLgorICAg
ICAgICAoV2ViS2l0OjpQcm94eUluc3RhbmNlOjppbnZva2VNZXRob2QpOiBkeW5hbWljYWxseSBj
aGVjayB0aGUgdHlwZSBvZiB0aGUgUnVudGltZU1ldGhvZC4KKwogMjAxMC0wMi0yNSAgQWxleGV5
IFByb3NrdXJ5YWtvdiAgPGFwQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBHZW9m
ZnJleSBHYXJlbi4KSW5kZXg6IFdlYktpdC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGltZS9F
cnJvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9tYWMvRm9yd2FyZGluZ0hlYWRlcnMvcnVudGlt
ZS9FcnJvci5oCShyZXZpc2lvbiAwKQorKysgV2ViS2l0L21hYy9Gb3J3YXJkaW5nSGVhZGVycy9y
dW50aW1lL0Vycm9yLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKKyNpbXBvcnQgPEphdmFT
Y3JpcHRDb3JlL0Vycm9yLmg+CkluZGV4OiBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
SW5zdGFuY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5
SW5zdGFuY2UuaAkocmV2aXNpb24gNTUyNjgpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVk
L1Byb3h5SW5zdGFuY2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsOCBAQCBwcml2YXRl
OgogCiAgICAgdmlydHVhbCBKU0M6OkJpbmRpbmdzOjpDbGFzcyogZ2V0Q2xhc3MoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGludm9rZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSos
IGNvbnN0IEpTQzo6QmluZGluZ3M6Ok1ldGhvZExpc3QmLCBjb25zdCBKU0M6OkFyZ0xpc3QmIGFy
Z3MpOworICAgIHZpcnR1YWwgSlNDOjpKU1ZhbHVlIGdldE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgSlNDOjpJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUpOworICAgIHZpcnR1YWwg
SlNDOjpKU1ZhbHVlIGludm9rZU1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIEpTQzo6UnVudGltZU1l
dGhvZCosIGNvbnN0IEpTQzo6QXJnTGlzdCYgYXJncyk7CiAKICAgICB2aXJ0dWFsIGJvb2wgc3Vw
cG9ydHNJbnZva2VEZWZhdWx0TWV0aG9kKCkgY29uc3Q7CiAgICAgdmlydHVhbCBKU0M6OkpTVmFs
dWUgaW52b2tlRGVmYXVsdE1ldGhvZChKU0M6OkV4ZWNTdGF0ZSosIGNvbnN0IEpTQzo6QXJnTGlz
dCYpOwpJbmRleDogV2ViS2l0L21hYy9QbHVnaW5zL0hvc3RlZC9Qcm94eUluc3RhbmNlLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9tYWMvUGx1Z2lucy9Ib3N0ZWQvUHJveHlJbnN0YW5jZS5tbQko
cmV2aXNpb24gNTUyNjgpCisrKyBXZWJLaXQvbWFjL1BsdWdpbnMvSG9zdGVkL1Byb3h5SW5zdGFu
Y2UubW0JKHdvcmtpbmcgY29weSkKQEAgLTI3LDEyICsyNywxNCBAQAogCiAjaW1wb3J0ICJQcm94
eUluc3RhbmNlLmgiCiAKKyNpbXBvcnQgIkphdmFTY3JpcHRDb3JlL0Vycm9yLmgiCiAjaW1wb3J0
ICJOZXRzY2FwZVBsdWdpbkhvc3RQcm94eS5oIgogI2ltcG9ydCAiUHJveHlSdW50aW1lT2JqZWN0
LmgiCiAjaW1wb3J0IDxXZWJDb3JlL0lkZW50aWZpZXJSZXAuaD4KICNpbXBvcnQgPFdlYkNvcmUv
SlNET01XaW5kb3cuaD4KICNpbXBvcnQgPFdlYkNvcmUvbnBydW50aW1lX2ltcGwuaD4KICNpbXBv
cnQgPHJ1bnRpbWUvUHJvcGVydHlOYW1lQXJyYXkuaD4KKyNpbXBvcnQgIldlYkNvcmUvcnVudGlt
ZV9tZXRob2QuaCIKIAogZXh0ZXJuICJDIiB7CiAjaW1wb3J0ICJXZWJLaXRQbHVnaW5Ib3N0Lmgi
CkBAIC0xNzAsOCArMTcyLDMzIEBAIEpTVmFsdWUgUHJveHlJbnN0YW5jZTo6aW52b2tlKEpTQzo6
RXhlY1MKICAgICByZXR1cm4gbV9pbnN0YW5jZVByb3h5LT5kZW1hcnNoYWxWYWx1ZShleGVjLCAo
Y2hhciopQ0ZEYXRhR2V0Qnl0ZVB0cihyZXBseS0+bV9yZXN1bHQuZ2V0KCkpLCBDRkRhdGFHZXRM
ZW5ndGgocmVwbHktPm1fcmVzdWx0LmdldCgpKSk7CiB9CiAKLUpTVmFsdWUgUHJveHlJbnN0YW5j
ZTo6aW52b2tlTWV0aG9kKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgTWV0aG9kTGlzdCYgbWV0aG9k
TGlzdCwgY29uc3QgQXJnTGlzdCYgYXJncykKK2NsYXNzIFByb3h5UnVudGltZU1ldGhvZCA6IHB1
YmxpYyBSdW50aW1lTWV0aG9kIHsKK3B1YmxpYzoKKyAgICBQcm94eVJ1bnRpbWVNZXRob2QoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBuYW1lLCBCaW5kaW5nczo6TWV0aG9kTGlz
dCYgbGlzdCkKKyAgICAgICAgOiBSdW50aW1lTWV0aG9kKGV4ZWMsIG5hbWUsIGxpc3QpCisgICAg
eworICAgIH0KKworICAgIHZpcnR1YWwgY29uc3QgQ2xhc3NJbmZvKiBjbGFzc0luZm8oKSBjb25z
dCB7IHJldHVybiAmc19pbmZvOyB9CisKKyAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIHNfaW5m
bzsKK307CisKK2NvbnN0IENsYXNzSW5mbyBQcm94eVJ1bnRpbWVNZXRob2Q6OnNfaW5mbyA9IHsg
IlByb3h5UnVudGltZU1ldGhvZCIsICZSdW50aW1lTWV0aG9kOjpzX2luZm8sIDAsIDAgfTsKKwor
SlNWYWx1ZSBQcm94eUluc3RhbmNlOjpnZXRNZXRob2QoSlNDOjpFeGVjU3RhdGUqIGV4ZWMsIGNv
bnN0IEpTQzo6SWRlbnRpZmllciYgcHJvcGVydHlOYW1lKQoreworICAgIE1ldGhvZExpc3QgbWV0
aG9kTGlzdCA9IGdldENsYXNzKCktPm1ldGhvZHNOYW1lZChwcm9wZXJ0eU5hbWUsIHRoaXMpOwor
ICAgIHJldHVybiBuZXcgKGV4ZWMpIFByb3h5UnVudGltZU1ldGhvZChleGVjLCBwcm9wZXJ0eU5h
bWUsIG1ldGhvZExpc3QpOworfQorCitKU1ZhbHVlIFByb3h5SW5zdGFuY2U6Omludm9rZU1ldGhv
ZChFeGVjU3RhdGUqIGV4ZWMsIEpTQzo6UnVudGltZU1ldGhvZCogcnVudGltZU1ldGhvZCwgY29u
c3QgQXJnTGlzdCYgYXJncykKIHsKKyAgICBpZiAoIWFzT2JqZWN0KHJ1bnRpbWVNZXRob2QpLT5p
bmhlcml0cygmUHJveHlSdW50aW1lTWV0aG9kOjpzX2luZm8pKQorICAgICAgICByZXR1cm4gdGhy
b3dFcnJvcihleGVjLCBUeXBlRXJyb3IsICJBdHRlbXB0IHRvIGludm9rZSBub24tcGx1Zy1pbiBt
ZXRob2Qgb24gcGx1Zy1pbiBvYmplY3QuIik7CisKKyAgICBjb25zdCBNZXRob2RMaXN0JiBtZXRo
b2RMaXN0ID0gKnJ1bnRpbWVNZXRob2QtPm1ldGhvZHMoKTsKKwogICAgIEFTU0VSVChtZXRob2RM
aXN0LnNpemUoKSA9PSAxKTsKIAogICAgIFByb3h5TWV0aG9kKiBtZXRob2QgPSBzdGF0aWNfY2Fz
dDxQcm94eU1ldGhvZCo+KG1ldGhvZExpc3RbMF0pOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTUyOTUp
CisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBA
QAorMjAxMC0wMi0yNiAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQnVnIDM1
NDAxIC0gVW5zYWZlIGNhc3Rpbmcgb2YgTWV0aG9kIHR5cGVzIGluIGJyaWRnZSBjb2RlLgorCisg
ICAgICAgIFRoZSBjb2RlIGFzc3VtZXMgdXNlcnMgd2lsbCBvbmx5IGF0dGVtcHQgdG8gaW52b2tl
IGEgSmF2YSBtZXRob2QKKyAgICAgICAgb24gYSBKYXZhIGJhc2Ugb2JqZWN0LCBldGMuICBUaGlz
IGxlYWRzIHRvIHVuc2FmZSBjYXN0aW5nLgorICAgICAgICBBZGQgbGFuZ3VhZ2Ugc3BlY2lmaWMg
c3ViY2xhc3NlcyBvZiBSdW50aW1lTWV0aG9kLCBhbmQgcGFzcyB0aGUKKyAgICAgICAgUnVudGlt
ZU1ldGhvZCBpbnRvIGludm9rZU1ldGhvZCwgc28gd2UgY2FuIHR5cGVjaGVjayBiZWZvcmUKKyAg
ICAgICAgY2FzdGluZy4gIFRocm93IGFuIGV4Y2VwdGlvbiBvbiB0eXBlIG1pc21hdGNoLgorCisg
ICAgICAgICogamF2YS9qYXZhLWFuZC1wbHVnaW5zLmh0bWw6IEFkZCB0ZXN0cyBmb3IgcGFzc2lu
ZyBtaXNtYXRjaGVkIHRoaXMgb2JqZWN0cyB0byBtZXRoZG9kcy4KKwogMjAxMC0wMi0yNiAgRGly
ayBTY2h1bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQgTGF5b3V0
VGVzdCBmaXguCkluZGV4OiBMYXlvdXRUZXN0cy9qYXZhL2phdmEtYW5kLXBsdWdpbnMuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qYXZhL2phdmEtYW5kLXBsdWdpbnMuaHRtbAkocmV2
aXNpb24gNTUyNjgpCisrKyBMYXlvdXRUZXN0cy9qYXZhL2phdmEtYW5kLXBsdWdpbnMuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsMjEgQEAgc2hvdWxkQmUoJ2RvY3VtZW50LmphdmFU
ZXN0LmdldEFuZEZvcmdldAogCiBzaG91bGRCZSgndHlwZW9mIGRvY3VtZW50LmphdmFUZXN0LnRl
c3RHZXRNZW1iZXIoZG9jdW1lbnQucGxnLCAidGVzdERPTUFjY2VzcyIpJywgJyJmdW5jdGlvbiIn
KTsKIAorLy8gVHJ5IGNhbGxpbmcgYSBwbHVnLWluIG1ldGhvZCB3aXRoIGEgSmF2YSBvYmplY3Qg
YXMgdGhpcywgYW5kIHZpY2UgdmVyc2EuCisvLyBUaGVzZSBzaG91bGQgdGhyb3cgYW4gZXhjZXB0
aW9uLgorZnVuY3Rpb24gdHJ5Q2FsbChmdW5jLCB0aGlzT2JqKQoreworICAgIHZhciBleGNlcHRp
b24gPSAiTk8gRVhDRVBUSU9OIjsKKyAgICB0cnkgeworICAgICAgICBmdW5jLmNhbGwodGhpc09i
aik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBleGNlcHRpb24gPSBlOworICAgIH0KKyAg
ICByZXR1cm4gU3RyaW5nKGV4Y2VwdGlvbik7Cit9CitzaG91bGRCZSgndHJ5Q2FsbChkb2N1bWVu
dC5qYXZhVGVzdC5nZXRTZWxmLCBwbGcudGVzdE9iamVjdCknLCAnIlR5cGVFcnJvcjogQXR0ZW1w
dCB0byBpbnZva2Ugbm9uLXBsdWctaW4gbWV0aG9kIG9uIHBsdWctaW4gb2JqZWN0LiInKTsKK3No
b3VsZEJlKCd0cnlDYWxsKHBsZy50ZXN0T2JqZWN0LnRocm93RXhjZXB0aW9uLCBkb2N1bWVudC5q
YXZhVGVzdCknLCAnIlR5cGVFcnJvcjogQXR0ZW1wdCB0byBpbnZva2Ugbm9uLUphdmEgbWV0aG9k
IG9uIEphdmEgb2JqZWN0LiInKTsKKwogc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2Ny
aXB0PgogPHNjcmlwdCBzcmM9Ii4uL2Zhc3QvanMvcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+
PC9zY3JpcHQ+Cg==
</data>
<flag name="review"
          id="32525"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>