<?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>49635</bug_id>
          
          <creation_ts>2010-11-16 17:43:49 -0800</creation_ts>
          <short_desc>Profiler implementation is fragile</short_desc>
          <delta_ts>2010-11-19 08:38:25 -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>JavaScriptCore</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>
          <dependson>49646</dependson>
          <blocked>49809</blocked>
    
    <blocked>49801</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Gavin Barraclough">barraclough</reporter>
          <assigned_to name="Gavin Barraclough">barraclough</assigned_to>
          <cc>aestes</cc>
    
    <cc>ossy</cc>
    
    <cc>rniwa</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>310063</commentid>
    <comment_count>0</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-16 17:43:49 -0800</bug_when>
    <thetext>The profile presently requires the exception handling mechanism to explicitly remove all stack frames that are exited during the exception unwind mechanism.  This is fragile in a number of ways:
 * We have to change bytecode register allocation when compiling code to run when profiling, to preserve the callee function (this is also required to call did_call after the call has returned).
 * In the JIT we have to maintain additional data structures (CodeBlock::RareData::m_functionRegisterInfos) to map back to the register containing the callee.
 * In the interpreter we use &apos;magic values&apos; to offset into the instruction stream to rediscover the register containing the function.

Instead, move profiling into the head and tail of functions.
 * This correctly accounts the cost of the call itself to the caller.
 * This allows us to access the callee function object from the callframe.
 * This means that at the point a call is made we can track the stack depth on the ProfileNode.
 * When unwinding we can simply report the depth at which the exception is being handled - all call frames above this level are freed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310066</commentid>
    <comment_count>1</comment_count>
      <attachid>74073</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-16 17:57:18 -0800</bug_when>
    <thetext>Created attachment 74073
the patch

Manually tested on sunspider, test case to check exception handling okay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310091</commentid>
    <comment_count>2</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-16 19:03:52 -0800</bug_when>
    <thetext>fixed in r72160</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310115</commentid>
    <comment_count>3</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-16 21:36:27 -0800</bug_when>
    <thetext>This change seems to be responsible for a whole bunch of SL test failures:
http://build.webkit.org/results/SnowLeopard%20Intel%20Release%20(Tests)/r72164%20(20945)/results.html

Could you look into this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310194</commentid>
    <comment_count>4</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-17 03:12:05 -0800</bug_when>
    <thetext>reopen because it was rolled out by http://trac.webkit.org/changeset/72176</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>310195</commentid>
    <comment_count>5</comment_count>
      <attachid>74073</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-11-17 03:12:29 -0800</bug_when>
    <thetext>Comment on attachment 74073
the patch

remove r+ from landed and rolled out patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311140</commentid>
    <comment_count>6</comment_count>
      <attachid>74308</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-18 15:55:10 -0800</bug_when>
    <thetext>Created attachment 74308
New improved implementation – breaks no tests, even fixes one!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311142</commentid>
    <comment_count>7</comment_count>
      <attachid>74308</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-11-18 15:57:05 -0800</bug_when>
    <thetext>Comment on attachment 74308
New improved implementation – breaks no tests, even fixes one!

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

&gt; JavaScriptCore/interpreter/Interpreter.cpp:566
&gt; +//    if (Profiler* profiler = *Profiler::enabledProfilerReference()) {
&gt; +//        if (callFrame-&gt;callee())
&gt; +//            profiler-&gt;didExecute(callFrame, callFrame-&gt;callee());
&gt; +//        else
&gt; +//            profiler-&gt;didExecute(callFrame, codeBlock-&gt;ownerExecutable()-&gt;sourceURL(), codeBlock-&gt;ownerExecutable()-&gt;lineNo());
&gt; +//    }

really?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311145</commentid>
    <comment_count>8</comment_count>
      <attachid>74310</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-18 15:59:27 -0800</bug_when>
    <thetext>Created attachment 74310
Ooops, cleaned up some unnecessary changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311177</commentid>
    <comment_count>9</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2010-11-18 16:54:50 -0800</bug_when>
    <thetext>fixed in r72351.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311492</commentid>
    <comment_count>10</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-19 08:33:57 -0800</bug_when>
    <thetext>Looks like &apos;plugins/refcount-leaks.html&apos; is failing on Leopard due to this change. Filed https://bugs.webkit.org/show_bug.cgi?id=49809.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>311493</commentid>
    <comment_count>11</comment_count>
    <who name="Andy Estes">aestes</who>
    <bug_when>2010-11-19 08:38:25 -0800</bug_when>
    <thetext>fast/profiler/throw-exception-from-eval.html also fails on Leopard. See https://bugs.webkit.org/show_bug.cgi?id=49801.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74073</attachid>
            <date>2010-11-16 17:57:18 -0800</date>
            <delta_ts>2010-11-17 03:12:29 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>Profiler.patch</filename>
            <type>text/plain</type>
            <size>50231</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMTUzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsOTMgQEAKKzIwMTAtMTEtMTYgIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTYzNSAtIFByb2ZpbGVyIGltcGxlbWVu
dGF0aW9uIGlzIGZyYWdpbGUKKworICAgICAgICBUaGUgcHJvZmlsZSBwcmVzZW50bHkgcmVxdWly
ZXMgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWNoYW5pc20gdG8gZXhwbGljaXRseQorICAgICAg
ICByZW1vdmUgYWxsIHN0YWNrIGZyYW1lcyB0aGF0IGFyZSBleGl0ZWQgZHVyaW5nIHRoZSBleGNl
cHRpb24gdW53aW5kIG1lY2hhbmlzbS4KKyAgICAgICAgVGhpcyBpcyBmcmFnaWxlIGluIGEgbnVt
YmVyIG9mIHdheXM6CisgICAgICAgICAgKiBXZSBoYXZlIHRvIGNoYW5nZSBieXRlY29kZSByZWdp
c3RlciBhbGxvY2F0aW9uIHdoZW4gY29tcGlsaW5nIGNvZGUgdG8gcnVuCisgICAgICAgICAgICB3
aGVuIHByb2ZpbGluZywgdG8gcHJlc2VydmUgdGhlIGNhbGxlZSBmdW5jdGlvbiAodGhpcyBpcyBh
bHNvIHJlcXVpcmVkIHRvCisgICAgICAgICAgICBjYWxsIGRpZF9jYWxsIGFmdGVyIHRoZSBjYWxs
IGhhcyByZXR1cm5lZCkuCisgICAgICAgICAgKiBJbiB0aGUgSklUIHdlIGhhdmUgdG8gbWFpbnRh
aW4gYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgICAgIChDb2RlQmxvY2s6OlJh
cmVEYXRhOjptX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvcykgdG8gbWFwIGJhY2sgdG8gdGhlIHJlZ2lz
dGVyCisgICAgICAgICAgICBjb250YWluaW5nIHRoZSBjYWxsZWUuCisgICAgICAgICAgKiBJbiB0
aGUgaW50ZXJwcmV0ZXIgd2UgdXNlICdtYWdpYyB2YWx1ZXMnIHRvIG9mZnNldCBpbnRvIHRoZSBp
bnN0cnVjdGlvbgorICAgICAgICAgICAgc3RyZWFtIHRvIHJlZGlzY292ZXIgdGhlIHJlZ2lzdGVy
IGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgIEluc3RlYWQsIG1vdmUgcHJvZmls
aW5nIGludG8gdGhlIGhlYWQgYW5kIHRhaWwgb2YgZnVuY3Rpb25zLgorICAgICAgICAgICogVGhp
cyBjb3JyZWN0bHkgYWNjb3VudHMgdGhlIGNvc3Qgb2YgdGhlIGNhbGwgaXRzZWxmIHRvIHRoZSBj
YWxsZXIuCisgICAgICAgICAgKiBUaGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIGNhbGxlZSBm
dW5jdGlvbiBvYmplY3QgZnJvbSB0aGUgY2FsbGZyYW1lLgorICAgICAgICAgICogVGhpcyBtZWFu
cyB0aGF0IGF0IHRoZSBwb2ludCBhIGNhbGwgaXMgbWFkZSB3ZSBjYW4gdHJhY2sgdGhlIHN0YWNr
IGRlcHRoCisgICAgICAgICAgICBvbiB0aGUgUHJvZmlsZU5vZGUuCisgICAgICAgICAgKiBXaGVu
IHVud2luZGluZyB3ZSBjYW4gc2ltcGx5IHJlcG9ydCB0aGUgZGVwdGggYXQgd2hpY2ggdGhlIGV4
Y2VwdGlvbiBpcworICAgICAgICAgICAgYmVpbmcgaGFuZGxlZCAtIGFsbCBjYWxsIGZyYW1lcyBh
Ym92ZSB0aGlzIGxldmVsIGFyZSBmcmVlZC4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6Q29kZUJs
b2NrOjpzaHJpbmtUb0ZpdCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAg
ICAgIChKU0M6OkNvZGVCbG9jazo6Ynl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpDb2Rl
QmxvY2s6Om1ldGhvZENhbGxMaW5rSW5mbyk6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6
CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpT
Qzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRDYWxsVmFyYXJncyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UmV0dXJuKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
b25zdHJ1Y3QpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgor
ICAgICAgICAoSlNDOjpDYWxsQXJndW1lbnRzOjpjb3VudCk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAgICAgIChKU0M6OkNhbGxBcmd1bWVudHM6OkNhbGxB
cmd1bWVudHMpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6UHJvZmlsZUhvc3RDYWxsOjpQcm9maWxlSG9zdENhbGwpOgorICAgICAgICAoSlND
OjpQcm9maWxlSG9zdENhbGw6On5Qcm9maWxlSG9zdENhbGwpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6dW53aW5kQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnRo
cm93RXhjZXB0aW9uKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGUpOgorICAg
ICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwpOgorICAgICAgICAoSlNDOjpJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpw
cml2YXRlRXhlY3V0ZSk6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAg
ICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Byb2Zp
bGVfaGFzX2NhbGxlZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9maWxlX3dpbGxf
cmV0dXJuKToKKyAgICAgICAgKiBqaXQvSklUT3Bjb2RlczMyXzY0LmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Byb2ZpbGVfaGFzX2NhbGxlZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9wcm9maWxlX3dpbGxfcmV0dXJuKToKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3Bw
OgorICAgICAgICAoSlNDOjpERUZJTkVfU1RVQl9GVU5DVElPTik6CisgICAgICAgICogaml0L0pJ
VFN0dWJzLmg6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZS5jcHA6CisgICAgICAgIChKU0M6
OlByb2ZpbGU6OlByb2ZpbGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjphZGRQYXJlbnRGb3JDb25zb2xl
U3RhcnQpOgorICAgICAgICAoSlNDOjpQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUpOgorICAgICAgICAoSlND
OjpQcm9maWxlR2VuZXJhdG9yOjpleGNlcHRpb25VbndpbmQpOgorICAgICAgICAoSlNDOjpQcm9m
aWxlR2VuZXJhdG9yOjpzdG9wUHJvZmlsaW5nKToKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxl
R2VuZXJhdG9yLmg6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwOgorICAgICAg
ICAoSlNDOjpQcm9maWxlTm9kZTo6UHJvZmlsZU5vZGUpOgorICAgICAgICAoSlNDOjpQcm9maWxl
Tm9kZTo6d2lsbEV4ZWN1dGUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVOb2RlLmg6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjpjcmVhdGUpOgorICAgICAgICAoSlNDOjpQcm9maWxl
Tm9kZTo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjpleGVjKToKKyAg
ICAgICAgKiBwcm9maWxlci9Qcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OmRpc3BhdGNoRnVu
Y3Rpb25Ub1Byb2ZpbGVzKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Omhhc0NhbGxlZCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVyOjp3aWxsRXZhbHVhdGUpOgorICAgICAgICAoSlNDOjpQcm9m
aWxlcjo6d2lsbFJldHVybik6CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpkaWRFdmFsdWF0ZSk6
CisgICAgICAgIChKU0M6OlByb2ZpbGVyOjpleGNlcHRpb25VbndpbmQpOgorICAgICAgICAqIHBy
b2ZpbGVyL1Byb2ZpbGVyLmg6CisKIDIwMTAtMTEtMTYgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFs
a2VuQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIFJvYmVuLgpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiA3MjEyNikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI0NDYs
NyArMjQ0Niw2IEBACiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9u
TGlzdCA9IDE0OUMyNzcxMDg5MDJBRkUwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxp
c3QgZm9yIFBCWFByb2plY3QgIkphdmFTY3JpcHRDb3JlIiAqLzsKIAkJCWNvbXBhdGliaWxpdHlW
ZXJzaW9uID0gIlhjb2RlIDIuNCI7Ci0JCQlkZXZlbG9wbWVudFJlZ2lvbiA9IEVuZ2xpc2g7CiAJ
CQloYXNTY2FubmVkRm9yRW5jb2RpbmdzID0gMTsKIAkJCWtub3duUmVnaW9ucyA9ICgKIAkJCQlF
bmdsaXNoLApJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShyZXZpc2lv
biA3MjEyNykKKysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEyMjAsMTQgKzEyMjAsMTIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXAoRXhl
Y1N0YXRlKiBleGVjLCBjbwogICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBkZWJ1Z1x0XHQgJXMs
ICVkLCAlZFxuIiwgbG9jYXRpb24sIGRlYnVnSG9va05hbWUoZGVidWdIb29rSUQpLCBmaXJzdExp
bmUsIGxhc3RMaW5lKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNh
c2Ugb3BfcHJvZmlsZV93aWxsX2NhbGw6IHsKLSAgICAgICAgICAgIGludCBmdW5jdGlvbiA9ICgr
K2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBwcm9maWxlX3dpbGxf
Y2FsbCAlc1xuIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShleGVjLCBmdW5jdGlvbikuZGF0YSgp
KTsKKyAgICAgICAgY2FzZSBvcF9wcm9maWxlX2hhc19jYWxsZWQ6IHsKKyAgICAgICAgICAgIHBy
aW50ZigiWyU0ZF0gb3BfcHJvZmlsZV9oYXNfY2FsbGVkXG4iLCBsb2NhdGlvbik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3Byb2ZpbGVfZGlkX2NhbGw6
IHsKLSAgICAgICAgICAgIGludCBmdW5jdGlvbiA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgcHJpbnRmKCJbJTRkXSBwcm9maWxlX2RpZF9jYWxsXHQgJXNcbiIsIGxvY2F0aW9uLCBy
ZWdpc3Rlck5hbWUoZXhlYywgZnVuY3Rpb24pLmRhdGEoKSk7CisgICAgICAgIGNhc2Ugb3BfcHJv
ZmlsZV93aWxsX3JldHVybjogeworICAgICAgICAgICAgcHJpbnRmKCJbJTRkXSBvcF9wcm9maWxl
X3dpbGxfcmV0dXJuXG4iLCBsb2NhdGlvbik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQogICAgICAgICBjYXNlIG9wX2VuZDogewpAQCAtMTY2MiwzMiArMTY2MCw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY28KICAgICByZXR1cm47CiB9CiAKLSNpZiBF
TkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6OmZ1bmN0aW9uUmVnaXN0ZXJGb3JCeXRlY29kZU9m
ZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBmdW5jdGlvblJlZ2lzdGVySW5kZXgp
Ci17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwgbV9pbnN0cnVjdGlvbkNvdW50KTsKLQot
ICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0YS0+bV9mdW5jdGlvblJlZ2lzdGVySW5m
b3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAg
ICBpbnQgaGlnaCA9IG1fcmFyZURhdGEtPm1fZnVuY3Rpb25SZWdpc3RlckluZm9zLnNpemUoKTsK
LSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAgICBpbnQgbWlkID0gbG93ICsgKGhpZ2gg
LSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKG1fcmFyZURhdGEtPm1fZnVuY3Rpb25SZWdpc3Rlcklu
Zm9zW21pZF0uYnl0ZWNvZGVPZmZzZXQgPD0gYnl0ZWNvZGVPZmZzZXQpCi0gICAgICAgICAgICBs
b3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBoaWdoID0gbWlkOwotICAg
IH0KLQotICAgIGlmICghbG93IHx8IG1fcmFyZURhdGEtPm1fZnVuY3Rpb25SZWdpc3RlckluZm9z
W2xvdyAtIDFdLmJ5dGVjb2RlT2Zmc2V0ICE9IGJ5dGVjb2RlT2Zmc2V0KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBmdW5jdGlvblJlZ2lzdGVySW5kZXggPSBtX3JhcmVEYXRhLT5tX2Z1
bmN0aW9uUmVnaXN0ZXJJbmZvc1tsb3cgLSAxXS5mdW5jdGlvblJlZ2lzdGVySW5kZXg7Ci0gICAg
cmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogI2lmIEVOQUJMRShJTlRFUlBSRVRFUikKIGJvb2wg
Q29kZUJsb2NrOjpoYXNHbG9iYWxSZXNvbHZlSW5zdHJ1Y3Rpb25BdEJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewpAQCAtMTc2Miw5ICsxNzM0LDYgQEAgdm9pZCBDb2Rl
QmxvY2s6OnNocmlua1RvRml0KCkKICAgICAgICAgbV9yYXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0
Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAgICAgIG1fcmFyZURhdGEtPm1fY2hhcmFj
dGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgpOwogICAgICAgICBtX3JhcmVEYXRhLT5t
X3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9GaXQoKTsKLSNpZiBFTkFCTEUoSklUKQot
ICAgICAgICBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvcy5zaHJpbmtUb0ZpdCgp
OwotI2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkocmV2aXNpb24gNzIxMjcpCisrKyBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDggKzM1MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgcmV0dXJuIGJpbmFyeUNob3A8Q2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVuc2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zm
c2V0PihjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5iZWdpbigpLCBjYWxsUmV0dXJuSW5kZXhWZWN0
b3IoKS5zaXplKCksIGdldEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkp
KS0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgZnVu
Y3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBp
bnQmIGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCk7CiAjZW5kaWYKICNpZiBFTkFCTEUoSU5URVJQUkVU
RVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KENhbGxGcmFtZSosIEluc3RydWN0
aW9uKiByZXR1cm5BZGRyZXNzKQpAQCAtNDQzLDggKzQ0MSw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExpbmtJbmZvcyh1bnNpZ25lZCBuKSB7IG1fbWV0
aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9CiAgICAgICAgIE1ldGhvZENhbGxMaW5rSW5mbyYg
bWV0aG9kQ2FsbExpbmtJbmZvKGludCBpbmRleCkgeyByZXR1cm4gbV9tZXRob2RDYWxsTGlua0lu
Zm9zW2luZGV4XTsgfQotCi0gICAgICAgIHZvaWQgYWRkRnVuY3Rpb25SZWdpc3RlckluZm8odW5z
aWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBmdW5jdGlvbkluZGV4KSB7IGNyZWF0ZVJhcmVEYXRh
SWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9mdW5jdGlvblJlZ2lzdGVySW5mb3MuYXBwZW5k
KEZ1bmN0aW9uUmVnaXN0ZXJJbmZvKGJ5dGVjb2RlT2Zmc2V0LCBmdW5jdGlvbkluZGV4KSk7IH0K
ICNlbmRpZgogCiAgICAgICAgIC8vIEV4Y2VwdGlvbiBoYW5kbGluZyBzdXBwb3J0CkBAIC01OTgs
MTAgKzU5NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgVmVjdG9yPFN0cmluZ0p1
bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzOwogCiAgICAgICAgICAgICBFdmFsQ29k
ZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgICAgICBW
ZWN0b3I8RnVuY3Rpb25SZWdpc3RlckluZm8+IG1fZnVuY3Rpb25SZWdpc3RlckluZm9zOwotI2Vu
ZGlmCiAgICAgICAgIH07CiAgICAgICAgIE93blB0cjxSYXJlRGF0YT4gbV9yYXJlRGF0YTsKICAg
ICB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHJldmlzaW9uIDcyMTI3KQorKysg
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE5MSw4
ICsxOTEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgbWFjcm8ob3Bfc3JldCwgMikgXAog
ICAgICAgICBcCiAgICAgICAgIG1hY3JvKG9wX2RlYnVnLCA0KSBcCi0gICAgICAgIG1hY3JvKG9w
X3Byb2ZpbGVfd2lsbF9jYWxsLCAyKSBcCi0gICAgICAgIG1hY3JvKG9wX3Byb2ZpbGVfZGlkX2Nh
bGwsIDIpIFwKKyAgICAgICAgbWFjcm8ob3BfcHJvZmlsZV9oYXNfY2FsbGVkLCAxKSBcCisgICAg
ICAgIG1hY3JvKG9wX3Byb2ZpbGVfd2lsbF9yZXR1cm4sIDEpIFwKICAgICAgICAgXAogICAgICAg
ICBtYWNybyhvcF9lbmQsIDIpIC8vIGVuZCBtdXN0IGJlIHRoZSBsYXN0IG9wY29kZSBpbiB0aGUg
bGlzdAogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29k
ZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDcyMTI3KQorKysgSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzI0LDcgKzMy
NCwxMSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoRnVuCiAgICAgICAg
IG1fY29kZUJsb2NrLT5zZXROZWVkc0Z1bGxTY29wZUNoYWluKHRydWUpOwogCiAgICAgY29kZUJs
b2NrLT5zZXRHbG9iYWxEYXRhKG1fZ2xvYmFsRGF0YSk7Ci0gICAgCisKKworICAgIGlmIChtX3No
b3VsZEVtaXRQcm9maWxlSG9va3MpCisgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9oYXNf
Y2FsbGVkKTsKKyAgIAogICAgIGVtaXRPcGNvZGUob3BfZW50ZXIpOwogICAgIGlmIChtX2NvZGVC
bG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7CiAgICAgICAgIG1fYWN0aXZhdGlvblJlZ2lz
dGVyID0gYWRkVmFyKCk7CkBAIC0xNjMzLDkgKzE2MzcsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgQVNTRVJUKG9wY29kZUlEID09IG9wX2NhbGwgfHwg
b3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKTsKICAgICBBU1NFUlQoZnVuYy0+cmVmQ291bnQoKSk7
CiAKLSAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKQotICAgICAgICBlbWl0TW92ZShj
YWxsQXJndW1lbnRzLnByb2ZpbGVIb29rUmVnaXN0ZXIoKSwgZnVuYyk7Ci0KICAgICAvLyBHZW5l
cmF0ZSBjb2RlIGZvciBhcmd1bWVudHMuCiAgICAgdW5zaWduZWQgYXJndW1lbnRJbmRleCA9IDA7
CiAgICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gY2FsbEFyZ3VtZW50cy5hcmd1bWVudHNO
b2RlKCktPm1fbGlzdE5vZGU7IG47IG4gPSBuLT5tX25leHQpCkBAIC0xNjQ2LDE1ICsxNjQ3LDYg
QEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplOyArK2kpCiAgICAg
ICAgIGNhbGxGcmFtZS5hcHBlbmQobmV3VGVtcG9yYXJ5KCkpOwogCi0gICAgaWYgKG1fc2hvdWxk
RW1pdFByb2ZpbGVIb29rcykgewotICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfd2lsbF9j
YWxsKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmls
ZUhvb2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIG1f
Y29kZUJsb2NrLT5hZGRGdW5jdGlvblJlZ2lzdGVySW5mbyhpbnN0cnVjdGlvbnMoKS5zaXplKCks
IGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLSNlbmRpZgot
ICAgIH0KLQogICAgIGVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9m
ZnNldCk7CiAKICNpZiBFTkFCTEUoSklUKQpAQCAtMTY3MSwxMSArMTY2Myw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGRzdC0+aW5kZXgoKSk7IC8vIGRzdAogICAgIH0KIAotICAgIGlmIChtX3Nob3VsZEVt
aXRQcm9maWxlSG9va3MpIHsKLSAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX2RpZF9jYWxs
KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhv
b2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICB9Ci0KICAgICByZXR1cm4gZHN0OwogfQogCkBA
IC0xNjk0LDE0ICsxNjgxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRD
YWxsVgogICAgIEFTU0VSVChmdW5jLT5yZWZDb3VudCgpKTsKICAgICBBU1NFUlQodGhpc1JlZ2lz
dGVyLT5yZWZDb3VudCgpKTsKICAgICBBU1NFUlQoZHN0ICE9IGZ1bmMpOwotICAgIGlmIChtX3No
b3VsZEVtaXRQcm9maWxlSG9va3MpIHsKLSAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX3dp
bGxfY2FsbCk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsK
LSAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1bmN0
aW9uUmVnaXN0ZXJJbmZvKGluc3RydWN0aW9ucygpLnNpemUoKSwgZnVuYy0+aW5kZXgoKSk7Ci0j
ZW5kaWYKLSAgICB9CiAgICAgCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFydE9m
ZnNldCwgZW5kT2Zmc2V0KTsKICAgICAKQEAgLTE3MTQsMTAgKzE2OTMsNiBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgICAgIGVtaXRPcGNvZGUob3BfY2Fs
bF9wdXRfcmVzdWx0KTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgo
KSk7IC8vIGRzdAogICAgIH0KLSAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7Ci0g
ICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKLSAgICB9CiAgICAgcmV0dXJuIGRzdDsKIH0K
IApAQCAtMTczMyw2ICsxNzA4LDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRSZXR1cgogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQobV9jb2RlQmxvY2stPmFyZ3Vt
ZW50c1JlZ2lzdGVyKCkpOwogICAgIH0KIAorICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9v
a3MpCisgICAgICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV93aWxsX3JldHVybik7CisKICAgICAv
LyBDb25zdHJ1Y3RvcnMgdXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpcyB0byBjaGVjayB0aGUgcmVz
dWx0IGlzIGFuCiAgICAgLy8gb2JqZWN0LCB1bmxlc3Mgd2UgY2FuIHRyaXZpYWxseSBkZXRlcm1p
bmUgdGhlIGNoZWNrIGlzIG5vdAogICAgIC8vIG5lY2Vzc2FyeSAoY3VycmVudGx5LCBpZiB0aGUg
cmV0dXJuIHZhbHVlIGlzICd0aGlzJykuCkBAIC0xNzU2LDkgKzE3MzQsNiBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiB7CiAgICAgQVNTRVJUKGZ1bmMtPnJlZkNv
dW50KCkpOwogCi0gICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykKLSAgICAgICAgZW1p
dE1vdmUoY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCksIGZ1bmMpOwotCiAgICAg
Ly8gR2VuZXJhdGUgY29kZSBmb3IgYXJndW1lbnRzLgogICAgIHVuc2lnbmVkIGFyZ3VtZW50SW5k
ZXggPSAwOwogICAgIGlmIChBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlID0gY2FsbEFyZ3Vt
ZW50cy5hcmd1bWVudHNOb2RlKCkpIHsKQEAgLTE3NjYsMTEgKzE3NDEsNiBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgICAgICAgICBlbWl0Tm9kZShjYWxs
QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoYXJndW1lbnRJbmRleCsrKSwgbik7CiAgICAgfQog
Ci0gICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewotICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNh
bGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLSAgICB9Ci0KICAg
ICAvLyBSZXNlcnZlIHNwYWNlIGZvciBjYWxsIGZyYW1lLgogICAgIFZlY3RvcjxSZWZQdHI8UmVn
aXN0ZXJJRD4sIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZT4gY2FsbEZyYW1lOwog
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgUmVnaXN0ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXpl
OyArK2kpCkBAIC0xNzkxLDExICsxNzYxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRDb25zdAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgp
KTsgLy8gZHN0CiAgICAgfQogCi0gICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewot
ICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5wcm9maWxlSG9va1JlZ2lzdGVyKCktPmluZGV4
KCkpOwotICAgIH0KLQogICAgIHJldHVybiBkc3Q7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiA3MjEyNykK
KysrIEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSwxMSArNTksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVn
aXN0ZXJJRCogYXJndW1lbnRSZWdpc3Rlcih1bnNpZ25lZCBpKSB7IHJldHVybiBtX2FyZ3ZbaSAr
IDFdLmdldCgpOyB9CiAgICAgICAgIHVuc2lnbmVkIGNhbGxGcmFtZSgpIHsgcmV0dXJuIHRoaXNS
ZWdpc3RlcigpLT5pbmRleCgpICsgY291bnQoKSArIFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZTsgfQogICAgICAgICB1bnNpZ25lZCBjb3VudCgpIHsgcmV0dXJuIG1fYXJndi5zaXpl
KCk7IH0KLSAgICAgICAgUmVnaXN0ZXJJRCogcHJvZmlsZUhvb2tSZWdpc3RlcigpIHsgcmV0dXJu
IG1fcHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKTsgfQogICAgICAgICBBcmd1bWVudHNOb2RlKiBh
cmd1bWVudHNOb2RlKCkgeyByZXR1cm4gbV9hcmd1bWVudHNOb2RlOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9wcm9maWxlSG9va1JlZ2lzdGVyOwogICAg
ICAgICBBcmd1bWVudHNOb2RlKiBtX2FyZ3VtZW50c05vZGU7CiAgICAgICAgIFZlY3RvcjxSZWZQ
dHI8UmVnaXN0ZXJJRD4sIDE2PiBtX2FyZ3Y7CiAgICAgfTsKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiA3MjEyNykKKysrIEph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjYsOCArMzI2LDYgQEAgUmVnaXN0ZXJJRCogTmV3RXhwck5vZGU6OmVtaXRCeXRlY29k
ZShCeQogQ2FsbEFyZ3VtZW50czo6Q2FsbEFyZ3VtZW50cyhCeXRlY29kZUdlbmVyYXRvciYgZ2Vu
ZXJhdG9yLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQogICAgIDogbV9hcmd1bWVudHNO
b2RlKGFyZ3VtZW50c05vZGUpCiB7Ci0gICAgaWYgKGdlbmVyYXRvci5zaG91bGRFbWl0UHJvZmls
ZUhvb2tzKCkpCi0gICAgICAgIG1fcHJvZmlsZUhvb2tSZWdpc3RlciA9IGdlbmVyYXRvci5uZXdU
ZW1wb3JhcnkoKTsKICAgICBtX2FyZ3YuYXBwZW5kKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSk7
CiAgICAgaWYgKGFyZ3VtZW50c05vZGUpIHsKICAgICAgICAgZm9yIChBcmd1bWVudExpc3ROb2Rl
KiBuID0gYXJndW1lbnRzTm9kZS0+bV9saXN0Tm9kZTsgbjsgbiA9IG4tPm1fbmV4dCkgewpJbmRl
eDogSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24g
NzIxMjcpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc2LDYgKzc2LDI3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5h
bWVzcGFjZSBKU0MgewogCitjbGFzcyBQcm9maWxlSG9zdENhbGwgeworcHVibGljOgorICAgIFBy
b2ZpbGVIb3N0Q2FsbChFeGVjU3RhdGUqIGV4ZWMpCisgICAgICAgIDogbV9wcm9maWxlcihQcm9m
aWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpCisgICAgICAgICwgbV9leGVjKGV4ZWMp
CisgICAgeworICAgICAgICBpZiAoKm1fcHJvZmlsZXIpCisgICAgICAgICAgICAoKm1fcHJvZmls
ZXIpLT5oYXNDYWxsZWQoZXhlYyk7CisgICAgfQorCisgICAgflByb2ZpbGVIb3N0Q2FsbCgpCisg
ICAgeworICAgICAgICBpZiAoKm1fcHJvZmlsZXIpCisgICAgICAgICAgICAoKm1fcHJvZmlsZXIp
LT53aWxsUmV0dXJuKG1fZXhlYyk7CisgICAgfQorCitwcml2YXRlOgorICAgIFByb2ZpbGVyKiog
bV9wcm9maWxlcjsKKyAgICBFeGVjU3RhdGUqIG1fZXhlYzsKK307CisKIC8vIFJldHVybnMgdGhl
IGRlcHRoIG9mIHRoZSBzY29wZSBjaGFpbiB3aXRoaW4gYSBnaXZlbiBjYWxsIGZyYW1lLgogc3Rh
dGljIGludCBkZXB0aChDb2RlQmxvY2sqIGNvZGVCbG9jaywgU2NvcGVDaGFpbiYgc2MpCiB7CkBA
IC01NTgsMTMgKzU3OSw2IEBAIE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRD
YWwKICAgICAgICAgICAgIGRlYnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShkZWJ1Z2dlckNhbGxG
cmFtZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKS0+bGFzdExpbmUoKSk7CiAgICAgfQogCi0gICAgaWYgKFByb2Zp
bGVyKiBwcm9maWxlciA9ICpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpIHsK
LSAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+
ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwotICAgICAgICBlbHNl
Ci0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVSTCgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLT5saW5lTm8oKSk7Ci0gICAgfQotCiAgICAgLy8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0
ZWQgYW4gYWN0aXZhdGlvbiBvciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIgaXQgb2ZmLgog
ICAgIGlmIChvbGRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG9sZENv
ZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpKSB7CiAgICAgICAgIGlmICghY2FsbEZyYW1l
LT5yKG9sZENvZGVCbG9jay0+YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkgewpAQCAt
NjU3LDkgKzY3MSwxMCBAQCBzdGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFt
CiAKIE5FVkVSX0lOTElORSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9u
KENhbGxGcmFtZSomIGNhbGxGcmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVk
IGJ5dGVjb2RlT2Zmc2V0LCBib29sIGV4cGxpY2l0VGhyb3cpCiB7Ci0gICAgLy8gU2V0IHVwIHRo
ZSBleGNlcHRpb24gb2JqZWN0Ci0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFt
ZS0+Y29kZUJsb2NrKCk7CisgICAgYm9vbCBpc0ludGVycnVwdCA9IGZhbHNlOworCisgICAgLy8g
U2V0IHVwIHRoZSBleGNlcHRpb24gb2JqZWN0CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2Jq
ZWN0KCkpIHsKICAgICAgICAgSlNPYmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGV4Y2VwdGlv
blZhbHVlKTsKICAgICAgICAgaWYgKCFleHBsaWNpdFRocm93ICYmIGV4Y2VwdGlvbi0+aXNFcnJv
ckluc3RhbmNlKCkgJiYgc3RhdGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPmFw
cGVuZFNvdXJjZVRvTWVzc2FnZSgpKQpAQCAtNjcxLDEyICs2ODYsNyBAQCBORVZFUl9JTkxJTkUg
SGFuZGxlckluZm8qIEludGVycHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8oY2Fs
bEZyYW1lLCBleGNlcHRpb24sIGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0
KGNhbGxGcmFtZSwgYnl0ZWNvZGVPZmZzZXQpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5zb3VyY2UoKSk7CiAKICAgICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRp
b24tPmV4Y2VwdGlvblR5cGUoKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvblR5cGUgPT0gSW50ZXJy
dXB0ZWQgfHwgZXhjZXB0aW9uVHlwZSA9PSBUZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICB3aGls
ZSAodW53aW5kQ2FsbEZyYW1lKGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zm
c2V0LCBjb2RlQmxvY2spKSB7Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCBoYW5kbGVy
IGNoZWNrcyBvciBhbnl0aGluZywgd2UganVzdCB3YW50IHRvIHVucm9sbCBhbGwgdGhlIEpTIGNh
bGxmcmFtZXMgcG9zc2libGUuCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMDsK
LSAgICAgICAgfQorICAgICAgICBpc0ludGVycnVwdCA9IGV4Y2VwdGlvblR5cGUgPT0gSW50ZXJy
dXB0ZWQgfHwgZXhjZXB0aW9uVHlwZSA9PSBUZXJtaW5hdGVkOwogICAgIH0KIAogICAgIGlmIChE
ZWJ1Z2dlciogZGVidWdnZXIgPSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVi
dWdnZXIoKSkgewpAQCAtNjg1LDM5ICs2OTUsMTkgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZv
KiBJbnRlcnByZXRlcjo6dAogICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2Fs
bEZyYW1lLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxv
Y2stPmxpbmVOdW1iZXJGb3JCeXRlY29kZU9mZnNldChjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0
KSwgaGFzSGFuZGxlcik7CiAgICAgfQogCi0gICAgLy8gSWYgd2UgdGhyb3cgaW4gdGhlIG1pZGRs
ZSBvZiBhIGNhbGwgaW5zdHJ1Y3Rpb24sIHdlIG5lZWQgdG8gbm90aWZ5Ci0gICAgLy8gdGhlIHBy
b2ZpbGVyIG1hbnVhbGx5IHRoYXQgdGhlIGNhbGwgaW5zdHJ1Y3Rpb24gaGFzIHJldHVybmVkLCBz
aW5jZQotICAgIC8vIHdlJ2xsIG5ldmVyIHJlYWNoIHRoZSByZWxldmFudCBvcF9wcm9maWxlX2Rp
ZF9jYWxsLgotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSgpKSB7Ci0jaWYgRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBp
ZiAoIWNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgICAgICAv
LyBGSVhNRTogV2h5IDg/IC0gd29yayBvdXQgd2hhdCB0aGlzIG1hZ2ljIHZhbHVlIGlzLCByZXBs
YWNlIHRoZSBjb25zdGFudCB3aXRoIHNvbWV0aGluZyBtb3JlIGhlbHBmdWwuCi0gICAgICAgICAg
ICBpZiAoaXNDYWxsQnl0ZWNvZGUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZU9m
ZnNldF0udS5vcGNvZGUpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNh
bGxGcmFtZSwgY2FsbEZyYW1lLT5yKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVP
ZmZzZXQgKyAxXS51Lm9wZXJhbmQpLmpzVmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChj
b2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSA+IChieXRlY29kZU9mZnNldCArIDgpICYm
IGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyA4XS51Lm9wY29kZSA9
PSBnZXRPcGNvZGUob3BfY29uc3RydWN0KSkKLSAgICAgICAgICAgICAgICBwcm9maWxlci0+ZGlk
RXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
W2J5dGVjb2RlT2Zmc2V0ICsgOV0udS5vcGVyYW5kKS5qc1ZhbHVlKCkpOwotICAgICAgICB9Ci0j
aWYgRU5BQkxFKEpJVCkKLSAgICAgICAgZWxzZQotI2VuZGlmCi0jZW5kaWYKLSNpZiBFTkFCTEUo
SklUKQotICAgICAgICB7Ci0gICAgICAgICAgICBpbnQgZnVuY3Rpb25SZWdpc3RlckluZGV4Owot
ICAgICAgICAgICAgaWYgKGNvZGVCbG9jay0+ZnVuY3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zm
c2V0KGJ5dGVjb2RlT2Zmc2V0LCBmdW5jdGlvblJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAg
ICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKGZ1bmN0aW9u
UmVnaXN0ZXJJbmRleCkuanNWYWx1ZSgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCiAg
ICAgLy8gQ2FsY3VsYXRlIGFuIGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwg
ZnJhbWVzIGFzIG5lY2Vzc2FyeS4KLQogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAg
ICB3aGlsZSAoIShoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQo
Ynl0ZWNvZGVPZmZzZXQpKSkgewotICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJh
bWUsIGV4Y2VwdGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkKKyAgICB3aGls
ZSAoaXNJbnRlcnJ1cHQgfHwgIShoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNv
ZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkgeworICAgICAgICBpZiAoIXVud2luZENhbGxGcmFt
ZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkg
eworICAgICAgICAgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9ICpQcm9maWxlcjo6ZW5hYmxl
ZFByb2ZpbGVyUmVmZXJlbmNlKCkpCisgICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlv
blVud2luZChjYWxsRnJhbWUpOwogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAg
ICB9CiAKKyAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gKlByb2ZpbGVyOjplbmFibGVkUHJv
ZmlsZXJSZWZlcmVuY2UoKSkKKyAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxs
RnJhbWUpOworCiAgICAgLy8gU2hyaW5rIHRoZSBKUyBzdGFjaywgaW4gY2FzZSBzdGFjayBvdmVy
ZmxvdyBtYWRlIGl0IGh1Z2UuCiAgICAgUmVnaXN0ZXIqIGhpZ2hXYXRlck1hcmsgPSAwOwogICAg
IGZvciAoQ2FsbEZyYW1lKiBjYWxsZXJGcmFtZSA9IGNhbGxGcmFtZTsgY2FsbGVyRnJhbWU7IGNh
bGxlckZyYW1lID0gY2FsbGVyRnJhbWUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJh
bWVGbGFnKCkpIHsKQEAgLTc4OSw3ICs3NzksNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVj
dXRlKFByb2dyYW1FeGVjCiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVu
YWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgq
cHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgp
LCBwcm9ncmFtLT5saW5lTm8oKSk7CisgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXZhbHVhdGUo
bmV3Q2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOwog
CiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgewpAQCAtODA3LDcgKzc5Nyw3IEBAIEpTVmFsdWUg
SW50ZXJwcmV0ZXI6OmV4ZWN1dGUoUHJvZ3JhbUV4ZWMKICAgICB9CiAKICAgICBpZiAoKnByb2Zp
bGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIHByb2dyYW0t
PnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5lTm8oKSk7CisgICAgICAgICgqcHJvZmlsZXIpLT5k
aWRFdmFsdWF0ZShjYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5l
Tm8oKSk7CiAKICAgICBpZiAobV9yZWVudHJ5RGVwdGggJiYgbGFzdEdsb2JhbE9iamVjdCAmJiBn
bG9iYWxPYmplY3QgIT0gbGFzdEdsb2JhbE9iamVjdCkKICAgICAgICAgbGFzdEdsb2JhbE9iamVj
dC0+Y29weUdsb2JhbHNUbyhtX3JlZ2lzdGVyRmlsZSk7CkBAIC04NTgsMTAgKzg0OCw2IEBAIEpT
VmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogICAgICAgICBEeW5hbWlj
R2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUobmV3Q2FsbEZyYW1lLCBjYWxsRGF0
YVNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCk7CiAKLSAgICAgICAgUHJvZmlsZXIqKiBwcm9maWxl
ciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKLSAgICAgICAgaWYgKCpw
cm9maWxlcikKLSAgICAgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJh
bWUsIGZ1bmN0aW9uKTsKLQogICAgICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICAgICAgewogICAg
ICAgICAgICAgU2FtcGxpbmdUb29sOjpDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdl
dCgpKTsKQEAgLTg3Niw5ICs4NjIsNiBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2Fs
bChDYWxsRnJhCiAgICAgICAgICAgICBtX3JlZW50cnlEZXB0aC0tOwogICAgICAgICB9CiAKLSAg
ICAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRl
KG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOwotCiAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmlu
ayhvbGRFbmQpOwogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogICAgIH0K
QEAgLTg5MCwxOSArODczLDEzIEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENh
bGxGcmEKIAogICAgIER5bmFtaWNHbG9iYWxPYmplY3RTY29wZSBnbG9iYWxPYmplY3RTY29wZShu
ZXdDYWxsRnJhbWUsIHNjb3BlQ2hhaW4tPmdsb2JhbE9iamVjdCk7CiAKLSAgICBQcm9maWxlcioq
IHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwotICAgIGlm
ICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJh
bWUsIGZ1bmN0aW9uKTsKLQogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsKKyAgICAgICAgUHJv
ZmlsZUhvc3RDYWxsIHByb2ZpbGVIb3N0Q2FsbChuZXdDYWxsRnJhbWUpOwogICAgICAgICBTYW1w
bGluZ1Rvb2w6Okhvc3RDYWxsUmVjb3JkIGNhbGxSZWNvcmQobV9zYW1wbGVyLmdldCgpKTsKICAg
ICAgICAgcmVzdWx0ID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUpKTsKICAgICB9CiAKLSAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnBy
b2ZpbGVyKS0+ZGlkRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uKTsKLQogICAgIG1fcmVn
aXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOwogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3Vs
dCk7CiB9CkBAIC05NDcsMTAgKzkyNCw2IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0
ZUNvbnN0cnVjdCgKIAogICAgICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2Jq
ZWN0U2NvcGUobmV3Q2FsbEZyYW1lLCBjb25zdHJ1Y3REYXRhU2NvcGVDaGFpbi0+Z2xvYmFsT2Jq
ZWN0KTsKIAotICAgICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSgpOwotICAgICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAgICAg
KCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgY29uc3RydWN0b3IpOwotCiAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0OwogICAgICAgICB7CiAgICAgICAgICAgICBTYW1wbGluZ1Rv
b2w6OkNhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwpAQCAtOTY1LDkgKzkz
OCw2IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKICAgICAgICAg
ICAgIG1fcmVlbnRyeURlcHRoLS07CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoKnByb2ZpbGVy
KQotICAgICAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBjb25z
dHJ1Y3Rvcik7Ci0KICAgICAgICAgbV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAg
ICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIDA7
CkBAIC05ODIsMTkgKzk1MiwxMyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25z
dHJ1Y3QoCiAKICAgICBEeW5hbWljR2xvYmFsT2JqZWN0U2NvcGUgZ2xvYmFsT2JqZWN0U2NvcGUo
bmV3Q2FsbEZyYW1lLCBzY29wZUNoYWluLT5nbG9iYWxPYmplY3QpOwogCi0gICAgUHJvZmlsZXIq
KiBwcm9maWxlciA9IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKLSAgICBp
ZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZy
YW1lLCBjb25zdHJ1Y3Rvcik7Ci0KICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CisgICAgICAg
IFByb2ZpbGVIb3N0Q2FsbCBwcm9maWxlSG9zdENhbGwobmV3Q2FsbEZyYW1lKTsKICAgICAgICAg
U2FtcGxpbmdUb29sOjpIb3N0Q2FsbFJlY29yZCBjYWxsUmVjb3JkKG1fc2FtcGxlci5nZXQoKSk7
CiAgICAgICAgIHJlc3VsdCA9IEpTVmFsdWU6OmRlY29kZShjb25zdHJ1Y3REYXRhLm5hdGl2ZS5m
dW5jdGlvbihuZXdDYWxsRnJhbWUpKTsKICAgICB9CiAKLSAgICBpZiAoKnByb2ZpbGVyKQotICAg
ICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsK
LQogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOwogICAgIGlmIChjYWxsRnJhbWUt
PmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTEwNDgsOSArMTAxMiw2IEBA
IENhbGxGcmFtZUNsb3N1cmUgSW50ZXJwcmV0ZXI6OnByZXBhcmVGb3IKIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2xvc3VyZSYgY2xvc3VyZSkgCiB7CiAgICAgY2xvc3Vy
ZS5yZXNldENhbGxGcmFtZSgpOwotICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6
ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7Ci0gICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAg
KCpwcm9maWxlciktPndpbGxFeGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9zdXJlLmZ1
bmN0aW9uKTsKICAgICAKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CkBAIC0xMDcyLDggKzEw
MzMsNiBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKENhbGxGcmFtZUNsCiAgICAgICAg
IG1fcmVlbnRyeURlcHRoLS07CiAgICAgfQogICAgIAotICAgIGlmICgqcHJvZmlsZXIpCi0gICAg
ICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKGNsb3N1cmUub2xkQ2FsbEZyYW1lLCBjbG9zdXJl
LmZ1bmN0aW9uKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwogfQogCkBAIC0x
MTU5LDcgKzExMTgsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRh
CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxs
RXhlY3V0ZShuZXdDYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8oKSk7
CisgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXZhbHVhdGUobmV3Q2FsbEZyYW1lLCBldmFsLT5z
b3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAg
ewpAQCAtMTE4Myw3ICsxMTQyLDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShFdmFs
RXhlY3V0YQogICAgIH0KIAogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIp
LT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgZXZhbC0+c291cmNlVVJMKCksIGV2YWwtPmxpbmVObygp
KTsKKyAgICAgICAgKCpwcm9maWxlciktPmRpZEV2YWx1YXRlKGNhbGxGcmFtZSwgZXZhbC0+c291
cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKIAogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhv
bGRFbmQpOwogICAgIGlmIChwdXNoZWRTY29wZSkKQEAgLTM5MzAsNiArMzg4OSw3IEBAIHNraXBf
aWRfY3VzdG9tX3NlbGY6CiAKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgUHJvZmlsZUhvc3RDYWxsIHByb2ZpbGVIb3N0Q2Fs
bChuZXdDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxS
ZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihuZXdDYWxs
RnJhbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQwODgsNiArNDA0OCw3IEBAIHNraXBfaWRfY3Vz
dG9tX3NlbGY6CiAgICAgICAgICAgICAKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7
CiAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgUHJvZmlsZUhvc3RDYWxsIHByb2ZpbGVI
b3N0Q2FsbChuZXdDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9z
dENhbGxSZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAg
IHJldHVyblZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNhbGxEYXRhLm5hdGl2ZS5mdW5jdGlvbihu
ZXdDYWxsRnJhbWUpKTsKICAgICAgICAgICAgIH0KQEAgLTQ0MzMsNiArNDM5NCw3IEBAIHNraXBf
aWRfY3VzdG9tX3NlbGY6CiAKICAgICAgICAgICAgIEpTVmFsdWUgcmV0dXJuVmFsdWU7CiAgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgUHJvZmlsZUhvc3RDYWxsIHByb2ZpbGVIb3N0Q2Fs
bChuZXdDYWxsRnJhbWUpOwogICAgICAgICAgICAgICAgIFNhbXBsaW5nVG9vbDo6SG9zdENhbGxS
ZWNvcmQgY2FsbFJlY29yZChtX3NhbXBsZXIuZ2V0KCkpOwogICAgICAgICAgICAgICAgIHJldHVy
blZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGNvbnN0cnVjdERhdGEubmF0aXZlLmZ1bmN0aW9uKG5l
d0NhbGxGcmFtZSkpOwogICAgICAgICAgICAgfQpAQCAtNDc3MCwzMiArNDczMiwyOCBAQCBza2lw
X2lkX2N1c3RvbV9zZWxmOgogICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9kZWJ1Zyk7
CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9Ci0gICAgREVGSU5FX09QQ09ERShv
cF9wcm9maWxlX3dpbGxfY2FsbCkgewotICAgICAgICAvKiBvcF9wcm9maWxlX3dpbGxfY2FsbCBm
dW5jdGlvbihyKQorICAgIERFRklORV9PUENPREUob3BfcHJvZmlsZV9oYXNfY2FsbGVkKSB7Cisg
ICAgICAgIC8qIG9wX3Byb2ZpbGVfaGFzX2NhbGxlZAogCiAgICAgICAgICBOb3RpZmllcyB0aGUg
cHJvZmlsZXIgb2YgdGhlIGJlZ2lubmluZyBvZiBhIGZ1bmN0aW9uIGNhbGwuIFRoaXMgb3Bjb2Rl
CiAgICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBkZXZlbG9wZXIgdG9vbHMgYXJlIGVuYWJs
ZWQuCiAgICAgICAgICovCi0gICAgICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7
Ci0KICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAo
KmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5yKGZ1bmN0aW9uKS5qc1ZhbHVlKCkpOworICAgICAgICAgICAgKCplbmFibGVkUHJvZmls
ZXJSZWZlcmVuY2UpLT5oYXNDYWxsZWQoY2FsbEZyYW1lKTsKIAotICAgICAgICB2UEMgKz0gT1BD
T0RFX0xFTkdUSChvcF9wcm9maWxlX3dpbGxfY2FsbCk7CisgICAgICAgIHZQQyArPSBPUENPREVf
TEVOR1RIKG9wX3Byb2ZpbGVfaGFzX2NhbGxlZCk7CiAgICAgICAgIE5FWFRfSU5TVFJVQ1RJT04o
KTsKICAgICB9Ci0gICAgREVGSU5FX09QQ09ERShvcF9wcm9maWxlX2RpZF9jYWxsKSB7Ci0gICAg
ICAgIC8qIG9wX3Byb2ZpbGVfZGlkX2NhbGwgZnVuY3Rpb24ocikKKyAgICBERUZJTkVfT1BDT0RF
KG9wX3Byb2ZpbGVfd2lsbF9yZXR1cm4pIHsKKyAgICAgICAgLyogb3BfcHJvZmlsZV93aWxsX3Jl
dHVybgogCiAgICAgICAgICBOb3RpZmllcyB0aGUgcHJvZmlsZXIgb2YgdGhlIGVuZCBvZiBhIGZ1
bmN0aW9uIGNhbGwuIFRoaXMgb3Bjb2RlCiAgICAgICAgICBpcyBvbmx5IGdlbmVyYXRlZCBpZiBk
ZXZlbG9wZXIgdG9vbHMgYXJlIGVuYWJsZWQuCiAgICAgICAgICovCi0gICAgICAgIGludCBmdW5j
dGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7Ci0KICAgICAgICAgaWYgKCplbmFibGVkUHJvZmlsZXJS
ZWZlcmVuY2UpCi0gICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4
ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFsdWUoKSk7CisgICAg
ICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxSZXR1cm4oY2FsbEZyYW1l
KTsKIAotICAgICAgICB2UEMgKz0gT1BDT0RFX0xFTkdUSChvcF9wcm9maWxlX2RpZF9jYWxsKTsK
KyAgICAgICAgdlBDICs9IE9QQ09ERV9MRU5HVEgob3BfcHJvZmlsZV93aWxsX3JldHVybik7CiAg
ICAgICAgIE5FWFRfSU5TVFJVQ1RJT04oKTsKICAgICB9CiAgICAgdm1fdGhyb3c6IHsKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwCShyZXZpc2lvbiA3MjEyNykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsOCArMjg0LDggQEAgdm9pZCBKSVQ6OnByaXZhdGVD
b21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcG9zdF9pbmMpCiAgICAgICAg
IERFRklORV9PUChvcF9wcmVfZGVjKQogICAgICAgICBERUZJTkVfT1Aob3BfcHJlX2luYykKLSAg
ICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfZGlkX2NhbGwpCi0gICAgICAgIERFRklORV9PUChv
cF9wcm9maWxlX3dpbGxfY2FsbCkKKyAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfaGFzX2Nh
bGxlZCkKKyAgICAgICAgREVGSU5FX09QKG9wX3Byb2ZpbGVfd2lsbF9yZXR1cm4pCiAgICAgICAg
IERFRklORV9PUChvcF9wdXNoX25ld19zY29wZSkKICAgICAgICAgREVGSU5FX09QKG9wX3B1c2hf
c2NvcGUpCiAgICAgICAgIERFRklORV9PUChvcF9wdXRfYnlfaWQpCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShy
ZXZpc2lvbiA3MjEyNykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtNzk3LDggKzc5Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRf
b3BfcG9zdF9pbmMoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3ByZV9kZWMo
SW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX3ByZV9pbmMoSW5zdHJ1Y3Rpb24q
KTsKLSAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfZGlkX2NhbGwoSW5zdHJ1Y3Rpb24qKTsK
LSAgICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9jYWxsKEluc3RydWN0aW9uKik7Cisg
ICAgICAgIHZvaWQgZW1pdF9vcF9wcm9maWxlX2hhc19jYWxsZWQoSW5zdHJ1Y3Rpb24qKTsKKyAg
ICAgICAgdm9pZCBlbWl0X29wX3Byb2ZpbGVfd2lsbF9yZXR1cm4oSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX3B1c2hfbmV3X3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9wdXNoX3Njb3BlKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzMzJfNjQuY3BwCShyZXZpc2lvbiA3MjEyNykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjM1LDI0ICsxNjM1LDIyIEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF9jb252ZXJ0X3RoaXNfc3RyaWMKICAgICBzdHViQ2FsbC5j
YWxsKHRoaXNSZWdpc3Rlcik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfd2lsbF9j
YWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9w
cm9maWxlX2hhc19jYWxsZWQoSW5zdHJ1Y3Rpb24qKQogewogICAgIHBlZWsocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpIC8gc2l6
ZW9mKHZvaWQqKSk7CiAgICAgSnVtcCBub1Byb2ZpbGVyID0gYnJhbmNoVGVzdFB0cihaZXJvLCBB
ZGRyZXNzKHJlZ1QyKSk7CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
cHJvZmlsZV93aWxsX2NhbGwpOwotICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9wcm9maWxlX2hhc19jYWxsZWQpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKICAgICBub1By
b2ZpbGVyLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfZGlkX2Nh
bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3By
b2ZpbGVfd2lsbF9yZXR1cm4oSW5zdHJ1Y3Rpb24qKQogewogICAgIHBlZWsocmVnVDIsIE9CSkVD
VF9PRkZTRVRPRihKSVRTdGFja0ZyYW1lLCBlbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpIC8gc2l6
ZW9mKHZvaWQqKSk7CiAgICAgSnVtcCBub1Byb2ZpbGVyID0gYnJhbmNoVGVzdFB0cihaZXJvLCBB
ZGRyZXNzKHJlZ1QyKSk7CiAKLSAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlfb3Bf
cHJvZmlsZV9kaWRfY2FsbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgY3Rp
X29wX3Byb2ZpbGVfd2lsbF9yZXR1cm4pOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKICAgICBub1By
b2ZpbGVyLmxpbmsodGhpcyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiA3MjEyNykKKysrIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMwNiwyNSArMTMwNiwyMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jcmVh
dGVfdGhpcyhJbnN0cnVjdGlvCiAgICAgc3R1YkNhbGwuY2FsbChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV93aWxsX2NhbGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3Byb2Zp
bGVfaGFzX2NhbGxlZChJbnN0cnVjdGlvbiopCiB7CiAgICAgcGVlayhyZWdUMSwgT0JKRUNUX09G
RlNFVE9GKEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkgLyBzaXplb2Yo
dm9pZCopKTsKICAgICBKdW1wIG5vUHJvZmlsZXIgPSBicmFuY2hUZXN0UHRyKFplcm8sIEFkZHJl
c3MocmVnVDEpKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9wcm9m
aWxlX3dpbGxfY2FsbCk7Ci0gICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMs
IGN0aV9vcF9wcm9maWxlX2hhc19jYWxsZWQpOwogICAgIHN0dWJDYWxsLmNhbGwoKTsKICAgICBu
b1Byb2ZpbGVyLmxpbmsodGhpcyk7CiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV9k
aWRfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfcHJvZmlsZV93aWxsX3JldHVybihJbnN0cnVjdGlvbiopCiB7CiAgICAgcGVlayhyZWdUMSwg
T0JKRUNUX09GRlNFVE9GKEpJVFN0YWNrRnJhbWUsIGVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSkg
LyBzaXplb2Yodm9pZCopKTsKICAgICBKdW1wIG5vUHJvZmlsZXIgPSBicmFuY2hUZXN0UHRyKFpl
cm8sIEFkZHJlc3MocmVnVDEpKTsKIAotICAgIEpJVFN0dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0
aV9vcF9wcm9maWxlX2RpZF9jYWxsKTsKLSAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSk7CisgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX3Byb2ZpbGVfd2lsbF9yZXR1cm4pOwogICAgIHN0dWJDYWxsLmNhbGwo
KTsKICAgICBub1Byb2ZpbGVyLmxpbmsodGhpcyk7CiB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVi
cy5jcHAJKHJldmlzaW9uIDcyMTI3KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjI2NCwyMCArMjI2NCwyMCBAQCBERUZJTkVfU1RVQl9GVU5D
VElPTih2b2lkLCBvcF90ZWFyX29mZl9hCiAgICAgYXNBcmd1bWVudHMoc3RhY2tGcmFtZS5hcmdz
WzBdLmpzVmFsdWUoKSktPmNvcHlSZWdpc3RlcnMoKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJ
T04odm9pZCwgb3BfcHJvZmlsZV93aWxsX2NhbGwpCitERUZJTkVfU1RVQl9GVU5DVElPTih2b2lk
LCBvcF9wcm9maWxlX2hhc19jYWxsZWQpCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0
YWNrRnJhbWUpOwogCiAgICAgQVNTRVJUKCpzdGFja0ZyYW1lLmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSk7Ci0gICAgKCpzdGFja0ZyYW1lLmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPndpbGxF
eGVjdXRlKHN0YWNrRnJhbWUuY2FsbEZyYW1lLCBzdGFja0ZyYW1lLmFyZ3NbMF0uanNWYWx1ZSgp
KTsKKyAgICAoKnN0YWNrRnJhbWUuZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+aGFzQ2FsbGVk
KHN0YWNrRnJhbWUuY2FsbEZyYW1lKTsKIH0KIAotREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwg
b3BfcHJvZmlsZV9kaWRfY2FsbCkKK0RFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3Byb2Zp
bGVfd2lsbF9yZXR1cm4pCiB7CiAgICAgU1RVQl9JTklUX1NUQUNLX0ZSQU1FKHN0YWNrRnJhbWUp
OwogCiAgICAgQVNTRVJUKCpzdGFja0ZyYW1lLmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSk7Ci0g
ICAgKCpzdGFja0ZyYW1lLmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPmRpZEV4ZWN1dGUoc3Rh
Y2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1swXS5qc1ZhbHVlKCkpOworICAgICgq
c3RhY2tGcmFtZS5lbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsUmV0dXJuKHN0YWNrRnJh
bWUuY2FsbEZyYW1lKTsKIH0KIAogREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcmV0X3Nj
b3BlQ2hhaW4pCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkocmV2aXNpb24gNzIxMjcpCisrKyBK
YXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzc3LDggKzM3
Nyw4IEBAIGV4dGVybiAiQyIgewogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2VuZChTVFVCX0FS
R1NfREVDTEFSQVRJT04pOwogICAgIHZvaWQgSklUX1NUVUIgY3RpX29wX2ptcF9zY29wZXMoU1RV
Ql9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wb3Bfc2NvcGUo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKLSAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxl
X2RpZF9jYWxsKFNUVUJfQVJHU19ERUNMQVJBVElPTik7Ci0gICAgdm9pZCBKSVRfU1RVQiBjdGlf
b3BfcHJvZmlsZV93aWxsX2NhbGwoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKKyAgICB2b2lkIEpJ
VF9TVFVCIGN0aV9vcF9wcm9maWxlX2hhc19jYWxsZWQoU1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsK
KyAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wcm9maWxlX3dpbGxfcmV0dXJuKFNUVUJfQVJHU19E
RUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkKFNUVUJfQVJH
U19ERUNMQVJBVElPTik7CiAgICAgdm9pZCBKSVRfU1RVQiBjdGlfb3BfcHV0X2J5X2lkX2ZhaWwo
U1RVQl9BUkdTX0RFQ0xBUkFUSU9OKTsKICAgICB2b2lkIEpJVF9TVFVCIGN0aV9vcF9wdXRfYnlf
aWRfZ2VuZXJpYyhTVFVCX0FSR1NfREVDTEFSQVRJT04pOwpJbmRleDogSmF2YVNjcmlwdENvcmUv
cHJvZmlsZXIvUHJvZmlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZS5jcHAJKHJldmlzaW9uIDcyMTI2KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUHJvZmlsZTo6
UHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRsZSwgdQogewogICAgIC8vIEZJWE1FOiBXaGVuIG11
bHRpLXRocmVhZGluZyBpcyBzdXBwb3J0ZWQgdGhpcyB3aWxsIGJlIGEgdmVjdG9yIGFuZCBjYWxs
cwogICAgIC8vIGludG8gdGhlIHByb2ZpbGVyIHdpbGwgbmVlZCB0byBrbm93IHdoaWNoIHRocmVh
ZCBpdCBpcyBleGVjdXRpbmcgb24uCi0gICAgbV9oZWFkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShD
YWxsSWRlbnRpZmllcigiVGhyZWFkXzEiLCBVU3RyaW5nKCksIDApLCAwLCAwKTsKKyAgICBtX2hl
YWQgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKDAsIENhbGxJZGVudGlmaWVyKCJUaHJlYWRfMSIsIFVT
dHJpbmcoKSwgMCksIDAsIDApOwogfQogCiBQcm9maWxlOjp+UHJvZmlsZSgpCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBK
YXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNzIx
MjYpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBh
cmVudEZvckNvbnNvCiAgICAgSlNWYWx1ZSBmdW5jdGlvbjsKIAogICAgIGV4ZWMtPmludGVycHJl
dGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVjLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgc291
cmNlVVJMLCBmdW5jdGlvbik7Ci0gICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVh
dGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uID8gZnVuY3Rp
b24udG9UaGlzT2JqZWN0KGV4ZWMpIDogMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9oZWFk
LmdldCgpLCBtX2hlYWQuZ2V0KCkpOworICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6
Y3JlYXRlKGV4ZWMsIFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlv
biA/IGZ1bmN0aW9uLnRvVGhpc09iamVjdChleGVjKSA6IDAsIHNvdXJjZVVSTCwgbGluZU51bWJl
ciksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKICAgICBtX2hlYWQtPmluc2VydE5vZGUo
bV9jdXJyZW50Tm9kZS5nZXQoKSk7CiB9CiAKQEAgLTcyLDcgKzcyLDcgQEAgY29uc3QgVVN0cmlu
ZyYgUHJvZmlsZUdlbmVyYXRvcjo6dGl0bGUoKQogICAgIHJldHVybiBtX3Byb2ZpbGUtPnRpdGxl
KCk7CiB9CiAKLXZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElk
ZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQordm9pZCBQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhl
Y3V0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmll
cikKIHsKICAgICBpZiAoSkFWQVNDUklQVENPUkVfUFJPRklMRV9XSUxMX0VYRUNVVEVfRU5BQkxF
RCgpKSB7CiAgICAgICAgIENTdHJpbmcgbmFtZSA9IGNhbGxJZGVudGlmaWVyLm1fbmFtZS51dGY4
KCk7CkBAIC04MywxMSArODMsMTEgQEAgdm9pZCBQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0
ZShjb25zdAogICAgIGlmICghbV9vcmlnaW5hdGluZ0dsb2JhbEV4ZWMpCiAgICAgICAgIHJldHVy
bjsKIAotICAgIEFTU0VSVF9BUkcobV9jdXJyZW50Tm9kZSwgbV9jdXJyZW50Tm9kZSk7Ci0gICAg
bV9jdXJyZW50Tm9kZSA9IG1fY3VycmVudE5vZGUtPndpbGxFeGVjdXRlKGNhbGxJZGVudGlmaWVy
KTsKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7CisgICAgbV9jdXJyZW50Tm9kZSA9IG1fY3Vy
cmVudE5vZGUtPndpbGxFeGVjdXRlKGV4ZWMsIGNhbGxJZGVudGlmaWVyKTsKIH0KIAotdm9pZCBQ
cm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRl
bnRpZmllcikKK3ZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllcikKIHsKICAgICBpZiAoSkFW
QVNDUklQVENPUkVfUFJPRklMRV9ESURfRVhFQ1VURV9FTkFCTEVEKCkpIHsKICAgICAgICAgQ1N0
cmluZyBuYW1lID0gY2FsbElkZW50aWZpZXIubV9uYW1lLnV0ZjgoKTsKQEAgLTk4LDkgKzk4LDkg
QEAgdm9pZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIGlmICghbV9v
cmlnaW5hdGluZ0dsb2JhbEV4ZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVF9BUkco
bV9jdXJyZW50Tm9kZSwgbV9jdXJyZW50Tm9kZSk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUp
OwogICAgIGlmIChtX2N1cnJlbnROb2RlLT5jYWxsSWRlbnRpZmllcigpICE9IGNhbGxJZGVudGlm
aWVyKSB7Ci0gICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJuaW5nTm9kZSA9IFByb2Zp
bGVOb2RlOjpjcmVhdGUoY2FsbElkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwgbV9jdXJyZW50Tm9k
ZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJuaW5nTm9kZSA9IFBy
b2ZpbGVOb2RlOjpjcmVhdGUoZXhlYywgY2FsbElkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwgbV9j
dXJyZW50Tm9kZS5nZXQoKSk7CiAgICAgICAgIHJldHVybmluZ05vZGUtPnNldFN0YXJ0VGltZSht
X2N1cnJlbnROb2RlLT5zdGFydFRpbWUoKSk7CiAgICAgICAgIHJldHVybmluZ05vZGUtPmRpZEV4
ZWN1dGUoKTsKICAgICAgICAgbV9jdXJyZW50Tm9kZS0+aW5zZXJ0Tm9kZShyZXR1cm5pbmdOb2Rl
LnJlbGVhc2UoKSk7CkBAIC0xMTAsNiArMTEwLDE1IEBAIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6
ZGlkRXhlY3V0ZShjb25zdCAKICAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+ZGlk
RXhlY3V0ZSgpOwogfQogCit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmV4Y2VwdGlvblVud2luZChF
eGVjU3RhdGUqIGV4ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJikKK3sKKyAgICBBU1NFUlQobV9j
dXJyZW50Tm9kZSk7CisgICAgd2hpbGUgKG1fY3VycmVudE5vZGUtPmV4ZWMoKSA+IGV4ZWMpIHsK
KyAgICAgICAgZGlkRXhlY3V0ZShleGVjLCBtX2N1cnJlbnROb2RlLT5jYWxsSWRlbnRpZmllcigp
KTsKKyAgICAgICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOworICAgIH0KK30KKwogdm9pZCBQcm9m
aWxlR2VuZXJhdG9yOjpzdG9wUHJvZmlsaW5nKCkKIHsKICAgICBtX3Byb2ZpbGUtPmZvckVhY2go
JlByb2ZpbGVOb2RlOjpzdG9wUHJvZmlsaW5nKTsKQEAgLTExNywxNCArMTI2LDE0IEBAIHZvaWQg
UHJvZmlsZUdlbmVyYXRvcjo6c3RvcFByb2ZpbGluZygpCiAgICAgcmVtb3ZlUHJvZmlsZVN0YXJ0
KCk7CiAgICAgcmVtb3ZlUHJvZmlsZUVuZCgpOwogCi0gICAgQVNTRVJUX0FSRyhtX2N1cnJlbnRO
b2RlLCBtX2N1cnJlbnROb2RlKTsKKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7CiAKICAgICAv
LyBTZXQgdGhlIGN1cnJlbnQgbm9kZSB0byB0aGUgcGFyZW50LCBiZWNhdXNlIHdlIGFyZSBpbiBh
IGNhbGwgdGhhdAogICAgIC8vIHdpbGwgbm90IGdldCBkaWRFeGVjdXRlIGNhbGwuCiAgICAgbV9j
dXJyZW50Tm9kZSA9IG1fY3VycmVudE5vZGUtPnBhcmVudCgpOwogCiAgICBpZiAoZG91YmxlIGhl
YWRTZWxmVGltZSA9IG1faGVhZC0+c2VsZlRpbWUoKSkgewotICAgICAgICBSZWZQdHI8UHJvZmls
ZU5vZGU+IGlkbGVOb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShDYWxsSWRlbnRpZmllcihOb25K
U0V4ZWN1dGlvbiwgVVN0cmluZygpLCAwKSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOwor
ICAgICAgICBSZWZQdHI8UHJvZmlsZU5vZGU+IGlkbGVOb2RlID0gUHJvZmlsZU5vZGU6OmNyZWF0
ZSgwLCBDYWxsSWRlbnRpZmllcihOb25KU0V4ZWN1dGlvbiwgVVN0cmluZygpLCAwKSwgbV9oZWFk
LmdldCgpLCBtX2hlYWQuZ2V0KCkpOwogCiAgICAgICAgIGlkbGVOb2RlLT5zZXRUb3RhbFRpbWUo
aGVhZFNlbGZUaW1lKTsKICAgICAgICAgaWRsZU5vZGUtPnNldFNlbGZUaW1lKGhlYWRTZWxmVGlt
ZSk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCShy
ZXZpc2lvbiA3MjEyNikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0
b3IuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsMTMgKzUwLDE1IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB1bnNpZ25lZCBwcm9maWxlR3JvdXAoKSBjb25zdCB7IHJldHVybiBtX3Byb2ZpbGVH
cm91cDsgfQogCiAgICAgICAgIC8vIENvbGxlY3RpbmcKLSAgICAgICAgdm9pZCB3aWxsRXhlY3V0
ZShjb25zdCBDYWxsSWRlbnRpZmllciYpOwotICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoY29uc3Qg
Q2FsbElkZW50aWZpZXImKTsKKyAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJik7CisgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJik7CisKKyAgICAgICAgdm9pZCBleGNl
cHRpb25VbndpbmQoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBDYWxsSWRlbnRpZmllciYpOwogCiAg
ICAgICAgIC8vIFN0b3BwaW5nIFByb2ZpbGluZwogICAgICAgICB2b2lkIHN0b3BQcm9maWxpbmco
KTsKIAotICAgICAgICB0eXBlZGVmIHZvaWQgKFByb2ZpbGVHZW5lcmF0b3I6OipQcm9maWxlRnVu
Y3Rpb24pKGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllcik7CisgICAgICAgIHR5
cGVkZWYgdm9pZCAoUHJvZmlsZUdlbmVyYXRvcjo6KlByb2ZpbGVGdW5jdGlvbikoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIpOwogCiAgICAgcHJp
dmF0ZToKICAgICAgICAgUHJvZmlsZUdlbmVyYXRvcihjb25zdCBVU3RyaW5nJiB0aXRsZSwgRXhl
Y1N0YXRlKiBvcmlnaW5hdGluZ0V4ZWMsIHVuc2lnbmVkIHVpZCk7CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuY3BwCShyZXZpc2lvbiA3MjEyNikKKysrIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsOCAr
NTYsOSBAQCBzdGF0aWMgZG91YmxlIGdldENvdW50KCkKICNlbmRpZgogfQogCi1Qcm9maWxlTm9k
ZTo6UHJvZmlsZU5vZGUoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyLCBQcm9m
aWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBwYXJlbnROb2RlKQotICAgIDogbV9jYWxs
SWRlbnRpZmllcihjYWxsSWRlbnRpZmllcikKK1Byb2ZpbGVOb2RlOjpQcm9maWxlTm9kZShFeGVj
U3RhdGUqIGV4ZWMsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgUHJvZmls
ZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9kZSkKKyAgICA6IG1fZXhlYyhl
eGVjKQorICAgICwgbV9jYWxsSWRlbnRpZmllcihjYWxsSWRlbnRpZmllcikKICAgICAsIG1faGVh
ZChoZWFkTm9kZSkKICAgICAsIG1fcGFyZW50KHBhcmVudE5vZGUpCiAgICAgLCBtX25leHRTaWJs
aW5nKDApCkBAIC03Miw4ICs3Myw5IEBAIFByb2ZpbGVOb2RlOjpQcm9maWxlTm9kZShjb25zdCBD
YWxsSWRlbnQKICAgICBzdGFydFRpbWVyKCk7CiB9CiAKLVByb2ZpbGVOb2RlOjpQcm9maWxlTm9k
ZShQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBub2RlVG9Db3B5KQotICAgIDog
bV9jYWxsSWRlbnRpZmllcihub2RlVG9Db3B5LT5jYWxsSWRlbnRpZmllcigpKQorUHJvZmlsZU5v
ZGU6OlByb2ZpbGVOb2RlKEV4ZWNTdGF0ZSogZXhlYywgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQ
cm9maWxlTm9kZSogbm9kZVRvQ29weSkKKyAgICA6IG1fZXhlYyhleGVjKQorICAgICwgbV9jYWxs
SWRlbnRpZmllcihub2RlVG9Db3B5LT5jYWxsSWRlbnRpZmllcigpKQogICAgICwgbV9oZWFkKGhl
YWROb2RlKQogICAgICwgbV9wYXJlbnQobm9kZVRvQ29weS0+cGFyZW50KCkpCiAgICAgLCBtX25l
eHRTaWJsaW5nKDApCkBAIC04Nyw3ICs4OSw3IEBAIFByb2ZpbGVOb2RlOjpQcm9maWxlTm9kZShQ
cm9maWxlTm9kZSogaGUKIHsKIH0KIAotUHJvZmlsZU5vZGUqIFByb2ZpbGVOb2RlOjp3aWxsRXhl
Y3V0ZShjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIpCitQcm9maWxlTm9kZSog
UHJvZmlsZU5vZGU6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgQ2FsbElkZW50
aWZpZXImIGNhbGxJZGVudGlmaWVyKQogewogICAgIGZvciAoU3RhY2tJdGVyYXRvciBjdXJyZW50
Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGlsZCAhPSBtX2NoaWxkcmVuLmVu
ZCgpOyArK2N1cnJlbnRDaGlsZCkgewogICAgICAgICBpZiAoKCpjdXJyZW50Q2hpbGQpLT5jYWxs
SWRlbnRpZmllcigpID09IGNhbGxJZGVudGlmaWVyKSB7CkBAIC05Niw3ICs5OCw3IEBAIFByb2Zp
bGVOb2RlKiBQcm9maWxlTm9kZTo6d2lsbEV4ZWN1dGUoY28KICAgICAgICAgfQogICAgIH0KIAot
ICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gbmV3Q2hpbGQgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGNh
bGxJZGVudGlmaWVyLCBtX2hlYWQgPyBtX2hlYWQgOiB0aGlzLCB0aGlzKTsgLy8gSWYgdGhpcyBQ
cm9maWxlTm9kZSBoYXMgbm8gaGVhZCBpdCBpcyB0aGUgaGVhZC4KKyAgICBSZWZQdHI8UHJvZmls
ZU5vZGU+IG5ld0NoaWxkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShleGVjLCBjYWxsSWRlbnRpZmll
ciwgbV9oZWFkID8gbV9oZWFkIDogdGhpcywgdGhpcyk7IC8vIElmIHRoaXMgUHJvZmlsZU5vZGUg
aGFzIG5vIGhlYWQgaXQgaXMgdGhlIGhlYWQuCiAgICAgaWYgKG1fY2hpbGRyZW4uc2l6ZSgpKQog
ICAgICAgICBtX2NoaWxkcmVuLmxhc3QoKS0+c2V0TmV4dFNpYmxpbmcobmV3Q2hpbGQuZ2V0KCkp
OwogICAgIG1fY2hpbGRyZW4uYXBwZW5kKG5ld0NoaWxkLnJlbGVhc2UoKSk7CkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmgJKHJldmlzaW9uIDcyMTI2KQorKysgSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorICAgIGNsYXNzIEV4ZWNTdGF0ZTsKICAgICBj
bGFzcyBQcm9maWxlTm9kZTsKIAogICAgIHR5cGVkZWYgVmVjdG9yPFJlZlB0cjxQcm9maWxlTm9k
ZT4gPjo6Y29uc3RfaXRlcmF0b3IgU3RhY2tJdGVyYXRvcjsKQEAgLTQ0LDIzICs0NSwyNCBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIFByb2ZpbGVOb2RlIDogcHVibGljIFJlZkNvdW50
ZWQ8UHJvZmlsZU5vZGU+IHsKICAgICBwdWJsaWM6Ci0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFByb2ZpbGVOb2RlPiBjcmVhdGUoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVy
LCBQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2ZpbGVOb2RlKiBwYXJlbnROb2RlKQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gY3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyLCBQcm9maWxlTm9kZSogaGVhZE5v
ZGUsIFByb2ZpbGVOb2RlKiBwYXJlbnROb2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFByb2ZpbGVOb2RlKGNhbGxJZGVudGlmaWVyLCBoZWFkTm9kZSwgcGFy
ZW50Tm9kZSkpOworICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9maWxlTm9kZShl
eGVjLCBjYWxsSWRlbnRpZmllciwgaGVhZE5vZGUsIHBhcmVudE5vZGUpKTsKICAgICAgICAgfQot
ICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gY3JlYXRlKFByb2ZpbGVOb2Rl
KiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIG5vZGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFByb2ZpbGVOb2RlPiBjcmVhdGUoRXhlY1N0YXRlKiBleGVjLCBQcm9maWxlTm9kZSogaGVhZE5v
ZGUsIFByb2ZpbGVOb2RlKiBub2RlKQogICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFByb2ZpbGVOb2RlKGhlYWROb2RlLCBub2RlKSk7CisgICAgICAgICAgICByZXR1
cm4gYWRvcHRSZWYobmV3IFByb2ZpbGVOb2RlKGV4ZWMsIGhlYWROb2RlLCBub2RlKSk7CiAgICAg
ICAgIH0KIAotICAgICAgICBib29sIG9wZXJhdG9yPT0oUHJvZmlsZU5vZGUqIG5vZGUpIHsgcmV0
dXJuIG1fY2FsbElkZW50aWZpZXIgPT0gbm9kZS0+Y2FsbElkZW50aWZpZXIoKTsgfQorICAgICAg
ICBib29sIG9wZXJhdG9yPT0oUHJvZmlsZU5vZGUqIG5vZGUpIHsgcmV0dXJuIG1fZXhlYyA9PSBu
b2RlLT5tX2V4ZWMgJiYgbV9jYWxsSWRlbnRpZmllciA9PSBub2RlLT5jYWxsSWRlbnRpZmllcigp
OyB9CiAKLSAgICAgICAgUHJvZmlsZU5vZGUqIHdpbGxFeGVjdXRlKGNvbnN0IENhbGxJZGVudGlm
aWVyJik7CisgICAgICAgIFByb2ZpbGVOb2RlKiB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IENhbGxJZGVudGlmaWVyJik7CiAgICAgICAgIFByb2ZpbGVOb2RlKiBkaWRFeGVjdXRl
KCk7CiAKICAgICAgICAgdm9pZCBzdG9wUHJvZmlsaW5nKCk7CiAKICAgICAgICAgLy8gQ2FsbElk
ZW50aWZpZXIgbWVtYmVycworICAgICAgICBjb25zdCBFeGVjU3RhdGUqIGV4ZWMoKSBjb25zdCB7
IHJldHVybiBtX2V4ZWM7IH0KICAgICAgICAgY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVu
dGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsSWRlbnRpZmllcjsgfQogICAgICAgICBjb25z
dCBVU3RyaW5nJiBmdW5jdGlvbk5hbWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxJZGVudGlmaWVy
Lm1fbmFtZTsgfQogICAgICAgICBjb25zdCBVU3RyaW5nJiB1cmwoKSBjb25zdCB7IHJldHVybiBt
X2NhbGxJZGVudGlmaWVyLm1fdXJsOyB9CkBAIC0xMjgsOCArMTMwLDggQEAgbmFtZXNwYWNlIEpT
QyB7CiAjZW5kaWYKIAogICAgIHByaXZhdGU6Ci0gICAgICAgIFByb2ZpbGVOb2RlKGNvbnN0IENh
bGxJZGVudGlmaWVyJiwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50
Tm9kZSk7Ci0gICAgICAgIFByb2ZpbGVOb2RlKFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmls
ZU5vZGUqIG5vZGVUb0NvcHkpOworICAgICAgICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGV4ZWMs
IGNvbnN0IENhbGxJZGVudGlmaWVyJiwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9k
ZSogcGFyZW50Tm9kZSk7CisgICAgICAgIFByb2ZpbGVOb2RlKEV4ZWNTdGF0ZSogZXhlYywgUHJv
ZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSk7CiAKICAgICAgICAg
dm9pZCBzdGFydFRpbWVyKCk7CiAgICAgICAgIHZvaWQgcmVzZXRDaGlsZHJlbnNTaWJsaW5ncygp
OwpAQCAtMTQ3LDYgKzE0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgZnVuY3Rpb25OYW1lRGVzY2VuZGluZ0NvbXBhcmF0b3IoY29uc3QgUmVmUHRyPFBy
b2ZpbGVOb2RlPiYgYSwgY29uc3QgUmVmUHRyPFByb2ZpbGVOb2RlPiYgYikgeyByZXR1cm4gYS0+
ZnVuY3Rpb25OYW1lKCkgPiBiLT5mdW5jdGlvbk5hbWUoKTsgfQogICAgICAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgZnVuY3Rpb25OYW1lQXNjZW5kaW5nQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8UHJv
ZmlsZU5vZGU+JiBhLCBjb25zdCBSZWZQdHI8UHJvZmlsZU5vZGU+JiBiKSB7IHJldHVybiBhLT5m
dW5jdGlvbk5hbWUoKSA8IGItPmZ1bmN0aW9uTmFtZSgpOyB9CiAKKyAgICAgICAgRXhlY1N0YXRl
KiBtX2V4ZWM7CiAgICAgICAgIENhbGxJZGVudGlmaWVyIG1fY2FsbElkZW50aWZpZXI7CiAgICAg
ICAgIFByb2ZpbGVOb2RlKiBtX2hlYWQ7CiAgICAgICAgIFByb2ZpbGVOb2RlKiBtX3BhcmVudDsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHJldmlzaW9uIDcyMTI2KQor
KysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05OSw0MiArOTksNTEgQEAgUGFzc1JlZlB0cjxQcm9maWxlPiBQcm9maWxlcjo6c3RvcFByb2Zp
bAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hGdW5jdGlv
blRvUHJvZmlsZXMoY29uc3QgVmVjdG9yPFJlZlB0cjxQcm9maWxlR2VuZXJhdG9yPiA+JiBwcm9m
aWxlcywgUHJvZmlsZUdlbmVyYXRvcjo6UHJvZmlsZUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBD
YWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIsIHVuc2lnbmVkIGN1cnJlbnRQcm9maWxlVGFy
Z2V0R3JvdXApCitzdGF0aWMgaW5saW5lIHZvaWQgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4m
IHByb2ZpbGVzLCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxlRnVuY3Rpb24gZnVuY3Rpb24sIGNv
bnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgdW5zaWduZWQgY3VycmVudFByb2Zp
bGVUYXJnZXRHcm91cCkKIHsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb2ZpbGVzLnNp
emUoKTsgKytpKSB7CiAgICAgICAgIGlmIChwcm9maWxlc1tpXS0+cHJvZmlsZUdyb3VwKCkgPT0g
Y3VycmVudFByb2ZpbGVUYXJnZXRHcm91cCB8fCAhcHJvZmlsZXNbaV0tPm9yaWdpbmF0aW5nR2xv
YmFsRXhlYygpKQotICAgICAgICAgICAgKHByb2ZpbGVzW2ldLmdldCgpLT4qZnVuY3Rpb24pKGNh
bGxJZGVudGlmaWVyKTsKKyAgICAgICAgICAgIChwcm9maWxlc1tpXS5nZXQoKS0+KmZ1bmN0aW9u
KShleGVjLCBjYWxsSWRlbnRpZmllcik7CiAgICAgfQogfQogCi12b2lkIFByb2ZpbGVyOjp3aWxs
RXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24pCit2b2lkIFByb2ZpbGVy
OjpoYXNDYWxsZWQoRXhlY1N0YXRlKiBleGVjKQogewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJv
ZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3Vy
cmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUsIGNyZWF0ZUNhbGxJ
ZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLCAiIiwgMCksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIEpTVmFsdWUgZnVuY3Rpb24gPSBleGVjLT5jYWxs
ZWUoKTsKKyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhleGVjLCBtX2N1cnJlbnRQcm9m
aWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmll
cihleGVjLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnBy
b2ZpbGVHcm91cCgpKTsKIH0KIAotdm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
Cit2b2lkIFByb2ZpbGVyOjp3aWxsRXZhbHVhdGUoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3Ry
aW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiB7CiAgICAgQVNTRVJUKCFt
X2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCiAgICAgQ2FsbElkZW50aWZpZXIgY2FsbElk
ZW50aWZpZXIgPSBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBKU1ZhbHVlKCksIHNvdXJjZVVS
TCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVz
KG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUsIGNhbGxJ
ZGVudGlmaWVyLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsK
KyAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhleGVjLCBtX2N1cnJlbnRQcm9maWxlcywg
JlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBjYWxsSWRlbnRpZmllciwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6
OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uKQordm9pZCBQcm9m
aWxlcjo6d2lsbFJldHVybihFeGVjU3RhdGUqIGV4ZWMpCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJl
bnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMo
bV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVD
YWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFs
T2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBKU1ZhbHVlIGZ1bmN0aW9uID0gZXhlYy0+
Y2FsbGVlKCk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMoZXhlYywgbV9jdXJyZW50
UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRp
ZmllcihleGVjLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCkt
PnByb2ZpbGVHcm91cCgpKTsKIH0KIAotdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3Rh
dGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJl
cikKK3ZvaWQgUHJvZmlsZXI6OmRpZEV2YWx1YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQogewogICAgIEFTU0VSVCgh
bV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1By
b2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwg
Y3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgSlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5n
TGluZU51bWJlciksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkp
OworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKGV4ZWMsIG1fY3VycmVudFByb2ZpbGVz
LCAmUHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoZXhl
YywgSlNWYWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworfQorCit2b2lkIFByb2ZpbGVyOjpl
eGNlcHRpb25VbndpbmQoRXhlY1N0YXRlKiBleGVjKQoreworICAgIEFTU0VSVCghbV9jdXJyZW50
UHJvZmlsZXMuaXNFbXB0eSgpKTsKKworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKGV4
ZWMsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZXhjZXB0aW9uVW53aW5k
LCBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBKU1ZhbHVlKCksICIiLCAwKSwgZXhlYy0+bGV4
aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKIENhbGxJZGVudGlmaWVy
IFByb2ZpbGVyOjpjcmVhdGVDYWxsSWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
ZnVuY3Rpb25WYWx1ZSwgY29uc3QgVVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRlZmF1
bHRMaW5lTnVtYmVyKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShyZXZpc2lv
biA3MjEyNikKKysrIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDEwICs1NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBz
dGFydFByb2ZpbGluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiB0aXRsZSk7CiAgICAgICAg
IFBhc3NSZWZQdHI8UHJvZmlsZT4gc3RvcFByb2ZpbGluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3Ry
aW5nJiB0aXRsZSk7CiAKLSAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIGZ1bmN0aW9uKTsKLSAgICAgICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBjb25z
dCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgICAgICB2
b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbik7Ci0gICAgICAgIHZv
aWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBz
dGFydGluZ0xpbmVOdW1iZXIpOworICAgICAgICAvLyBDYWxsZWQgZm9yIHByb2dyYW0gY29kZSBh
bmQgZXZhbC4KKyAgICAgICAgdm9pZCB3aWxsRXZhbHVhdGUoRXhlY1N0YXRlKiwgY29uc3QgVVN0
cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICAgICAgdm9pZCBk
aWRFdmFsdWF0ZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFy
dGluZ0xpbmVOdW1iZXIpOworCisgICAgICAgIHZvaWQgaGFzQ2FsbGVkKEV4ZWNTdGF0ZSopOwor
ICAgICAgICB2b2lkIHdpbGxSZXR1cm4oRXhlY1N0YXRlKik7CisKKyAgICAgICAgdm9pZCBleGNl
cHRpb25VbndpbmQoRXhlY1N0YXRlKik7CiAKICAgICAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxQ
cm9maWxlR2VuZXJhdG9yPiA+JiBjdXJyZW50UHJvZmlsZXMoKSB7IHJldHVybiBtX2N1cnJlbnRQ
cm9maWxlczsgfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74308</attachid>
            <date>2010-11-18 15:55:10 -0800</date>
            <delta_ts>2010-11-18 15:59:27 -0800</delta_ts>
            <desc>New improved implementation – breaks no tests, even fixes one!</desc>
            <filename>Profiler.2.patch</filename>
            <type>text/plain</type>
            <size>37987</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMzQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTAtMTEtMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTYzNSAtIFByb2ZpbGVyIGltcGxlbWVu
dGF0aW9uIGlzIGZyYWdpbGUKKworICAgICAgICBUaGUgcHJvZmlsZSBwcmVzZW50bHkgcmVxdWly
ZXMgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWNoYW5pc20gdG8gZXhwbGljaXRseQorICAgICAg
ICByZW1vdmUgYWxsIHN0YWNrIGZyYW1lcyB0aGF0IGFyZSBleGl0ZWQgZHVyaW5nIHRoZSBleGNl
cHRpb24gdW53aW5kIG1lY2hhbmlzbS4KKyAgICAgICAgVGhpcyBpcyBmcmFnaWxlIGluIGEgbnVt
YmVyIG9mIHdheXM6CisgICAgICAgICAgKiBXZSBoYXZlIHRvIGNoYW5nZSBieXRlY29kZSByZWdp
c3RlciBhbGxvY2F0aW9uIHdoZW4gY29tcGlsaW5nIGNvZGUgdG8gcnVuCisgICAgICAgICAgICB3
aGVuIHByb2ZpbGluZywgdG8gcHJlc2VydmUgdGhlIGNhbGxlZSBmdW5jdGlvbiAodGhpcyBpcyBh
bHNvIHJlcXVpcmVkIHRvCisgICAgICAgICAgICBjYWxsIGRpZF9jYWxsIGFmdGVyIHRoZSBjYWxs
IGhhcyByZXR1cm5lZCkuCisgICAgICAgICAgKiBJbiB0aGUgSklUIHdlIGhhdmUgdG8gbWFpbnRh
aW4gYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgICAgIChDb2RlQmxvY2s6OlJh
cmVEYXRhOjptX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvcykgdG8gbWFwIGJhY2sgdG8gdGhlIHJlZ2lz
dGVyCisgICAgICAgICAgICBjb250YWluaW5nIHRoZSBjYWxsZWUuCisgICAgICAgICAgKiBJbiB0
aGUgaW50ZXJwcmV0ZXIgd2UgdXNlICdtYWdpYyB2YWx1ZXMnIHRvIG9mZnNldCBpbnRvIHRoZSBp
bnN0cnVjdGlvbgorICAgICAgICAgICAgc3RyZWFtIHRvIHJlZGlzY292ZXIgdGhlIHJlZ2lzdGVy
IGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgIEluc3RlYWQsIG1vdmUgcHJvZmls
aW5nIGludG8gdGhlIGhlYWQgYW5kIHRhaWwgb2YgZnVuY3Rpb25zLgorICAgICAgICAgICogVGhp
cyBjb3JyZWN0bHkgYWNjb3VudHMgdGhlIGNvc3Qgb2YgdGhlIGNhbGwgaXRzZWxmIHRvIHRoZSBj
YWxsZXIuCisgICAgICAgICAgKiBUaGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIGNhbGxlZSBm
dW5jdGlvbiBvYmplY3QgZnJvbSB0aGUgY2FsbGZyYW1lLgorICAgICAgICAgICogVGhpcyBtZWFu
cyB0aGF0IGF0IHRoZSBwb2ludCBhIGNhbGwgaXMgbWFkZSB3ZSBjYW4gdHJhY2sgdGhlIHN0YWNr
IGRlcHRoCisgICAgICAgICAgICBvbiB0aGUgUHJvZmlsZU5vZGUuCisgICAgICAgICAgKiBXaGVu
IHVud2luZGluZyB3ZSBjYW4gc2ltcGx5IHJlcG9ydCB0aGUgZGVwdGggYXQgd2hpY2ggdGhlIGV4
Y2VwdGlvbiBpcworICAgICAgICAgICAgYmVpbmcgaGFuZGxlZCAtIGFsbCBjYWxsIGZyYW1lcyBh
Ym92ZSB0aGlzIGxldmVsIGFyZSBmcmVlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hyaW5rVG9GaXQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2Rl
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjptZXRob2RDYWxsTGlua0luZm8pOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZTo6
UHJvZmlsZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvbGVTdGFydCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVH
ZW5lcmF0b3I6OmV4Y2VwdGlvblVud2luZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0
b3I6OnN0b3BQcm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5jcHA6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVOb2RlOjpQcm9maWxlTm9kZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjp3aWxs
RXhlY3V0ZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuaDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjpjYWxs
ZXJDYWxsRnJhbWUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6ZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMpOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6X3dpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ol9kaWRFeGVjdXRlKToK
KyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OmV4Y2VwdGlvblVud2luZCk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXIuaDoKKwogMjAxMC0xMS0xOCAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxr
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDcyMjY3KQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2
MiwzMiArMTY2Miw2IEBAIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY28K
ICAgICByZXR1cm47CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6OmZ1bmN0
aW9uUmVnaXN0ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50
JiBmdW5jdGlvblJlZ2lzdGVySW5kZXgpCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwg
bV9pbnN0cnVjdGlvbkNvdW50KTsKLQotICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0
YS0+bV9mdW5jdGlvblJlZ2lzdGVySW5mb3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IG1fcmFyZURhdGEtPm1fZnVuY3Rp
b25SZWdpc3RlckluZm9zLnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAg
ICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKG1fcmFyZURh
dGEtPm1fZnVuY3Rpb25SZWdpc3RlckluZm9zW21pZF0uYnl0ZWNvZGVPZmZzZXQgPD0gYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93IHx8IG1fcmFyZURhdGEt
Pm1fZnVuY3Rpb25SZWdpc3RlckluZm9zW2xvdyAtIDFdLmJ5dGVjb2RlT2Zmc2V0ICE9IGJ5dGVj
b2RlT2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmdW5jdGlvblJlZ2lzdGVy
SW5kZXggPSBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvc1tsb3cgLSAxXS5mdW5j
dGlvblJlZ2lzdGVySW5kZXg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogI2lmIEVO
QUJMRShJTlRFUlBSRVRFUikKIGJvb2wgQ29kZUJsb2NrOjpoYXNHbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb25BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewpAQCAtMTc2
Miw5ICsxNzM2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAg
ICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgp
OwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9G
aXQoKTsKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9uUmVn
aXN0ZXJJbmZvcy5zaHJpbmtUb0ZpdCgpOwotI2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDggKzM1MSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAg
ICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zmc2V0PihjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5iZWdp
bigpLCBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5zaXplKCksIGdldEpJVENvZGUoKS5vZmZzZXRP
ZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGJvb2wgZnVuY3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQpAQCAtNDQzLDggKzQ0
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExpbmtJ
bmZvcyh1bnNpZ25lZCBuKSB7IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9CiAgICAg
ICAgIE1ldGhvZENhbGxMaW5rSW5mbyYgbWV0aG9kQ2FsbExpbmtJbmZvKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9tZXRob2RDYWxsTGlua0luZm9zW2luZGV4XTsgfQotCi0gICAgICAgIHZvaWQgYWRk
RnVuY3Rpb25SZWdpc3RlckluZm8odW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBmdW5jdGlv
bkluZGV4KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9mdW5j
dGlvblJlZ2lzdGVySW5mb3MuYXBwZW5kKEZ1bmN0aW9uUmVnaXN0ZXJJbmZvKGJ5dGVjb2RlT2Zm
c2V0LCBmdW5jdGlvbkluZGV4KSk7IH0KICNlbmRpZgogCiAgICAgICAgIC8vIEV4Y2VwdGlvbiBo
YW5kbGluZyBzdXBwb3J0CkBAIC01OTgsMTAgKzU5NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
OwogCiAgICAgICAgICAgICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLQotI2lmIEVO
QUJMRShKSVQpCi0gICAgICAgICAgICBWZWN0b3I8RnVuY3Rpb25SZWdpc3RlckluZm8+IG1fZnVu
Y3Rpb25SZWdpc3RlckluZm9zOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIE93blB0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA3MjI2NykKKysr
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NDksMTAgKzE2NDksNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGwoCiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAg
ICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3RlcigpLT5pbmRleCgp
KTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvblJl
Z2lzdGVySW5mbyhpbnN0cnVjdGlvbnMoKS5zaXplKCksIGNhbGxBcmd1bWVudHMucHJvZmlsZUhv
b2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC0xNjk3LDEwICsxNjkz
LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVgogICAgIGlmICht
X3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxl
X3dpbGxfY2FsbCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgp
KTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1
bmN0aW9uUmVnaXN0ZXJJbmZvKGluc3RydWN0aW9ucygpLnNpemUoKSwgZnVuYy0+aW5kZXgoKSk7
Ci0jZW5kaWYKICAgICB9CiAgICAgCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDcyMjY3KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsMTIgKzU1OCwxMiBA
QCBORVZFUl9JTkxJTkUgYm9vbCBJbnRlcnByZXRlcjo6dW53aW5kQ2FsCiAgICAgICAgICAgICBk
ZWJ1Z2dlci0+ZGlkRXhlY3V0ZVByb2dyYW0oZGVidWdnZXJDYWxsRnJhbWUsIGNvZGVCbG9jay0+
b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZUlEKCksIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxl
KCktPmxhc3RMaW5lKCkpOwogICAgIH0KIAotICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAq
UHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKSB7Ci0gICAgICAgIGlmIChjYWxs
RnJhbWUtPmNhbGxlZSgpKQotICAgICAgICAgICAgcHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZy
YW1lLCBjYWxsRnJhbWUtPmNhbGxlZSgpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcHJv
ZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LT5zb3VyY2VVUkwoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+bGluZU5vKCkpOwot
ICAgIH0KKy8vICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSgpKSB7CisvLyAgICAgICAgaWYgKGNhbGxGcmFtZS0+Y2FsbGVlKCkp
CisvLyAgICAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5jYWxsZWUoKSk7CisvLyAgICAgICAgZWxzZQorLy8gICAgICAgICAgICBwcm9maWxlci0+ZGlk
RXhlY3V0ZShjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCktPnNvdXJjZVVS
TCgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSk7CisvLyAgICB9CiAK
ICAgICAvLyBJZiB0aGlzIGNhbGwgZnJhbWUgY3JlYXRlZCBhbiBhY3RpdmF0aW9uIG9yIGFuICdh
cmd1bWVudHMnIG9iamVjdCwgdGVhciBpdCBvZmYuCiAgICAgaWYgKG9sZENvZGVCbG9jay0+Y29k
ZVR5cGUoKSA9PSBGdW5jdGlvbkNvZGUgJiYgb2xkQ29kZUJsb2NrLT5uZWVkc0Z1bGxTY29wZUNo
YWluKCkpIHsKQEAgLTY1Nyw5ICs2NTcsMTAgQEAgc3RhdGljIHZvaWQgYXBwZW5kU291cmNlVG9F
cnJvcihDYWxsRnJhbQogCiBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVycHJldGVyOjp0
aHJvd0V4Y2VwdGlvbihDYWxsRnJhbWUqJiBjYWxsRnJhbWUsIEpTVmFsdWUmIGV4Y2VwdGlvblZh
bHVlLCB1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgYm9vbCBleHBsaWNpdFRocm93KQogewotICAg
IC8vIFNldCB1cCB0aGUgZXhjZXB0aW9uIG9iamVjdAotCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBjYWxsRnJhbWUtPmNvZGVCbG9jaygpOworICAgIGJvb2wgaXNJbnRlcnJ1cHQgPSBmYWxz
ZTsKKworICAgIC8vIFNldCB1cCB0aGUgZXhjZXB0aW9uIG9iamVjdAogICAgIGlmIChleGNlcHRp
b25WYWx1ZS5pc09iamVjdCgpKSB7CiAgICAgICAgIEpTT2JqZWN0KiBleGNlcHRpb24gPSBhc09i
amVjdChleGNlcHRpb25WYWx1ZSk7CiAgICAgICAgIGlmICghZXhwbGljaXRUaHJvdyAmJiBleGNl
cHRpb24tPmlzRXJyb3JJbnN0YW5jZSgpICYmIHN0YXRpY19jYXN0PEVycm9ySW5zdGFuY2UqPihl
eGNlcHRpb24pLT5hcHBlbmRTb3VyY2VUb01lc3NhZ2UoKSkKQEAgLTY3MSwxMiArNjcyLDcgQEAg
TkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dAogICAgICAgICAgICAgYWRk
RXJyb3JJbmZvKGNhbGxGcmFtZSwgZXhjZXB0aW9uLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldChjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KSwgY29kZUJsb2NrLT5vd25l
ckV4ZWN1dGFibGUoKS0+c291cmNlKCkpOwogCiAgICAgICAgIENvbXBsVHlwZSBleGNlcHRpb25U
eXBlID0gZXhjZXB0aW9uLT5leGNlcHRpb25UeXBlKCk7Ci0gICAgICAgIGlmIChleGNlcHRpb25U
eXBlID09IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZCkgewotICAg
ICAgICAgICAgd2hpbGUgKHVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVl
LCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgewotICAgICAgICAgICAgICAgIC8vIERvbid0
IG5lZWQgaGFuZGxlciBjaGVja3Mgb3IgYW55dGhpbmcsIHdlIGp1c3Qgd2FudCB0byB1bnJvbGwg
YWxsIHRoZSBKUyBjYWxsZnJhbWVzIHBvc3NpYmxlLgotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KKyAgICAgICAgaXNJbnRlcnJ1cHQgPSBleGNlcHRpb25U
eXBlID09IEludGVycnVwdGVkIHx8IGV4Y2VwdGlvblR5cGUgPT0gVGVybWluYXRlZDsKICAgICB9
CiAKICAgICBpZiAoRGVidWdnZXIqIGRlYnVnZ2VyID0gY2FsbEZyYW1lLT5keW5hbWljR2xvYmFs
T2JqZWN0KCktPmRlYnVnZ2VyKCkpIHsKQEAgLTY4NSwzOSArNjgxLDE5IEBAIE5FVkVSX0lOTElO
RSBIYW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnQKICAgICAgICAgZGVidWdnZXItPmV4Y2VwdGlv
bihkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKS0+c291cmNl
SUQoKSwgY29kZUJsb2NrLT5saW5lTnVtYmVyRm9yQnl0ZWNvZGVPZmZzZXQoY2FsbEZyYW1lLCBi
eXRlY29kZU9mZnNldCksIGhhc0hhbmRsZXIpOwogICAgIH0KIAotICAgIC8vIElmIHdlIHRocm93
IGluIHRoZSBtaWRkbGUgb2YgYSBjYWxsIGluc3RydWN0aW9uLCB3ZSBuZWVkIHRvIG5vdGlmeQot
ICAgIC8vIHRoZSBwcm9maWxlciBtYW51YWxseSB0aGF0IHRoZSBjYWxsIGluc3RydWN0aW9uIGhh
cyByZXR1cm5lZCwgc2luY2UKLSAgICAvLyB3ZSdsbCBuZXZlciByZWFjaCB0aGUgcmVsZXZhbnQg
b3BfcHJvZmlsZV9kaWRfY2FsbC4KLSAgICBpZiAoUHJvZmlsZXIqIHByb2ZpbGVyID0gKlByb2Zp
bGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSkgewotI2lmIEVOQUJMRShJTlRFUlBSRVRF
UikKLSAgICAgICAgaWYgKCFjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5jYW5Vc2VKSVQoKSkgewot
ICAgICAgICAgICAgLy8gRklYTUU6IFdoeSA4PyAtIHdvcmsgb3V0IHdoYXQgdGhpcyBtYWdpYyB2
YWx1ZSBpcywgcmVwbGFjZSB0aGUgY29uc3RhbnQgd2l0aCBzb21ldGhpbmcgbW9yZSBoZWxwZnVs
LgotICAgICAgICAgICAgaWYgKGlzQ2FsbEJ5dGVjb2RlKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkKLSAgICAgICAgICAgICAgICBwcm9maWxlci0+
ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmluc3RydWN0aW9u
cygpW2J5dGVjb2RlT2Zmc2V0ICsgMV0udS5vcGVyYW5kKS5qc1ZhbHVlKCkpOwotICAgICAgICAg
ICAgZWxzZSBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkgPiAoYnl0ZWNvZGVP
ZmZzZXQgKyA4KSAmJiBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsg
OF0udS5vcGNvZGUgPT0gZ2V0T3Bjb2RlKG9wX2NvbnN0cnVjdCkpCi0gICAgICAgICAgICAgICAg
cHJvZmlsZXItPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIDldLnUub3BlcmFuZCkuanNWYWx1ZSgpKTsK
LSAgICAgICAgfQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIGVsc2UKLSNlbmRpZgotI2VuZGlm
Ci0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgewotICAgICAgICAgICAgaW50IGZ1bmN0aW9uUmVn
aXN0ZXJJbmRleDsKLSAgICAgICAgICAgIGlmIChjb2RlQmxvY2stPmZ1bmN0aW9uUmVnaXN0ZXJG
b3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCwgZnVuY3Rpb25SZWdpc3RlckluZGV4KSkK
LSAgICAgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNhbGxGcmFt
ZS0+cihmdW5jdGlvblJlZ2lzdGVySW5kZXgpLmpzVmFsdWUoKSk7Ci0gICAgICAgIH0KLSNlbmRp
ZgotICAgIH0KLQogICAgIC8vIENhbGN1bGF0ZSBhbiBleGNlcHRpb24gaGFuZGxlciB2UEMsIHVu
d2luZGluZyBjYWxsIGZyYW1lcyBhcyBuZWNlc3NhcnkuCi0KICAgICBIYW5kbGVySW5mbyogaGFu
ZGxlciA9IDA7Ci0gICAgd2hpbGUgKCEoaGFuZGxlciA9IGNvZGVCbG9jay0+aGFuZGxlckZvckJ5
dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKLSAgICAgICAgaWYgKCF1bndpbmRDYWxs
RnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0ZWNvZGVPZmZzZXQsIGNvZGVCbG9j
aykpCisgICAgd2hpbGUgKGlzSW50ZXJydXB0IHx8ICEoaGFuZGxlciA9IGNvZGVCbG9jay0+aGFu
ZGxlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KSkpIHsKKyAgICAgICAgaWYgKCF1
bndpbmRDYWxsRnJhbWUoY2FsbEZyYW1lLCBleGNlcHRpb25WYWx1ZSwgYnl0ZWNvZGVPZmZzZXQs
IGNvZGVCbG9jaykpIHsKKyAgICAgICAgICAgIGlmIChQcm9maWxlciogcHJvZmlsZXIgPSAqUHJv
ZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpKQorICAgICAgICAgICAgICAgIHByb2Zp
bGVyLT5leGNlcHRpb25VbndpbmQoY2FsbEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9ICpQcm9maWxl
cjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpCisgICAgICAgIHByb2ZpbGVyLT5leGNlcHRp
b25VbndpbmQoY2FsbEZyYW1lKTsKKwogICAgIC8vIFNocmluayB0aGUgSlMgc3RhY2ssIGluIGNh
c2Ugc3RhY2sgb3ZlcmZsb3cgbWFkZSBpdCBodWdlLgogICAgIFJlZ2lzdGVyKiBoaWdoV2F0ZXJN
YXJrID0gMDsKICAgICBmb3IgKENhbGxGcmFtZSogY2FsbGVyRnJhbWUgPSBjYWxsRnJhbWU7IGNh
bGxlckZyYW1lOyBjYWxsZXJGcmFtZSA9IGNhbGxlckZyYW1lLT5jYWxsZXJGcmFtZSgpLT5yZW1v
dmVIb3N0Q2FsbEZyYW1lRmxhZygpKSB7CkBAIC03ODksNyArNzY1LDcgQEAgSlNWYWx1ZSBJbnRl
cnByZXRlcjo6ZXhlY3V0ZShQcm9ncmFtRXhlYwogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9
IFByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVy
KQotICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBwcm9ncmFt
LT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOworICAgICAgICAoKnByb2ZpbGVyKS0+
X3dpbGxFeGVjdXRlKGNhbGxGcmFtZSwgcHJvZ3JhbS0+c291cmNlVVJMKCksIHByb2dyYW0tPmxp
bmVObygpKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsKQEAgLTgwNyw3ICs3ODMsNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAgICAgfQogCiAgICAg
aWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1l
LCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJvZ3JhbS0+bGluZU5vKCkpOworICAgICAgICAoKnBy
b2ZpbGVyKS0+X2RpZEV4ZWN1dGUoY2FsbEZyYW1lLCBwcm9ncmFtLT5zb3VyY2VVUkwoKSwgcHJv
Z3JhbS0+bGluZU5vKCkpOwogCiAgICAgaWYgKG1fcmVlbnRyeURlcHRoICYmIGxhc3RHbG9iYWxP
YmplY3QgJiYgZ2xvYmFsT2JqZWN0ICE9IGxhc3RHbG9iYWxPYmplY3QpCiAgICAgICAgIGxhc3RH
bG9iYWxPYmplY3QtPmNvcHlHbG9iYWxzVG8obV9yZWdpc3RlckZpbGUpOwpAQCAtODYwLDcgKzgz
Niw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKIAogICAgICAg
ICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5j
ZSgpOwogICAgICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAgICAgKCpwcm9maWxlciktPndp
bGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZnVuY3Rpb24pOworICAgICAgICAgICAgKCpwcm9maWxl
ciktPl93aWxsRXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgICAgICBKU1ZhbHVl
IHJlc3VsdDsKICAgICAgICAgewpAQCAtODc3LDcgKzg1Myw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0
ZXI6OmV4ZWN1dGVDYWxsKENhbGxGcmEKICAgICAgICAgfQogCiAgICAgICAgIGlmICgqcHJvZmls
ZXIpCi0gICAgICAgICAgICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICgqcHJvZmlsZXIpLT5fZGlkRXhlY3V0ZShjYWxsRnJhbWUs
IGZ1bmN0aW9uKTsKIAogICAgICAgICBtX3JlZ2lzdGVyRmlsZS5zaHJpbmsob2xkRW5kKTsKICAg
ICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKQEAgLTg5Miw3ICs4NjgsNyBAQCBK
U1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAKICAgICBQcm9maWxlcioq
IHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwogICAgIGlm
ICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdDYWxsRnJh
bWUsIGZ1bmN0aW9uKTsKKyAgICAgICAgKCpwcm9maWxlciktPl93aWxsRXhlY3V0ZShjYWxsRnJh
bWUsIGZ1bmN0aW9uKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsKQEAgLTkwMSw3ICs4
NzcsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgfQog
CiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUobmV3
Q2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgICAgICgqcHJvZmlsZXIpLT5fZGlkRXhlY3V0ZShj
YWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQp
OwogICAgIHJldHVybiBjaGVja2VkUmV0dXJuKHJlc3VsdCk7CkBAIC05NDksNyArOTI1LDcgQEAg
SlNPYmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogCiAgICAgICAgIFByb2Zp
bGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAg
ICAgICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1
dGUobmV3Q2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICAgICAoKnByb2ZpbGVyKS0+
X3dpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAgICAgICAgIEpTVmFsdWUg
cmVzdWx0OwogICAgICAgICB7CkBAIC05NjYsNyArOTQyLDcgQEAgSlNPYmplY3QqIEludGVycHJl
dGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCpwcm9maWxl
cikKLSAgICAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKG5ld0NhbGxGcmFtZSwgY29u
c3RydWN0b3IpOworICAgICAgICAgICAgKCpwcm9maWxlciktPl9kaWRFeGVjdXRlKGNhbGxGcmFt
ZSwgY29uc3RydWN0b3IpOwogCiAgICAgICAgIG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQp
OwogICAgICAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKQEAgLTk4NCw3ICs5NjAs
NyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAKICAgICBQcm9m
aWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwog
ICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShuZXdD
YWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKKyAgICAgICAgKCpwcm9maWxlciktPl93aWxsRXhlY3V0
ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIHsK
QEAgLTk5Myw3ICs5NjksNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1
Y3QoCiAgICAgfQogCiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPmRp
ZEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CisgICAgICAgICgqcHJvZmlsZXIp
LT5fZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAogICAgIG1fcmVnaXN0ZXJG
aWxlLnNocmluayhvbGRFbmQpOwogICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQpA
QCAtMTA1MCw3ICsxMDI2LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShDYWxsRnJh
bWVDbAogICAgIGNsb3N1cmUucmVzZXRDYWxsRnJhbWUoKTsKICAgICBQcm9maWxlcioqIHByb2Zp
bGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpOwogICAgIGlmICgqcHJv
ZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShjbG9zdXJlLm9sZENhbGxG
cmFtZSwgY2xvc3VyZS5mdW5jdGlvbik7CisgICAgICAgICgqcHJvZmlsZXIpLT5fd2lsbEV4ZWN1
dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOwogICAgIAogICAgIEpT
VmFsdWUgcmVzdWx0OwogICAgIHsKQEAgLTEwNzMsNyArMTA0OSw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoQ2FsbEZyYW1lQ2wKICAgICB9CiAgICAgCiAgICAgaWYgKCpwcm9maWxl
cikKLSAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2xvc3VyZS5vbGRDYWxsRnJhbWUs
IGNsb3N1cmUuZnVuY3Rpb24pOworICAgICAgICAoKnByb2ZpbGVyKS0+X2RpZEV4ZWN1dGUoY2xv
c3VyZS5vbGRDYWxsRnJhbWUsIGNsb3N1cmUuZnVuY3Rpb24pOwogICAgIHJldHVybiBjaGVja2Vk
UmV0dXJuKHJlc3VsdCk7CiB9CiAKQEAgLTExNTksNyArMTEzNSw3IEBAIEpTVmFsdWUgSW50ZXJw
cmV0ZXI6OmV4ZWN1dGUoRXZhbEV4ZWN1dGEKIAogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQ
cm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikK
LSAgICAgICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgZXZhbC0+c291
cmNlVVJMKCksIGV2YWwtPmxpbmVObygpKTsKKyAgICAgICAgKCpwcm9maWxlciktPl93aWxsRXhl
Y3V0ZShjYWxsRnJhbWUsIGV2YWwtPnNvdXJjZVVSTCgpLCBldmFsLT5saW5lTm8oKSk7CiAKICAg
ICBKU1ZhbHVlIHJlc3VsdDsKICAgICB7CkBAIC0xMTgzLDcgKzExNTksNyBAQCBKU1ZhbHVlIElu
dGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgfQogCiAgICAgaWYgKCpwcm9maWxl
cikKLSAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBldmFsLT5zb3Vy
Y2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOworICAgICAgICAoKnByb2ZpbGVyKS0+X2RpZEV4ZWN1
dGUoY2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAg
bV9yZWdpc3RlckZpbGUuc2hyaW5rKG9sZEVuZCk7CiAgICAgaWYgKHB1c2hlZFNjb3BlKQpAQCAt
NDc3OSw3ICs0NzU1LDcgQEAgc2tpcF9pZF9jdXN0b21fc2VsZjoKICAgICAgICAgaW50IGZ1bmN0
aW9uID0gdlBDWzFdLnUub3BlcmFuZDsKIAogICAgICAgICBpZiAoKmVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZSkKLSAgICAgICAgICAgICgqZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKS0+d2lsbEV4
ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFsdWUoKSk7CisgICAg
ICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPl93aWxsRXhlY3V0ZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+cihmdW5jdGlvbikuanNWYWx1ZSgpKTsKIAogICAgICAgICB2UEMgKz0g
T1BDT0RFX0xFTkdUSChvcF9wcm9maWxlX3dpbGxfY2FsbCk7CiAgICAgICAgIE5FWFRfSU5TVFJV
Q1RJT04oKTsKQEAgLTQ3OTMsNyArNDc2OSw3IEBAIHNraXBfaWRfY3VzdG9tX3NlbGY6CiAgICAg
ICAgIGludCBmdW5jdGlvbiA9IHZQQ1sxXS51Lm9wZXJhbmQ7CiAKICAgICAgICAgaWYgKCplbmFi
bGVkUHJvZmlsZXJSZWZlcmVuY2UpCi0gICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnIoZnVuY3Rpb24pLmpzVmFs
dWUoKSk7CisgICAgICAgICAgICAoKmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPl9kaWRFeGVj
dXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKGZ1bmN0aW9uKS5qc1ZhbHVlKCkpOwogCiAgICAg
ICAgIHZQQyArPSBPUENPREVfTEVOR1RIKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOwogICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAJKHJldmlzaW9u
IDcyMjY3KQorKysgSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjI2OSw3ICsyMjY5LDcgQEAgREVGSU5FX1NUVUJfRlVOQ1RJT04odm9pZCwgb3BfcHJv
ZmlsZV93aQogICAgIFNUVUJfSU5JVF9TVEFDS19GUkFNRShzdGFja0ZyYW1lKTsKIAogICAgIEFT
U0VSVCgqc3RhY2tGcmFtZS5lbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpOwotICAgICgqc3RhY2tG
cmFtZS5lbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UpLT53aWxsRXhlY3V0ZShzdGFja0ZyYW1lLmNh
bGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CisgICAgKCpzdGFja0ZyYW1l
LmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSktPl93aWxsRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxG
cmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpzVmFsdWUoKSk7CiB9CiAKIERFRklORV9TVFVCX0ZV
TkNUSU9OKHZvaWQsIG9wX3Byb2ZpbGVfZGlkX2NhbGwpCkBAIC0yMjc3LDcgKzIyNzcsNyBAQCBE
RUZJTkVfU1RVQl9GVU5DVElPTih2b2lkLCBvcF9wcm9maWxlX2RpCiAgICAgU1RVQl9JTklUX1NU
QUNLX0ZSQU1FKHN0YWNrRnJhbWUpOwogCiAgICAgQVNTRVJUKCpzdGFja0ZyYW1lLmVuYWJsZWRQ
cm9maWxlclJlZmVyZW5jZSk7Ci0gICAgKCpzdGFja0ZyYW1lLmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSktPmRpZEV4ZWN1dGUoc3RhY2tGcmFtZS5jYWxsRnJhbWUsIHN0YWNrRnJhbWUuYXJnc1sw
XS5qc1ZhbHVlKCkpOworICAgICgqc3RhY2tGcmFtZS5lbmFibGVkUHJvZmlsZXJSZWZlcmVuY2Up
LT5fZGlkRXhlY3V0ZShzdGFja0ZyYW1lLmNhbGxGcmFtZSwgc3RhY2tGcmFtZS5hcmdzWzBdLmpz
VmFsdWUoKSk7CiB9CiAKIERFRklORV9TVFVCX0ZVTkNUSU9OKHZvaWQsIG9wX3JldF9zY29wZUNo
YWluKQpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAJKHJldmlzaW9uIDcyMjY3
KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgUHJvZmlsZTo6UHJvZmlsZShjb25zdCBVU3RyaW5nJiB0aXRsZSwg
dQogewogICAgIC8vIEZJWE1FOiBXaGVuIG11bHRpLXRocmVhZGluZyBpcyBzdXBwb3J0ZWQgdGhp
cyB3aWxsIGJlIGEgdmVjdG9yIGFuZCBjYWxscwogICAgIC8vIGludG8gdGhlIHByb2ZpbGVyIHdp
bGwgbmVlZCB0byBrbm93IHdoaWNoIHRocmVhZCBpdCBpcyBleGVjdXRpbmcgb24uCi0gICAgbV9o
ZWFkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShDYWxsSWRlbnRpZmllcigiVGhyZWFkXzEiLCBVU3Ry
aW5nKCksIDApLCAwLCAwKTsKKyAgICBtX2hlYWQgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKDAsIENh
bGxJZGVudGlmaWVyKCJUaHJlYWRfMSIsIFVTdHJpbmcoKSwgMCksIDAsIDApOwogfQogCiBQcm9m
aWxlOjp+UHJvZmlsZSgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2Vu
ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNyBAQCB2
b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvCiAgICAgSlNWYWx1ZSBmdW5j
dGlvbjsKIAogICAgIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlTGFzdENhbGxlcihleGVj
LCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgc291cmNlVVJMLCBmdW5jdGlvbik7Ci0gICAgbV9jdXJy
ZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoUHJvZmlsZXI6OmNyZWF0ZUNhbGxJZGVudGlm
aWVyKGV4ZWMsIGZ1bmN0aW9uID8gZnVuY3Rpb24udG9UaGlzT2JqZWN0KGV4ZWMpIDogMCwgc291
cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkpOworICAgIG1f
Y3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGV4ZWMsIFByb2ZpbGVyOjpjcmVhdGVD
YWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbiA/IGZ1bmN0aW9uLnRvVGhpc09iamVjdChleGVj
KSA6IDAsIHNvdXJjZVVSTCwgbGluZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgp
KTsKICAgICBtX2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5nZXQoKSk7CiB9CiAKQEAg
LTcyLDcgKzcyLDcgQEAgY29uc3QgVVN0cmluZyYgUHJvZmlsZUdlbmVyYXRvcjo6dGl0bGUoKQog
ICAgIHJldHVybiBtX3Byb2ZpbGUtPnRpdGxlKCk7CiB9CiAKLXZvaWQgUHJvZmlsZUdlbmVyYXRv
cjo6d2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQordm9p
ZCBQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFt
ZSwgY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQogewogICAgIGlmIChKQVZB
U0NSSVBUQ09SRV9QUk9GSUxFX1dJTExfRVhFQ1VURV9FTkFCTEVEKCkpIHsKICAgICAgICAgQ1N0
cmluZyBuYW1lID0gY2FsbElkZW50aWZpZXIubV9uYW1lLnV0ZjgoKTsKQEAgLTgzLDExICs4Mywx
MSBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlKGNvbnN0CiAgICAgaWYgKCFt
X29yaWdpbmF0aW5nR2xvYmFsRXhlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAgQVNTRVJUX0FS
RyhtX2N1cnJlbnROb2RlLCBtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnROb2RlID0gbV9j
dXJyZW50Tm9kZS0+d2lsbEV4ZWN1dGUoY2FsbElkZW50aWZpZXIpOworICAgIEFTU0VSVChtX2N1
cnJlbnROb2RlKTsKKyAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+d2lsbEV4ZWN1
dGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRpZmllcik7CiB9CiAKLXZvaWQgUHJvZmlsZUdl
bmVyYXRvcjo6ZGlkRXhlY3V0ZShjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIp
Cit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxs
RnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllcikKIHsKICAgICBpZiAo
SkFWQVNDUklQVENPUkVfUFJPRklMRV9ESURfRVhFQ1VURV9FTkFCTEVEKCkpIHsKICAgICAgICAg
Q1N0cmluZyBuYW1lID0gY2FsbElkZW50aWZpZXIubV9uYW1lLnV0ZjgoKTsKQEAgLTk4LDkgKzk4
LDkgQEAgdm9pZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIGlmICgh
bV9vcmlnaW5hdGluZ0dsb2JhbEV4ZWMpCiAgICAgICAgIHJldHVybjsKIAotICAgIEFTU0VSVF9B
UkcobV9jdXJyZW50Tm9kZSwgbV9jdXJyZW50Tm9kZSk7CisgICAgQVNTRVJUKG1fY3VycmVudE5v
ZGUpOwogICAgIGlmIChtX2N1cnJlbnROb2RlLT5jYWxsSWRlbnRpZmllcigpICE9IGNhbGxJZGVu
dGlmaWVyKSB7Ci0gICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJuaW5nTm9kZSA9IFBy
b2ZpbGVOb2RlOjpjcmVhdGUoY2FsbElkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwgbV9jdXJyZW50
Tm9kZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJuaW5nTm9kZSA9
IFByb2ZpbGVOb2RlOjpjcmVhdGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRpZmllciwgbV9o
ZWFkLmdldCgpLCBtX2N1cnJlbnROb2RlLmdldCgpKTsKICAgICAgICAgcmV0dXJuaW5nTm9kZS0+
c2V0U3RhcnRUaW1lKG1fY3VycmVudE5vZGUtPnN0YXJ0VGltZSgpKTsKICAgICAgICAgcmV0dXJu
aW5nTm9kZS0+ZGlkRXhlY3V0ZSgpOwogICAgICAgICBtX2N1cnJlbnROb2RlLT5pbnNlcnROb2Rl
KHJldHVybmluZ05vZGUucmVsZWFzZSgpKTsKQEAgLTExMCw2ICsxMTAsMTcgQEAgdm9pZCBQcm9m
aWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIG1fY3VycmVudE5vZGUgPSBtX2N1
cnJlbnROb2RlLT5kaWRFeGVjdXRlKCk7CiB9CiAKK3ZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6ZXhj
ZXB0aW9uVW53aW5kKEV4ZWNTdGF0ZSogaGFuZGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50
aWZpZXImKQoreworICAgIC8vIElmIHRoZSBjdXJyZW50IG5vZGUgd2FzIGNhbGxlZCBieSB0aGUg
aGFuZGxlciAoPT0pIG9yIGFueQorICAgIC8vIG1vcmUgbmVzdGVkIGZ1bmN0aW9uICg+KSB0aGUg
d2UgaGF2ZSBleGl0ZWQgZWFybHkgZnJvbSBpdC4KKyAgICBBU1NFUlQobV9jdXJyZW50Tm9kZSk7
CisgICAgd2hpbGUgKG1fY3VycmVudE5vZGUtPmNhbGxlckNhbGxGcmFtZSgpID49IGhhbmRsZXJD
YWxsRnJhbWUpIHsKKyAgICAgICAgZGlkRXhlY3V0ZShtX2N1cnJlbnROb2RlLT5jYWxsZXJDYWxs
RnJhbWUoKSwgbV9jdXJyZW50Tm9kZS0+Y2FsbElkZW50aWZpZXIoKSk7CisgICAgICAgIEFTU0VS
VChtX2N1cnJlbnROb2RlKTsKKyAgICB9Cit9CisKIHZvaWQgUHJvZmlsZUdlbmVyYXRvcjo6c3Rv
cFByb2ZpbGluZygpCiB7CiAgICAgbV9wcm9maWxlLT5mb3JFYWNoKCZQcm9maWxlTm9kZTo6c3Rv
cFByb2ZpbGluZyk7CkBAIC0xMTcsMTQgKzEyOCwxNCBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6
OnN0b3BQcm9maWxpbmcoKQogICAgIHJlbW92ZVByb2ZpbGVTdGFydCgpOwogICAgIHJlbW92ZVBy
b2ZpbGVFbmQoKTsKIAotICAgIEFTU0VSVF9BUkcobV9jdXJyZW50Tm9kZSwgbV9jdXJyZW50Tm9k
ZSk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOwogCiAgICAgLy8gU2V0IHRoZSBjdXJyZW50
IG5vZGUgdG8gdGhlIHBhcmVudCwgYmVjYXVzZSB3ZSBhcmUgaW4gYSBjYWxsIHRoYXQKICAgICAv
LyB3aWxsIG5vdCBnZXQgZGlkRXhlY3V0ZSBjYWxsLgogICAgIG1fY3VycmVudE5vZGUgPSBtX2N1
cnJlbnROb2RlLT5wYXJlbnQoKTsKIAogICAgaWYgKGRvdWJsZSBoZWFkU2VsZlRpbWUgPSBtX2hl
YWQtPnNlbGZUaW1lKCkpIHsKLSAgICAgICAgUmVmUHRyPFByb2ZpbGVOb2RlPiBpZGxlTm9kZSA9
IFByb2ZpbGVOb2RlOjpjcmVhdGUoQ2FsbElkZW50aWZpZXIoTm9uSlNFeGVjdXRpb24sIFVTdHJp
bmcoKSwgMCksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAgUmVmUHRyPFBy
b2ZpbGVOb2RlPiBpZGxlTm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoMCwgQ2FsbElkZW50aWZp
ZXIoTm9uSlNFeGVjdXRpb24sIFVTdHJpbmcoKSwgMCksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdl
dCgpKTsKIAogICAgICAgICBpZGxlTm9kZS0+c2V0VG90YWxUaW1lKGhlYWRTZWxmVGltZSk7CiAg
ICAgICAgIGlkbGVOb2RlLT5zZXRTZWxmVGltZShoZWFkU2VsZlRpbWUpOwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuaAkocmV2aXNpb24gNzIyNjcpCisr
KyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDEzICs1MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQg
cHJvZmlsZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlR3JvdXA7IH0KIAogICAgICAg
ICAvLyBDb2xsZWN0aW5nCi0gICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50
aWZpZXImKTsKLSAgICAgICAgdm9pZCBkaWRFeGVjdXRlKGNvbnN0IENhbGxJZGVudGlmaWVyJik7
CisgICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIGNv
bnN0IENhbGxJZGVudGlmaWVyJik7CisgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3RhdGUq
IGNhbGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50aWZpZXImKTsKKworICAgICAgICB2b2lk
IGV4Y2VwdGlvblVud2luZChFeGVjU3RhdGUqIGhhbmRsZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJ
ZGVudGlmaWVyJik7CiAKICAgICAgICAgLy8gU3RvcHBpbmcgUHJvZmlsaW5nCiAgICAgICAgIHZv
aWQgc3RvcFByb2ZpbGluZygpOwogCi0gICAgICAgIHR5cGVkZWYgdm9pZCAoUHJvZmlsZUdlbmVy
YXRvcjo6KlByb2ZpbGVGdW5jdGlvbikoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlm
aWVyKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkIChQcm9maWxlR2VuZXJhdG9yOjoqUHJvZmlsZUZ1
bmN0aW9uKShFeGVjU3RhdGUqIGNhbGxlck9ySGFuZGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElk
ZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFByb2Zp
bGVHZW5lcmF0b3IoY29uc3QgVVN0cmluZyYgdGl0bGUsIEV4ZWNTdGF0ZSogb3JpZ2luYXRpbmdF
eGVjLCB1bnNpZ25lZCB1aWQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmls
ZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVO
b2RlLmNwcAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9m
aWxlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDkgQEAgc3RhdGljIGRvdWJs
ZSBnZXRDb3VudCgpCiAjZW5kaWYKIH0KIAotUHJvZmlsZU5vZGU6OlByb2ZpbGVOb2RlKGNvbnN0
IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQ
cm9maWxlTm9kZSogcGFyZW50Tm9kZSkKLSAgICA6IG1fY2FsbElkZW50aWZpZXIoY2FsbElkZW50
aWZpZXIpCitQcm9maWxlTm9kZTo6UHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJh
bWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgUHJvZmlsZU5vZGUqIGhl
YWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9kZSkKKyAgICA6IG1fY2FsbGVyQ2FsbEZyYW1l
KGNhbGxlckNhbGxGcmFtZSkKKyAgICAsIG1fY2FsbElkZW50aWZpZXIoY2FsbElkZW50aWZpZXIp
CiAgICAgLCBtX2hlYWQoaGVhZE5vZGUpCiAgICAgLCBtX3BhcmVudChwYXJlbnROb2RlKQogICAg
ICwgbV9uZXh0U2libGluZygwKQpAQCAtNzIsOCArNzMsOSBAQCBQcm9maWxlTm9kZTo6UHJvZmls
ZU5vZGUoY29uc3QgQ2FsbElkZW50CiAgICAgc3RhcnRUaW1lcigpOwogfQogCi1Qcm9maWxlTm9k
ZTo6UHJvZmlsZU5vZGUoUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRv
Q29weSkKLSAgICA6IG1fY2FsbElkZW50aWZpZXIobm9kZVRvQ29weS0+Y2FsbElkZW50aWZpZXIo
KSkKK1Byb2ZpbGVOb2RlOjpQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwg
UHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSkKKyAgICA6IG1f
Y2FsbGVyQ2FsbEZyYW1lKGNhbGxlckNhbGxGcmFtZSkKKyAgICAsIG1fY2FsbElkZW50aWZpZXIo
bm9kZVRvQ29weS0+Y2FsbElkZW50aWZpZXIoKSkKICAgICAsIG1faGVhZChoZWFkTm9kZSkKICAg
ICAsIG1fcGFyZW50KG5vZGVUb0NvcHktPnBhcmVudCgpKQogICAgICwgbV9uZXh0U2libGluZygw
KQpAQCAtODcsNyArODksNyBAQCBQcm9maWxlTm9kZTo6UHJvZmlsZU5vZGUoUHJvZmlsZU5vZGUq
IGhlCiB7CiB9CiAKLVByb2ZpbGVOb2RlKiBQcm9maWxlTm9kZTo6d2lsbEV4ZWN1dGUoY29uc3Qg
Q2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQorUHJvZmlsZU5vZGUqIFByb2ZpbGVOb2Rl
Ojp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50
aWZpZXImIGNhbGxJZGVudGlmaWVyKQogewogICAgIGZvciAoU3RhY2tJdGVyYXRvciBjdXJyZW50
Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGlsZCAhPSBtX2NoaWxkcmVuLmVu
ZCgpOyArK2N1cnJlbnRDaGlsZCkgewogICAgICAgICBpZiAoKCpjdXJyZW50Q2hpbGQpLT5jYWxs
SWRlbnRpZmllcigpID09IGNhbGxJZGVudGlmaWVyKSB7CkBAIC05Niw3ICs5OCw3IEBAIFByb2Zp
bGVOb2RlKiBQcm9maWxlTm9kZTo6d2lsbEV4ZWN1dGUoY28KICAgICAgICAgfQogICAgIH0KIAot
ICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gbmV3Q2hpbGQgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGNh
bGxJZGVudGlmaWVyLCBtX2hlYWQgPyBtX2hlYWQgOiB0aGlzLCB0aGlzKTsgLy8gSWYgdGhpcyBQ
cm9maWxlTm9kZSBoYXMgbm8gaGVhZCBpdCBpcyB0aGUgaGVhZC4KKyAgICBSZWZQdHI8UHJvZmls
ZU5vZGU+IG5ld0NoaWxkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShjYWxsZXJDYWxsRnJhbWUsIGNh
bGxJZGVudGlmaWVyLCBtX2hlYWQgPyBtX2hlYWQgOiB0aGlzLCB0aGlzKTsgLy8gSWYgdGhpcyBQ
cm9maWxlTm9kZSBoYXMgbm8gaGVhZCBpdCBpcyB0aGUgaGVhZC4KICAgICBpZiAobV9jaGlsZHJl
bi5zaXplKCkpCiAgICAgICAgIG1fY2hpbGRyZW4ubGFzdCgpLT5zZXROZXh0U2libGluZyhuZXdD
aGlsZC5nZXQoKSk7CiAgICAgbV9jaGlsZHJlbi5hcHBlbmQobmV3Q2hpbGQucmVsZWFzZSgpKTsK
SW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuaAkocmV2aXNpb24gNzIyNjcp
CisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xhc3MgRXhlY1N0
YXRlOwogICAgIGNsYXNzIFByb2ZpbGVOb2RlOwogCiAgICAgdHlwZWRlZiBWZWN0b3I8UmVmUHRy
PFByb2ZpbGVOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBTdGFja0l0ZXJhdG9yOwpAQCAtNDQsMjMg
KzQ1LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJvZmlsZU5vZGUgOiBwdWJs
aWMgUmVmQ291bnRlZDxQcm9maWxlTm9kZT4gewogICAgIHB1YmxpYzoKLSAgICAgICAgc3RhdGlj
IFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IGNyZWF0ZShjb25zdCBDYWxsSWRlbnRpZmllciYgY2Fs
bElkZW50aWZpZXIsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIHBhcmVudE5v
ZGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPiBjcmVhdGUoRXhlY1N0
YXRlKiBjYWxsZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmll
ciwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9kZSkKICAgICAg
ICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9maWxlTm9kZShjYWxsSWRl
bnRpZmllciwgaGVhZE5vZGUsIHBhcmVudE5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgUHJvZmlsZU5vZGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRpZmllciwgaGVh
ZE5vZGUsIHBhcmVudE5vZGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0
cjxQcm9maWxlTm9kZT4gY3JlYXRlKFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUq
IG5vZGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPiBjcmVhdGUoRXhl
Y1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5v
ZGUqIG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJv
ZmlsZU5vZGUoaGVhZE5vZGUsIG5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgUHJvZmlsZU5vZGUoY2FsbGVyQ2FsbEZyYW1lLCBoZWFkTm9kZSwgbm9kZSkpOwogICAgICAg
ICB9CiAKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KFByb2ZpbGVOb2RlKiBub2RlKSB7IHJldHVy
biBtX2NhbGxJZGVudGlmaWVyID09IG5vZGUtPmNhbGxJZGVudGlmaWVyKCk7IH0KIAotICAgICAg
ICBQcm9maWxlTm9kZSogd2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXImKTsKKyAgICAg
ICAgUHJvZmlsZU5vZGUqIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBj
b25zdCBDYWxsSWRlbnRpZmllciYpOwogICAgICAgICBQcm9maWxlTm9kZSogZGlkRXhlY3V0ZSgp
OwogCiAgICAgICAgIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCiAgICAgICAgIC8vIENhbGxJZGVu
dGlmaWVyIG1lbWJlcnMKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxlckNhbGxGcmFtZTsgfQogICAgICAgICBjb25zdCBDYWxsSWRlbnRp
ZmllciYgY2FsbElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxJZGVudGlmaWVyOyB9
CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbElkZW50aWZpZXIubV9uYW1lOyB9CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIHVybCgpIGNv
bnN0IHsgcmV0dXJuIG1fY2FsbElkZW50aWZpZXIubV91cmw7IH0KQEAgLTEyOCw4ICsxMzAsOCBA
QCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAgICAgUHJvZmls
ZU5vZGUoY29uc3QgQ2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVhZE5vZGUsIFByb2Zp
bGVOb2RlKiBwYXJlbnROb2RlKTsKLSAgICAgICAgUHJvZmlsZU5vZGUoUHJvZmlsZU5vZGUqIGhl
YWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSk7CisgICAgICAgIFByb2ZpbGVOb2RlKEV4
ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBjb25zdCBDYWxsSWRlbnRpZmllciYsIFByb2ZpbGVO
b2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIHBhcmVudE5vZGUpOworICAgICAgICBQcm9maWxl
Tm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQ
cm9maWxlTm9kZSogbm9kZVRvQ29weSk7CiAKICAgICAgICAgdm9pZCBzdGFydFRpbWVyKCk7CiAg
ICAgICAgIHZvaWQgcmVzZXRDaGlsZHJlbnNTaWJsaW5ncygpOwpAQCAtMTQ3LDYgKzE0OSw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1l
RGVzY2VuZGluZ0NvbXBhcmF0b3IoY29uc3QgUmVmUHRyPFByb2ZpbGVOb2RlPiYgYSwgY29uc3Qg
UmVmUHRyPFByb2ZpbGVOb2RlPiYgYikgeyByZXR1cm4gYS0+ZnVuY3Rpb25OYW1lKCkgPiBiLT5m
dW5jdGlvbk5hbWUoKTsgfQogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZnVuY3Rpb25OYW1l
QXNjZW5kaW5nQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8UHJvZmlsZU5vZGU+JiBhLCBjb25zdCBS
ZWZQdHI8UHJvZmlsZU5vZGU+JiBiKSB7IHJldHVybiBhLT5mdW5jdGlvbk5hbWUoKSA8IGItPmZ1
bmN0aW9uTmFtZSgpOyB9CiAKKyAgICAgICAgRXhlY1N0YXRlKiBtX2NhbGxlckNhbGxGcmFtZTsK
ICAgICAgICAgQ2FsbElkZW50aWZpZXIgbV9jYWxsSWRlbnRpZmllcjsKICAgICAgICAgUHJvZmls
ZU5vZGUqIG1faGVhZDsKICAgICAgICAgUHJvZmlsZU5vZGUqIG1fcGFyZW50OwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk5LDQyICs5
OSw0OSBAQCBQYXNzUmVmUHRyPFByb2ZpbGU+IFByb2ZpbGVyOjpzdG9wUHJvZmlsCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxl
cyhjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4mIHByb2ZpbGVzLCBQcm9m
aWxlR2VuZXJhdG9yOjpQcm9maWxlRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IENhbGxJZGVudGlm
aWVyJiBjYWxsSWRlbnRpZmllciwgdW5zaWduZWQgY3VycmVudFByb2ZpbGVUYXJnZXRHcm91cCkK
K3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhFeGVjU3RhdGUq
IGNhbGxlck9ySGFuZGxlckNhbGxGcmFtZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxQcm9maWxlR2Vu
ZXJhdG9yPiA+JiBwcm9maWxlcywgUHJvZmlsZUdlbmVyYXRvcjo6UHJvZmlsZUZ1bmN0aW9uIGZ1
bmN0aW9uLCBjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIsIHVuc2lnbmVkIGN1
cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXApCiB7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBw
cm9maWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAocHJvZmlsZXNbaV0tPnByb2ZpbGVH
cm91cCgpID09IGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgfHwgIXByb2ZpbGVzW2ldLT5vcmln
aW5hdGluZ0dsb2JhbEV4ZWMoKSkKLSAgICAgICAgICAgIChwcm9maWxlc1tpXS5nZXQoKS0+KmZ1
bmN0aW9uKShjYWxsSWRlbnRpZmllcik7CisgICAgICAgICAgICAocHJvZmlsZXNbaV0uZ2V0KCkt
PipmdW5jdGlvbikoY2FsbGVyT3JIYW5kbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRpZmllcik7CiAg
ICAgfQogfQogCi12b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgZnVuY3Rpb24pCit2b2lkIFByb2ZpbGVyOjpfd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBj
YWxsZXJDYWxsRnJhbWUsIEpTVmFsdWUgZnVuY3Rpb24pCiB7CiAgICAgQVNTRVJUKCFtX2N1cnJl
bnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMo
bV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZSwgY3JlYXRl
Q2FsbElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24sICIiLCAwKSwgZXhlYy0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmls
ZXMoY2FsbGVyQ2FsbEZyYW1lLCBtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6
OndpbGxFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxsRnJhbWUsIGZ1bmN0
aW9uLCAiIiwgMCksIGNhbGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9m
aWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6OndpbGxFeGVjdXRlKEV4ZWNTdGF0ZSog
ZXhlYywgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQor
dm9pZCBQcm9maWxlcjo6X3dpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBj
b25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpCiB7CiAgICAg
QVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgQ2FsbElkZW50aWZp
ZXIgY2FsbElkZW50aWZpZXIgPSBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBKU1ZhbHVlKCks
IHNvdXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKTsKKyAgICBDYWxsSWRlbnRpZmllciBjYWxs
SWRlbnRpZmllciA9IGNyZWF0ZUNhbGxJZGVudGlmaWVyKGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1
ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlcik7CiAKLSAgICBkaXNwYXRjaEZ1bmN0
aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxF
eGVjdXRlLCBjYWxsSWRlbnRpZmllciwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5wcm9m
aWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMoY2FsbGVyQ2FsbEZy
YW1lLCBtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlLCBj
YWxsSWRlbnRpZmllciwgY2FsbGVyQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCktPnBy
b2ZpbGVHcm91cCgpKTsKIH0KIAotdm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24pCit2b2lkIFByb2ZpbGVyOjpfZGlkRXhlY3V0ZShFeGVj
U3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQo
IW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Q
cm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUs
IGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLCAiIiwgMCksIGV4ZWMtPmxleGlj
YWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25U
b1Byb2ZpbGVzKGNhbGxlckNhbGxGcmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2Vu
ZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxsRnJhbWUs
IGZ1bmN0aW9uLCAiIiwgMCksIGNhbGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1i
ZXIpCit2b2lkIFByb2ZpbGVyOjpfZGlkRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFt
ZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQogewog
ICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIGRpc3BhdGNo
RnVuY3Rpb25Ub1Byb2ZpbGVzKG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6
ZGlkRXhlY3V0ZSwgY3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgSlNWYWx1ZSgpLCBzb3VyY2VV
UkwsIHN0YXJ0aW5nTGluZU51bWJlciksIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJv
ZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKGNhbGxlckNhbGxG
cmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBj
cmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxsRnJhbWUsIEpTVmFsdWUoKSwgc291cmNlVVJM
LCBzdGFydGluZ0xpbmVOdW1iZXIpLCBjYWxsZXJDYWxsRnJhbWUtPmxleGljYWxHbG9iYWxPYmpl
Y3QoKS0+cHJvZmlsZUdyb3VwKCkpOworfQorCit2b2lkIFByb2ZpbGVyOjpleGNlcHRpb25Vbndp
bmQoRXhlY1N0YXRlKiBoYW5kbGVyQ2FsbEZyYW1lKQoreworICAgIEFTU0VSVCghbV9jdXJyZW50
UHJvZmlsZXMuaXNFbXB0eSgpKTsKKworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKGhh
bmRsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdlbmVyYXRvcjo6ZXhj
ZXB0aW9uVW53aW5kLCBjcmVhdGVDYWxsSWRlbnRpZmllcihoYW5kbGVyQ2FsbEZyYW1lLCBKU1Zh
bHVlKCksICIiLCAwKSwgaGFuZGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVjdCgpLT5w
cm9maWxlR3JvdXAoKSk7CiB9CiAKIENhbGxJZGVudGlmaWVyIFByb2ZpbGVyOjpjcmVhdGVDYWxs
SWRlbnRpZmllcihFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb25WYWx1ZSwgY29uc3Qg
VVN0cmluZyYgZGVmYXVsdFNvdXJjZVVSTCwgaW50IGRlZmF1bHRMaW5lTnVtYmVyKQpJbmRleDog
SmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCShyZXZpc2lvbiA3MjI2NykKKysrIEphdmFTY3Jp
cHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1Nywx
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBzdGFydFByb2ZpbGluZyhFeGVjU3Rh
dGUqLCBjb25zdCBVU3RyaW5nJiB0aXRsZSk7CiAgICAgICAgIFBhc3NSZWZQdHI8UHJvZmlsZT4g
c3RvcFByb2ZpbGluZyhFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiB0aXRsZSk7CiAKLSAgICAg
ICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uKTsKLSAgICAg
ICAgdm9pZCB3aWxsRXhlY3V0ZShFeGVjU3RhdGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkws
IGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwotICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBmdW5jdGlvbik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZShFeGVjU3Rh
dGUqLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIpOwor
ICAgICAgICB2b2lkIF93aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNW
YWx1ZSBmdW5jdGlvbik7CisgICAgICAgIHZvaWQgX3dpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogY2Fs
bGVyQ2FsbEZyYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVO
dW1iZXIpOworICAgICAgICB2b2lkIF9kaWRFeGVjdXRlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZy
YW1lLCBKU1ZhbHVlIGZ1bmN0aW9uKTsKKyAgICAgICAgdm9pZCBfZGlkRXhlY3V0ZShFeGVjU3Rh
dGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRp
bmdMaW5lTnVtYmVyKTsKKworICAgICAgICB2b2lkIGV4Y2VwdGlvblVud2luZChFeGVjU3RhdGUq
IGhhbmRsZXJDYWxsRnJhbWUpOwogCiAgICAgICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8UHJvZmls
ZUdlbmVyYXRvcj4gPiYgY3VycmVudFByb2ZpbGVzKCkgeyByZXR1cm4gbV9jdXJyZW50UHJvZmls
ZXM7IH07CiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMzQwKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMTEtMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTYzNSAtIFByb2ZpbGVyIGltcGxlbWVu
dGF0aW9uIGlzIGZyYWdpbGUKKworICAgICAgICBGaXhlcyBwcmV2aW91c2x5IGZhaWxpbmcgdGVz
dHMgLSBvdXRwdXQgd2FzIGluY29ycmVjdCwgc2hvd2luZyBkdXBsaWNhdGUgZW50cmllcworICAg
ICAgICBmb3IgJyhwcm9ncmFtKSAobm8gZmlsZSkgKGxpbmUgMSknLgorCisgICAgICAgICogZmFz
dC9wcm9maWxlci90aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLWV4cGVjdGVkLnR4dDoKKwogMjAx
MC0xMS0xOCAgSmlhbiBMaSAgPGppYW5saUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgRGF2aWQgTGV2aW4uCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3Byb2ZpbGVyL3Rocm93
LWV4Y2VwdGlvbi1mcm9tLWV2YWwtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvcHJvZmlsZXIvdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDcyMjY3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci90aHJvdy1leGNl
cHRpb24tZnJvbS1ldmFsLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtNSwyMCArNSwx
OSBAQCBUbyBydW4gdGhpcyB0ZXN0IG1hbnVhbGx5LCBsb2FkIGl0IGluIHRoCiAKIFByb2ZpbGUg
dGl0bGU6IFRocm93IHdpdGhpbiBhbiBldmFsLgogVGhyZWFkXzEgKG5vIGZpbGUpIChsaW5lIDAp
Ci0gICAocHJvZ3JhbSkgdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC5odG1sIChsaW5lIDEwKQot
ICAgICAgKHByb2dyYW0pIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGluZSAxOSkK
KyAgIChwcm9ncmFtKSB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxpbmUgMTkpCisg
ICAgICAocHJvZ3JhbSkgdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC5odG1sIChsaW5lIDEwKQog
ICAgICAgICAgKHByb2dyYW0pIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGluZSA0
KQogICAgICAgICAgKHByb2dyYW0pIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGlu
ZSAxOSkKICAgICAgICAgICAgIGV2YWwgKG5vIGZpbGUpIChsaW5lIDApCiAgICAgICAgICAgICAg
ICAocHJvZ3JhbSkgKG5vIGZpbGUpIChsaW5lIDEpCi0gICAgICAgICAgICAgICAgICAocHJvZ3Jh
bSkgKG5vIGZpbGUpIChsaW5lIDEpCi0gICAgICBvbmxvYWQgdGhyb3ctZXhjZXB0aW9uLWZyb20t
ZXZhbC5odG1sIChsaW5lIDI0KQotICAgICAgICAgc3RhcnRUZXN0IHRocm93LWV4Y2VwdGlvbi1m
cm9tLWV2YWwuaHRtbCAobGluZSAxMykKLSAgICAgICAgICAgIGluc2VydE5ld1RleHQgcHJvZmls
ZXItdGVzdC1KUy1yZXNvdXJjZXMuanMgKGxpbmUgMTcpCi0gICAgICAgICAgICAgICBjcmVhdGVF
bGVtZW50IChubyBmaWxlKSAobGluZSAwKQotICAgICAgICAgICAgICAgY3JlYXRlVGV4dE5vZGUg
KG5vIGZpbGUpIChsaW5lIDApCi0gICAgICAgICAgICAgICBhcHBlbmRDaGlsZCAobm8gZmlsZSkg
KGxpbmUgMCkKLSAgICAgICAgICAgICAgIGdldEVsZW1lbnRCeUlkIChubyBmaWxlKSAobGluZSAw
KQotICAgICAgICAgICAgZW5kVGVzdCBwcm9maWxlci10ZXN0LUpTLXJlc291cmNlcy5qcyAobGlu
ZSAxKQorICAgb25sb2FkIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGluZSAyNCkK
KyAgICAgIHN0YXJ0VGVzdCB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxpbmUgMTMp
CisgICAgICAgICBpbnNlcnROZXdUZXh0IHByb2ZpbGVyLXRlc3QtSlMtcmVzb3VyY2VzLmpzIChs
aW5lIDE3KQorICAgICAgICAgICAgY3JlYXRlRWxlbWVudCAobm8gZmlsZSkgKGxpbmUgMCkKKyAg
ICAgICAgICAgIGNyZWF0ZVRleHROb2RlIChubyBmaWxlKSAobGluZSAwKQorICAgICAgICAgICAg
YXBwZW5kQ2hpbGQgKG5vIGZpbGUpIChsaW5lIDApCisgICAgICAgICAgICBnZXRFbGVtZW50QnlJ
ZCAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgICAgIGVuZFRlc3QgcHJvZmlsZXItdGVzdC1KUy1y
ZXNvdXJjZXMuanMgKGxpbmUgMSkKIAogCg==
</data>
<flag name="review"
          id="64880"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74310</attachid>
            <date>2010-11-18 15:59:27 -0800</date>
            <delta_ts>2010-11-18 16:02:35 -0800</delta_ts>
            <desc>Ooops, cleaned up some unnecessary changes.</desc>
            <filename>Profiler.3.patch</filename>
            <type>text/plain</type>
            <size>34454</size>
            <attacher name="Gavin Barraclough">barraclough</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDcyMzQwKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjggQEAKKzIwMTAtMTEtMTggIEdhdmluIEJh
cnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJ1ZyA0OTYzNSAtIFByb2ZpbGVyIGltcGxlbWVu
dGF0aW9uIGlzIGZyYWdpbGUKKworICAgICAgICBUaGUgcHJvZmlsZSBwcmVzZW50bHkgcmVxdWly
ZXMgdGhlIGV4Y2VwdGlvbiBoYW5kbGluZyBtZWNoYW5pc20gdG8gZXhwbGljaXRseQorICAgICAg
ICByZW1vdmUgYWxsIHN0YWNrIGZyYW1lcyB0aGF0IGFyZSBleGl0ZWQgZHVyaW5nIHRoZSBleGNl
cHRpb24gdW53aW5kIG1lY2hhbmlzbS4KKyAgICAgICAgVGhpcyBpcyBmcmFnaWxlIGluIGEgbnVt
YmVyIG9mIHdheXM6CisgICAgICAgICAgKiBXZSBoYXZlIHRvIGNoYW5nZSBieXRlY29kZSByZWdp
c3RlciBhbGxvY2F0aW9uIHdoZW4gY29tcGlsaW5nIGNvZGUgdG8gcnVuCisgICAgICAgICAgICB3
aGVuIHByb2ZpbGluZywgdG8gcHJlc2VydmUgdGhlIGNhbGxlZSBmdW5jdGlvbiAodGhpcyBpcyBh
bHNvIHJlcXVpcmVkIHRvCisgICAgICAgICAgICBjYWxsIGRpZF9jYWxsIGFmdGVyIHRoZSBjYWxs
IGhhcyByZXR1cm5lZCkuCisgICAgICAgICAgKiBJbiB0aGUgSklUIHdlIGhhdmUgdG8gbWFpbnRh
aW4gYWRkaXRpb25hbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAgICAgICAgIChDb2RlQmxvY2s6OlJh
cmVEYXRhOjptX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvcykgdG8gbWFwIGJhY2sgdG8gdGhlIHJlZ2lz
dGVyCisgICAgICAgICAgICBjb250YWluaW5nIHRoZSBjYWxsZWUuCisgICAgICAgICAgKiBJbiB0
aGUgaW50ZXJwcmV0ZXIgd2UgdXNlICdtYWdpYyB2YWx1ZXMnIHRvIG9mZnNldCBpbnRvIHRoZSBp
bnN0cnVjdGlvbgorICAgICAgICAgICAgc3RyZWFtIHRvIHJlZGlzY292ZXIgdGhlIHJlZ2lzdGVy
IGNvbnRhaW5pbmcgdGhlIGZ1bmN0aW9uLgorCisgICAgICAgIEluc3RlYWQsIG1vdmUgcHJvZmls
aW5nIGludG8gdGhlIGhlYWQgYW5kIHRhaWwgb2YgZnVuY3Rpb25zLgorICAgICAgICAgICogVGhp
cyBjb3JyZWN0bHkgYWNjb3VudHMgdGhlIGNvc3Qgb2YgdGhlIGNhbGwgaXRzZWxmIHRvIHRoZSBj
YWxsZXIuCisgICAgICAgICAgKiBUaGlzIGFsbG93cyB1cyB0byBhY2Nlc3MgdGhlIGNhbGxlZSBm
dW5jdGlvbiBvYmplY3QgZnJvbSB0aGUgY2FsbGZyYW1lLgorICAgICAgICAgICogVGhpcyBtZWFu
cyB0aGF0IGF0IHRoZSBwb2ludCBhIGNhbGwgaXMgbWFkZSB3ZSBjYW4gdHJhY2sgdGhlIHN0YWNr
IGRlcHRoCisgICAgICAgICAgICBvbiB0aGUgUHJvZmlsZU5vZGUuCisgICAgICAgICAgKiBXaGVu
IHVud2luZGluZyB3ZSBjYW4gc2ltcGx5IHJlcG9ydCB0aGUgZGVwdGggYXQgd2hpY2ggdGhlIGV4
Y2VwdGlvbiBpcworICAgICAgICAgICAgYmVpbmcgaGFuZGxlZCAtIGFsbCBjYWxsIGZyYW1lcyBh
Ym92ZSB0aGlzIGxldmVsIGFyZSBmcmVlZC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9j
ay5jcHA6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6c2hyaW5rVG9GaXQpOgorICAgICAgICAq
IGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmJ5dGVjb2Rl
T2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjptZXRob2RDYWxsTGlua0luZm8pOgor
ICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbFZhcmFyZ3MpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OnVud2luZENhbGxGcmFtZSk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjp0aHJvd0V4Y2VwdGlvbik6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJpdmF0ZUV4ZWN1dGUpOgorICAgICAgICAq
IGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgIChKU0M6OkRFRklORV9TVFVCX0ZVTkNUSU9OKToK
KyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlLmNwcDoKKyAgICAgICAgKEpTQzo6UHJvZmlsZTo6
UHJvZmlsZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5jcHA6CisgICAg
ICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvbGVTdGFydCk6Cisg
ICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlKToKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVH
ZW5lcmF0b3I6OmV4Y2VwdGlvblVud2luZCk6CisgICAgICAgIChKU0M6OlByb2ZpbGVHZW5lcmF0
b3I6OnN0b3BQcm9maWxpbmcpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3Iu
aDoKKyAgICAgICAgKiBwcm9maWxlci9Qcm9maWxlTm9kZS5jcHA6CisgICAgICAgIChKU0M6OlBy
b2ZpbGVOb2RlOjpQcm9maWxlTm9kZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjp3aWxs
RXhlY3V0ZSk6CisgICAgICAgICogcHJvZmlsZXIvUHJvZmlsZU5vZGUuaDoKKyAgICAgICAgKEpT
Qzo6UHJvZmlsZU5vZGU6OmNyZWF0ZSk6CisgICAgICAgIChKU0M6OlByb2ZpbGVOb2RlOjpjYWxs
ZXJDYWxsRnJhbWUpOgorICAgICAgICAqIHByb2ZpbGVyL1Byb2ZpbGVyLmNwcDoKKyAgICAgICAg
KEpTQzo6ZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMpOgorICAgICAgICAoSlNDOjpQcm9maWxl
cjo6X3dpbGxFeGVjdXRlKToKKyAgICAgICAgKEpTQzo6UHJvZmlsZXI6Ol9kaWRFeGVjdXRlKToK
KyAgICAgICAgKEpTQzo6UHJvZmlsZXI6OmV4Y2VwdGlvblVud2luZCk6CisgICAgICAgICogcHJv
ZmlsZXIvUHJvZmlsZXIuaDoKKwogMjAxMC0xMS0xOCAgU3RldmUgRmFsa2VuYnVyZyAgPHNmYWxr
ZW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gUm9iZW4uCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDcyMjY3KQorKysgSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTY2
MiwzMiArMTY2Miw2IEBAIHZvaWQgQ29kZUJsb2NrOjpleHByZXNzaW9uUmFuZ2VGb3JCeXRlY28K
ICAgICByZXR1cm47CiB9CiAKLSNpZiBFTkFCTEUoSklUKQotYm9vbCBDb2RlQmxvY2s6OmZ1bmN0
aW9uUmVnaXN0ZXJGb3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50
JiBmdW5jdGlvblJlZ2lzdGVySW5kZXgpCi17Ci0gICAgQVNTRVJUKGJ5dGVjb2RlT2Zmc2V0IDwg
bV9pbnN0cnVjdGlvbkNvdW50KTsKLQotICAgIGlmICghbV9yYXJlRGF0YSB8fCAhbV9yYXJlRGF0
YS0+bV9mdW5jdGlvblJlZ2lzdGVySW5mb3Muc2l6ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBpbnQgbG93ID0gMDsKLSAgICBpbnQgaGlnaCA9IG1fcmFyZURhdGEtPm1fZnVuY3Rp
b25SZWdpc3RlckluZm9zLnNpemUoKTsKLSAgICB3aGlsZSAobG93IDwgaGlnaCkgewotICAgICAg
ICBpbnQgbWlkID0gbG93ICsgKGhpZ2ggLSBsb3cpIC8gMjsKLSAgICAgICAgaWYgKG1fcmFyZURh
dGEtPm1fZnVuY3Rpb25SZWdpc3RlckluZm9zW21pZF0uYnl0ZWNvZGVPZmZzZXQgPD0gYnl0ZWNv
ZGVPZmZzZXQpCi0gICAgICAgICAgICBsb3cgPSBtaWQgKyAxOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBoaWdoID0gbWlkOwotICAgIH0KLQotICAgIGlmICghbG93IHx8IG1fcmFyZURhdGEt
Pm1fZnVuY3Rpb25SZWdpc3RlckluZm9zW2xvdyAtIDFdLmJ5dGVjb2RlT2Zmc2V0ICE9IGJ5dGVj
b2RlT2Zmc2V0KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBmdW5jdGlvblJlZ2lzdGVy
SW5kZXggPSBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9uUmVnaXN0ZXJJbmZvc1tsb3cgLSAxXS5mdW5j
dGlvblJlZ2lzdGVySW5kZXg7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0jZW5kaWYKLQogI2lmIEVO
QUJMRShJTlRFUlBSRVRFUikKIGJvb2wgQ29kZUJsb2NrOjpoYXNHbG9iYWxSZXNvbHZlSW5zdHJ1
Y3Rpb25BdEJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0KQogewpAQCAtMTc2
Miw5ICsxNzM2LDYgQEAgdm9pZCBDb2RlQmxvY2s6OnNocmlua1RvRml0KCkKICAgICAgICAgbV9y
YXJlRGF0YS0+bV9pbW1lZGlhdGVTd2l0Y2hKdW1wVGFibGVzLnNocmlua1RvRml0KCk7CiAgICAg
ICAgIG1fcmFyZURhdGEtPm1fY2hhcmFjdGVyU3dpdGNoSnVtcFRhYmxlcy5zaHJpbmtUb0ZpdCgp
OwogICAgICAgICBtX3JhcmVEYXRhLT5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuc2hyaW5rVG9G
aXQoKTsKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICBtX3JhcmVEYXRhLT5tX2Z1bmN0aW9uUmVn
aXN0ZXJJbmZvcy5zaHJpbmtUb0ZpdCgpOwotI2VuZGlmCiAgICAgfQogfQogCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzUxLDggKzM1MSw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAg
ICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVPZmZzZXQsIHVu
c2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zmc2V0PihjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5iZWdp
bigpLCBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5zaXplKCksIGdldEpJVENvZGUoKS5vZmZzZXRP
ZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS0+Ynl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIH0KLSAg
ICAgICAgCi0gICAgICAgIGJvb2wgZnVuY3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zmc2V0KHVu
c2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBpbnQmIGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCk7CiAjZW5k
aWYKICNpZiBFTkFCTEUoSU5URVJQUkVURVIpCiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zm
c2V0KENhbGxGcmFtZSosIEluc3RydWN0aW9uKiByZXR1cm5BZGRyZXNzKQpAQCAtNDQzLDggKzQ0
MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgYWRkTWV0aG9kQ2FsbExpbmtJ
bmZvcyh1bnNpZ25lZCBuKSB7IG1fbWV0aG9kQ2FsbExpbmtJbmZvcy5ncm93KG4pOyB9CiAgICAg
ICAgIE1ldGhvZENhbGxMaW5rSW5mbyYgbWV0aG9kQ2FsbExpbmtJbmZvKGludCBpbmRleCkgeyBy
ZXR1cm4gbV9tZXRob2RDYWxsTGlua0luZm9zW2luZGV4XTsgfQotCi0gICAgICAgIHZvaWQgYWRk
RnVuY3Rpb25SZWdpc3RlckluZm8odW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQsIGludCBmdW5jdGlv
bkluZGV4KSB7IGNyZWF0ZVJhcmVEYXRhSWZOZWNlc3NhcnkoKTsgbV9yYXJlRGF0YS0+bV9mdW5j
dGlvblJlZ2lzdGVySW5mb3MuYXBwZW5kKEZ1bmN0aW9uUmVnaXN0ZXJJbmZvKGJ5dGVjb2RlT2Zm
c2V0LCBmdW5jdGlvbkluZGV4KSk7IH0KICNlbmRpZgogCiAgICAgICAgIC8vIEV4Y2VwdGlvbiBo
YW5kbGluZyBzdXBwb3J0CkBAIC01OTgsMTAgKzU5NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgVmVjdG9yPFN0cmluZ0p1bXBUYWJsZT4gbV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVz
OwogCiAgICAgICAgICAgICBFdmFsQ29kZUNhY2hlIG1fZXZhbENvZGVDYWNoZTsKLQotI2lmIEVO
QUJMRShKSVQpCi0gICAgICAgICAgICBWZWN0b3I8RnVuY3Rpb25SZWdpc3RlckluZm8+IG1fZnVu
Y3Rpb25SZWdpc3RlckluZm9zOwotI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIE93blB0cjxS
YXJlRGF0YT4gbV9yYXJlRGF0YTsKICAgICB9OwpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiA3MjI2NykKKysr
IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2NDksMTAgKzE2NDksNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGwoCiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAg
ICAgICBlbWl0T3Bjb2RlKG9wX3Byb2ZpbGVfd2lsbF9jYWxsKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucHJvZmlsZUhvb2tSZWdpc3RlcigpLT5pbmRleCgp
KTsKLQotI2lmIEVOQUJMRShKSVQpCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRGdW5jdGlvblJl
Z2lzdGVySW5mbyhpbnN0cnVjdGlvbnMoKS5zaXplKCksIGNhbGxBcmd1bWVudHMucHJvZmlsZUhv
b2tSZWdpc3RlcigpLT5pbmRleCgpKTsKLSNlbmRpZgogICAgIH0KIAogICAgIGVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CkBAIC0xNjk3LDEwICsxNjkz
LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVgogICAgIGlmICht
X3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsKICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxl
X3dpbGxfY2FsbCk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgp
KTsKLSAgICAgICAgCi0jaWYgRU5BQkxFKEpJVCkKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZEZ1
bmN0aW9uUmVnaXN0ZXJJbmZvKGluc3RydWN0aW9ucygpLnNpemUoKSwgZnVuYy0+aW5kZXgoKSk7
Ci0jZW5kaWYKICAgICB9CiAgICAgCiAgICAgZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90LCBzdGFy
dE9mZnNldCwgZW5kT2Zmc2V0KTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDcyMjY3KQorKysgSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NTgsMTMgKzU1OCw2IEBA
IE5FVkVSX0lOTElORSBib29sIEludGVycHJldGVyOjp1bndpbmRDYWwKICAgICAgICAgICAgIGRl
YnVnZ2VyLT5kaWRFeGVjdXRlUHJvZ3JhbShkZWJ1Z2dlckNhbGxGcmFtZSwgY29kZUJsb2NrLT5v
d25lckV4ZWN1dGFibGUoKS0+c291cmNlSUQoKSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KS0+bGFzdExpbmUoKSk7CiAgICAgfQogCi0gICAgaWYgKFByb2ZpbGVyKiBwcm9maWxlciA9ICpQ
cm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNlKCkpIHsKLSAgICAgICAgaWYgKGNhbGxG
cmFtZS0+Y2FsbGVlKCkpCi0gICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJh
bWUsIGNhbGxGcmFtZS0+Y2FsbGVlKCkpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcm9m
aWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkt
PnNvdXJjZVVSTCgpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5saW5lTm8oKSk7Ci0g
ICAgfQotCiAgICAgLy8gSWYgdGhpcyBjYWxsIGZyYW1lIGNyZWF0ZWQgYW4gYWN0aXZhdGlvbiBv
ciBhbiAnYXJndW1lbnRzJyBvYmplY3QsIHRlYXIgaXQgb2ZmLgogICAgIGlmIChvbGRDb2RlQmxv
Y2stPmNvZGVUeXBlKCkgPT0gRnVuY3Rpb25Db2RlICYmIG9sZENvZGVCbG9jay0+bmVlZHNGdWxs
U2NvcGVDaGFpbigpKSB7CiAgICAgICAgIGlmICghY2FsbEZyYW1lLT5yKG9sZENvZGVCbG9jay0+
YWN0aXZhdGlvblJlZ2lzdGVyKCkpLmpzVmFsdWUoKSkgewpAQCAtNjU3LDkgKzY1MCwxMCBAQCBz
dGF0aWMgdm9pZCBhcHBlbmRTb3VyY2VUb0Vycm9yKENhbGxGcmFtCiAKIE5FVkVSX0lOTElORSBI
YW5kbGVySW5mbyogSW50ZXJwcmV0ZXI6OnRocm93RXhjZXB0aW9uKENhbGxGcmFtZSomIGNhbGxG
cmFtZSwgSlNWYWx1ZSYgZXhjZXB0aW9uVmFsdWUsIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0LCBi
b29sIGV4cGxpY2l0VGhyb3cpCiB7Ci0gICAgLy8gU2V0IHVwIHRoZSBleGNlcHRpb24gb2JqZWN0
Ci0KICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNhbGxGcmFtZS0+Y29kZUJsb2NrKCk7Cisg
ICAgYm9vbCBpc0ludGVycnVwdCA9IGZhbHNlOworCisgICAgLy8gU2V0IHVwIHRoZSBleGNlcHRp
b24gb2JqZWN0CiAgICAgaWYgKGV4Y2VwdGlvblZhbHVlLmlzT2JqZWN0KCkpIHsKICAgICAgICAg
SlNPYmplY3QqIGV4Y2VwdGlvbiA9IGFzT2JqZWN0KGV4Y2VwdGlvblZhbHVlKTsKICAgICAgICAg
aWYgKCFleHBsaWNpdFRocm93ICYmIGV4Y2VwdGlvbi0+aXNFcnJvckluc3RhbmNlKCkgJiYgc3Rh
dGljX2Nhc3Q8RXJyb3JJbnN0YW5jZSo+KGV4Y2VwdGlvbiktPmFwcGVuZFNvdXJjZVRvTWVzc2Fn
ZSgpKQpAQCAtNjcxLDEyICs2NjUsNyBAQCBORVZFUl9JTkxJTkUgSGFuZGxlckluZm8qIEludGVy
cHJldGVyOjp0CiAgICAgICAgICAgICBhZGRFcnJvckluZm8oY2FsbEZyYW1lLCBleGNlcHRpb24s
IGNvZGVCbG9jay0+bGluZU51bWJlckZvckJ5dGVjb2RlT2Zmc2V0KGNhbGxGcmFtZSwgYnl0ZWNv
ZGVPZmZzZXQpLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2UoKSk7CiAKICAg
ICAgICAgQ29tcGxUeXBlIGV4Y2VwdGlvblR5cGUgPSBleGNlcHRpb24tPmV4Y2VwdGlvblR5cGUo
KTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvblR5cGUgPT0gSW50ZXJydXB0ZWQgfHwgZXhjZXB0aW9u
VHlwZSA9PSBUZXJtaW5hdGVkKSB7Ci0gICAgICAgICAgICB3aGlsZSAodW53aW5kQ2FsbEZyYW1l
KGNhbGxGcmFtZSwgZXhjZXB0aW9uVmFsdWUsIGJ5dGVjb2RlT2Zmc2V0LCBjb2RlQmxvY2spKSB7
Ci0gICAgICAgICAgICAgICAgLy8gRG9uJ3QgbmVlZCBoYW5kbGVyIGNoZWNrcyBvciBhbnl0aGlu
Zywgd2UganVzdCB3YW50IHRvIHVucm9sbCBhbGwgdGhlIEpTIGNhbGxmcmFtZXMgcG9zc2libGUu
Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQorICAgICAg
ICBpc0ludGVycnVwdCA9IGV4Y2VwdGlvblR5cGUgPT0gSW50ZXJydXB0ZWQgfHwgZXhjZXB0aW9u
VHlwZSA9PSBUZXJtaW5hdGVkOwogICAgIH0KIAogICAgIGlmIChEZWJ1Z2dlciogZGVidWdnZXIg
PSBjYWxsRnJhbWUtPmR5bmFtaWNHbG9iYWxPYmplY3QoKS0+ZGVidWdnZXIoKSkgewpAQCAtNjg1
LDM5ICs2NzQsMTkgQEAgTkVWRVJfSU5MSU5FIEhhbmRsZXJJbmZvKiBJbnRlcnByZXRlcjo6dAog
ICAgICAgICBkZWJ1Z2dlci0+ZXhjZXB0aW9uKGRlYnVnZ2VyQ2FsbEZyYW1lLCBjb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpLT5zb3VyY2VJRCgpLCBjb2RlQmxvY2stPmxpbmVOdW1iZXJGb3JC
eXRlY29kZU9mZnNldChjYWxsRnJhbWUsIGJ5dGVjb2RlT2Zmc2V0KSwgaGFzSGFuZGxlcik7CiAg
ICAgfQogCi0gICAgLy8gSWYgd2UgdGhyb3cgaW4gdGhlIG1pZGRsZSBvZiBhIGNhbGwgaW5zdHJ1
Y3Rpb24sIHdlIG5lZWQgdG8gbm90aWZ5Ci0gICAgLy8gdGhlIHByb2ZpbGVyIG1hbnVhbGx5IHRo
YXQgdGhlIGNhbGwgaW5zdHJ1Y3Rpb24gaGFzIHJldHVybmVkLCBzaW5jZQotICAgIC8vIHdlJ2xs
IG5ldmVyIHJlYWNoIHRoZSByZWxldmFudCBvcF9wcm9maWxlX2RpZF9jYWxsLgotICAgIGlmIChQ
cm9maWxlciogcHJvZmlsZXIgPSAqUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgp
KSB7Ci0jaWYgRU5BQkxFKElOVEVSUFJFVEVSKQotICAgICAgICBpZiAoIWNhbGxGcmFtZS0+Z2xv
YmFsRGF0YSgpLmNhblVzZUpJVCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogV2h5IDg/IC0g
d29yayBvdXQgd2hhdCB0aGlzIG1hZ2ljIHZhbHVlIGlzLCByZXBsYWNlIHRoZSBjb25zdGFudCB3
aXRoIHNvbWV0aGluZyBtb3JlIGhlbHBmdWwuCi0gICAgICAgICAgICBpZiAoaXNDYWxsQnl0ZWNv
ZGUoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKQot
ICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5kaWRFeGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1l
LT5yKGNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyAxXS51Lm9wZXJh
bmQpLmpzVmFsdWUoKSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChjb2RlQmxvY2stPmluc3RydWN0
aW9ucygpLnNpemUoKSA+IChieXRlY29kZU9mZnNldCArIDgpICYmIGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyA4XS51Lm9wY29kZSA9PSBnZXRPcGNvZGUob3BfY29u
c3RydWN0KSkKLSAgICAgICAgICAgICAgICBwcm9maWxlci0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUs
IGNhbGxGcmFtZS0+cihjb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsg
OV0udS5vcGVyYW5kKS5qc1ZhbHVlKCkpOwotICAgICAgICB9Ci0jaWYgRU5BQkxFKEpJVCkKLSAg
ICAgICAgZWxzZQotI2VuZGlmCi0jZW5kaWYKLSNpZiBFTkFCTEUoSklUKQotICAgICAgICB7Ci0g
ICAgICAgICAgICBpbnQgZnVuY3Rpb25SZWdpc3RlckluZGV4OwotICAgICAgICAgICAgaWYgKGNv
ZGVCbG9jay0+ZnVuY3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0
LCBmdW5jdGlvblJlZ2lzdGVySW5kZXgpKQotICAgICAgICAgICAgICAgIHByb2ZpbGVyLT5kaWRF
eGVjdXRlKGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5yKGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCkuanNW
YWx1ZSgpKTsKLSAgICAgICAgfQotI2VuZGlmCi0gICAgfQotCiAgICAgLy8gQ2FsY3VsYXRlIGFu
IGV4Y2VwdGlvbiBoYW5kbGVyIHZQQywgdW53aW5kaW5nIGNhbGwgZnJhbWVzIGFzIG5lY2Vzc2Fy
eS4KLQogICAgIEhhbmRsZXJJbmZvKiBoYW5kbGVyID0gMDsKLSAgICB3aGlsZSAoIShoYW5kbGVy
ID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpKSkg
ewotICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2VwdGlvblZhbHVl
LCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkKKyAgICB3aGlsZSAoaXNJbnRlcnJ1cHQgfHwg
IShoYW5kbGVyID0gY29kZUJsb2NrLT5oYW5kbGVyRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVP
ZmZzZXQpKSkgeworICAgICAgICBpZiAoIXVud2luZENhbGxGcmFtZShjYWxsRnJhbWUsIGV4Y2Vw
dGlvblZhbHVlLCBieXRlY29kZU9mZnNldCwgY29kZUJsb2NrKSkgeworICAgICAgICAgICAgaWYg
KFByb2ZpbGVyKiBwcm9maWxlciA9ICpQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
KCkpCisgICAgICAgICAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUp
OwogICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoUHJv
ZmlsZXIqIHByb2ZpbGVyID0gKlByb2ZpbGVyOjplbmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKSkK
KyAgICAgICAgcHJvZmlsZXItPmV4Y2VwdGlvblVud2luZChjYWxsRnJhbWUpOworCiAgICAgLy8g
U2hyaW5rIHRoZSBKUyBzdGFjaywgaW4gY2FzZSBzdGFjayBvdmVyZmxvdyBtYWRlIGl0IGh1Z2Uu
CiAgICAgUmVnaXN0ZXIqIGhpZ2hXYXRlck1hcmsgPSAwOwogICAgIGZvciAoQ2FsbEZyYW1lKiBj
YWxsZXJGcmFtZSA9IGNhbGxGcmFtZTsgY2FsbGVyRnJhbWU7IGNhbGxlckZyYW1lID0gY2FsbGVy
RnJhbWUtPmNhbGxlckZyYW1lKCktPnJlbW92ZUhvc3RDYWxsRnJhbWVGbGFnKCkpIHsKQEAgLTc4
OSw3ICs3NTgsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKFByb2dyYW1FeGVjCiAK
ICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVy
ZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhl
Y3V0ZShuZXdDYWxsRnJhbWUsIHByb2dyYW0tPnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5lTm8o
KSk7CisgICAgICAgICgqcHJvZmlsZXIpLT53aWxsRXhlY3V0ZShjYWxsRnJhbWUsIHByb2dyYW0t
PnNvdXJjZVVSTCgpLCBwcm9ncmFtLT5saW5lTm8oKSk7CiAKICAgICBKU1ZhbHVlIHJlc3VsdDsK
ICAgICB7CkBAIC04NjAsNyArODI5LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNh
bGwoQ2FsbEZyYQogCiAgICAgICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5h
YmxlZFByb2ZpbGVyUmVmZXJlbmNlKCk7CiAgICAgICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAg
ICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBmdW5jdGlvbik7Cisg
ICAgICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7
CiAKICAgICAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgICAgIHsKQEAgLTg3Nyw3ICs4NDYsNyBA
QCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJhCiAgICAgICAgIH0KIAog
ICAgICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAgICAgKCpwcm9maWxlciktPmRpZEV4ZWN1
dGUobmV3Q2FsbEZyYW1lLCBmdW5jdGlvbik7CisgICAgICAgICAgICAoKnByb2ZpbGVyKS0+ZGlk
RXhlY3V0ZShjYWxsRnJhbWUsIGZ1bmN0aW9uKTsKIAogICAgICAgICBtX3JlZ2lzdGVyRmlsZS5z
aHJpbmsob2xkRW5kKTsKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4ocmVzdWx0KTsKQEAg
LTg5Miw3ICs4NjEsNyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlQ2FsbChDYWxsRnJh
CiAKICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJl
ZmVyZW5jZSgpOwogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgqcHJvZmlsZXIpLT53aWxs
RXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uKTsKKyAgICAgICAgKCpwcm9maWxlciktPndp
bGxFeGVjdXRlKGNhbGxGcmFtZSwgZnVuY3Rpb24pOwogCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAg
ICAgewpAQCAtOTAxLDcgKzg3MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxs
KENhbGxGcmEKICAgICB9CiAKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAoKnByb2ZpbGVy
KS0+ZGlkRXhlY3V0ZShuZXdDYWxsRnJhbWUsIGZ1bmN0aW9uKTsKKyAgICAgICAgKCpwcm9maWxl
ciktPmRpZEV4ZWN1dGUoY2FsbEZyYW1lLCBmdW5jdGlvbik7CiAKICAgICBtX3JlZ2lzdGVyRmls
ZS5zaHJpbmsob2xkRW5kKTsKICAgICByZXR1cm4gY2hlY2tlZFJldHVybihyZXN1bHQpOwpAQCAt
OTQ5LDcgKzkxOCw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgK
IAogICAgICAgICBQcm9maWxlcioqIHByb2ZpbGVyID0gUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZSgpOwogICAgICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAgICAgKCpwcm9m
aWxlciktPndpbGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgY29uc3RydWN0b3IpOworICAgICAgICAg
ICAgKCpwcm9maWxlciktPndpbGxFeGVjdXRlKGNhbGxGcmFtZSwgY29uc3RydWN0b3IpOwogCiAg
ICAgICAgIEpTVmFsdWUgcmVzdWx0OwogICAgICAgICB7CkBAIC05NjYsNyArOTM1LDcgQEAgSlNP
YmplY3QqIEludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KAogICAgICAgICB9CiAKICAgICAg
ICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgICAgICgqcHJvZmlsZXIpLT5kaWRFeGVjdXRlKG5l
d0NhbGxGcmFtZSwgY29uc3RydWN0b3IpOworICAgICAgICAgICAgKCpwcm9maWxlciktPmRpZEV4
ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAKICAgICAgICAgbV9yZWdpc3RlckZpbGUu
c2hyaW5rKG9sZEVuZCk7CiAgICAgICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQpA
QCAtOTg0LDcgKzk1Myw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVj
dCgKIAogICAgIFByb2ZpbGVyKiogcHJvZmlsZXIgPSBQcm9maWxlcjo6ZW5hYmxlZFByb2ZpbGVy
UmVmZXJlbmNlKCk7CiAgICAgaWYgKCpwcm9maWxlcikKLSAgICAgICAgKCpwcm9maWxlciktPndp
bGxFeGVjdXRlKG5ld0NhbGxGcmFtZSwgY29uc3RydWN0b3IpOworICAgICAgICAoKnByb2ZpbGVy
KS0+d2lsbEV4ZWN1dGUoY2FsbEZyYW1lLCBjb25zdHJ1Y3Rvcik7CiAKICAgICBKU1ZhbHVlIHJl
c3VsdDsKICAgICB7CkBAIC05OTMsNyArOTYyLDcgQEAgSlNPYmplY3QqIEludGVycHJldGVyOjpl
eGVjdXRlQ29uc3RydWN0KAogICAgIH0KIAogICAgIGlmICgqcHJvZmlsZXIpCi0gICAgICAgICgq
cHJvZmlsZXIpLT5kaWRFeGVjdXRlKG5ld0NhbGxGcmFtZSwgY29uc3RydWN0b3IpOworICAgICAg
ICAoKnByb2ZpbGVyKS0+ZGlkRXhlY3V0ZShjYWxsRnJhbWUsIGNvbnN0cnVjdG9yKTsKIAogICAg
IG1fcmVnaXN0ZXJGaWxlLnNocmluayhvbGRFbmQpOwogICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKQpAQCAtMTE1OSw3ICsxMTI4LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZShFdmFsRXhlY3V0YQogCiAgICAgUHJvZmlsZXIqKiBwcm9maWxlciA9IFByb2ZpbGVyOjpl
bmFibGVkUHJvZmlsZXJSZWZlcmVuY2UoKTsKICAgICBpZiAoKnByb2ZpbGVyKQotICAgICAgICAo
KnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUobmV3Q2FsbEZyYW1lLCBldmFsLT5zb3VyY2VVUkwoKSwg
ZXZhbC0+bGluZU5vKCkpOworICAgICAgICAoKnByb2ZpbGVyKS0+d2lsbEV4ZWN1dGUoY2FsbEZy
YW1lLCBldmFsLT5zb3VyY2VVUkwoKSwgZXZhbC0+bGluZU5vKCkpOwogCiAgICAgSlNWYWx1ZSBy
ZXN1bHQ7CiAgICAgewpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAJKHJldmlz
aW9uIDcyMjY3KQorKysgSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUHJvZmlsZTo6UHJvZmlsZShjb25zdCBVU3RyaW5n
JiB0aXRsZSwgdQogewogICAgIC8vIEZJWE1FOiBXaGVuIG11bHRpLXRocmVhZGluZyBpcyBzdXBw
b3J0ZWQgdGhpcyB3aWxsIGJlIGEgdmVjdG9yIGFuZCBjYWxscwogICAgIC8vIGludG8gdGhlIHBy
b2ZpbGVyIHdpbGwgbmVlZCB0byBrbm93IHdoaWNoIHRocmVhZCBpdCBpcyBleGVjdXRpbmcgb24u
Ci0gICAgbV9oZWFkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShDYWxsSWRlbnRpZmllcigiVGhyZWFk
XzEiLCBVU3RyaW5nKCksIDApLCAwLCAwKTsKKyAgICBtX2hlYWQgPSBQcm9maWxlTm9kZTo6Y3Jl
YXRlKDAsIENhbGxJZGVudGlmaWVyKCJUaHJlYWRfMSIsIFVTdHJpbmcoKSwgMCksIDAsIDApOwog
fQogCiBQcm9maWxlOjp+UHJvZmlsZSgpCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Q
cm9maWxlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wcm9maWxl
ci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0Q29y
ZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyAr
NjMsNyBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmFkZFBhcmVudEZvckNvbnNvCiAgICAgSlNW
YWx1ZSBmdW5jdGlvbjsKIAogICAgIGV4ZWMtPmludGVycHJldGVyKCktPnJldHJpZXZlTGFzdENh
bGxlcihleGVjLCBsaW5lTnVtYmVyLCBzb3VyY2VJRCwgc291cmNlVVJMLCBmdW5jdGlvbik7Ci0g
ICAgbV9jdXJyZW50Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoUHJvZmlsZXI6OmNyZWF0ZUNh
bGxJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uID8gZnVuY3Rpb24udG9UaGlzT2JqZWN0KGV4ZWMp
IDogMCwgc291cmNlVVJMLCBsaW5lTnVtYmVyKSwgbV9oZWFkLmdldCgpLCBtX2hlYWQuZ2V0KCkp
OworICAgIG1fY3VycmVudE5vZGUgPSBQcm9maWxlTm9kZTo6Y3JlYXRlKGV4ZWMsIFByb2ZpbGVy
OjpjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbiA/IGZ1bmN0aW9uLnRvVGhpc09i
amVjdChleGVjKSA6IDAsIHNvdXJjZVVSTCwgbGluZU51bWJlciksIG1faGVhZC5nZXQoKSwgbV9o
ZWFkLmdldCgpKTsKICAgICBtX2hlYWQtPmluc2VydE5vZGUobV9jdXJyZW50Tm9kZS5nZXQoKSk7
CiB9CiAKQEAgLTcyLDcgKzcyLDcgQEAgY29uc3QgVVN0cmluZyYgUHJvZmlsZUdlbmVyYXRvcjo6
dGl0bGUoKQogICAgIHJldHVybiBtX3Byb2ZpbGUtPnRpdGxlKCk7CiB9CiAKLXZvaWQgUHJvZmls
ZUdlbmVyYXRvcjo6d2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlm
aWVyKQordm9pZCBQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxl
ckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQogewogICAg
IGlmIChKQVZBU0NSSVBUQ09SRV9QUk9GSUxFX1dJTExfRVhFQ1VURV9FTkFCTEVEKCkpIHsKICAg
ICAgICAgQ1N0cmluZyBuYW1lID0gY2FsbElkZW50aWZpZXIubV9uYW1lLnV0ZjgoKTsKQEAgLTgz
LDExICs4MywxMSBAQCB2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRlKGNvbnN0CiAg
ICAgaWYgKCFtX29yaWdpbmF0aW5nR2xvYmFsRXhlYykKICAgICAgICAgcmV0dXJuOwogCi0gICAg
QVNTRVJUX0FSRyhtX2N1cnJlbnROb2RlLCBtX2N1cnJlbnROb2RlKTsKLSAgICBtX2N1cnJlbnRO
b2RlID0gbV9jdXJyZW50Tm9kZS0+d2lsbEV4ZWN1dGUoY2FsbElkZW50aWZpZXIpOworICAgIEFT
U0VSVChtX2N1cnJlbnROb2RlKTsKKyAgICBtX2N1cnJlbnROb2RlID0gbV9jdXJyZW50Tm9kZS0+
d2lsbEV4ZWN1dGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRpZmllcik7CiB9CiAKLXZvaWQg
UHJvZmlsZUdlbmVyYXRvcjo6ZGlkRXhlY3V0ZShjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElk
ZW50aWZpZXIpCit2b2lkIFByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBj
YWxsZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllcikKIHsK
ICAgICBpZiAoSkFWQVNDUklQVENPUkVfUFJPRklMRV9ESURfRVhFQ1VURV9FTkFCTEVEKCkpIHsK
ICAgICAgICAgQ1N0cmluZyBuYW1lID0gY2FsbElkZW50aWZpZXIubV9uYW1lLnV0ZjgoKTsKQEAg
LTk4LDkgKzk4LDkgQEAgdm9pZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAog
ICAgIGlmICghbV9vcmlnaW5hdGluZ0dsb2JhbEV4ZWMpCiAgICAgICAgIHJldHVybjsKIAotICAg
IEFTU0VSVF9BUkcobV9jdXJyZW50Tm9kZSwgbV9jdXJyZW50Tm9kZSk7CisgICAgQVNTRVJUKG1f
Y3VycmVudE5vZGUpOwogICAgIGlmIChtX2N1cnJlbnROb2RlLT5jYWxsSWRlbnRpZmllcigpICE9
IGNhbGxJZGVudGlmaWVyKSB7Ci0gICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJuaW5n
Tm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoY2FsbElkZW50aWZpZXIsIG1faGVhZC5nZXQoKSwg
bV9jdXJyZW50Tm9kZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gcmV0dXJu
aW5nTm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRp
ZmllciwgbV9oZWFkLmdldCgpLCBtX2N1cnJlbnROb2RlLmdldCgpKTsKICAgICAgICAgcmV0dXJu
aW5nTm9kZS0+c2V0U3RhcnRUaW1lKG1fY3VycmVudE5vZGUtPnN0YXJ0VGltZSgpKTsKICAgICAg
ICAgcmV0dXJuaW5nTm9kZS0+ZGlkRXhlY3V0ZSgpOwogICAgICAgICBtX2N1cnJlbnROb2RlLT5p
bnNlcnROb2RlKHJldHVybmluZ05vZGUucmVsZWFzZSgpKTsKQEAgLTExMCw2ICsxMTAsMTcgQEAg
dm9pZCBQcm9maWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlKGNvbnN0IAogICAgIG1fY3VycmVudE5v
ZGUgPSBtX2N1cnJlbnROb2RlLT5kaWRFeGVjdXRlKCk7CiB9CiAKK3ZvaWQgUHJvZmlsZUdlbmVy
YXRvcjo6ZXhjZXB0aW9uVW53aW5kKEV4ZWNTdGF0ZSogaGFuZGxlckNhbGxGcmFtZSwgY29uc3Qg
Q2FsbElkZW50aWZpZXImKQoreworICAgIC8vIElmIHRoZSBjdXJyZW50IG5vZGUgd2FzIGNhbGxl
ZCBieSB0aGUgaGFuZGxlciAoPT0pIG9yIGFueQorICAgIC8vIG1vcmUgbmVzdGVkIGZ1bmN0aW9u
ICg+KSB0aGUgd2UgaGF2ZSBleGl0ZWQgZWFybHkgZnJvbSBpdC4KKyAgICBBU1NFUlQobV9jdXJy
ZW50Tm9kZSk7CisgICAgd2hpbGUgKG1fY3VycmVudE5vZGUtPmNhbGxlckNhbGxGcmFtZSgpID49
IGhhbmRsZXJDYWxsRnJhbWUpIHsKKyAgICAgICAgZGlkRXhlY3V0ZShtX2N1cnJlbnROb2RlLT5j
YWxsZXJDYWxsRnJhbWUoKSwgbV9jdXJyZW50Tm9kZS0+Y2FsbElkZW50aWZpZXIoKSk7CisgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnROb2RlKTsKKyAgICB9Cit9CisKIHZvaWQgUHJvZmlsZUdlbmVy
YXRvcjo6c3RvcFByb2ZpbGluZygpCiB7CiAgICAgbV9wcm9maWxlLT5mb3JFYWNoKCZQcm9maWxl
Tm9kZTo6c3RvcFByb2ZpbGluZyk7CkBAIC0xMTcsMTQgKzEyOCwxNCBAQCB2b2lkIFByb2ZpbGVH
ZW5lcmF0b3I6OnN0b3BQcm9maWxpbmcoKQogICAgIHJlbW92ZVByb2ZpbGVTdGFydCgpOwogICAg
IHJlbW92ZVByb2ZpbGVFbmQoKTsKIAotICAgIEFTU0VSVF9BUkcobV9jdXJyZW50Tm9kZSwgbV9j
dXJyZW50Tm9kZSk7CisgICAgQVNTRVJUKG1fY3VycmVudE5vZGUpOwogCiAgICAgLy8gU2V0IHRo
ZSBjdXJyZW50IG5vZGUgdG8gdGhlIHBhcmVudCwgYmVjYXVzZSB3ZSBhcmUgaW4gYSBjYWxsIHRo
YXQKICAgICAvLyB3aWxsIG5vdCBnZXQgZGlkRXhlY3V0ZSBjYWxsLgogICAgIG1fY3VycmVudE5v
ZGUgPSBtX2N1cnJlbnROb2RlLT5wYXJlbnQoKTsKIAogICAgaWYgKGRvdWJsZSBoZWFkU2VsZlRp
bWUgPSBtX2hlYWQtPnNlbGZUaW1lKCkpIHsKLSAgICAgICAgUmVmUHRyPFByb2ZpbGVOb2RlPiBp
ZGxlTm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoQ2FsbElkZW50aWZpZXIoTm9uSlNFeGVjdXRp
b24sIFVTdHJpbmcoKSwgMCksIG1faGVhZC5nZXQoKSwgbV9oZWFkLmdldCgpKTsKKyAgICAgICAg
UmVmUHRyPFByb2ZpbGVOb2RlPiBpZGxlTm9kZSA9IFByb2ZpbGVOb2RlOjpjcmVhdGUoMCwgQ2Fs
bElkZW50aWZpZXIoTm9uSlNFeGVjdXRpb24sIFVTdHJpbmcoKSwgMCksIG1faGVhZC5nZXQoKSwg
bV9oZWFkLmdldCgpKTsKIAogICAgICAgICBpZGxlTm9kZS0+c2V0VG90YWxUaW1lKGhlYWRTZWxm
VGltZSk7CiAgICAgICAgIGlkbGVOb2RlLT5zZXRTZWxmVGltZShoZWFkU2VsZlRpbWUpOwpJbmRl
eDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZUdlbmVyYXRvci5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVHZW5lcmF0b3IuaAkocmV2aXNpb24g
NzIyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTUwLDEzICs1MCwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dW5zaWduZWQgcHJvZmlsZUdyb3VwKCkgY29uc3QgeyByZXR1cm4gbV9wcm9maWxlR3JvdXA7IH0K
IAogICAgICAgICAvLyBDb2xsZWN0aW5nCi0gICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoY29uc3Qg
Q2FsbElkZW50aWZpZXImKTsKLSAgICAgICAgdm9pZCBkaWRFeGVjdXRlKGNvbnN0IENhbGxJZGVu
dGlmaWVyJik7CisgICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxs
RnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJik7CisgICAgICAgIHZvaWQgZGlkRXhlY3V0ZShF
eGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3QgQ2FsbElkZW50aWZpZXImKTsKKworICAg
ICAgICB2b2lkIGV4Y2VwdGlvblVud2luZChFeGVjU3RhdGUqIGhhbmRsZXJDYWxsRnJhbWUsIGNv
bnN0IENhbGxJZGVudGlmaWVyJik7CiAKICAgICAgICAgLy8gU3RvcHBpbmcgUHJvZmlsaW5nCiAg
ICAgICAgIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCi0gICAgICAgIHR5cGVkZWYgdm9pZCAoUHJv
ZmlsZUdlbmVyYXRvcjo6KlByb2ZpbGVGdW5jdGlvbikoY29uc3QgQ2FsbElkZW50aWZpZXImIGNh
bGxJZGVudGlmaWVyKTsKKyAgICAgICAgdHlwZWRlZiB2b2lkIChQcm9maWxlR2VuZXJhdG9yOjoq
UHJvZmlsZUZ1bmN0aW9uKShFeGVjU3RhdGUqIGNhbGxlck9ySGFuZGxlckNhbGxGcmFtZSwgY29u
c3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKTsKIAogICAgIHByaXZhdGU6CiAgICAg
ICAgIFByb2ZpbGVHZW5lcmF0b3IoY29uc3QgVVN0cmluZyYgdGl0bGUsIEV4ZWNTdGF0ZSogb3Jp
Z2luYXRpbmdFeGVjLCB1bnNpZ25lZCB1aWQpOwpJbmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmls
ZXIvUHJvZmlsZU5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVy
L1Byb2ZpbGVOb2RlLmNwcAkocmV2aXNpb24gNzIyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9m
aWxlci9Qcm9maWxlTm9kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2LDggKzU2LDkgQEAgc3Rh
dGljIGRvdWJsZSBnZXRDb3VudCgpCiAjZW5kaWYKIH0KIAotUHJvZmlsZU5vZGU6OlByb2ZpbGVO
b2RlKGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgUHJvZmlsZU5vZGUqIGhl
YWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9kZSkKLSAgICA6IG1fY2FsbElkZW50aWZpZXIo
Y2FsbElkZW50aWZpZXIpCitQcm9maWxlTm9kZTo6UHJvZmlsZU5vZGUoRXhlY1N0YXRlKiBjYWxs
ZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgUHJvZmls
ZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9kZSkKKyAgICA6IG1fY2FsbGVy
Q2FsbEZyYW1lKGNhbGxlckNhbGxGcmFtZSkKKyAgICAsIG1fY2FsbElkZW50aWZpZXIoY2FsbElk
ZW50aWZpZXIpCiAgICAgLCBtX2hlYWQoaGVhZE5vZGUpCiAgICAgLCBtX3BhcmVudChwYXJlbnRO
b2RlKQogICAgICwgbV9uZXh0U2libGluZygwKQpAQCAtNzIsOCArNzMsOSBAQCBQcm9maWxlTm9k
ZTo6UHJvZmlsZU5vZGUoY29uc3QgQ2FsbElkZW50CiAgICAgc3RhcnRUaW1lcigpOwogfQogCi1Q
cm9maWxlTm9kZTo6UHJvZmlsZU5vZGUoUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9k
ZSogbm9kZVRvQ29weSkKLSAgICA6IG1fY2FsbElkZW50aWZpZXIobm9kZVRvQ29weS0+Y2FsbElk
ZW50aWZpZXIoKSkKK1Byb2ZpbGVOb2RlOjpQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNh
bGxGcmFtZSwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSkK
KyAgICA6IG1fY2FsbGVyQ2FsbEZyYW1lKGNhbGxlckNhbGxGcmFtZSkKKyAgICAsIG1fY2FsbElk
ZW50aWZpZXIobm9kZVRvQ29weS0+Y2FsbElkZW50aWZpZXIoKSkKICAgICAsIG1faGVhZChoZWFk
Tm9kZSkKICAgICAsIG1fcGFyZW50KG5vZGVUb0NvcHktPnBhcmVudCgpKQogICAgICwgbV9uZXh0
U2libGluZygwKQpAQCAtODcsNyArODksNyBAQCBQcm9maWxlTm9kZTo6UHJvZmlsZU5vZGUoUHJv
ZmlsZU5vZGUqIGhlCiB7CiB9CiAKLVByb2ZpbGVOb2RlKiBQcm9maWxlTm9kZTo6d2lsbEV4ZWN1
dGUoY29uc3QgQ2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQorUHJvZmlsZU5vZGUqIFBy
b2ZpbGVOb2RlOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgY29uc3Qg
Q2FsbElkZW50aWZpZXImIGNhbGxJZGVudGlmaWVyKQogewogICAgIGZvciAoU3RhY2tJdGVyYXRv
ciBjdXJyZW50Q2hpbGQgPSBtX2NoaWxkcmVuLmJlZ2luKCk7IGN1cnJlbnRDaGlsZCAhPSBtX2No
aWxkcmVuLmVuZCgpOyArK2N1cnJlbnRDaGlsZCkgewogICAgICAgICBpZiAoKCpjdXJyZW50Q2hp
bGQpLT5jYWxsSWRlbnRpZmllcigpID09IGNhbGxJZGVudGlmaWVyKSB7CkBAIC05Niw3ICs5OCw3
IEBAIFByb2ZpbGVOb2RlKiBQcm9maWxlTm9kZTo6d2lsbEV4ZWN1dGUoY28KICAgICAgICAgfQog
ICAgIH0KIAotICAgIFJlZlB0cjxQcm9maWxlTm9kZT4gbmV3Q2hpbGQgPSBQcm9maWxlTm9kZTo6
Y3JlYXRlKGNhbGxJZGVudGlmaWVyLCBtX2hlYWQgPyBtX2hlYWQgOiB0aGlzLCB0aGlzKTsgLy8g
SWYgdGhpcyBQcm9maWxlTm9kZSBoYXMgbm8gaGVhZCBpdCBpcyB0aGUgaGVhZC4KKyAgICBSZWZQ
dHI8UHJvZmlsZU5vZGU+IG5ld0NoaWxkID0gUHJvZmlsZU5vZGU6OmNyZWF0ZShjYWxsZXJDYWxs
RnJhbWUsIGNhbGxJZGVudGlmaWVyLCBtX2hlYWQgPyBtX2hlYWQgOiB0aGlzLCB0aGlzKTsgLy8g
SWYgdGhpcyBQcm9maWxlTm9kZSBoYXMgbm8gaGVhZCBpdCBpcyB0aGUgaGVhZC4KICAgICBpZiAo
bV9jaGlsZHJlbi5zaXplKCkpCiAgICAgICAgIG1fY2hpbGRyZW4ubGFzdCgpLT5zZXROZXh0U2li
bGluZyhuZXdDaGlsZC5nZXQoKSk7CiAgICAgbV9jaGlsZHJlbi5hcHBlbmQobmV3Q2hpbGQucmVs
ZWFzZSgpKTsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVOb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZU5vZGUuaAkocmV2aXNp
b24gNzIyNjcpCisrKyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCisgICAgY2xh
c3MgRXhlY1N0YXRlOwogICAgIGNsYXNzIFByb2ZpbGVOb2RlOwogCiAgICAgdHlwZWRlZiBWZWN0
b3I8UmVmUHRyPFByb2ZpbGVOb2RlPiA+Ojpjb25zdF9pdGVyYXRvciBTdGFja0l0ZXJhdG9yOwpA
QCAtNDQsMjMgKzQ1LDI0IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgUHJvZmlsZU5v
ZGUgOiBwdWJsaWMgUmVmQ291bnRlZDxQcm9maWxlTm9kZT4gewogICAgIHB1YmxpYzoKLSAgICAg
ICAgc3RhdGljIFBhc3NSZWZQdHI8UHJvZmlsZU5vZGU+IGNyZWF0ZShjb25zdCBDYWxsSWRlbnRp
ZmllciYgY2FsbElkZW50aWZpZXIsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUq
IHBhcmVudE5vZGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPiBjcmVh
dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIGNvbnN0IENhbGxJZGVudGlmaWVyJiBjYWxs
SWRlbnRpZmllciwgUHJvZmlsZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogcGFyZW50Tm9k
ZSkKICAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9maWxlTm9k
ZShjYWxsSWRlbnRpZmllciwgaGVhZE5vZGUsIHBhcmVudE5vZGUpKTsKKyAgICAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgUHJvZmlsZU5vZGUoY2FsbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRp
ZmllciwgaGVhZE5vZGUsIHBhcmVudE5vZGUpKTsKICAgICAgICAgfQotICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjxQcm9maWxlTm9kZT4gY3JlYXRlKFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJv
ZmlsZU5vZGUqIG5vZGUpCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFByb2ZpbGVOb2RlPiBj
cmVhdGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUsIFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwg
UHJvZmlsZU5vZGUqIG5vZGUpCiAgICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgUHJvZmlsZU5vZGUoaGVhZE5vZGUsIG5vZGUpKTsKKyAgICAgICAgICAgIHJldHVybiBh
ZG9wdFJlZihuZXcgUHJvZmlsZU5vZGUoY2FsbGVyQ2FsbEZyYW1lLCBoZWFkTm9kZSwgbm9kZSkp
OwogICAgICAgICB9CiAKICAgICAgICAgYm9vbCBvcGVyYXRvcj09KFByb2ZpbGVOb2RlKiBub2Rl
KSB7IHJldHVybiBtX2NhbGxJZGVudGlmaWVyID09IG5vZGUtPmNhbGxJZGVudGlmaWVyKCk7IH0K
IAotICAgICAgICBQcm9maWxlTm9kZSogd2lsbEV4ZWN1dGUoY29uc3QgQ2FsbElkZW50aWZpZXIm
KTsKKyAgICAgICAgUHJvZmlsZU5vZGUqIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSogY2FsbGVyQ2Fs
bEZyYW1lLCBjb25zdCBDYWxsSWRlbnRpZmllciYpOwogICAgICAgICBQcm9maWxlTm9kZSogZGlk
RXhlY3V0ZSgpOwogCiAgICAgICAgIHZvaWQgc3RvcFByb2ZpbGluZygpOwogCiAgICAgICAgIC8v
IENhbGxJZGVudGlmaWVyIG1lbWJlcnMKKyAgICAgICAgRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJh
bWUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxlckNhbGxGcmFtZTsgfQogICAgICAgICBjb25zdCBD
YWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2NhbGxJZGVu
dGlmaWVyOyB9CiAgICAgICAgIGNvbnN0IFVTdHJpbmcmIGZ1bmN0aW9uTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY2FsbElkZW50aWZpZXIubV9uYW1lOyB9CiAgICAgICAgIGNvbnN0IFVTdHJpbmcm
IHVybCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbElkZW50aWZpZXIubV91cmw7IH0KQEAgLTEyOCw4
ICsxMzAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAgcHJpdmF0ZToKLSAgICAg
ICAgUHJvZmlsZU5vZGUoY29uc3QgQ2FsbElkZW50aWZpZXImLCBQcm9maWxlTm9kZSogaGVhZE5v
ZGUsIFByb2ZpbGVOb2RlKiBwYXJlbnROb2RlKTsKLSAgICAgICAgUHJvZmlsZU5vZGUoUHJvZmls
ZU5vZGUqIGhlYWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSk7CisgICAgICAgIFByb2Zp
bGVOb2RlKEV4ZWNTdGF0ZSogY2FsbGVyQ2FsbEZyYW1lLCBjb25zdCBDYWxsSWRlbnRpZmllciYs
IFByb2ZpbGVOb2RlKiBoZWFkTm9kZSwgUHJvZmlsZU5vZGUqIHBhcmVudE5vZGUpOworICAgICAg
ICBQcm9maWxlTm9kZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgUHJvZmlsZU5vZGUqIGhl
YWROb2RlLCBQcm9maWxlTm9kZSogbm9kZVRvQ29weSk7CiAKICAgICAgICAgdm9pZCBzdGFydFRp
bWVyKCk7CiAgICAgICAgIHZvaWQgcmVzZXRDaGlsZHJlbnNTaWJsaW5ncygpOwpAQCAtMTQ3LDYg
KzE0OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZnVu
Y3Rpb25OYW1lRGVzY2VuZGluZ0NvbXBhcmF0b3IoY29uc3QgUmVmUHRyPFByb2ZpbGVOb2RlPiYg
YSwgY29uc3QgUmVmUHRyPFByb2ZpbGVOb2RlPiYgYikgeyByZXR1cm4gYS0+ZnVuY3Rpb25OYW1l
KCkgPiBiLT5mdW5jdGlvbk5hbWUoKTsgfQogICAgICAgICBzdGF0aWMgaW5saW5lIGJvb2wgZnVu
Y3Rpb25OYW1lQXNjZW5kaW5nQ29tcGFyYXRvcihjb25zdCBSZWZQdHI8UHJvZmlsZU5vZGU+JiBh
LCBjb25zdCBSZWZQdHI8UHJvZmlsZU5vZGU+JiBiKSB7IHJldHVybiBhLT5mdW5jdGlvbk5hbWUo
KSA8IGItPmZ1bmN0aW9uTmFtZSgpOyB9CiAKKyAgICAgICAgRXhlY1N0YXRlKiBtX2NhbGxlckNh
bGxGcmFtZTsKICAgICAgICAgQ2FsbElkZW50aWZpZXIgbV9jYWxsSWRlbnRpZmllcjsKICAgICAg
ICAgUHJvZmlsZU5vZGUqIG1faGVhZDsKICAgICAgICAgUHJvZmlsZU5vZGUqIG1fcGFyZW50OwpJ
bmRleDogSmF2YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IEphdmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmNwcAkocmV2aXNpb24gNzIyNjcpCisr
KyBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk5LDQyICs5OSw0OSBAQCBQYXNzUmVmUHRyPFByb2ZpbGU+IFByb2ZpbGVyOjpzdG9wUHJvZmls
CiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9u
VG9Qcm9maWxlcyhjb25zdCBWZWN0b3I8UmVmUHRyPFByb2ZpbGVHZW5lcmF0b3I+ID4mIHByb2Zp
bGVzLCBQcm9maWxlR2VuZXJhdG9yOjpQcm9maWxlRnVuY3Rpb24gZnVuY3Rpb24sIGNvbnN0IENh
bGxJZGVudGlmaWVyJiBjYWxsSWRlbnRpZmllciwgdW5zaWduZWQgY3VycmVudFByb2ZpbGVUYXJn
ZXRHcm91cCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uVG9Qcm9maWxlcyhF
eGVjU3RhdGUqIGNhbGxlck9ySGFuZGxlckNhbGxGcmFtZSwgY29uc3QgVmVjdG9yPFJlZlB0cjxQ
cm9maWxlR2VuZXJhdG9yPiA+JiBwcm9maWxlcywgUHJvZmlsZUdlbmVyYXRvcjo6UHJvZmlsZUZ1
bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBDYWxsSWRlbnRpZmllciYgY2FsbElkZW50aWZpZXIsIHVu
c2lnbmVkIGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXApCiB7CiAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBwcm9maWxlcy5zaXplKCk7ICsraSkgewogICAgICAgICBpZiAocHJvZmlsZXNbaV0t
PnByb2ZpbGVHcm91cCgpID09IGN1cnJlbnRQcm9maWxlVGFyZ2V0R3JvdXAgfHwgIXByb2ZpbGVz
W2ldLT5vcmlnaW5hdGluZ0dsb2JhbEV4ZWMoKSkKLSAgICAgICAgICAgIChwcm9maWxlc1tpXS5n
ZXQoKS0+KmZ1bmN0aW9uKShjYWxsSWRlbnRpZmllcik7CisgICAgICAgICAgICAocHJvZmlsZXNb
aV0uZ2V0KCktPipmdW5jdGlvbikoY2FsbGVyT3JIYW5kbGVyQ2FsbEZyYW1lLCBjYWxsSWRlbnRp
Zmllcik7CiAgICAgfQogfQogCi12b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgZnVuY3Rpb24pCit2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVj
U3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSBmdW5jdGlvbikKIHsKICAgICBBU1NFUlQo
IW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0aW9uVG9Q
cm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OndpbGxFeGVjdXRl
LCBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBmdW5jdGlvbiwgIiIsIDApLCBleGVjLT5sZXhp
Y2FsR2xvYmFsT2JqZWN0KCktPnByb2ZpbGVHcm91cCgpKTsKKyAgICBkaXNwYXRjaEZ1bmN0aW9u
VG9Qcm9maWxlcyhjYWxsZXJDYWxsRnJhbWUsIG1fY3VycmVudFByb2ZpbGVzLCAmUHJvZmlsZUdl
bmVyYXRvcjo6d2lsbEV4ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGNhbGxlckNhbGxGcmFt
ZSwgZnVuY3Rpb24sICIiLCAwKSwgY2FsbGVyQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAotdm9pZCBQcm9maWxlcjo6d2lsbEV4ZWN1dGUoRXhl
Y1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVO
dW1iZXIpCit2b2lkIFByb2ZpbGVyOjp3aWxsRXhlY3V0ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxG
cmFtZSwgY29uc3QgVVN0cmluZyYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyKQog
ewogICAgIEFTU0VSVCghbV9jdXJyZW50UHJvZmlsZXMuaXNFbXB0eSgpKTsKIAotICAgIENhbGxJ
ZGVudGlmaWVyIGNhbGxJZGVudGlmaWVyID0gY3JlYXRlQ2FsbElkZW50aWZpZXIoZXhlYywgSlNW
YWx1ZSgpLCBzb3VyY2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlcik7CisgICAgQ2FsbElkZW50aWZp
ZXIgY2FsbElkZW50aWZpZXIgPSBjcmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxsRnJhbWUs
IEpTVmFsdWUoKSwgc291cmNlVVJMLCBzdGFydGluZ0xpbmVOdW1iZXIpOwogCi0gICAgZGlzcGF0
Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9y
Ojp3aWxsRXhlY3V0ZSwgY2FsbElkZW50aWZpZXIsIGV4ZWMtPmxleGljYWxHbG9iYWxPYmplY3Qo
KS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVuY3Rpb25Ub1Byb2ZpbGVzKGNhbGxl
ckNhbGxGcmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9yOjp3aWxsRXhl
Y3V0ZSwgY2FsbElkZW50aWZpZXIsIGNhbGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9iamVj
dCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGZ1bmN0aW9uKQordm9pZCBQcm9maWxlcjo6ZGlkRXhlY3V0
ZShFeGVjU3RhdGUqIGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSBmdW5jdGlvbikKIHsKICAgICBB
U1NFUlQoIW1fY3VycmVudFByb2ZpbGVzLmlzRW1wdHkoKSk7CiAKLSAgICBkaXNwYXRjaEZ1bmN0
aW9uVG9Qcm9maWxlcyhtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4
ZWN1dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLCAiIiwgMCksIGV4ZWMt
PmxleGljYWxHbG9iYWxPYmplY3QoKS0+cHJvZmlsZUdyb3VwKCkpOworICAgIGRpc3BhdGNoRnVu
Y3Rpb25Ub1Byb2ZpbGVzKGNhbGxlckNhbGxGcmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9m
aWxlR2VuZXJhdG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihjYWxsZXJDYWxs
RnJhbWUsIGZ1bmN0aW9uLCAiIiwgMCksIGNhbGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpLT5wcm9maWxlR3JvdXAoKSk7CiB9CiAKLXZvaWQgUHJvZmlsZXI6OmRpZEV4ZWN1dGUo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIpCit2b2lkIFByb2ZpbGVyOjpkaWRFeGVjdXRlKEV4ZWNTdGF0ZSogY2FsbGVyQ2Fs
bEZyYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIp
CiB7CiAgICAgQVNTRVJUKCFtX2N1cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOwogCi0gICAgZGlz
cGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMobV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJh
dG9yOjpkaWRFeGVjdXRlLCBjcmVhdGVDYWxsSWRlbnRpZmllcihleGVjLCBKU1ZhbHVlKCksIHNv
dXJjZVVSTCwgc3RhcnRpbmdMaW5lTnVtYmVyKSwgZXhlYy0+bGV4aWNhbEdsb2JhbE9iamVjdCgp
LT5wcm9maWxlR3JvdXAoKSk7CisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmlsZXMoY2FsbGVy
Q2FsbEZyYW1lLCBtX2N1cnJlbnRQcm9maWxlcywgJlByb2ZpbGVHZW5lcmF0b3I6OmRpZEV4ZWN1
dGUsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGNhbGxlckNhbGxGcmFtZSwgSlNWYWx1ZSgpLCBzb3Vy
Y2VVUkwsIHN0YXJ0aW5nTGluZU51bWJlciksIGNhbGxlckNhbGxGcmFtZS0+bGV4aWNhbEdsb2Jh
bE9iamVjdCgpLT5wcm9maWxlR3JvdXAoKSk7Cit9CisKK3ZvaWQgUHJvZmlsZXI6OmV4Y2VwdGlv
blVud2luZChFeGVjU3RhdGUqIGhhbmRsZXJDYWxsRnJhbWUpCit7CisgICAgQVNTRVJUKCFtX2N1
cnJlbnRQcm9maWxlcy5pc0VtcHR5KCkpOworCisgICAgZGlzcGF0Y2hGdW5jdGlvblRvUHJvZmls
ZXMoaGFuZGxlckNhbGxGcmFtZSwgbV9jdXJyZW50UHJvZmlsZXMsICZQcm9maWxlR2VuZXJhdG9y
OjpleGNlcHRpb25VbndpbmQsIGNyZWF0ZUNhbGxJZGVudGlmaWVyKGhhbmRsZXJDYWxsRnJhbWUs
IEpTVmFsdWUoKSwgIiIsIDApLCBoYW5kbGVyQ2FsbEZyYW1lLT5sZXhpY2FsR2xvYmFsT2JqZWN0
KCktPnByb2ZpbGVHcm91cCgpKTsKIH0KIAogQ2FsbElkZW50aWZpZXIgUHJvZmlsZXI6OmNyZWF0
ZUNhbGxJZGVudGlmaWVyKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBmdW5jdGlvblZhbHVlLCBj
b25zdCBVU3RyaW5nJiBkZWZhdWx0U291cmNlVVJMLCBpbnQgZGVmYXVsdExpbmVOdW1iZXIpCklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9wcm9maWxlci9Qcm9maWxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL3Byb2ZpbGVyL1Byb2ZpbGVyLmgJKHJldmlzaW9uIDcyMjY3KQorKysgSmF2
YVNjcmlwdENvcmUvcHJvZmlsZXIvUHJvZmlsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTAg
KzU3LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHN0YXJ0UHJvZmlsaW5nKEV4
ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKICAgICAgICAgUGFzc1JlZlB0cjxQcm9m
aWxlPiBzdG9wUHJvZmlsaW5nKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHRpdGxlKTsKIAot
ICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgZnVuY3Rpb24pOwot
ICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJj
ZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJlcik7Ci0gICAgICAgIHZvaWQgZGlkRXhlY3V0ZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIGZ1bmN0aW9uKTsKLSAgICAgICAgdm9pZCBkaWRFeGVjdXRlKEV4
ZWNTdGF0ZSosIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51bWJl
cik7CisgICAgICAgIHZvaWQgd2lsbEV4ZWN1dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxsRnJhbWUs
IEpTVmFsdWUgZnVuY3Rpb24pOworICAgICAgICB2b2lkIHdpbGxFeGVjdXRlKEV4ZWNTdGF0ZSog
Y2FsbGVyQ2FsbEZyYW1lLCBjb25zdCBVU3RyaW5nJiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xp
bmVOdW1iZXIpOworICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0YXRlKiBjYWxsZXJDYWxs
RnJhbWUsIEpTVmFsdWUgZnVuY3Rpb24pOworICAgICAgICB2b2lkIGRpZEV4ZWN1dGUoRXhlY1N0
YXRlKiBjYWxsZXJDYWxsRnJhbWUsIGNvbnN0IFVTdHJpbmcmIHNvdXJjZVVSTCwgaW50IHN0YXJ0
aW5nTGluZU51bWJlcik7CisKKyAgICAgICAgdm9pZCBleGNlcHRpb25VbndpbmQoRXhlY1N0YXRl
KiBoYW5kbGVyQ2FsbEZyYW1lKTsKIAogICAgICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFByb2Zp
bGVHZW5lcmF0b3I+ID4mIGN1cnJlbnRQcm9maWxlcygpIHsgcmV0dXJuIG1fY3VycmVudFByb2Zp
bGVzOyB9OwogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA3MjM0MCkKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDEwLTExLTE4ICBHYXZpbiBC
YXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgNDk2MzUgLSBQcm9maWxlciBpbXBsZW1l
bnRhdGlvbiBpcyBmcmFnaWxlCisKKyAgICAgICAgRml4ZXMgcHJldmlvdXNseSBmYWlsaW5nIHRl
c3RzIC0gb3V0cHV0IHdhcyBpbmNvcnJlY3QsIHNob3dpbmcgZHVwbGljYXRlIGVudHJpZXMKKyAg
ICAgICAgZm9yICcocHJvZ3JhbSkgKG5vIGZpbGUpIChsaW5lIDEpJy4KKworICAgICAgICAqIGZh
c3QvcHJvZmlsZXIvdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC1leHBlY3RlZC50eHQ6CisKIDIw
MTAtMTEtMTggIEppYW4gTGkgIDxqaWFubGlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9wcm9maWxlci90aHJv
dy1leGNlcHRpb24tZnJvbS1ldmFsLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3Byb2ZpbGVyL3Rocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiA3MjI2NykKKysrIExheW91dFRlc3RzL2Zhc3QvcHJvZmlsZXIvdGhyb3ctZXhj
ZXB0aW9uLWZyb20tZXZhbC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUsMjAgKzUs
MTkgQEAgVG8gcnVuIHRoaXMgdGVzdCBtYW51YWxseSwgbG9hZCBpdCBpbiB0aAogCiBQcm9maWxl
IHRpdGxlOiBUaHJvdyB3aXRoaW4gYW4gZXZhbC4KIFRocmVhZF8xIChubyBmaWxlKSAobGluZSAw
KQotICAgKHByb2dyYW0pIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGluZSAxMCkK
LSAgICAgIChwcm9ncmFtKSB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxpbmUgMTkp
CisgICAocHJvZ3JhbSkgdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC5odG1sIChsaW5lIDE5KQor
ICAgICAgKHByb2dyYW0pIHRocm93LWV4Y2VwdGlvbi1mcm9tLWV2YWwuaHRtbCAobGluZSAxMCkK
ICAgICAgICAgIChwcm9ncmFtKSB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxpbmUg
NCkKICAgICAgICAgIChwcm9ncmFtKSB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxp
bmUgMTkpCiAgICAgICAgICAgICBldmFsIChubyBmaWxlKSAobGluZSAwKQogICAgICAgICAgICAg
ICAgKHByb2dyYW0pIChubyBmaWxlKSAobGluZSAxKQotICAgICAgICAgICAgICAgICAgKHByb2dy
YW0pIChubyBmaWxlKSAobGluZSAxKQotICAgICAgb25sb2FkIHRocm93LWV4Y2VwdGlvbi1mcm9t
LWV2YWwuaHRtbCAobGluZSAyNCkKLSAgICAgICAgIHN0YXJ0VGVzdCB0aHJvdy1leGNlcHRpb24t
ZnJvbS1ldmFsLmh0bWwgKGxpbmUgMTMpCi0gICAgICAgICAgICBpbnNlcnROZXdUZXh0IHByb2Zp
bGVyLXRlc3QtSlMtcmVzb3VyY2VzLmpzIChsaW5lIDE3KQotICAgICAgICAgICAgICAgY3JlYXRl
RWxlbWVudCAobm8gZmlsZSkgKGxpbmUgMCkKLSAgICAgICAgICAgICAgIGNyZWF0ZVRleHROb2Rl
IChubyBmaWxlKSAobGluZSAwKQotICAgICAgICAgICAgICAgYXBwZW5kQ2hpbGQgKG5vIGZpbGUp
IChsaW5lIDApCi0gICAgICAgICAgICAgICBnZXRFbGVtZW50QnlJZCAobm8gZmlsZSkgKGxpbmUg
MCkKLSAgICAgICAgICAgIGVuZFRlc3QgcHJvZmlsZXItdGVzdC1KUy1yZXNvdXJjZXMuanMgKGxp
bmUgMSkKKyAgIG9ubG9hZCB0aHJvdy1leGNlcHRpb24tZnJvbS1ldmFsLmh0bWwgKGxpbmUgMjQp
CisgICAgICBzdGFydFRlc3QgdGhyb3ctZXhjZXB0aW9uLWZyb20tZXZhbC5odG1sIChsaW5lIDEz
KQorICAgICAgICAgaW5zZXJ0TmV3VGV4dCBwcm9maWxlci10ZXN0LUpTLXJlc291cmNlcy5qcyAo
bGluZSAxNykKKyAgICAgICAgICAgIGNyZWF0ZUVsZW1lbnQgKG5vIGZpbGUpIChsaW5lIDApCisg
ICAgICAgICAgICBjcmVhdGVUZXh0Tm9kZSAobm8gZmlsZSkgKGxpbmUgMCkKKyAgICAgICAgICAg
IGFwcGVuZENoaWxkIChubyBmaWxlKSAobGluZSAwKQorICAgICAgICAgICAgZ2V0RWxlbWVudEJ5
SWQgKG5vIGZpbGUpIChsaW5lIDApCisgICAgICAgICBlbmRUZXN0IHByb2ZpbGVyLXRlc3QtSlMt
cmVzb3VyY2VzLmpzIChsaW5lIDEpCiAKIAo=
</data>
<flag name="review"
          id="64881"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>